在 Kubernetes 中链接多个参数 (args)
Chain multiple arguments (args) in Kubernetes
我需要在容器中执行多行代码,这些代码作为参数传递,如下例所示:
deployment.yaml 摘录
initContainers:
- name: wait-for-migrations
args:
- python
- -c
- |
print("python")
...more lines
- bash
- -c
- |
echo bash
...more lines
现在,无论我尝试过什么,我都无法执行两个 python/bash.. 只有第一个总是。
链接两者之间:
- ;
也没用。
有什么实施方法吗?
我认为为此创建一个专用脚本会更好。按照我下面显示的方式进行操作有点脏。
这是一般容器的限制。您不能 运行 多个命令。从这个意义上说,这与 Kubernetes 无关。
复杂命令的通常解决方法是将所有内容包装在一个 bash -c
中,即 bash -c "first command; second command"
。
很多时候我们也看到他们加入 &&
如果当前命令失败,它将不会执行任何进一步的命令,即 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
我需要在容器中执行多行代码,这些代码作为参数传递,如下例所示: deployment.yaml 摘录
initContainers:
- name: wait-for-migrations
args:
- python
- -c
- |
print("python")
...more lines
- bash
- -c
- |
echo bash
...more lines
现在,无论我尝试过什么,我都无法执行两个 python/bash.. 只有第一个总是。 链接两者之间:
- ;
也没用。
有什么实施方法吗?
我认为为此创建一个专用脚本会更好。按照我下面显示的方式进行操作有点脏。
这是一般容器的限制。您不能 运行 多个命令。从这个意义上说,这与 Kubernetes 无关。
复杂命令的通常解决方法是将所有内容包装在一个 bash -c
中,即 bash -c "first command; second command"
。
很多时候我们也看到他们加入 &&
如果当前命令失败,它将不会执行任何进一步的命令,即 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