使用特定命令启动容器失败

时间:2018-08-31 18:23:59

标签: kubernetes

我正在尝试使用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永不启动,但命令已执行。有没有人对此情况有任何想法?预先感谢。

1 个答案:

答案 0 :(得分:2)

这正是示例中描述的行为。窗格启动并运行直接完成并退出的命令。当命令退出时,窗格停止。 Pod的生命周期取决于PID 1的过程,该过程是yaml或image指定的使用的Docker文件中定义的命令。

由于已定义restartPolicy: OnFailure,因此无法重新启动广告连播,并且状态已完成。如果您删除该策略,则默认设置为“始终”,并且您的pod会一遍又一遍地重启,直到您手动删除该pod。

您可以使用kubectl descripe pod command-demo查看更多详细信息。

问题是示例仅用于学习,并不代表现实生活中的示例。通常,您运行的命令不会停止,并且应该像Web服务器一样一直运行。但是这些通常由部署管理。或者,您运行应执行一次并完成的命令,但是对于这些命令,将使用作业。

因此,只需遵循Kubernetes的其他教程。在Run Applications部分中,将以一个Web服务器nginx为例,它将启动一个pod并保持运行。