背景
从合作伙伴那里接手了一套华为私有云上的kubeadm部署的k8s节点,单master节点,4个node。
短期任务:master高可用,剩余的机器加入至集群中
LB IP地址:10.17.3.79
master1 IP地址: 10.17.3.154
思路
私有云上有一个LB资源,考虑将扩容后的master节点上的apiserver服务绑定至lb上,做高可用。需要把apiserver得ca证书中的X509v3 Subject Alternative Name即SAN字段中添加lb的IP地址
遇到的问题:
由于集群中安装了kubesphere后,由kubeadm生成的cr被kubesphere的ks-install覆盖了,不能使用网上的传统的kubeadm导出配置文件,添加ip,重新应用至集群这种方法失效。
解决思路:
查阅RTFM可以使用参数--apiserver-cert-extra-sans
解决
实施
先查看单节点中的apiserver的证书中是不包含lb的IP地址的
root@k8s-master01:/etc/kubernetes/pki
openssl x509 -in apiserver.crt -noout -text
X509v3 Subject Alternative Name:
DNS:k8s-master01, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:10.17.3.154,
集群中已无kubeadm相关资源
root@k8s-master01:~# kubectl api-resources |grep kubeadm
# 输出结果为空
root@k8s-master01:~# kubectl api-resources |grep -i clusterconfig
clusterconfigurations cc installer.kubesphere.io/v1alpha1 true ClusterConfiguration
这里输出的APIVERSION字段应该是kubeadm的,但被ks覆盖掉了
先移除证书
mkdir -pv /tmp/api-certs;mv /etc/kubernetes/pki/apiserver.{crt,key} /tmp/api-certs/
执行如下命令增加lb IP地址至san中
kubeadm init phase certs apiserver --apiserver-cert-extra-sans "10.17.3.79"
验证
root@k8s-master01:~# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
X509v3 Subject Alternative Name:
DNS:k8s-master01, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:10.17.3.154, IP Address:10.17.3.79
删除apiserver pod等待自动重建来实现重启
kubectl delete pod kube-apiserver-k8s-master01 -n kube-system
LB上配置监听端口,后端服务器组,后端服务器组业务端口
使用LB的IP地址添加其他master节点
kubeadm join 10.17.3.79:6443 --token 3y1wwy.ga3xxvjvh --discovery-token-ca-cert-hash sha256:624d766924e944ece611574aec334xx8d2f5 --node-name=10.17.3.42 --control-plane --certificate-key 2aecf278f5a16e244a707xxx028dbd13be22b84a7c1 --v=9
验证
root@k8s-master01:~# kubectl get node -o wide |grep 3.42
10.17.3.42 Ready control-plane 5d21h v1.30.3 10.17.3.42 <none> Ubuntu 18.04.3 LTS 4.15.0-70-generic containerd://1.7.20
reference
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
https://blog.csdn.net/weixin_44070095/article/details/125478908