初始化容器绕过命令

时间:2019-01-08 21:21:03

标签: kubernetes

我正在跟踪https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#init-containers-in-use

上的文档示例

我创建了以下广告连播:

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。

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

1 个答案:

答案 0 :(得分:3)

发生这种情况是因为您在busybox中使用ash,并且它具有不同的行为(与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