我需要在容器中執行多行代碼,這些代碼作為引數傳遞,如下例所示:deployment.yaml 摘錄
initContainers:
- name: wait-for-migrations
args:
- python
- -c
- |
print("python")
...more lines
- bash
- -c
- |
echo bash
...more lines
現在,無論我嘗試過什么,我都無法同時執行 python/bash。只有第一個始終是。將兩者鏈接起來:
- ;
也沒有用。
任何想法如何實施它?
uj5u.com熱心網友回復:
我認為最好為此創建一個專用腳本。按照我在下面展示的方式進行操作有點臟。
一般來說,這是容器的限制。您不能運行多個命令。從這個意義上說,這與 Kubernetes 無關。復雜命令的通常解決方法是將所有內容包裝在一個bash -c,即bash -c "first command; second command". 很多時候我們也會看到它們 join with &&which 如果當前命令失敗,則不會執行任何進一步的命令,即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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378742.html
標籤:猛击 Kubernetes kubernetes-helm
