CKA – Kubenetes Pods当中command和args的使用
在还没使用Kubernetes的command和arguement的使用之前,看一下docker的entrypoint和cmd的使用先
Docker的entrypoint和cmd的使用方法
1. 创建dockerfile
FROM busybox:latest
ENTRYPOINT ["/bin/echo"]
CMD ["hello","world"]
Dockerfile2. 在本机生成docker image
docker build -t busybox:custom .
3. 生成之后就执行run
docker run busybox:custom

docker的entrypoint是执行指令头,cmd可以写在dockerfile当中或也能通过命令行来override
解释:
- Docker的ENTRYPOINT = Kubernetes的command
- Docker的CMD = Kubernetes的args
Kubernetes的entrypoint和cmd的使用方法
1. 根据以下的pod.yaml文件来生成pod
kubectl apply -f pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: multi-container
spec:
containers:
- name: demo
image: busybox:latest
command: ["/bin/echo"]
args: ["hello","world","123"]
YAML2. 执行了之后,就查看pod当中container的log
kubectl logs multi-container -c demo

Kubernetes的entrypoint和cmd的使用方法 (使用multi line)
apiVersion: v1
kind: Pod
metadata:
name: multi-container
spec:
containers:
- name: demo
image: busybox:latest
command:
- "/bin/echo"
args:
- "hello"
- "world"
- "123"
Kubernetes的entrypoint和cmd的使用方法 (只使用command不使用args)
不建议使用这方式,正确的使用方式是把所有参数都放进args比较好,也比较规范
apiVersion: v1
kind: Pod
metadata:
name: multi-container
spec:
containers:
- name: demo
image: busybox:latest
command:
- "/bin/echo"
- "hello"
- "world"
- "123"
Kubernetes Kubectl命令行输入command和args
根据这个命令行也能达到跟以上yaml一样的功能

kubectl run multi-container --image=busybox:latest --command -- /bin/echo "hello" "world" "123"

Kubernetes 和dockerfile 对于command和args的覆盖规则
1. 未指定 command
和 args
运行镜像时,沿用 Dockerfile 中定义的 ENTRYPOINT
和 CMD
。
2. 仅指定 args
保留镜像的 ENTRYPOINT
,将镜像中的 CMD
替换为所提供的 args
列表。
3. 仅指定 command
忽略Dockerfile中的 ENTRYPOINT
和 CMD
,仅执行所指定的 command
,默认不带任何参数,除非同时指定 args
。
4. 同时指定 command
与 args
分别替换Dockerfile的 ENTRYPOINT
和 CMD
,执行自定义命令并使用自定义参数。