为什么 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
,因此没有任何用处
的体积。
我正在尝试测试一种场景,其中 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
,因此没有任何用处
的体积。