kubectl run --command vs — arguments

问题描述 投票:0回答:1

我对以下命令有些困惑:

kubectl run busybox --image=busybox --restart=Never -o yaml --dry-run -- /bin/sh -c 'echo hello;sleep 3600'

YAML:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: busybox
  name: busybox
spec:
  containers:
  - args:
    - /bin/sh
    - -c
    - echo hello;sleep 3600
    image: busybox
    name: busybox
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

我知道如果不指定参数--command,则--之后的参数将被视为参数。

但是我想知道,/bin/sh -c "echo hello;sleep 3600"在发生争论时是如何工作的?根据Kubernetes文档(https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes),如果我们仅在POD中指定参数,则将Docker EntryPoint用作EntryPoint命令。因此,将在docker映像中执行的结果命令将为Docker EntryPoint + kubectl arguments

由于Busybox DockerFile不包含任何EntryPoint(https://github.com/docker-library/busybox/blob/master/musl/Dockerfile),因此将仅使用kubectl命令中指定的参数,因此该命令将如下所示:

/bin/sh -c 'echo hello;sleep 3600'

并且如果我们指定--command,那么根据Kubernetes文档,Dockerfile参数(CMD)和command(EntryPoint)都将被kubectl命令中指定的命令所覆盖,因此它看起来与上面类似:

/bin/sh -c 'echo hello;sleep 3600'

最后还是一样。

kubernetes arguments command kubectl busybox
1个回答
0
投票

在此示例中,是的,两者相同。可以说是否将入口点(命令)设置为sleep 1000,但如果您的参数设置为sleep 3000,则忽略容器命令并执行sleep 3000

Args优先于命令,如果存在args则覆盖命令值

© www.soinside.com 2019 - 2024. All rights reserved.