新建pod启动不起来解决办法记录

新建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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值