CKA [Basic] – Kubenetes Pods当中command和args的使用

在还没使用Kubernetes的command和arguement的使用之前,看一下docker的entrypoint和cmd的使用先

Docker的entrypoint和cmd的使用方法

1. 创建dockerfile

Dockerfile
FROM busybox:latest
ENTRYPOINT ["/bin/echo"]
CMD ["hello","world"]
Dockerfile

2. 在本机生成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
YAML
apiVersion: v1
kind: Pod
metadata:
  name: multi-container
spec:
  containers:
  - name: demo
    image: busybox:latest
    command: ["/bin/echo"]
    args: ["hello","world","123"]
YAML

2. 执行了之后,就查看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. 未指定 commandargs
运行镜像时,沿用 Dockerfile 中定义的 ENTRYPOINTCMD。​

2. 仅指定 args
保留镜像的 ENTRYPOINT,将镜像中的 CMD 替换为所提供的 args 列表。

3. 仅指定 command
忽略Dockerfile中的 ENTRYPOINTCMD,仅执行所指定的 command,默认不带任何参数,除非同时指定 args

4. 同时指定 commandargs
分别替换Dockerfile的 ENTRYPOINTCMD,执行自定义命令并使用自定义参数。

Loading

Facebook评论