我正在尝试使用Kubernetes文档中的this示例来定义启动容器时要运行的命令。
在给定的示例中,我直接复制了.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
然后我用 kubectl apply -f command-demo.yaml
创建了Pod之后,当我执行 kubectl get pods 时,Pod永远不会启动:
NAME READY STATUS RESTARTS AGE
command-demo 0/1 Completed 0 2m
当我执行 kubectl日志command-demo 时,也会打印相关的环境变量。例如:
command-demo
tcp://10.80.2.3:443
当我在yaml文件中使用 command 时,我的pod永不启动,但命令已执行。有没有人对此情况有任何想法?预先感谢。
答案 0 :(得分:2)
这正是示例中描述的行为。窗格启动并运行直接完成并退出的命令。当命令退出时,窗格停止。 Pod的生命周期取决于PID 1的过程,该过程是yaml或image
指定的使用的Docker文件中定义的命令。
由于已定义restartPolicy: OnFailure
,因此无法重新启动广告连播,并且状态已完成。如果您删除该策略,则默认设置为“始终”,并且您的pod会一遍又一遍地重启,直到您手动删除该pod。
您可以使用kubectl descripe pod command-demo
查看更多详细信息。
因此,只需遵循Kubernetes的其他教程。在Run Applications部分中,将以一个Web服务器nginx为例,它将启动一个pod并保持运行。