為容器定義命令和引數
本頁面展示瞭如何在 Pod 中執行容器時定義命令和引數。
準備工作
你需要一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不作為控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 試驗平臺之一。
要檢查版本,請輸入 kubectl version
。
建立 Pod 時定義命令和引數
建立 Pod 時,你可以為在 Pod 中執行的容器定義命令和引數。要定義命令,請在配置檔案中包含 command
欄位。要為命令定義引數,請在配置檔案中包含 args
欄位。定義的命令和引數在 Pod 建立後無法更改。
你在配置檔案中定義的命令和引數會覆蓋容器映象提供的預設命令和引數。如果你定義了 args,但沒有定義 command,則預設命令將與你的新引數一起使用。
注意
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 定義引數,包括 ConfigMaps 和 Secrets。
注意
環境變數顯示在括號中,"$(VAR)"
。這是在 command
或 args
欄位中展開變數所必需的。在 shell 中執行命令
在某些情況下,你需要你的命令在 shell 中執行。例如,你的命令可能由幾個管道連線的命令組成,或者它可能是一個 shell 指令碼。要在 shell 中執行你的命令,請這樣包裝它
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
下一步
- 瞭解更多關於配置 Pod 和容器的資訊。
- 瞭解更多關於在容器中執行命令的資訊。
- 參閱容器。
上次修改時間:2024 年 4 月 17 日,太平洋標準時間晚上 8:20:更新 define-command-argument-container.md (631e9a23e4)