gpt4 book ai didi

kubernetes - kubectl运行--command vs —参数

转载 作者:行者123 更新时间:2023-12-02 12:13:59 26 4
gpt4 key购买 nike

我对以下命令有些困惑:

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'
所以最后还是一样。

最佳答案

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

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

关于kubernetes - kubectl运行--command vs —参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59248318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com