部署jenkins的时候,按照官方yaml,部署下来却发现pod一直处于pending状态
describe看一下

Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  23s (x944 over 15h)  default-scheduler  0/2 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 1 node(s) had volume node affinity conflict.

这个学习用的集群只有一个master节点和一个普通节点,master默认是肯定不亲和的,那么问题就出在另外一个节点的1 node(s) had volume node affinity conflict
查看下挂载的pvc和pv,describe一下发现有亲和要求

Node Affinity:     
  Required Terms:  
    Term 0:        kubernetes.io/hostname in [worker-node01]

他需要部署在一个名叫 [worker-node01]的节点上,好吧,我没有初始化节点名,所以节点名是一长串字符

参考(并没有用上):
https://www.jianshu.com/p/c0b80e35d562
真-参考:
https://tsov.net/uupee/49604/

操作流程

修改节点名

如果这个节点上已经有应用在跑了,那么需要先驱逐上面的pod,不过如果只有一个node慎用,不然会使得所有pod都pending

kubectl drain nodename --delete-local-data --ignore-daemonsets

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/safely-drain-node/

登录机器修改

登上需要修改的节点的机器,修改kubectl和kube-proxy的配置
↑虽然教程里面是这么讲的,但是我并没有看到教程里面说的文件里面有他要修改的那个参数
然后我对比了一下,发现这个node名称其实就是hostname,于是hostnamectl set-hostname修改主机名,kubectl delete node nodename删除原来的node
kubeadm token list查看token过期没,过期了重新生成一个
kubeadm token create
计算哈希

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

初始化节点

kubeadm reset

加入集群

kubeadm kubeadm join master:6443 --token mastertoken --discovery-token-ca-cert-hash sha256:hashcode

再次kubectl get nodes已经能够看到ready的worker-node01

标签: none

评论已关闭