Kubernetes集群部署与故障排查指南

一、集群部署核心步骤

1. 前置条件检查

  • 节点要求:所有节点需满足 $$ \text{CPU} \geq 2\text{核}, \quad \text{内存} \geq 2\text{GB}, \quad \text{磁盘} \geq 20\text{GB} $$
  • 系统配置:
    # 关闭Swap
    swapoff -a
    sed -i '/swap/s/^/#/' /etc/fstab
    
    # 设置内核参数
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    

2. 控制平面部署

kubeadm init --pod-network-cidr=10.244.0.0/16 \
             --apiserver-advertise-address=<MASTER_IP>

3. 网络插件配置(Calico示例)

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

4. 工作节点加入

kubeadm join <MASTER_IP>:6443 --token <TOKEN> \
          --discovery-token-ca-cert-hash sha256:<HASH>


二、故障排查工具箱

1. 资源状态检查

# 查看集群健康状态
kubectl get componentstatuses

# 节点资源监控
kubectl top nodes

2. Pod故障诊断

# 查看Pod事件(关键)
kubectl describe pod <pod-name> -n <namespace>

# 实时日志追踪
kubectl logs -f <pod-name> --tail=100

3. 网络连通性测试

# 创建诊断容器
kubectl run debug-tool --image=busybox:1.28 --rm -it --restart=Never -- sh

# 容器内执行
ping <service-ip>
nslookup <service-name>
telnet <service-ip> <port>

4. 证书过期处理

# 检查证书有效期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -enddate

# 自动更新证书
kubeadm alpha certs renew all


三、常见故障场景处理
故障现象排查命令解决方案
Pod卡在Pending状态kubectl describe pod <name>检查资源配额/节点污点
Service无法访问kubectl get endpoints验证Endpoint与Label匹配
DNS解析失败kubectl exec -it dnsutils -- nslookup kubernetes.default重启CoreDNS Pod
节点NotReadyjournalctl -u kubelet -f检查kubelet日志/证书更新

四、运维最佳实践
  1. 集群监控

    • 部署Prometheus+Grafana监控体系
    • 设置关键指标告警:节点内存使用率 $> 85%$,Pod重启次数 $> 5/\text{小时}$
  2. 灾难恢复

    # 定期备份etcd
    ETCDCTL_API=3 etcdctl snapshot save 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
    

  3. 安全加固

    • 启用RBAC:$ \text{最小权限原则} $
    • 定期扫描镜像漏洞
    • 配置NetworkPolicy网络隔离

关键提示:当遇到无法定位的故障时,使用 kubectl get events --sort-by=.metadata.creationTimestamp -A 按时间序列查看集群事件,往往能发现隐藏的错误线索。对于复杂网络问题,建议结合tcpdump抓包分析:tcpdump -i <interface> -nn port <port>

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐