kubernetes - 绕过命令初始化容器
问题描述
我在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。
我在这次跑步中错过了什么吗?
为什么在我创建服务之前它不成立?
解决方案
发生这种情况是因为您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
推荐阅读
- delphi - Delphi - 如何在运行程序后解决工具
- android - android.annotation 无法导入:无法解析所有注解
- javascript - 克隆 DiscordJS 后获取频道 ID
- c# - 如何将参数传递给服务器端 Blazor 中的剃须刀组件?
- reactjs - 从反应应用程序更改密码auth0用户
- reactjs - props.stories.map 不是函数?
- f# - VS 2019 中的 F# 静态方法编辑器颜色
- shell - 杀死由 shell 脚本创建的子进程,以便执行下一个命令
- ios - 带有奇怪字符的 Crashyltics 中的 iOS 框架崩溃
- apache - 如何从 www 重定向我的网站。通过在 htaccess 文件中进行更改来访问 http?