Kubernetes集群安装部署全攻略:从本地到云端的实践指南
·
一、核心概念与部署模式选择
Kubernetes(K8S)作为容器编排领域的标准,其部署模式需根据场景选择:
- 本地开发:Minikube(单节点)、Kind(Kubernetes in Docker)
- 生产环境:
- 自托管:kubeadm(官方工具,支持高可用)、kops(AWS专用)
- 云托管:EKS(AWS)、AKS(Azure)、GKE(GCP)、阿里云ACK
- 轻量级方案:K3s(边缘计算场景,资源占用低)
二、kubeadm部署实战(以Ubuntu 22.04为例)
1. 环境准备
- 节点规划:1主节点+2工作节点(推荐至少3节点集群)
- 系统要求:2核CPU/4GB内存/20GB磁盘(每节点)
- 网络配置:关闭防火墙或开放端口(6443/kube-apiserver, 2379-2380/etcd等)
2. 安装前置组件
bash
# 所有节点执行
sudo apt update
sudo apt install -y containerd curl gnupg2
# 配置containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
3. 安装Kubernetes组件
bash
# 添加GPG密钥
sudo curl -s https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
# 添加仓库
echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装组件
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
4. 初始化主节点
bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.28.0
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5. 部署网络插件(Calico)
bash
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
6. 加入工作节点
bash
# 在工作节点执行
sudo kubeadm join 192.168.1.10:6443 --token abcdef.1234567890 --discovery-token-ca-cert-hash sha256:...
三、高可用集群部署要点
1. 堆叠控制平面(推荐)
- 使用kubeadm初始化时添加
--control-plane-endpoint参数 - 配置外部负载均衡器(如HAProxy)
- 使用
kubeadm init phase upload-config all预先上传配置
2. 证书管理
- 使用
kubeadm certs renew定期更新证书 - 备份证书路径:
/etc/kubernetes/pki
四、云厂商托管方案对比
| 方案 | 优势 | 注意事项 |
|---|---|---|
| EKS | 深度集成AWS服务 | 成本较高,需熟悉IAM配置 |
| AKS | 与Azure监控无缝对接 | Windows节点需额外配置 |
| GKE | 自动修复节点 | 需注意区域限制 |
| 阿里云ACK | 国产化支持,网络方案丰富 | 需适配专有网络VPC配置 |
五、部署后验证与运维
1. 集群状态检查
bash
kubectl get nodes
kubectl get pods -n kube-system
kubectl cluster-info dump
2. 核心运维命令
bash
# 节点标签管理
kubectl label nodes worker-1 node-role.kubernetes.io/worker=
# 集群诊断
kubectl cluster-info dump | grep -i error
kubectl describe pod -n kube-system coredns-...
3. 升级策略
- 使用
kubeadm upgrade plan查看可用版本 - 按顺序升级:kubeadm → 控制平面 → kubelet → 工作节点
- 滚动升级期间需确保Pod Disruption Budget配置合理
六、安全加固最佳实践
- API Server安全
- 启用RBAC严格权限控制
- 限制非必要端口访问
- 开启审计日志(
--audit-log-path)
- Pod安全策略
- 使用
PodSecurityPolicy或PodSecurityadmission controller - 设置
securityContext限制容器权限
- 使用
- 镜像安全
- 使用私有镜像仓库并配置镜像扫描(Trivy、Clair)
- 启用镜像签名验证(cosign)
七、常见问题解决
- 节点NotReady状态
- 检查kubelet日志:
journalctl -u kubelet - 确认容器运行时状态:
systemctl status containerd
- 检查kubelet日志:
- CoreDNS Pod Pending
- 检查网络插件是否部署成功
- 验证CNI插件配置:
ls /etc/cni/net.d/
- 证书过期问题
- 使用
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout检查有效期 - 提前90天执行证书续期操作
- 使用
八、进阶部署方案
- 离线部署:使用Harbor搭建本地镜像仓库,通过镜像包离线安装
- 多集群管理:KubeFed或Cluster API实现跨集群资源调度
- 边缘计算:K3s配合k3sup工具实现快速边缘节点部署
结语
Kubernetes集群部署是容器化应用落地的第一步,掌握多种部署方式、理解高可用架构原理、熟悉运维排障技巧,是成为合格集群管理员的必经之路。随着Kubernetes生态的不断发展,建议定期关注官方更新日志及社区最佳实践,保持集群安全稳定运行。
更多推荐


所有评论(0)