此頁(yè)展示了如何給運(yùn)行在Kubernetes Pod中的容器定義命令行和參數(shù)。
開(kāi)始之前
必須有一個(gè)Kubernets集群众弓,和一個(gè)能和集群溝通的kubectl命令行工具。如果你還沒(méi)有集群姥闭,你可以用Minikube建立一個(gè)集群箭启。
新建Pod的時(shí)候定義命令行和參數(shù)
創(chuàng)建Pod的時(shí)候,可以為運(yùn)行在里面的容器定義一個(gè)命令行和參數(shù)涂乌。定義一個(gè)命令行艺栈,在配置文件中包含command字段。給這個(gè)命令行定義參數(shù)包含一個(gè)args字段在配置文件中骂倘。當(dāng)Pod創(chuàng)建之后該命令行和參數(shù)是不可以修改的眼滤。
如果在配置文件中定義了命令行和參數(shù)巴席,將覆蓋容器鏡像提供的默認(rèn)參數(shù)历涝。如果定義了參數(shù)但是沒(méi)有定義命令行,那么參數(shù)將和默認(rèn)的命令行一起使用。更多詳細(xì)信息可以參考Commands and Capabilities荧库。
在本次練習(xí)中堰塌,創(chuàng)建一個(gè)運(yùn)行一個(gè)容器的Pod。下面Pod的配置文件定義了一個(gè)命令行和兩個(gè)參數(shù)分衫。
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.創(chuàng)建Pod基于YAML配置文件:
kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/commands.yaml
2.獲取運(yùn)行中的Pod列表:
kubectl get pods
輸出顯示在command-demo Pod中運(yùn)行的容器已完成场刑。
3.查看命令行在容器里面的輸出,可以查看Pod的日志:
kubectl logs command-demo
輸出展示了HOSTNAME蚪战,KUBERNETES_ROOT的環(huán)境變量的值:
command-demo
tcp://10.3.240.1:443
使用環(huán)境變量定義命令行參數(shù)
在前面的例子中牵现,直接通過(guò)字符串定義了命令行參數(shù)。作為直接用字符串替代方法邀桑,你可以用環(huán)境變量定義參數(shù):
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
這意味著你可以使用可用于定義環(huán)境變量的任何技術(shù)來(lái)定義Pod的參數(shù)瞎疼,包括ConfigMaps 和 Secrets。
注意:環(huán)境變量呈現(xiàn)在括號(hào)中壁畸,"$(VAR)"贼急。這是在command或args字段中擴(kuò)展變量所必須的。
在shell中運(yùn)行命令行
在一些情況捏萍,你需要在shell中運(yùn)行你的命令太抓。例如:你的命令可能是由多個(gè)命令組合在一起,或者是一個(gè)shell腳本令杈。要在shell中運(yùn)行你的命令走敌,可以這樣包裝它:
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]