我使用 kubeadm 在同一 LAN 上部署了一个裸机集群,该集群包含一个控制平面节点和一个工作节点。初始化集群后(kubeadm init
在 cp 和kubeadm join
工作节点上),我通过 helm 安装了 calico。calico-node 和 calico-kube-controllers pod 未达到就绪状态。但是,它们似乎运行正常,如果我手动调用存活和就绪探测执行的命令,我会得到预期的成功响应。我可能遇到了 calico 特有的问题,但我的直接问题是,什么可能导致就绪探测出现这种行为?
输出kubectl describe pod -n calico-system calico-node-xxxx
:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 5s (x7 over 43s) kubelet Readiness probe errored: rpc error: code = Unknown desc = command error: EOF, stdout: , stderr: , exit code -1
calico-node-xxxx pods yaml 中的探测配置:
readinessProbe:
exec:
command:
- /bin/calico-node
- -felix-ready
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
livenessProbe:
failureThreshold: 3
httpGet:
host: localhost
path: /liveness
port: 9099
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
当我尝试时kubectl exec -n calico-system calico-node-xxxx -- /bin/calico-node -felix-ready && echo "$?"
,我可以看到退出代码为 0,表示成功。同样,curl localhost:9099/liveness
它得到了 200 代码和预期响应。即使我在创建 pod 后一秒钟内执行命令,情况也是如此,所以我怀疑它与失败阈值或超时秒等有关。我对命令如何exec
实际被调用以进行就绪探测的理解不太清楚,所以也许解释一下它与 有何不同会给kubectl exec
我指明正确的方向?
谢谢。
答案1
啊,有点难以追踪,这是 cri-o 中的错误https://github.com/cri-o/cri-o/issues/6184因为我从 ubuntu repo 中下载了过时的 conmon 版本。更新 conmon 解决了这个问题。