在云原生技术蓬勃发展的今天,Kubernetes 凭借强大的容器编排与集群管理能力,成为企业构建现代化应用架构的首选。然而,随着集群规模的不断扩大和业务复杂度的提升,Kubernetes 集群的运维与监控面临着巨大挑战。一套高效的运维与监控体系,不仅能及时发现并解决集群中的问题,还能确保业务的连续性和稳定性。
一、Kubernetes 运维基础
1. 节点管理
节点添加与删除
在 Kubernetes 集群中,根据业务需求添加或删除节点是常见操作。添加节点时,首先要确保新节点满足集群的硬件和软件要求,安装好操作系统和必要的软件包,如 Docker、kubelet 和 kube - proxy。然后,在 Master 节点上执行kubeadm token create --print - join - command获取加入命令,在新节点上以管理员身份执行该命令,将新节点加入集群。
删除节点时,为避免影响业务,需先将节点上的 Pod 迁移到其他节点。可以使用kubectl drain命令,该命令会将节点标记为不可调度,并逐步将节点上的 Pod 驱逐到其他可用节点:
kubectl drain <node - name> --ignore - daemonsets
待 Pod 迁移完成后,可使用kubectl delete node <node - name>命令删除节点。
节点状态检查
定期检查节点状态是运维工作的重要内容。通过kubectl get nodes命令,可以查看集群中所有节点的状态,包括节点名称、状态、角色、版本等信息:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready <none> 3d v1.22.0
node2 Ready <none> 3d v1.22.0
若节点状态为NotReady,需进一步排查问题,可能原因包括网络故障、kubelet 服务异常等。
2. 资源管理
资源配额设置
为避免单个 Namespace 或用户占用过多资源,影响其他业务的正常运行,可以设置资源配额。例如,为default Namespace 设置 CPU 和内存的资源配额:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute - resources
namespace: default
spec:
hard:
requests.cpu: "10"
requests.memory: 10Gi
limits.cpu: "20"
limits.memory: 20Gi
资源使用情况查看
使用kubectl top命令可以实时查看 Pod 和节点的资源使用情况,如 CPU 和内存使用率:
$ kubectl top pods
NAME CPU(cores) MEMORY(bytes)
my - pod1 100m 200Mi
my - pod2 50m 100Mi
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node1 200m 10% 800Mi 40%
node2 150m 7% 600Mi 30%
二、Kubernetes 监控体系
1. 监控工具选择
Prometheus + Grafana
Prometheus 是一款开源的系统监控和报警工具,它通过拉取式的方式收集各种指标数据,并提供强大的查询语言和告警功能。Grafana 则是一款数据可视化工具,能够将 Prometheus 收集到的数据以直观的图表形式展示出来。具体的prometheus的详细介绍,可以参考小编的prometheus系列文章,里面有详细的讲解和部署!
部署 Prometheus 和 Grafana 时,可使用官方提供的 Helm Chart。首先,添加 Helm 仓库:
helm repo add prometheus - community https://prometheus - community.github.io/helm - charts
helm repo update
然后,安装 Prometheus 和 Grafana:
helm install prometheus prometheus - community/kube - prometheus - stack
2. 监控指标收集
节点指标
Prometheus 可以收集节点的各种指标,如 CPU 使用率、内存使用率、磁盘 I/O、网络流量等。这些指标通过在节点上运行的 Node Exporter 收集,Node Exporter 会暴露一个 HTTP 接口,Prometheus 通过该接口拉取指标数据。
Pod 指标
对于 Pod 的监控,通常使用 Kube - State - Metrics。Kube - State - Metrics 会从 Kubernetes API Server 获取各种资源对象的状态信息,如 Pod 的数量、副本数、运行状态等,并将这些信息转换为指标数据,供 Prometheus 收集。
3. 监控数据可视化
在 Grafana 中,可以创建各种仪表盘,将 Prometheus 收集到的监控数据以直观的图表形式展示出来。例如,创建一个节点资源使用情况的仪表盘,展示节点的 CPU 使用率、内存使用率、磁盘 I/O 等指标的变化趋势,方便运维人员及时发现资源瓶颈。
三、故障排查与处理
1. 日志查看
当 Pod 出现问题时,首先要查看 Pod 的日志,以定位问题。使用kubectl logs命令可以查看 Pod 中容器的日志:
kubectl logs <pod - name> [-c <container - name>]
若 Pod 已经终止,可以使用kubectl logs --previous <pod - name> [-c <container - name>]查看之前的日志。
2. 事件分析
Kubernetes 会记录集群中的各种事件,如 Pod 的创建、删除、调度失败等。通过kubectl get events命令,可以查看集群中的事件信息:
$ kubectl get events
LAST SEEN TYPE REASON OBJECT MESSAGE
5m Normal Scheduled pod/my - pod1 Successfully assigned default/my - pod1 to node1
3m Warning FailedMount pod/my - pod1 Unable to mount volumes for pod "my - pod1_default(xxxx)": timeout expired waiting for volumes to attach or mount...
分析事件信息有助于快速定位问题的原因。
3. 网络故障排查
网络故障是 Kubernetes 集群中常见的问题之一。可以使用kubectl exec命令进入 Pod 内部,使用 ping、traceroute 等工具排查网络问题。例如,进入my - pod1内部,ping 另一个 Pod 的 IP 地址:
kubectl exec -it my - pod1 -- ping <target - ip>
四、集群升级与备份
1. 集群升级
随着 Kubernetes 版本的不断更新,及时升级集群可以获得新功能和更好的性能,同时修复已知的安全漏洞。在升级前,要做好充分的准备工作,包括备份集群数据、测试升级过程等。
使用kubeadm进行集群升级时,首先在 Master 节点上执行kubeadm upgrade plan查看可用的升级版本,然后执行kubeadm upgrade apply进行升级。升级过程中,要密切关注集群状态,确保升级顺利完成。
2. 数据备份与恢复
Kubernetes 集群中的数据,如 etcd 中的配置信息、应用的持久化数据等,都需要进行定期备份。对于 etcd 数据,可以使用 etcd 官方提供的备份工具进行备份。对于应用的持久化数据,要根据具体的存储方案,选择合适的备份方法。
在需要恢复数据时,根据备份数据的类型和存储位置,使用相应的恢复工具进行恢复,确保集群能够快速恢复正常运行。