Kubernetes集群部署方式

Kubernetes集群部署方式:从手动搭建到云原生托管

在Kubernetes(K8s)生态中,集群部署是开发者与运维团队面临的首要挑战。不同的部署方式对应不同的场景需求,从本地开发到大规模生产环境,选择合适的方法能显著提升效率和稳定性。本文将全面解析主流的Kubernetes集群部署方案,涵盖其核心原理、适用场景及实践建议。


一、手动部署:深度理解K8s架构的必经之路(此处一概而过,有机会更新一份完整的二进制安装k8s)

核心流程

  1. 基础设施准备
    • 物理机/虚拟机:至少3台节点(1 Master + 2 Worker)
    • 操作系统:CentOS 7+/Ubuntu 20.04+,禁用Swap分区
  2. 依赖组件安装
    • 容器运行时(Docker、containerd、CRI-O)
    • kubeadmkubeletkubectl二进制包
  3. 控制平面初始化
    # 手动启动etcd集群(示例)
    etcd --name master1 --data-dir /var/lib/etcd \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://<MASTER_IP>:2379
    
    # 启动API Server
    kube-apiserver --etcd-servers=http://<ETCD_IP>:2379 \
      --service-cluster-ip-range=10.96.0.0/12 \
      --bind-address=0.0.0.0
    
  4. 节点加入集群
    通过kubeadm token create生成令牌,Worker节点执行kubeadm join

适用场景

  • Kubernetes架构学习与原理验证
  • 定制化需求极高的特殊环境(如安全隔离的内网)

挑战与风险

  • 版本兼容性管理复杂
  • 证书轮换、高可用配置需完全手动实现

二、kubeadm:官方推荐的生产级部署工具

核心优势

  • 一键初始化:自动生成CA证书、配置控制平面组件
  • 高可用支持:通过--control-plane-endpoint集成负载均衡器
  • 版本一致性:确保各节点组件版本匹配

典型部署流程

# Master节点初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 \
  --control-plane-endpoint "LOAD_BALANCER_DNS:6443" \
  --upload-certs

# Worker节点加入
kubeadm join LOAD_BALANCER_DNS:6443 --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

# 安装CNI插件(如Calico)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

高可用架构

  • 负载均衡器:前置HAProxy/Nginx,分发API Server流量
  • 多Master节点:通过kubeadm join --control-plane扩展控制平面

生产建议

  • 使用kubeadm upgrade进行版本升级
  • 定期备份/etc/kubernetes/pki目录下的证书文件

三、第三方自动化工具对比

工具 核心特点 适用场景
Kubespray 基于Ansible,支持多云环境 混合云/裸金属部署
RKE 容器化安装,内置etcd和网络插件 快速搭建生产集群
Kops 深度集成AWS(支持GCP、OpenStack) 云原生环境自动化管理

Kubespray实战示例

# 克隆仓库
git clone https://github.com/kubernetes-sigs/kubespray.git

# 配置清单
cp -r inventory/sample inventory/mycluster
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

# 启动部署
ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v

四、托管云服务:聚焦业务而非基础设施

主流服务对比

服务商 产品 核心优势 定价模型
GCP GKE 原生集成Google云服务,自动扩缩容 按节点+控制平面收费
AWS EKS 深度整合IAM、ALB,支持Fargate无服务器节点 按集群小时数计费
Azure AKS 无缝对接Active Directory,Windows容器支持 仅节点资源收费

最佳实践

  • EKS集群创建(AWS CLI)
    eksctl create cluster --name prod-cluster \
      --region us-west-2 \
      --nodegroup-name linux-nodes \
      --node-type t3.medium \
      --nodes 3
    
  • GKE自动修复配置
    gcloud container clusters create autohealing-demo \
      --enable-autorepair \
      --maintenance-window "07:00-08:00"
    

五、轻量级部署方案:开发与边缘计算首选

工具 资源占用 核心特性
Minikube 单节点 支持多驱动(Docker、VMware),插件市场
MicroK8s 低至512MB RAM 全功能集群,内置GPU支持,自动更新
Kind 基于Docker容器 多节点模拟,CI/CD集成

MicroK8s边缘计算示例

# 在Raspberry Pi上安装
sudo snap install microk8s --classic

# 启用常用模块
microk8s enable dns ingress storage

# 部署应用
microk8s kubectl create deployment nginx --image=nginx

六、部署方式选择决策树

graph TD A[需求场景] --> B{生产环境?} B -->|Yes| C{是否在公有云?} C -->|Yes| D[使用托管服务GKE/EKS/AKS] C -->|No| E[使用kubeadm或Kubespray] B -->|No| F{开发测试?} F -->|Yes| G[Minikube/MicroK8s/Kind] F -->|No| H[边缘/IoT场景?] H -->|Yes| I[MicroK8s/K3s] H -->|No| J[第三方工具如RKE]

七、总结与趋势展望

  • 学习路径建议:从Minikube入门,逐步过渡到kubeadm,最终掌握云服务集成。
  • 新兴趋势
    • GitOps部署:结合Argo CD实现声明式集群管理
    • Serverless K8s:如AWS Fargate、Azure Container Instances
    • 边缘优化:K3s、kubeEdge等轻量化方案崛起

扩展阅读

选择适合的部署方式,如同为Kubernetes旅程选择正确的交通工具——无论是自行车(Minikube)还是超音速飞机(托管云服务),关键在于与目标场景完美契合。

posted on 2025-02-02 19:56  Leo-Yide  阅读(638)  评论(0)    收藏  举报