OpenShift的YAML执行优先于卷安装和命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenShift的YAML执行优先于卷安装和命令相关的知识,希望对你有一定的参考价值。

作为容器管理的初学者,我无法找到OpenShift部署阶段和相关YAML语句的清晰描述,特别是涉及持久性卷安装和shell命令执行时。例如,在RedHat文档中有一个lot of examples。一个简单的是16.4。 Pod对象定义:

apiVersion: v1
kind: Pod
metadata:
  name: busybox-nfs-pod
  labels:
    name: busybox-nfs-pod
spec:
  containers:
  - name: busybox-nfs-pod
    image: busybox
    command: ["sleep", "60000"]
    volumeMounts:
    - name: nfsvol-2
      mountPath: /usr/share/busybox
      readOnly: false
  securityContext:
    supplementalGroups: [100003]
    privileged: false
  volumes:
  - name: nfsvol-2
    persistentVolumeClaim:
      claimName: nfs-pvc

现在问题是:sleep(或任何其他)命令在nfsvol-2安装完成之前或之后执行了吗?换句话说,是否可以在这些命令中使用卷的资源?如果在这个配置中不可能,那么使用哪个事件处理程序呢?我没有看到有关像装载卷这样的事件的任何提及。

答案

命令sleep(或任何其他)在nfsvol-2挂载完成之前或之后执行?

为了理解这一点,让我们深入了解Openshift的基本概念。

OpenShift是一个容器应用程序平台,它将docker和Kubernetes引入企业。因此,Openshift只是docker和kubernetes之上的抽象层以及其他功能。

关于卷和命令,请考虑以下示例:

让我们通过将一个卷(主机的主目录)安装到容器的根路径来运行docker容器(-v是附加卷的选项)。

$ docker run -it -v /home:/root ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
50aff78429b1: Pull complete 
f6d82e297bce: Pull complete 
275abb2c8a6f: Pull complete 
9f15a39356d6: Pull complete 
fc0342a94c89: Pull complete 
Digest: sha256:f871d0805ee3ce1c52b0608108dbdf1b447a34d22d5c7278a3a9dd78fc12c663
Status: Downloaded newer image for ubuntu:latest
root@1f07f083ba79:/# cd /root/
root@1f07f083ba79:~# ls
lost+found  raghavendralokineni  raghu  user1
root@1f07f083ba79:~/raghavendralokineni# pwd
/root/raghavendralokineni

现在在容器中执行sleep命令并退出。

root@1f07f083ba79:~/raghavendralokineni# sleep 10
root@1f07f083ba79:~/raghavendralokineni# 
root@1f07f083ba79:~/raghavendralokineni# exit

检查我们已挂载到容器的/ home路径中的可用文件。此内容与容器中/ root路径的内容相同。

raghavendralokineni@iconic-glider-186709:/home$ ls
lost+found  raghavendralokineni  raghu  user1

因此,当卷安装到容器时,卷中的任何更改也将在主机中生效。

因此,卷将与容器一起安装,并且在容器启动后将执行命令。

回到你的YAML文件,

volumeMounts:
    - name: nfsvol-2
      mountPath: /usr/share/busybox

它说,将卷nfsvol-2安装到容器中,并在卷中提到有关卷的信息:

volumes:
  - name: nfsvol-2
    persistentVolumeClaim:
      claimName: nfs-pvc

因此,将卷装入容器并执行指定的命令:

containers:
  - name: busybox-nfs-pod
    image: busybox
    command: ["sleep", "60000"]

希望这可以帮助。

以上是关于OpenShift的YAML执行优先于卷安装和命令的主要内容,如果未能解决你的问题,请参考以下文章

Openshift Container Storage - 将文件复制到持久卷

Springboot Profiles 环境

ETCD:配置参数

为啥正文中的 javascript 函数优先于头部中的函数?

Servlet 过滤器(自动登录)优先于声明性安全检查

在 Python 中,为啥属性优先于实例属性?