為容器定義命令和引數

本頁面展示瞭如何在 Pod 中執行容器時定義命令和引數。

準備工作

你需要一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不作為控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 試驗平臺之一。

要檢查版本,請輸入 kubectl version

建立 Pod 時定義命令和引數

建立 Pod 時,你可以為在 Pod 中執行的容器定義命令和引數。要定義命令,請在配置檔案中包含 command 欄位。要為命令定義引數,請在配置檔案中包含 args 欄位。定義的命令和引數在 Pod 建立後無法更改。

你在配置檔案中定義的命令和引數會覆蓋容器映象提供的預設命令和引數。如果你定義了 args,但沒有定義 command,則預設命令將與你的新引數一起使用。

在此練習中,你將建立一個執行一個容器的 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
  1. 根據 YAML 配置檔案建立 Pod

    kubectl apply -f https://k8s.io/examples/pods/commands.yaml
    
  2. 列出正在執行的 Pod

    kubectl get pods
    

    輸出顯示在 command-demo Pod 中執行的容器已完成。

  3. 要檢視在容器中執行的命令的輸出,請檢視 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 定義引數,包括 ConfigMapsSecrets

在 shell 中執行命令

在某些情況下,你需要你的命令在 shell 中執行。例如,你的命令可能由幾個管道連線的命令組成,或者它可能是一個 shell 指令碼。要在 shell 中執行你的命令,請這樣包裝它

command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]

下一步

上次修改時間:2024 年 4 月 17 日,太平洋標準時間晚上 8:20:更新 define-command-argument-container.md (631e9a23e4)