学习 Kubernetes 的第一步是拥有一个可用的集群。本文对比三种常见的搭建方式:Minikube(本地单节点)、kubeadm(生产级标准)、Kind(CI 友好),并分别给出实操步骤。无论你是初学者还是准备生产部署,都能找到合适的方案。最后重点演示 kubeadm 搭建一个多节点集群。
一、搭建方式对比

选择建议:
初学者:Minikube 最友好。
想模拟生产环境:kubeadm 在虚拟机或云服务器上搭建。
CI/CD 集成或快速测试:Kind。
二、Minikube 安装与使用
2.1 安装 Minikube(以 Linux 为例)
bash
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
2.2 启动集群
bash
minikube start --driver=docker # 或 virtualbox、kvm2 等
首次启动会自动下载镜像并创建虚拟机(或容器)。
2.3 验证
bash
minikube status
kubectl get nodes
2.4 常用功能
开启 Dashboard:minikube dashboard
启用 Ingress:minikube addons enable ingress
停止集群:minikube stop
删除集群:minikube delete
三、Kind 安装与使用
3.1 安装 Kind
bash
# Linux
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
3.2 创建多节点集群
创建配置文件 kind-config.yaml:
yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
启动:
bash
kind create cluster --config kind-config.yaml
3.3 验证
bash
kubectl cluster-info --context kind-kind
kubectl get nodes
3.4 删除集群
bash
kind delete cluster
四、kubeadm 生产级集群搭建
本节以 Ubuntu 22.04 为例,搭建一个 Master 节点 + 两个 Worker 节点的集群。
4.1 前置准备(所有节点)
确保各节点之间网络互通,并且可以访问外网(拉取镜像)。
安装 containerd(推荐)或 Docker。本文使用 containerd。
bash
# 安装 containerd
sudo apt update
sudo apt install -y containerd
# 生成默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 修改 cgroup 驱动为 systemd(K8s 推荐)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
安装 kubeadm、kubelet、kubectl:
bash
# 添加 K8s 官方 GPG 密钥和仓库
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.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 apt-mark hold kubelet kubeadm kubectl # 防止自动升级
关闭 swap(kubelet 要求):
bash
sudo swapoff -a
# 永久关闭:注释 /etc/fstab 中的 swap 行
启用内核模块并调整 sysctl:
bash
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
4.2 初始化 Master 节点
在 master 节点上:
bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # 使用 Flannel 的默认 CIDR
初始化成功后,输出类似:
text
Your Kubernetes control-plane has been initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id−u):(id -u):(id−u):(id -g) $HOME/.kube/config
You can now join any number of worker nodes by running the following on each as root:
kubeadm join 10.0.0.1:6443 --token xxxxx --discovery-token-ca-cert-hash sha256:xxxxx
执行上述命令配置 kubectl:
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.3 安装网络插件(CNI)
集群尚未 ready,需要安装网络插件。以 Flannel 为例:
bash
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
等待 Pod 运行:
bash
kubectl get pods -n kube-flannel -w
4.4 添加 Worker 节点
在 worker 节点上执行 master 初始化时输出的 kubeadm join 命令。
如果没有记下 token,可以在 master 上重新生成:
bash
kubeadm token create --print-join-command
4.5 验证集群
bash
kubectl get nodes
所有节点应处于 Ready 状态。
五、集群基础测试
部署一个 Nginx Pod 并暴露 Service:
bash
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
访问:curl http://<任意节点IP>:,应看到 Nginx 欢迎页。
六、清理集群
删除 Pod/Deployment:kubectl delete deployment nginx
若使用 kubeadm 重置节点:sudo kubeadm reset
删除 Minikube:minikube delete
删除 Kind:kind delete cluster
七、小结
本文介绍了三种主流的 K8s 集群搭建方式,并重点演练了 kubeadm 搭建生产级集群的完整步骤。无论你选择哪种方式,现在都已经拥有了一个可用的 Kubernetes 环境。下一篇文章将带你熟悉 kubectl 命令,开始管理你的第一个容器。