K8s监控与升级、ETCD备份与恢复举例说明
作者:鹤落晴春
1.举例说明K8s中都有哪些常规的维护管理操作。
(1)kubectl get nodes:查看所有节点的状态(是否就绪、版本、资源情况)。当发现集群卡顿或Pod无法调度时,先使用这条命令查看节点是否正常。
(2)kubectl get pods -A:查看所有命名空间下的Pod运行状态。在服务访问失败时,使用这条命令快速排查是否有Pod在重启、崩溃或未就绪。
(3)kubectl drain <节点名>:驱逐节点上的Pod到其他节点,并标记该节点为不可调度。在升级前使用。
(4)kubectl uncordon <节点名>:让节点恢复接收新Pod。在维护做完后,使用这条命令重新启用节点。
(5)kubectl cordon <节点名>:标记节点为不可调度,但不会赶走现有Pod。暂时不想让新任务上来,但已在运行的不要动。
(6)kubectl top nodes:查看节点实时的CPU和内存使用量(使用这条命令的前提是已经安装metrics-server了插件)。当发现集群整体变慢,可以使用这条命令查看哪个节点负载最高。
(7)kubectl top pods:查看Pod的实时资源使用情况。
(8)kubectl scale deployment <名字> --replicas=5:把某个Deployment的副本数调整到5个。使用这条命令根据流量动态扩缩容。
(9)kubectl logs <Pod名>:查看Pod里容器的日志。当服务报错,使用这条命令查看应用打印了什么错误。
(10)kubectl exec -it <Pod名> -- /bin/sh:交互式进到Pod里面执行命令。想测试网络、查看配置文件、手动运行脚本时使用这条命令。
(11)kubectl describe pod <Pod名>:展示Pod的详细信息(例如:事件、状态、挂载点、节点位置等)。当发现Pod处于Pending、CrashLoopBackOff等异常状态时,使用这条命令查看描述里的Events字段找原因。
(12)kubectl get deployment -A -o yaml > all-deployments.yaml:把所有Deployment导出成YAML文件。在修改Deployment之前,可以使用这条命令导出当前配置作为参考备份。
(13)kubectl apply -f xxx.yaml:应用一个资源配置文件。当修改了某个Deployment或Service的YAML后,使用这条命令让它生效。
2. 如何升级K8s到新的版本?
使用 kubeadm 部署的集群,升级过程先操作控制平面节点,再操作工作节点,步骤如下:
(1)首先在控制平面节点上运行 kubeadm upgrade plan 查看可升级版本和检查兼容性,确认后执行 kubeadm upgrade apply v1.32.0(替换为目标版本)升级控制平面组件;
(2)接着更新 kubelet 配置,运行 kubeadm upgrade node config --kubelet-version v1.32.0,然后重启 kubelet:systemctl restart kubelet。
(3)控制平面升级完成后,转到每个工作节点,依次执行 kubectl drain <node-name> 排空节点上的 Pod,再在节点上运行 kubeadm upgrade node 升级节点配置,更新并重启 kubelet,最后执行 kubectl uncordon <node-name> 让节点恢复接收 Pod。
3.在升级过程中应该注意哪些事项?
(1)不能跳大版本:一次升一个小版本(比如从 1.31 升到 1.32),不要跨多个版本跳。
(2)先升控制平面,后升工作节点:一定要先把控制平面(主节点)升完,再去升工作节点。
(3)升级前排空节点:升级工作节点前务必把上面的 Pod 赶走,避免服务中断。
(4)备份 etcd:升级前一定要备份 etcd,万一失败能快速恢复。
(5)无法降级:升上去就下不来了,升级前确认好目标版本。
(6)先测后升:最好在测试集群先跑一遍,确认应用兼容新版再动生产环境。
4. 解释ETCD及其备份和恢复的过程。
etcd是一个分布式、高可用的键值存储系统,在Kubernetes集群中扮演着核心数据库的角色。它存储了整个集群的所有配置信息、状态数据和元数据,包括Pod、Service、Deployment、ConfigMap等资源的定义以及它们的当前状态。可以说,etcd是K8s集群的“大脑”和“数据核心”——没有etcd,集群将无法恢复任何状态信息。
以下是一个备份过程可以使用的模板:
ETCDCTL_API=3 etcdctl snapshot save <备份文件路径> \ --endpoints=<etcd集群地址> \ --cacert=<CA证书路径> \ --cert=<客户端证书路径> \ --key=<客户端密钥路径>
下面是一个具体的例子:
ETCDCTL_API=3 etcdctl snapshot save /var/lib/etcd-backup/snapshot.db \ --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
恢复etcd数据使用etcdctl snapshot restore命令:
ETCDCTL_API=3 etcdctl snapshot restore <备份文件路径> \ --data-dir=<新的数据目录> \ --initial-cluster=<初始集群参数> \ --initial-advertise-peer-urls=<广告对等URL> \ --name=<成员名称>
总结
到此这篇关于K8s监控与升级、ETCD备份与恢复的文章就介绍到这了,更多相关K8s监控与升级、ETCD备份与恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
