此頁展示了如何給運行在Kubernetes Pod中的容器定義命令行和參數。
開始之前
必須有一個Kubernets集群,和一個能和集群溝通的kubectl命令行工具。如果你還沒有集群,你可以用Minikube建立一個集群。
新建Pod的時候定義命令行和參數
創建Pod的時候,可以為運行在里面的容器定義一個命令行和參數。定義一個命令行,在配置文件中包含command字段。給這個命令行定義參數包含一個args字段在配置文件中。當Pod創建之后該命令行和參數是不可以修改的。
如果在配置文件中定義了命令行和參數,將覆蓋容器鏡像提供的默認參數。如果定義了參數但是沒有定義命令行,那么參數將和默認的命令行一起使用。更多詳細信息可以參考Commands and Capabilities。
在本次練習中,創建一個運行一個容器的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"]
1.創建Pod基于YAML配置文件:
kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/commands.yaml
2.獲取運行中的Pod列表:
kubectl get pods
輸出顯示在command-demo Pod中運行的容器已完成。
3.查看命令行在容器里面的輸出,可以查看Pod的日志:
kubectl logs command-demo
輸出展示了HOSTNAME,KUBERNETES_ROOT的環境變量的值:
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"]