為容器定義指令與引數

本頁說明在 Pod 中執行容器時,如何定義指令與引數。

準備開始

您需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具必須設定為與您的叢集通訊。建議在至少有兩個非控制平面主機節點的叢集上執行本教學。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用這些 Kubernetes playground 之一

若要檢查版本,請輸入 `kubectl version`。

在建立 Pod 時定義指令與引數

當您建立 Pod 時,可以為在 Pod 中執行的容器定義命令和引數。若要定義命令,請在組態檔中包含 command 欄位。若要為命令定義引數,請在組態檔中包含 args 欄位。您定義的命令和引數在 Pod 建立後便無法變更。

您在組態檔中定義的命令和引數會覆寫容器映像檔提供的預設命令和引數。如果您定義了引數,但未定義命令,則會使用預設命令以及您的新引數。

在本練習中,您將建立一個執行單一容器的 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 定義引數,包括 ConfigMapSecret

在 Shell 中執行命令

在某些情況下,您需要命令在 Shell 中執行。例如,您的命令可能包含多個以管道連接在一起的命令,或者它可能是一個 Shell 指令碼。若要在 Shell 中執行您的命令,請像這樣包裝它

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

下一步

上次修改時間:2024 年 4 月 17 日下午 8:20 PST:Update define-command-argument-container.md (631e9a23e4)