我什么时候应该在 readinessProbes 中使用命令或参数

When should I use commands or args in readinessProbes

我正在努力通过 killer.sh.for CKAD。我遇到了一个 pod 定义文件,它在就绪探针下有一个命令字段,并且容器执行另一个命令但使用了 args。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod6
  name: pod6
spec:
  containers:
  - args:
    - sh
    - -c
    - touch /tmp/ready && sleep 1d
    image: busybox:1.31.0
    name: pod6
    resources: {}
    readinessProbe:                             # add
      exec:                                     # add
        command:                                # add
        - sh                                    # add
        - -c                                    # add
        - cat /tmp/ready                        # add
      initialDelaySeconds: 5                    # add
      periodSeconds: 10                         # add
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

如果未使用就绪探测器并且隐式创建了此 pod,则不会使用 args。

kubectl run pod6 --image=busybox:1.31.0 --dry-run=client --command -- sh -c "touch /tmp/ready && sleep 1d" > 6.yaml

输出 YAML 如下所示:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod69
  name: pod69
spec:
  containers:
  - command:
    - sh
    - -c
    - touch /tmp/ready && sleep 1d
    image: busybox:1.31.9
    name: pod69
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

为什么没有在 readinessProbe 和容器上使用命令? 命令什么时候变成参数? 有办法告诉吗?

我已通读此文档:https://kubernetes.io/docs/tasks/inject-data-application/_print/ 但我仍然不太了解这种情况以及何时切换到 args。

您在 Kubernetes 中同时拥有 cmd + args 的原因是因为它为您提供了从您尝试 运行 的图像中覆盖默认 Commands + Args 的选项。 在您的特定情况下,busybox 图像没有任何默认命令,因此在 Pod.yaml 文件中的 cmd 或 args 中指定启动命令本质上是相同的。 关于命令何时变为 args 的问题 - 它们不会,当使用您的图像启动容器时,它只是执行 cmd + args。如果 cmd 在(图像和 yaml 文件)中为空,则仅执行 args。

帖子here可能会给你更多的解释