在Kubernetes中链接多个参数(Arg) [英] Chain multiple arguments (args) in Kubernetes
本文介绍了在Kubernetes中链接多个参数(Arg)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在容器中执行多行代码,这些代码将作为args传递,如下例所示: 部署.yaml摘录
initContainers:
- name: wait-for-migrations
args:
- python
- -c
- |
print("python")
...more lines
- bash
- -c
- |
echo bash
...more lines
现在,无论我做了什么尝试,我都无法同时执行python/bash。只有第一个永远是。 使用中间层链接两者:
- ;
也不起作用。
有什么办法实施吗?
推荐答案
我认为最好为此创建一个专用脚本。按照我下面显示的方式操作有点脏。
这是容器的一般限制。您不能运行多个命令。从这个意义上讲,这与库伯内斯没有任何关系。
对于复杂命令,通常的解决方法是将所有内容包装在单个bash -c
中,即bash -c "first command; second command"
。
我们还经常看到它们与&&
连接,如果当前命令失败,&&
您不必在command
和args
中将它们分开,但我认为它更清晰一些。
apiVersion: v1
kind: Pod
metadata:
name: script
spec:
containers:
- name: script
image: python
command:
- bash
- -c
args:
- |
echo "hello world";
python -c '
print("foo")
print("bar")
print("baz")
';
sleep 180;
也就是说,由于您希望等待迁移,因此将迁移移至Kubernetes作业并在作业完成时检查init容器中的Kubernetes API可能会更干净。例如kubectl。
迁移作业可以运行与主应用程序相同的映像,但执行其迁移命令(如果它有的话)。
apiVersion: batch/v1
kind: Job
metadata:
name: migration
spec:
ttlSecondsAfterFinished: 100
template:
spec:
containers:
- name: migration
image: busybox
command: ["/bin/sh", "-c", "sleep 20"]
restartPolicy: Never
---
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- name: app
image: busybox
command: ["/bin/sh", "-c", "sleep 100"]
initContainers:
- name: wait-for-migration
image: bitnami/kubectl
args:
- wait
- job/migration
- --for
- condition=complete
- --timeout
- 60s
这篇关于在Kubernetes中链接多个参数(Arg)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文