CKA – 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评论