Kubernetes Pod 对象中命令变量的使用
Usage of command variable in Kubernetes Pod object
我想了解 Pods 中命令的正确用法是什么。以我的 yaml 为例。这是一个有效的 YAML。我的疑惑是
1> 睡眠命令发出了 3600 秒,但是当我通过 'k get pods' 看到 pods 几个小时后,我的 pod busybox2 仍然是 运行。我目前的理解是,睡眠应该执行 3600 秒并且 pod 应该在此之后消失,因为没有进程 运行 我的 Pod(如 httpd、nginx 等)。不确定这是为什么
apiVersion: v1
kind: Pod
metadata:
name: busybox2
namespace: default
spec:
containers:
- name: busy
image: busybox
command:
- sleep
- "3600"
2> 在 k8s 文档上查看时,用法显示了一种不同的编写方式。我知道 cmd 和 args 是不同的东西..但是我不能简单地在所有场景中使用这两种方式吗?就像编写命令:["sleep", "3600"] 作为第一个示例,command: - printenv \ - HOSTNAME
作为编写第二个 yaml 命令部分的另一种方式。谁能详细说一下。
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
关于你的第二点,如果你对DockerENTRYPOINT
和CMD
不熟悉,我建议你阅读关于它们的documentation,因为它是直接相关的到 Kubernetes 的 command
和 args
.
事实上,它们是如此相关,以至于它们实际上是 same thing。这意味着 command
应该用于设置命令的“核心”,而 args
,顾名思义,应该用于其参数。在您的情况下,它可能看起来像:
command: ["sleep"]
args: ["3600"]
现在说第一点,是因为Pod is not a Job, so it will continue to run unless there is a fatal error, the liveness probe失败或者你手动删除了
...but my pod busybox2 is still running after few hours...
这是因为 restartPolicy
的默认值为 Always
。意味着一个小时后,您的 pod 实际上重新启动了。
apiVersion: v1
kind: Pod
metadata:
name: busybox2
namespace: default
spec:
restartPolicy: OnFailure # <-- Add this line and it will enter "Completed" status.
containers:
- name: busy
image: busybox
command:
- sleep
- "10" # <-- 10 seconds will do to see the effect.
请参阅 here 了解 K8s 如何处理入口点、命令、args 和 CMD。
我想了解 Pods 中命令的正确用法是什么。以我的 yaml 为例。这是一个有效的 YAML。我的疑惑是
1> 睡眠命令发出了 3600 秒,但是当我通过 'k get pods' 看到 pods 几个小时后,我的 pod busybox2 仍然是 运行。我目前的理解是,睡眠应该执行 3600 秒并且 pod 应该在此之后消失,因为没有进程 运行 我的 Pod(如 httpd、nginx 等)。不确定这是为什么
apiVersion: v1
kind: Pod
metadata:
name: busybox2
namespace: default
spec:
containers:
- name: busy
image: busybox
command:
- sleep
- "3600"
2> 在 k8s 文档上查看时,用法显示了一种不同的编写方式。我知道 cmd 和 args 是不同的东西..但是我不能简单地在所有场景中使用这两种方式吗?就像编写命令:["sleep", "3600"] 作为第一个示例,command: - printenv \ - HOSTNAME
作为编写第二个 yaml 命令部分的另一种方式。谁能详细说一下。
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
关于你的第二点,如果你对DockerENTRYPOINT
和CMD
不熟悉,我建议你阅读关于它们的documentation,因为它是直接相关的到 Kubernetes 的 command
和 args
.
事实上,它们是如此相关,以至于它们实际上是 same thing。这意味着 command
应该用于设置命令的“核心”,而 args
,顾名思义,应该用于其参数。在您的情况下,它可能看起来像:
command: ["sleep"]
args: ["3600"]
现在说第一点,是因为Pod is not a Job, so it will continue to run unless there is a fatal error, the liveness probe失败或者你手动删除了
...but my pod busybox2 is still running after few hours...
这是因为 restartPolicy
的默认值为 Always
。意味着一个小时后,您的 pod 实际上重新启动了。
apiVersion: v1
kind: Pod
metadata:
name: busybox2
namespace: default
spec:
restartPolicy: OnFailure # <-- Add this line and it will enter "Completed" status.
containers:
- name: busy
image: busybox
command:
- sleep
- "10" # <-- 10 seconds will do to see the effect.
请参阅 here 了解 K8s 如何处理入口点、命令、args 和 CMD。