首页 > 解决方案 > 绕过命令初始化容器

问题描述

我在https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#init-containers-in-use关注文档示例

我创建了以下 pod:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  initContainers:
    - name: init-myservice
      image: busybox
      command:
        [
          "sh",
          "-c",
          "until nslookup myservice; do echo waiting for myservice; sleep 2; done;",
        ]
    - name: init-mydb
      image: busybox
      command:
        [
          "sh",
          "-c",
          "until nslookup mydb; do echo waiting for mydb; sleep 2; done;",
        ]
  containers:
    - name: myapp-container
      image: busybox
      command: ["sh", "-c", "echo The app is running! && sleep 3600"]

但我还没有创建服务(myservice, mydb)。

我的期望是部署一直持续到我创建服务,但它只是继续部署并创建名为“ myapp-pod”的 pod。

我在这次跑步中错过了什么吗?
为什么在我创建服务之前它不成立?

标签: kubernetes

解决方案


发生这种情况是因为您ash在busybox 内部使用并且它具有不同的行为(与bash 不同)。所以你的脚本实际上到此结束。

你可以自己在busybox里面试试:

kubectl run -i --tty busybox --image=busybox --restart=Never -- sh

然后使用你的命令:

until nslookup myservice; do echo waiting for myservice; sleep 2; done;

要解决此问题,您可以尝试不同的方法,例如alpine

kubectl run -i --tty alpine --image=alpine --restart=Never -- sh

推荐阅读