Debian上K8s部署后如何进行维护
小樊
54
2025-10-06 14:10:18
Debian上K8s部署后的维护指南
1. 系统基础维护
- 操作系统更新:定期执行
sudo apt update && sudo apt upgrade -y更新Debian系统包,修复安全漏洞;禁止随意升级内核版本(Kubernetes对内核版本有严格要求,升级前需参考官方兼容性列表)。
- 关闭Swap分区:Kubelet要求节点关闭swap,执行
sudo swapoff -a并修改/etc/fstab文件注释swap行,确保kubelet正常运行。
- 防火墙配置:开放Kubernetes关键端口(如API Server的6443端口、kubelet的10250/10255端口、etcd的2379/2380端口),使用
ufw或iptables管理规则,避免网络隔离导致集群通信失败。
2. 集群状态监控
- 命令行工具:使用
kubectl高频检查集群状态:
kubectl get nodes:查看节点就绪状态(Ready/NotReady);
kubectl get pods --all-namespaces:查看所有Pod的运行状态(Running/Pending/CrashLoopBackOff等);
kubectl top nodes/kubectl top pods:查看节点和Pod的资源使用情况(需提前安装Metrics Server)。
- 可视化监控工具:
- Prometheus+Grafana:部署Prometheus Operator收集集群指标(如节点CPU/内存、Pod资源使用、etcd性能),通过Grafana导入Kubernetes仪表盘(如kube-state-metrics、node-exporter),实现可视化监控与告警;
- Kubernetes Dashboard:部署官方Dashboard(
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml),通过Web界面管理集群资源(需配置kubectl proxy或Ingress暴露);
- cAdvisor/node-exporter:cAdvisor内置在kubelet中,无需额外安装,用于监控容器资源;node-exporter以DaemonSet形式部署,收集节点级指标(CPU、内存、磁盘)。
3. 日志管理
- 集中式日志收集:使用EFK Stack(Elasticsearch+Fluentd+Kibana)或Loki+Promtail+Grafana收集集群日志:
- Fluentd作为 DaemonSet 运行在每个节点上,收集容器、kubelet、系统日志并发送至Elasticsearch;
- Kibana或Grafana用于日志检索、分析与可视化,快速定位Pod崩溃、节点异常等问题。
4. 安全加固
- RBAC配置:通过
kubectl create role/kubectl create clusterrole定义细粒度权限,限制用户/服务账户仅能访问必要资源(如禁止普通用户删除Namespace)。
- 网络策略:使用Calico、Flannel等网络插件配置NetworkPolicy,限制Pod间非必要通信(如仅允许同一Namespace内的Pod访问数据库Pod)。
- 证书管理:使用Cert-Manager自动化管理TLS证书(如etcd、API Server、Ingress),确保证书不过期;定期轮换证书(
kubeadm certs renew命令)。
- etcd备份:etcd是Kubernetes的核心数据存储,定期使用
etcdctl snapshot save命令备份数据(如每天凌晨),并将备份文件存储至异地(如S3、NFS)。
5. 组件更新与升级
- 系统包更新:定期执行
sudo apt update && sudo apt upgrade -y更新Kubernetes组件(kubelet、kubeadm、kubectl),但禁止跳过大版本(如从1.22直接升级到1.24)。
- 集群升级步骤:
- 备份数据:升级前备份etcd数据(
etcdctl snapshot save /backup/etcd-snapshot.db)和Kubernetes配置文件(/etc/kubernetes/manifests、/etc/kubernetes/admin.conf);
- 升级Master节点:使用
kubeadm upgrade apply <target-version>命令升级Master节点,等待升级完成后再升级工作节点;
- 升级工作节点:
- Drain节点:
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data,将Pod驱逐至其他节点;
- 升级组件:
sudo apt install -y kubelet=<target-version>-0 kubeadm=<target-version>-0 kubectl=<target-version>-0;
- 重启kubelet:
sudo systemctl daemon-reload && sudo systemctl restart kubelet;
- Uncordon节点:
kubectl uncordon <node-name>,恢复节点调度;
- 验证升级:使用
kubectl version检查集群版本,kubectl get nodes确认所有节点状态为Ready。
6. 备份与恢复
- 关键数据备份:除etcd外,还需备份Namespace、Deployment、Service、ConfigMap等配置文件(
kubectl get <resource> -o yaml > <resource>.yaml),存储至版本控制系统(如Git)或异地存储。
- 恢复测试:定期模拟灾难场景(如删除etcd数据、删除Namespace),使用备份文件恢复集群(如
etcdctl snapshot restore恢复etcd,kubectl apply -f <resource>.yaml恢复配置),确保备份有效性。
7. 文档与培训
- 文档记录:详细记录集群部署流程(如kubeadm init参数、网络插件配置)、节点信息(IP、角色、硬件规格)、配置变更(如修改Service CIDR、调整ResourceQuota),便于后续维护与故障排查。
- 团队培训:针对运维团队开展Kubernetes基础培训(如kubectl常用命令、Dashboard使用、监控告警配置),提升团队整体维护能力。