第二篇:《K8s 集群搭建:Minikube、kubeadm、Kind 对比与实操》

学习 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 命令,开始管理你的第一个容器。

相关推荐
运维开发故事2 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生4 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭4 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美5 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康9 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
2601_9618752412 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj12 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes