第二篇:《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 命令,开始管理你的第一个容器。

相关推荐
jingqiulyue2 小时前
docker run出现exited或者不断restart怎么办
docker·容器
小哈里2 小时前
【K8S】OCI标准下的企业级镜像治理:Harbor+Skopeo+Trivy 最佳实践
云原生·容器·kubernetes·harbor·镜像·skopen
花间相见2 小时前
【Kubernetes02】—— 使用 kubeadm 从零搭建 K8s 集群(实操避坑版)
云原生·容器·kubernetes
人工智能培训2 小时前
从GPT到开源大模型
人工智能·gpt·深度学习·机器学习·容器·知识图谱
张小凡vip3 小时前
Kubernetes--secret的简介和使用
云原生·容器·kubernetes
IT策士3 小时前
Docker 常见面试问题
docker·容器·面试
预测模型的开发与应用研究3 小时前
双Docker Oracle XE 跨库查询操作文档
docker·oracle·容器
逻极3 小时前
Docker容器化实战:从镜像构建到微服务编排与避坑指南
docker·容器·镜像·devops
张忠琳4 小时前
【client-go v0.36.1】(Reflector Part 3) Reflector 超深度分析 — watchList 流式初始化
云原生·kubernetes·informer·client-go·reflector