C语言进阶之——数组
2026/7/27 20:32:43
在 Kubernetes 集群的日常运维中,etcd 数据管理、版本升级和证书更新是确保集群稳定运行的三大核心任务。本文将基于实战经验,详细介绍这三项关键操作的具体步骤和注意事项。
etcd 作为 Kubernetes 的数据存储核心,其数据安全性对集群至关重要。无论是单节点还是多节点集群,定期备份和掌握恢复演练都是必备的运维工作。
单 master 集群备份:
bash
运行
ETCDCTL_API=3 etcdctl snapshot save /opt/etcd-back/snap.db \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/peer.crt \ --key=/etc/kubernetes/pki/etcd/peer.key多 master 集群备份:需要在每个 master 节点执行备份命令:
bash
运行
# 在 k8s-01 节点 ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379" \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/peer.crt \ --key=/etc/kubernetes/pki/etcd/peer.key \ snapshot save /snap-$(date +%Y%m%d%H%M).db # 在 k8s-02 节点执行相同命令备份完成后,建议将快照文件复制到安全的外部存储,并验证备份文件完整性:
bash
运行
# 查看备份文件详情 etcdctl snapshot status snap.db -w table单 master 集群恢复步骤:
bash
运行
mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests-backup/bash
运行
mv /var/lib/etcd /var/lib/etcd.bakbash
运行
ETCDCTL_API=3 etcdctl --endpoints="https://127.0.0.1:2379" \ --cert="/etc/kubernetes/pki/etcd/server.crt" \ --key="/etc/kubernetes/pki/etcd/server.key" \ --cacert="/etc/kubernetes/pki/etcd/ca.crt" \ snapshot restore /opt/etcd-back/snap.db --data-dir=/var/lib/etcd/bash
运行
mv /etc/kubernetes/manifests-backup /etc/kubernetes/manifests多 master 集群恢复步骤:
在所有 master 节点停止控制平面组件并备份数据目录(同单节点步骤 1-2)
分别在每个节点执行恢复命令(以两个节点为例):
bash
运行
# 在 k8s-01 节点 ETCDCTL_API=3 etcdctl snapshot restore /snap-202207182330.db \ --name=k8s-01 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/peer.crt \ --key=/etc/kubernetes/pki/etcd/peer.key \ --initial-advertise-peer-urls=https://192.168.1.123:2380 \ --initial-cluster-token=etcd-cluster-0 \ --initial-cluster=k8s-01=https://192.168.1.123:2380,k8s-02=https://192.168.1.124:2380 \ --data-dir=/var/lib/etcd # 在 k8s-02 节点执行类似命令,注意修改节点名称和地址集群升级需要遵循严格的步骤,确保升级过程中业务不受影响。以下是从 v1.28.15 升级到 v1.29.15 的示例流程。
bash
运行
kubectl get nodes kubectl get pods --all-namespaces/etc/kubernetes/目录bash
运行
kubeadm upgrade planbash
运行
kubeadm upgrade diff 1.29.15bash
运行
kubeadm upgrade apply v1.29.15bash
运行
yum update -y kubelet systemctl daemon-reload systemctl restart kubeletbash
运行
kubectl drain <node-name> --ignore-daemonsetsbash
运行
kubeadm upgrade node yum update -y kubelet systemctl daemon-reload systemctl restart kubeletbash
运行
kubectl uncordon <node-name>升级完成后,验证集群状态:
bash
运行
kubectl get nodes # 确认所有节点版本已更新且状态为 Ready kubectl get pods --all-namespaces # 确认所有系统组件正常运行Kubernetes 证书默认有效期为 1 年,需要定期更新以避免集群故障。
bash
运行
kubeadm certs check-expirationbash
运行
sudo kubeadm certs renew allbash
运行
kubeadm certs check-expirationbash
运行
# 对于静态 Pod 管理的组件,删除 Pod 使其重建 kubectl delete pods -n kube-system kube-apiserver-<node-name> kubectl delete pods -n kube-system kube-controller-manager-<node-name> kubectl delete pods -n kube-system kube-scheduler-<node-name>bash
运行
sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep "Not After"bash
运行
openssl genrsa -out apiserver.key 2048 openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kube-apiserver" openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -out apiserver.crt -days 365bash
运行
# 替换证书 cp apiserver.crt apiserver.key /etc/kubernetes/pki/ # 重启服务 sudo systemctl restart kube-apiserver kube-controller-manager kube-schedulerbash
运行
tar -czvf /root/kubernetes-pki-backup.tar.gz /etc/kubernetes/pki确保所有节点时间同步,避免因时间差异导致证书验证失败
更新后全面检查集群状态,包括节点、Pod 和服务可用性