首页 > 解决方案 > K8s 上 pod 中的容器初始化顺序

问题描述

我想在一个 pod 上运行两个容器。

container1是一个尝试连接到在 . 上运行的 SQL Server 数据库的测试container2

如何确保 sql 容器 ( container2) 在启动前运行并准备就绪container1

initContainer在这里不起作用,因为它将在两个容器之前运行。

这是我的 compose.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: sql-test-pod
  labels:
    name: sql-test
spec:
  restartPolicy: Never
  containers:
    - name: my-sqldb
      image: docker-registry.com/database
      imagePullPolicy: Always
      resources:
        limits:
          memory: "4096Mi"
          cpu: "750m"
        requests:
          memory: "4096Mi"
          cpu: "750m"
    - name: tests
      tty: true
      stdin: true
      image: docker-registry.com/test
      imagePullPolicy: Always
      resources:
        limits:
          memory: "4096Mi"
          cpu: "750m"
        requests:
          memory: "4096Mi"
          cpu: "750m"
      env:
      - name: sqlhostname
        value: "SqlHostnamePlaceholder"
  nodeSelector:
    kubernetes.io/os: windows
  tolerations:
  - key: "windows"
    operator: "Equal"
    value: "2019"
    effect: "NoSchedule"

标签: kuberneteskubernetes-pod

解决方案


你不能用当前的实现来做到这一点kubernetes:一个 pod 中的所有容器将同时启动(除了 init 容器)。

一种解决方案是增强代码test container以检测 的状态db container,等待直到准备好。


推荐阅读