集群管理与维护 etcd备份与恢复 三台etcd的高可用集群,超过半数(两台)挂掉,整个集群会挂掉,etcd需要定期备份。
首先需要下载etcd客户端:https://github.com/etcd-io/etcd/releases
1 2 3 4 5 6 7 8 ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key member list ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save etcdbackupfile.db ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore etcdbackupfile.db --data-dir=/var/lib/etcd
k8s集群升级
注意事项
提前备份etcd
不要跨两个大版本进行升级
升级前在测试环境演练,充分做好回滚方案
升级方案
蓝绿方案,仿照现有k8s集群,直接在新环境部署一套指定版本的k8s,然后把业务流量切换到新环境。
新增一台机器,部署新版本的master节点,然后join进集群,观察一段时间,停一台mater节点,以此类推。
直接在现有环境上升级(集群本身必须是高可用的),先逐台更新master节点(高版本master节点通常可以管理低版本的node,但是也不要版本差异过大),然后逐台更新node节点
升级步骤(方案3)
配置新的软件源
参考阿里云软件源配置:https://developer.aliyun.com/mirror/kubernetes/
新版下载地址: https://mirrors.aliyun.com/kubernetes-new/
确认升级次数
先查出当前所有的正式版本,逐步升级:
1 v1.24.X ——> v1.25.X ——> v1.26.X ——> v1.27.X
每次升级完成之后,都要运行观察一段时间之后,再进行下一次升级。
升级节点,先升级master节点,再升级Node节点
备份数据
1 备份节点上的业务数据目录,master节点还需要备份好etcd数据:/var/lib/etcd目录
禁止调度
1 kubectl cordon k8s-master-01
创建PDB策略
1 对节点上的关键业务Pod,包括关键系统组件Pod(比如coredns)设置PDB策略以及多副本,避免排空Pod时导致服务不可用
排空Pod
1 kubectl drain k8s-master-01 --delete-local-data --ignore-daemonsets --force
升级软件
1 2 3 4 5 6 7 8 9 10 11 yum install -y kubeadm-1.21.4-0 --disableexcludes=kubernetes kubeadm upgrade plan kubeadm upgrade apply v1.21.4 yum install -y kubelet-1.21.4.0 kubectl-1.21.4.0 --disableexcludes=kubernetes systemctl daemon-reload && systemctl restart kubelet
确认Pod状态
重新接收调度
1 kubectl uncordon k8s-master-01
检查集群状态