為容器定義指令與引數
本頁說明在 Pod 中執行容器時,如何定義指令與引數。
準備開始
您需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具必須設定為與您的叢集通訊。建議在至少有兩個非控制平面主機節點的叢集上執行本教學。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用這些 Kubernetes playground 之一
若要檢查版本,請輸入 `kubectl version`。在建立 Pod 時定義指令與引數
當您建立 Pod 時,可以為在 Pod 中執行的容器定義命令和引數。若要定義命令,請在組態檔中包含 command
欄位。若要為命令定義引數,請在組態檔中包含 args
欄位。您定義的命令和引數在 Pod 建立後便無法變更。
您在組態檔中定義的命令和引數會覆寫容器映像檔提供的預設命令和引數。如果您定義了引數,但未定義命令,則會使用預設命令以及您的新引數。
注意
command
欄位對應於某些容器執行階段環境中的 ENTRYPOINT
,而 args
欄位對應於 CMD
。在本練習中,您將建立一個執行單一容器的 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
根據 YAML 組態檔建立 Pod
kubectl apply -f https://k8s.io/examples/pods/commands.yaml
列出正在執行的 Pod
kubectl get pods
輸出顯示在 command-demo Pod 中執行的容器已完成。
若要查看容器中執行的命令輸出,請檢視 Pod 的日誌
kubectl logs command-demo
輸出顯示 HOSTNAME 和 KUBERNETES_PORT 環境變數的值
command-demo tcp://10.3.240.1:443
使用環境變數定義引數
在先前的範例中,您透過直接提供字串來定義引數。作為直接提供字串的替代方案,您可以使用環境變數來定義引數
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
這表示您可以使用任何可用於定義環境變數的技術來為 Pod 定義引數,包括 ConfigMap 和 Secret。
注意
環境變數會出現在括號中,"$(VAR)"
。這是變數在 command
或 args
欄位中展開所必需的。在 Shell 中執行命令
在某些情況下,您需要命令在 Shell 中執行。例如,您的命令可能包含多個以管道連接在一起的命令,或者它可能是一個 Shell 指令碼。若要在 Shell 中執行您的命令,請像這樣包裝它
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
下一步
- 深入瞭解設定 Pod 和容器。
- 深入瞭解在容器中執行命令。
- 請參閱 Container。
上次修改時間:2024 年 4 月 17 日下午 8:20 PST:Update define-command-argument-container.md (631e9a23e4)