新建deployment控制器,期望运行3个pod,启动后发现pod的状态一直都为ContainerCreating,明显是不正常的

查看详细的pod启动描述日志:
kubectl describe pod webapp-deployment-7f78cf6b77-7vq9x

发现是calico问题,向apiservice认证失败。
这里需要补充下
1. Token是动态生成的
在Kubernetes 1.24+中:
Token不再存储在永久的Secret中
每次Pod启动时,由kubelet通过TokenRequest API动态请求新的Token
Token是临时的,有过期时间(默认1小时)
2. 旧的Token可能已过期
当Pod运行一段时间后:
挂载的Token可能会过期
Calico Pod使用过期的Token访问API Server
API Server返回Unauthorized错误
但Pod不会自动刷新Token(需要重启)
这里开始操作重启操作:
kubectl rollout restart daemonset calico-node -n calico-system
kubectl rollout restart deployment calico-kube-controllers -n calico-system
kubectl rollout restart deployment calico-typha -n calico-system
重启完成之后发现pod状态已经OK:

详细流程
# 重启前状态
Calico Pod (运行中) → 使用旧Token → API Server拒绝 → 网络创建失败
# 重启过程
1. kubectl rollout restart
2. 旧Pod被标记为终止
3. 新Pod被创建
4. 新Pod启动时,kubelet自动请求新Token
5. 新Token挂载到/var/run/secrets/kubernetes.io/serviceaccount/
6. Calico使用新Token访问API → 成功
# 重启后状态
Calico Pod (新运行) → 使用新Token → API Server允许 → 网络正常工作
重启前:Pod使用过期Token → 认证失败
重启后:Pod获取新Token → 认证成功
下面是推荐个calicoctl小公具的下载安装方法:
下载二进制文件
# curl -L https://github.com/projectcalico/calico/releases/download/v3.21.4/calicoctl-linux-amd64 -o calicoctl
为calicoctl添加可执行权限
# chmod +x calicoctl
安装calicoctl
# mv calicoctl /usr/bin/
查看添加权限后文件
# ls /usr/bin/calicoctl
/usr/bin/calicoctl
查看calicoctl版本
# calicoctl version
Client Version: v3.21.4
Git commit: 220d04c94
Cluster Version: v3.21.4
Cluster Type: typha,kdd,k8s,operator,bgp,kubeadm

4275

被折叠的 条评论
为什么被折叠?



