Kubernetes Pod对象中命令变量的使用



我想了解什么是pod命令的正确用法。以下面我的邮件为例。这是一个工作的YAML。我的疑问是

1比;sleep命令发出了3600秒,但是当我通过"k get pods"看到pod时,我的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

...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.

查看K8s如何处理入口点、命令、参数和CMD。

对于你的第二点,如果你不熟悉Docker的ENTRYPOINTCMD,我建议你阅读有关它们的文档,因为它与Kubernetes的commandargs直接相关。

事实上,他们是如此的相关,他们实际上是相同的东西。这意味着command应该用来设置"核心"。而args,顾名思义,应该用于它的参数。在你的例子中,它看起来像:

command: ["sleep"]
args: ["3600"]

对于第一点,这是因为Pod不是Job,所以它将继续运行,除非出现致命错误、活动探测失败或您手动删除它。

相关内容

  • 没有找到相关文章

最新更新