一、核心概念与部署模式选择

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配置合理
六、安全加固最佳实践
  1. API Server安全
    • 启用RBAC严格权限控制
    • 限制非必要端口访问
    • 开启审计日志(--audit-log-path
  2. Pod安全策略
    • 使用PodSecurityPolicyPodSecurity admission controller
    • 设置securityContext限制容器权限
  3. 镜像安全
    • 使用私有镜像仓库并配置镜像扫描(Trivy、Clair)
    • 启用镜像签名验证(cosign)
七、常见问题解决
  1. 节点NotReady状态
    • 检查kubelet日志:journalctl -u kubelet
    • 确认容器运行时状态:systemctl status containerd
  2. CoreDNS Pod Pending
    • 检查网络插件是否部署成功
    • 验证CNI插件配置:ls /etc/cni/net.d/
  3. 证书过期问题
    • 使用openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout检查有效期
    • 提前90天执行证书续期操作
八、进阶部署方案
  • 离线部署:使用Harbor搭建本地镜像仓库,通过镜像包离线安装
  • 多集群管理:KubeFed或Cluster API实现跨集群资源调度
  • 边缘计算:K3s配合k3sup工具实现快速边缘节点部署

结语
Kubernetes集群部署是容器化应用落地的第一步,掌握多种部署方式、理解高可用架构原理、熟悉运维排障技巧,是成为合格集群管理员的必经之路。随着Kubernetes生态的不断发展,建议定期关注官方更新日志及社区最佳实践,保持集群安全稳定运行。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐