在 Kubernetes 中启动 Pod 时如何 运行 命令?

How do I run a command while starting a Pod in Kubernetes?

我想在创建 pod 的过程中执行命令。 我看到两个可用选项:

kubectl run busybox --image=busybox --restart=Never -- sleep 3600

kubectl run busybox --image=busybox --restart=Never -- /bin/sh -c "sleep 3600"

以上两个命令有什么区别?

  • 简而言之,如果您想运行“睡3600”,结果没有区别。 两者执行相同的操作。

  • 要了解这些选项的行为,请向其添加 dry-运行 选项

  • 第一个将“sleep”和“3600”作为参数传递给 busybox 图像的入口点,即“/bin/sh”

kubectl run busybox --image=busybox --restart=Never --dry-run=client -o yaml -- sleep 3600
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: busybox
  name: busybox
spec:
  containers:
  - args:
    - sleep
    - "3600"
    image: busybox
    name: busybox
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
  • 第二个将“/bin/sh -c”、“sleep”和“3600”作为参数传递给 busybox 图像的入口点,即“/bin/sh”。所以它会在容器里面打开一个新的shell to 运行 "sleep 3600".
kubectl run busybox --image=busybox --restart=Never --dry-run=client -o yaml -- /bin/sh -c "sleep 3600"
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: busybox
  name: busybox
spec:
  containers:
  - args:
    - /bin/sh
    - -c
    - sleep 3600
    image: busybox
    name: busybox
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}
  • 如开头所述,它对“sleep 3600”的结果没有任何影响,但是当您想要 运行 容器的多个命令时,此方法很有用,例如“sleep 3600”&“回声嘘”。所以语法是
kubectl run busybox --image=busybox --restart=Never -- /bin/sh -c "sleep 3600;echo boo"