0

我试图测试一种场景,其中 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
4

1 回答 1

1

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

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

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

您已将映像的默认行为(“运行 nginx”)替换为 shell 命令nginx

如果您希望 pod 继续运行,您需要安排它运行某种长时间运行的命令。一个简单的解决方案是这样的:

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

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


请注意,您的 shell 命令没有测试任何有用的东西;您已将mydir卷安装在 上/var/local/aaa,但您的 shell 命令正在写入/var/testOut.txt,因此它没有使用该卷。

于 2022-01-08T13:49:26.913 回答