为什么 Kubernetes pod 无法启动?

Why is Kubernetes pod failing to start?

我正在尝试测试一种场景,其中 pod 将装载一个卷并尝试向其中写入一个文件。当我排除命令和参数时,下面提到的 yaml 工作正常。但是,对于命令和参数,它会因“crashloopbackoff”而失败。 describe 命令没有提供太多有关失败的信息。这里有什么问题?

注意:我是 运行 katacoda 上的这个 yaml。

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: voltest
  name: voltest
spec:
  replicas: 1
  selector:
    matchLabels:
      run: voltest
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: voltest
    spec:
      containers:
      - image: nginx
        name: voltest
        volumeMounts:
        - mountPath: /var/local/aaa
          name: mydir
        command: ["/bin/sh"]
        args: ["-c", "echo 'test complete' > /var/local/aaa/testOut.txt"]
      volumes:
      - name: mydir
        hostPath:
            path: /var/local/aaa
            type: DirectoryOrCreate

描述命令输出:

    Events:
  Type     Reason     Age                From                   Message
  ----     ------     ----               ----                   -------
  Normal   Scheduled  49s                default-scheduler      Successfully assigned default/voltest-78678dd56c-h5frs to controlplane
  Normal   Pulling    19s (x3 over 48s)  kubelet, controlplane  Pulling image "nginx"
  Normal   Pulled     17s (x3 over 39s)  kubelet, controlplane  Successfully pulled image "nginx"
  Normal   Created    17s (x3 over 39s)  kubelet, controlplane  Created container voltest
  Normal   Started    17s (x3 over 39s)  kubelet, controlplane  Started container voltest
  Warning  BackOff    5s (x4 over 35s)   kubelet, controlplane  Back-off restarting failed container

您已将 Pod 配置为 运行 单个 shell 命令:

command: ["/bin/sh"]
args: ["-c", "echo 'test complete' > /var/testOut.txt"]

这意味着 pod 启动,运行s echo 'test complete' > /var/testOut.txt,然后立即退出。从角度看 kubernetes,这是一个崩溃。

替换了 nginx 图像的默认行为(运行 nginx") 和 shell 命令。

如果你想让 pod 继续 运行ning,你需要安排它 运行 某种长运行ning 命令。一个简单的解决方案是 类似于:

command: ["/bin/sh"]
args: ["-c", "echo 'test complete' > /var/testOut.txt; sleep 3600"]

这将导致 pod 在退出前休眠一个小时,从而提供 您有时间检查 shell 命令的结果。


请注意,您的 shell 命令没有测试任何有用的东西;你有 在 /var/local/aaa 上安装了您的 mydir 卷,但是您的 shell 命令正在写入 /var/testOut.txt,因此没有任何用处 的体积。