【K8s任務】為容器設定啟動時要執行的命令和引數
參考:https://kubernetes.io/zh/docs/tasks/inject-data-application/define-command-argument-container/
建立 Pod 時設定命令及引數
建立 Pod 時,可以為其下的容器設定啟動時要執行的命令及其引數。如果要設定命令,就填寫在配置檔案的 command 欄位下,如果要設定命令的引數,就填寫在配置檔案的 args 欄位下。一旦 Pod 建立完成,該命令及其引數就無法再進行更改了。
如果在配置檔案中設定了容器啟動時要執行的命令及其引數,那麼容器映象中自帶的命令與引數將會被覆蓋而不再執行。如果配置檔案中只是設定了引數,卻沒有設定其對應的命令,那麼容器映象中自帶的命令會使用該新引數作為其執行時的引數。
說明: 在有些容器執行時中,command 欄位對應 entrypoint,請參閱下面的 說明事項。
本示例中,將建立一個只包含單個容器的 Pod。在 Pod 配置檔案中設定了一個命令與兩個引數:
apiVersion: v1 kind: Pod metadata: name: command-demo labels: purpose: demonstrate-command spec: containers: - name: command-demo-container image: debian command: ["printenv"] args: ["HOSTNAME", "KUBERNETES_PORT"] restartPolicy: OnFailure
使用環境變數來設定引數
在上面的示例中,我們直接將一串字元作為命令的引數。除此之外,我們還可以將環境變數作為命令的引數。
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
這意味著你可以將那些用來設定環境變數的方法應用於設定命令的引數,其中包括了 ConfigMaps 與 Secrets。
說明: 環境變數需要加上括號,類似於 "$(VAR)"。這是在 command 或 args 欄位使用變數的格式要求。
在 Shell 來執行命令
有時候,你需要在 Shell 指令碼中執行命令。 例如,你要執行的命令可能由多個命令組合而成,或者它就是一個 Shell 指令碼。 這時,就可以通過如下方式在 Shell 中執行命令:
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
說明事項
下表給出了 Docker 與 Kubernetes 中對應的欄位名稱。
如果要覆蓋預設的 Entrypoint 與 Cmd,需要遵循如下規則:
如果在容器配置中沒有設定 command 或者 args,那麼將使用 Docker 映象自帶的命令及其引數。
如果在容器配置中只設置了 command 但是沒有設定 args,那麼容器啟動時只會執行該命令, Docker 映象中自帶的命令及其引數會被忽略。
如果在容器配置中只設置了 args,那麼 Docker 映象中自帶的命令會使用該新引數作為其執行時的引數。
如果在容器配置中同時設定了 command 與 args,那麼 Docker 映象中自帶的命令及其引數會被忽略。 容器啟動時只會執行配置中設定的命令,並使用配置中設定的引數作為命令的引數。
下面是一些例子: