18

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

这是我从另一个Stackoverflow 问题中采用的带有两个容器的示例 pod 配置。我应该如何更改此 pod 配置以运行type1容器type2

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

在此先感谢,诺迪尔。

4

3 回答 3

13

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

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

于 2014-12-30T23:52:27.297 回答
1

回答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

如果它们都是应用程序容器并且您希望 kubelet 顺序部署,那么另一个有趣的读物。

于 2021-11-10T12:22:06.293 回答
1

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

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 容器赋予一个特定的角色,如此所述。这取决于您的安全设置。

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

于 2021-11-10T12:47:31.243 回答