在 Ubuntu 上实现 Kubernetes 自动化运维
一、总体架构与工具选型
- 基础设施即代码与集群生命周期:用 Ansible 批量初始化节点、安装 containerd/kubeadm/kubelet,或用 Kubespray(基于 Ansible)部署高可用集群,统一版本与配置,便于重复搭建与扩缩容。
- 应用交付与 GitOps:用 Helm 管理应用包与版本;用 ArgoCD 实现 GitOps,配置即代码、自动同步、回滚与审计。
- 可观测性:部署 Metrics Server 提供 HPA 指标;用 Prometheus + Grafana 做指标监控与可视化;用 EFK/ELK 做集中日志采集与分析。
- CI/CD:在 Jenkins 中构建镜像、推送到镜像仓库,并通过插件或 ArgoCD 将应用自动部署到集群,实现从代码提交到上线的自动化流水线。
二、快速落地步骤
- 环境准备(Ubuntu 22.04/24.04)
- 关闭交换分区并持久化:
sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab
- 安装容器运行时 containerd 并启用:
sudo apt install -y containerd && sudo systemctl enable --now containerd
- 安装 kubeadm/kubelet/kubectl(指定稳定版本,如 1.28.x),并
sudo systemctl enable kubelet
- 集群初始化与网络
- 主节点初始化:
sudo kubeadm init --pod-network-cidr=**192.168.0.0/16** --apiserver-advertise-address=<主节点IP>
- 配置 kubectl:
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件(如 Calico):
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
- 工作节点加入:
sudo kubeadm join <主节点IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
- 应用交付与扩缩容
- 用 Helm 安装常用应用(如 Nginx):
helm repo add bitnami https://charts.bitnami.com/bitnami && helm install my-nginx bitnami/nginx
- 配置 HPA(需先部署 Metrics Server):
kubectl autoscale deployment my-nginx --cpu-percent=50 --min=2 --max=10
- 监控与日志
- 部署 Prometheus + Grafana(可用 kube-prometheus 清单一键部署),在 Grafana 导入 Kubernetes/Node/ Pod 等官方仪表盘
- 部署 EFK(Elasticsearch/Fluentd/Kibana)或 ELK,收集容器与节点日志,便于检索与告警。
三、自动化与 GitOps 流水线
- Git 仓库结构建议
infra/:Ansible/Kubespray、kubeadm 配置、网络插件清单
apps/:按业务划分目录,含 Helm 或 Kustomize 模板
argocd/:ArgoCD Application/AppProject 清单
- ArgoCD 落地
- 在集群安装 ArgoCD;在 Git 中定义 Application(指向
apps/<svc>/ 与目标 namespace),ArgoCD 自动同步、展示状态、支持回滚
- Jenkins 流水线示例(关键片段)
- 构建与推送:
docker build -t <repo>/myapp:$BUILD_ID . && docker push <repo>/myapp:$BUILD_ID
- 部署到集群:使用 ArgoCD 同步(推荐)或在 Jenkins 中
kubectl set image deployment/myapp myapp=<repo>/myapp:$BUILD_ID -n <ns>
- 质量门禁:单测/镜像扫描/安全基线,失败则阻断上线。
四、生产级最佳实践
- 高可用与控制平面:多 master + vIP/负载均衡,对外暴露 apiserver 地址,定期演练故障切换
- 安全加固:启用 RBAC 最小权限、镜像仓库与镜像签名校验、Pod Security Admission/OPA Gatekeeper、网络策略(如 Calico 策略)、Secret 使用 SealedSecret/SOPS
- 存储与备份:为 StatefulSet 配置 PV/PVC 与备份策略;定期备份 etcd(快照与恢复演练),确保可恢复性
- 升级与变更:遵循 kubeadm 升级流程,先在测试环境验证;变更走 GitOps 审批与审计链路,回滚可用 ArgoCD 一键回退
- 可观测性:为关键业务设置 SLO/告警规则,日志保留与冷热分层,指标长期存储与容量规划。
五、常见问题快速排查
- Pod 处于 Pending:检查节点资源、污点与容忍、持久卷、调度约束;
kubectl describe pod <pod> -n <ns> 与 kubectl get events -A
- 服务无法访问:核对 Service/Endpoints、NodePort/Ingress 配置与防火墙;
kubectl get svc,ep <svc> -n <ns>;从集群内外分别 curl 验证
- 节点 NotReady:查看 kubelet 与容器运行时状态、网络插件 Pod 是否就绪、节点资源与系统内核参数。