【问题标题】:Specify the order Dockers run on Kubernetes pod指定 Docker 在 Kubernetes pod 上运行的顺序
【发布时间】:2015-02-26 09:56:17
【问题描述】:

我试图在同一个 Kubernetes pod 上运行两个 Docker,并且我希望一个 Docker 容器始终在另一个之前运行。我记得学习在 pod 配置文件上指定这种依赖关系,但现在找不到。 Kubernetes documentation 也没有解释。

这是我从另一个 Stackoverflow question 采用的两个容器的示例 pod 配置。我应该如何更改此 pod 配置以在 type2 之前运行容器 type1

{
  "id": "podId",
  "desiredState": {
    "manifest": {
      "version": "v1beta1",
      "id": "podId",
      "containers": [{
        "name": "type1",
        "image": "local/image"
        },
        {
        "name": "type2",
        "image": "local/secondary"
        }]
    }
  },
  "labels": {
    "name": "imageTest"
  }
}

提前致谢, 诺迪尔。

【问题讨论】:

    标签: docker kubernetes google-kubernetes-engine


    【解决方案1】:

    Kubernetes 目前不允许指定容器启动依赖项。

    在 GitHub 问题 19961589 中有一些讨论可能会对您有所帮助。

    【讨论】:

      【解决方案2】:

      在 2021 年回答,

      现在,如果您的第一个容器用于对第二个容器进行初始化,则可以使用 Init Containers,

      在 Kubernetes 中,init 容器是启动和执行的容器 在同一个 Pod 中的其他容器之前。它的目的是执行 Pod 上托管的主应用程序的初始化逻辑。为了 例如,创建必要的用户帐户,执行数据库 迁移、创建数据库架构等。

      关于如何使用:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container

      另一个interesting read 如果它们都是应用程序容器并且您希望 kubelet 顺序部署。

      【讨论】:

        【解决方案3】:

        您可以使用 init 容器来阻止一个 pod 并等待另一个。您可以使用 bitnami/kubectl 作为带有 --wait 标志的初始化容器。或者,您可以使用custom wait job

        apiVersion: v1
        kind: List
        items:
          - apiVersion: v1
            kind: Pod
            metadata:
              name: start-first
              labels:
                name: start-first
            spec: &nginx
              containers:
                - name: nginx
                  image: nginx
                  ports:
                    - containerPort: 80
          - apiVersion: v1
            kind: Pod
            metadata:
              name: start-second
              labels:
                name: start-second
            spec:
              <<: *nginx
              initContainers:
                - name: wait-for-first
                  image: bitnami/kubectl
                  args:
                    - wait
                    - pod/start-first
                    - --for
                    - condition=Ready
                    - --timeout
                    - 60s
        

        您可能必须为 init 容器赋予特定的角色,如 here 所述。这取决于您的安全设置。

        另请注意,不需要将其放在列表中。为了简洁起见,我只是使用它来使用锚点。

        【讨论】:

          猜你喜欢
          • 2018-09-06
          • 1970-01-01
          • 2018-10-04
          • 1970-01-01
          • 2021-07-19
          • 2019-01-08
          • 1970-01-01
          • 2019-09-28
          • 2018-11-19
          相关资源
          最近更新 更多