【问题标题】:OpenShift's YAML execution precedence regarding volume mounting and commandsOpenShift 关于卷挂载和命令的 YAML 执行优先级
【发布时间】:2017-12-19 22:34:57
【问题描述】:

作为容器管理的初学者,我找不到关于 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 的挂载完成之前还是之后执行?换句话说,是否可以在此类命令中使用卷的资源?如果在这个配置中不可能,那么应该使用哪些事件处理程序呢?我没有看到任何关于 volumemounted 之类的事件的提及。

【问题讨论】:

    标签: event-handling openshift lifecycle mount openshift-3


    【解决方案1】:

    命令 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
    

    所以当一个卷被挂载到容器时,卷的任何变化也会在宿主机中生效。

    因此,volume 将与容器一起挂载,并在容器启动后执行命令。

    回到你的 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"]
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。可能我的问题表述得不够清楚。问题不在于安装包含正在运行的映像的卷,而是在映像已经启动之后附加/安装的外部持久卷 AFACU。这就是为什么我不确定外壳命令是否会在外部卷可用性之前或之后或在不确定的时刻执行的原因。此外,我不确定 OpenShift 运行的工作流程是否与您的独立 docker 示例中的工作流程相同。
    • 进一步补充说,挂载的卷可以是主机存储,也可以是附加或挂载的任何其他外部存储。这些外部存储可以附加在 YAML 的“卷”中提到的持久卷声明。其次,您无法在映像已启动后附加存储。应该在启动映像之前配置卷。关于 openshift 中的流程,将与独立 docker 示例中解释的方式相同,因为底层概念是 docker 和 K8s。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多