如何在 Ubuntu 上实现 Kubernetes 自动化运维
导读:在 Ubuntu 上实现 Kubernetes 自动化运维 一、总体架构与工具选型 基础设施即代码与集群生命周期:用 Ansible 批量初始化节点、安装 containerd/kubeadm/kubelet,或用 Kubespray(基...
在 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
- 用 Helm 安装常用应用(如 Nginx):
- 监控与日志
- 部署 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 自动同步、展示状态、支持回滚
- 在集群安装 ArgoCD;在 Git 中定义 Application(指向
- 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 是否就绪、节点资源与系统内核参数。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在 Ubuntu 上实现 Kubernetes 自动化运维
本文地址: https://pptw.com/jishu/751118.html
