k8s修改node名以满足亲和条件
部署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
评论已关闭