D7 kubernetes 容器运行命令与参数
》 在pod配置中,command和args字段用于定义容器的命令和参数
1、command
》 command字段用于定义容器启动时要执行的命令,并覆盖镜像中默认的启动命令。它的值是一个字符串列表类型,其中第一个元素视为命令名称,后续元素视为命令的参数
- command配置实例如下
[root@k8s-master k8s]# cat pod-examplel1.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: pod-examplel1
name: pod-examplel1
namespace: default
spec:
containers:
- image: uhub.service.ucloud.cn/librarys/centos:7
name: test
command: ["echo", "hello world"]
- 上述配置中,容器启动时执行 echo hello world 命令
[root@k8s-master k8s]# kubectl logs pod-examplel1
hello world
- 查看pod时会发现pod在不断地重启
[root@k8s-master k8s]# kubectl get pod pod-examplel1
NAME READY STATUS RESTARTS AGE
pod-examplel1 0/1 CrashLoopBackOff 4 (82s ago) 2m57s
- 第四列RESTARTS记录了重启次数。这是正常现象,因为 centos7镜像是一个系统镜像,默认情况下,前台没有运行的进程,容器在启动后则会退出。因此,需要应用程序被放在前台启动,或者执行一个无限循环shell语句,以保持容器运行而不退出,例如执行一个无线循环
command: ["/bin/bash", "-c", "while true; do sleep 1;done"]
/bin/bash 是shell解释器的可执行文件,-c是一个选型,用于指定要执行的命令。while true; do sleep 1;done是执行的具体命令
2、args
》 args字段用于指定容器启动时的命令参数。它的值是一个字符串列表类型,每个元素被视为command的一个参数
cat pod-examplel2.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: pod-examplel2
name: pod-examplel2
namespace: default
spec:
containers:
- image: uhub.service.ucloud.cn/librarys/centos:7
name: test
command: ["echo"]
args: ["hello world"]
》 上述配置中,容器启动时执行echo命令,而该命令后跟的参数是通过args字段传递的,最终输出为 hello world
- 创建pod并查看日志
[root@k8s-master k8s]# kubectl apply -f pod-examplel2.yaml
pod/pod-examplel2 unchanged
[root@k8s-master k8s]# kubectl logs pod-examplel2
hello world