4、Kubernetes集群搭建:Minikube本地集群、kubeadm生产级集群、云托管集群(EKS/AKS/GKE)
聊到Kubernetes集群搭建,我见过不少新手一上来就奔着生产环境去,结果被etcd证书搞到崩溃。其实吧,搭建K8s集群这件事,得看你的场景——本地开发、生产自建、还是上云托管,路子完全不同。我个人习惯把这三种方式都摸一遍,才能真正理解K8s的架构。
4.1 Minikube:本地开发的首选
Minikube是我最常用的本地调试工具。说白了,它就是在你笔记本上跑一个单节点的K8s集群。你想想看,要是每次改个YAML都得往远程集群提交,那开发效率得多低?
安装Minikube,其实就三步:
# 1. 安装Minikube二进制
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 2. 启动集群(指定驱动)
minikube start --driver=docker --cpus=4 --memory=8192
# 3. 验证集群
kubectl get nodes
我的小技巧: 启动时加上
--cpus=4 --memory=8192,否则跑个稍大的应用就卡死了。我曾经在2核4G的配置上跑Istio,结果笔记本风扇狂转,最后直接OOM。
Minikube的常用操作:
minikube status— 查看集群状态minikube dashboard— 打开Web UI,我经常用它来快速查看Pod状态minikube addons enable ingress— 开启Ingress控制器,本地测试域名访问很方便minikube stop/minikube delete— 停止或销毁集群
注意: Minikube默认使用VirtualBox驱动,但如果你装了Docker Desktop,建议用
--driver=docker,性能更好。我遇到过VirtualBox和WSL2冲突的情况,折腾了半天。
4.2 kubeadm:生产级集群的基石
说到生产环境,kubeadm是官方推荐的集群搭建工具。它不像Minikube那样一键搞定,但给了你最大的灵活性。我记得第一次用kubeadm搭三节点集群时,光是etcd的证书就研究了半天。
前置条件:
- 三台Ubuntu 20.04+ 服务器(2C4G以上)
- 关闭swap(
sudo swapoff -a) - 安装Docker或containerd作为容器运行时
- 确保节点间网络互通
搭建步骤(我简化了关键部分):
# 在所有节点上执行
# 1. 安装kubeadm、kubelet、kubectl
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 2. 初始化控制平面(仅在master节点)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 3. 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 4. 安装网络插件(以Flannel为例)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 5. 加入工作节点(在worker节点执行)
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
关键点:
--pod-network-cidr必须和网络插件匹配,Flannel用10.244.0.0/16,Calico用192.168.0.0/16- token有效期24小时,过期后可以用
kubeadm token create重新生成 - 我建议用containerd替代Docker,性能更好,而且K8s 1.24+已经弃用Docker作为运行时
我曾经踩过的坑: 有一次我忘了关闭swap,结果kubelet一直报错无法启动。还有一次网络插件装错了版本,导致CoreDNS一直处于Pending状态。嗯,这些细节真的不能省。
4.3 云托管集群:EKS / AKS / GKE
说实话,如果公司预算允许,我强烈建议用云托管集群。你想想看,自己维护etcd、控制平面、证书轮换,这些活有多累?云厂商帮你搞定了,你只管用。
| 云服务 | 特点 | 适合场景 |
|---|---|---|
| AWS EKS | 原生K8s,与AWS服务集成好(ALB、IAM、VPC) | 已经在用AWS的企业 |
| Azure AKS | 与Azure AD集成,支持Windows容器 | 微软技术栈为主的团队 |
| Google GKE | 自动升级、自动修复,网络性能好 | 对K8s版本更新敏感的项目 |
以EKS为例,快速创建一个集群:
# 1. 安装eksctl(EKS的命令行工具)
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
# 2. 创建集群(约15分钟)
eksctl create cluster \
--name my-cluster \
--region us-west-2 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 5
# 3. 配置kubectl
aws eks update-kubeconfig --region us-west-2 --name my-cluster
# 4. 验证
kubectl get nodes
我的经验:
- EKS的控制平面是免费的,你只需要付工作节点的EC2费用
- GKE的自动升级功能很香,我有个集群跑了两年没手动升级过
- AKS支持虚拟节点(Virtual Kubelet),可以快速扩缩容,适合突发流量场景
4.4 三种方式的对比与选择
你可能会问:到底该选哪种?我个人的建议是这样的:
- 本地开发/学习: 用Minikube,轻量、快速、好上手
- 生产环境自建: 用kubeadm,灵活可控,适合有运维团队的公司
- 生产环境上云: 用EKS/AKS/GKE,省心省力,适合快速迭代的业务
避坑指南:
- 我曾经在生产环境用kubeadm搭集群,结果etcd磁盘IOPS不够,导致集群不稳定。后来加了SSD才解决。
- 云托管集群虽然方便,但要注意VPC网络规划。我见过有人把EKS集群和数据库放在不同子网,结果延迟高得离谱。
- Minikube不要用于生产,它没有高可用能力,etcd挂了整个集群就废了。
好了,Kubernetes集群搭建这块就聊到这儿。下一章我们会深入集群内部的网络和存储配置,到时候再细聊。记住一句话:没有最好的集群方案,只有最适合你的方案。