0

我正在通过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 和容器上都没有使用命令?命令什么时候变成args?有没有办法告诉?

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

4

1 回答 1

0

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

这里的线程可能会给你更多的解释

于 2021-12-16T15:35:28.843 回答