k8s单节点升级为高可用
参考网址:https://zahui.fan/posts/34d8fad0/
- 导出kubeadm配置
kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
- 添加证书SANs信息
certSANs到extraArgs中间的内容,既负载均衡地址,所有的master主机名,IP地址
controlPlaneEndpoint: kube-api-server:6443 修改成负载均衡的地址
如果没有则增加
apiServer:
certSANs:
# 这里需要包含负载均衡、所有master节点的hostname和ip
- kube-api-server
- 5-10.vpclub.io
- 5-11.vpclub.io
- 5-12.vpclub.io
- 192.168.5.10
- 192.168.5.11
- 192.168.5.12
- 192.168.5.200
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: kube-api-server:6443 # 修改成负载均衡的地址
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.15
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
- 备份原kubernetes配置文件
mkdir -p /data/vpclub/kubernetes-bak/kubernetes-20240619
cp /etc/kubernetes/** /data/vpclub/kubernetes-bak/kubernetes-20240619 -rf
- 生成新的证书
# 删除旧的证书
rm /etc/kubernetes/pki/apiserver.key -rf
rm /etc/kubernetes/pki/apiserver.crt
# 生成新的配置
kubeadm init phase certs apiserver --config kubeadm.yaml
# 查看证书内容,应该要多出刚增加的那些主机和IP地址
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text
- 更新cluster-info配置
# server部分修改为负载均衡地址,本次使用的是 kube-api-server
kubectl -n kube-public edit cm cluster-info
- 将配置更新到集群
kubeadm init phase upload-config kubeadm --config kubeadm.yaml
# 再次查看配置是否已经生效,如果有不正确的地方需要修改过来
kubectl edit cm kubeadm-config -n kube-system
- 重启Apiserver
kubectl delete pod kube-apiserver-5-10.vpclub.io kube-controller-manager-5-10.vpclub.io -n kube-system
- 创建KUBE-VIP自动部署清单
# 注意命令行中的VIP地址,网卡名称
docker run --network host --rm swr.cn-south-1.myhuaweicloud.com/vp-whdev/all-in-devops/kube-vip:v0.6.0 manifest pod --interface=eth0 --vip 192.168.5.200 --controlplane --services --arp --leaderElection | tee /etc/kubernetes/manifests/kube-vip.yaml
# 测试一下VIP是否起效,到其他机器也ping一下
ping kube-api-server
ping 192.168.5.200
- 更新其他配置,将所有如下三个文件的server部分修改为负载均衡地址,本次使用的是 kube-api-server
vi /etc/kubernetes/kubelet.conf
# 不确定,默认情况下应该为主机IP
vi /etc/kubernetes/controller-manager.conf
# 不确定,默认情况下应该为主机IP
vi /etc/kubernetes/scheduler.conf
- 重启kubelet和容器
systemctl restart kubelet
kubectl delete pod -n kube-system kube-controller-manager-5-10.vpclub.io
kubectl delete pod -n kube-system kube-scheduler-5-10.vpclub.io
- 修改kube-proxy配置,将server 部分修改为负载均衡地址,本次使用的是 kube-api-server
kubectl edit configmap kube-proxy -n kube-system
# 重启 kube-proxy
kubectl rollout restart daemonset kube-proxy -n kube-system
- 修改kubectl 配置
vi ~/.kube/config
vi /etc/kubernetes/admin.conf
# 查看集群信息
kubectl cluster-info
- 加入新master集群
echo "$(kubeadm token create --print-join-command) --control-plane --certificate-key $(kubeadm init phase upload-certs --upload-certs | tail -1)"
复制回显到新的master机器执行
- 加入node到集群
kubeadm token create --print-join-command