k8s高可用集群更换节点ip

好久没更新笔记了,上次才更新了自己很久很久以前记录的内容,十分之一还没记录完,这次先记录点新的。最近有个项目k8s服务器要换机房,节点ip需要变更,因为不想有太大工作量所以想保证在节点ip更换后k8s集群可以保持原本内容正常启动使用,下面开始把

集群是kubeadm部署的,二进制或者其他方式部署的可作参考

原ip新ip
172.16.203.11172.16.203.84
172.16.203.12172.16.203.85
172.16.203.13172.16.203.86

单master集群

master节点

1、修改/etc/hosts解析(所有节点)

vim /etc/hosts
 
k8s-master 10.0.0.10
k8s-node-1 10.0.0.11
k8s-node-2 10.0.0.12

这一步最后改也无妨,不影响

2、备份

# 更改前先备份以防万一,每个节点都需要备份
cp -r /etc/kubernetes{,-bak}
cp -r /var/lib/etcd{,-bak}

# etcd数据备份,每个节点都备份
alias etcdctl='etcdctl --endpoints=https://172.16.203.11:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'
etcdctl  snapshot save snapshot.db

3、修改集群初始化配置文件
kubeadm config view > /root/kubeadm.yaml
这会生成集群初始化配置文件中的clusterConfiguration部分,但实际我们还需要initConfiguration部分内容,主要是
localAPIEndpoint指定的advertiseAddress

当然你可以直接使用你初始化集群时指定的yaml文件
修改内容如下

cat kubeinit.yaml
...
# 此处ip需要修改
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 172.16.203.86
  ...
  ---
apiServer:
# 此处ip需要修改
  certSANs:
  - 172.16.203.84
  - 172.16.203.85
  - 172.16.203.86
  - k8s-1
  - k8s-2
  - k8s-master03
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 172.16.203.84:6443
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: 172.16.203.84:5000
kind: ClusterConfiguration
kubernetesVersion: v1.18.2
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

certSANs 设置 API 服务器签署证书所用的额外主体替代名(Subject Alternative Name,SAN)
serverCertSANs 为 etcd 服务器的签名证书设置额外的 主体替代名(Subject Alternative
Names,SAN) peerCertSANs 为 etcd 的对等端签名证书设置额外的 主体替代名(Subject Alternative
Names,SAN)

4、修改configmap配置
kubectl get cm -n kube-system查看原本配置中哪里用到了老的ip,更新为新的
正常需要修改的为
kubeadm-config
kube-proxy

kubeadm-config也可以通过如下命令直接修改
kubeadm init phase upload-config kubeadm --config kubeadm.yaml

5、修改/etc/kubernetes/menifests/目录下文件的ip地址
主要修改etcd.yamlkube-apiserver.yaml

6、更新证书及kubeconfig
查看原本证书内容哪些包含了老的ip地址
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'Address'; done

# 删除旧证书
rm -rf /etc/kubernetes/pki/{apiserver.key,apiserver.crt}
rm -rf /etc/kubernetes/pki/etcd/{peer*,server*}

# 生成新的
kubeadm init phase certs all --config kubeinit.yaml

# 删除原本的conf文件
rm -rf /etc/kubernetes/*.conf
# 生成新的
kubeadm init phase kubeconfig all --config kubeinit.yaml

7、验证
将新的admin.conf拷贝到/root/.kube/目录下替换掉原本的config文件

systemctl restart docker kubelet
kubectl get nodes

报错:
Error from server: error dialing backend: dial tcp 172.16.203.84:10250: connect: no route to host
如果遇到类似报错,可以先查看一下kubelet证书内容,一般都是hosts文件未修改或者修改错了

node节点

node节点只需要修改kubelet.conf文件里的ip地址便可

多master高可用集群

master节点

重点来了,高可用集群修改要比单节点复杂一些,复杂的点在于etcd
此处执行的步骤在单节点步骤中第四步之后
首先kubeadm部署的集群可以看到三个主节点的etcd.yaml文件配置并不相同,在初始化第一个master节点时,etcd还是单节点模式,而在后面的master节点加入集群后,kubeadm会调用etcdctl member add等命令去扩展etcd集群,所以像单master的集群那样修改ip后可以发现重启后etcd一直在报错,并且地址还是老的ip地址,那是因为etcd集群中的元数据信息还未更改
当然了,使用kubeadm reset命令并不会导致etcd集群节点从三个变回两个

# 进入etcd容器内部
alias etcdctl='etcdctl --endpoints=https://172.16.203.11:2379,https://172.16.203.12:2379,https://172.16.203.13:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key'

etcdctl member list -w table
etcdctl endpoint status -w table

修改集群元数据信息,更改三个节点
etcdctl member update [$id] --peer-urls=[nodeip]

更改完元数据信息后再像前面那样更换ip就可以保证集群在更换ip地址后正常启动了,不然可能会相当麻烦,所以此处执行步骤放在更改cm配置文件之后,保证更换元数据前集群还可以正常使用

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理在容器化环境中的应用程序。在搭建K8s高可用集群时,可以通过配置虚拟IP(VIP)来提供集群高可用性。 虚拟IP是一种网络技术,用于将多个实际IP地址映射到一个虚拟的IP地址上。在K8s高可用集群中,可以使用虚拟IP来确保在发生节点故障时,集群的服务不会中断,可以无缝切换到其他健康的节点上。 具体实现方式如下: 1. 配置负载均衡器:在K8s集群中,可以使用负载均衡器来实现VIP。该负载均衡器可以是硬件设备、软件应用或云服务。负载均衡器可以通过将请求转发到不同的K8s节点上,来实现VIP高可用性。 2. 分配VIP:在负载均衡器中,为K8s集群分配一个唯一的虚拟IP地址。这个虚拟IP将被映射到K8s集群的实际节点IP地址上。 3. 配置故障检测和自动切换:负载均衡器会定期检测K8s节点的健康状态。如果发现某个节点不可用,负载均衡器将自动将请求切换到其他健康的节点上,以确保服务的连续性。 通过虚拟IP的配置,K8s集群可以在发生节点故障时保持高可用性。即使一个节点故障,负载均衡器可以快速将请求切换到其他可用的节点上,而不会中断服务。这样可以提高应用程序的稳定性和可靠性。 总结起来,通过配置虚拟IPK8s高可用集群能够在节点故障时实现自动切换,提供无缝的服务,确保应用程序的可用性和可靠性。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值