Kubernetes(K8s)是容器编排领域的标准平台,本教程将手把手教你从零搭建生产可用的多节点集群,覆盖单机实验、多节点部署、避坑指南及服务器选型建议,确保学完即用!
一、环境准备(所有节点)
1. 服务器最低配置
角色 | CPU | 内存 | 磁盘 | 网络 |
---|---|---|---|---|
控制平面(Master) | 2核+ | 4GB+ | 20GB+ | 千兆内网互通 |
工作节点(Worker) | 2核+ | 4GB+ | 50GB+ | 千兆内网互通 |
推荐生产配置:
- 控制平面:4核/8GB/100GB(SSD)
- 工作节点:根据业务负载动态扩展(建议 8核/16GB/200GB 起步)
2. 系统要求
- 操作系统:Ubuntu 22.04/CentOS 7+
- 禁用交换分区:
swapoff -a # 临时禁用 sed -i '/ swap / s/^/#/' /etc/fstab # 永久禁用
- 确保主机名唯一且可解析:
hostnamectl set-hostname master-node # 控制平面节点 hostnamectl set-hostname worker-node1 # 工作节点
二、单节点快速体验(Minikube)
1. 安装 Minikube(开发测试)
# Linux/macOS
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Windows
choco install minikube
2. 启动单节点集群
minikube start --driver=docker --cpus=2 --memory=4g
kubectl get nodes # 验证节点状态
三、多节点生产集群部署(kubeadm)
1. 所有节点:安装容器运行时和 K8s 组件
# 安装 containerd(推荐)
apt-get update && apt-get install -y containerd
containerd config default > /etc/containerd/config.toml
systemctl restart containerd
# 安装 kubeadm/kubelet/kubectl
apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | 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.29/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update && apt-get install -y kubelet kubeadm kubectl
2. 控制平面节点初始化
kubeadm init \
--apiserver-advertise-address=192.168.1.100 \ # 替换为 Master 节点 IP
--pod-network-cidr=10.244.0.0/16 \ # 匹配网络插件
--upload-certs \
--control-plane-endpoint=cluster-endpoint:6443 # 高可用需配置负载均衡器
# 成功后按提示执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 工作节点加入集群
在控制平面节点获取加入命令:
kubeadm token create --print-join-command
# 输出示例:kubeadm join 192.168.1.100:6443 --token xyz... --discovery-token-ca-cert-hash sha256:...
在工作节点执行上述命令:
kubeadm join 192.168.1.100:6443 --token ... --discovery-token-ca-cert-hash ...
4. 安装网络插件(Calico)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
kubectl get pods -n kube-system # 等待所有 Pod 变为 Running
四、必学核心操作
1. 部署第一个应用
kubectl create deployment nginx --image=nginx:latest
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx # 获取访问端口(如 30080)
curl http://节点IP:30080 # 验证访问
2. 配置文件管理
# 创建 ConfigMap
kubectl create configmap app-config --from-literal=LOG_LEVEL=debug
# 创建 Secret(Base64 编码)
echo -n 'admin' | base64 # 得到 YWRtaW4=
kubectl create secret generic db-secret --from-literal=password=YWRtaW4=
3. 持久化存储(PV/PVC)
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/storage
kubectl apply -f pv.yaml
kubectl get pv
五、避坑指南(生产必看)
1. 证书过期导致集群不可用
- 现象:
kubectl
报错certificate has expired
- 解决:
kubeadm alpha certs renew all # 更新证书
2. 节点 NotReady 状态
- 常见原因:
- 网络插件未正确安装
- 防火墙阻断 K8s 端口(需开放 6443、2379-2380、10250-10255)
- 容器运行时崩溃
3. 资源配额不足
- 现象:Pod 处于
Pending
状态 - 解决:
- 检查节点资源:
kubectl describe node
- 配置资源请求与限制:
resources: requests: memory: "512Mi" cpu: "500m" limits: memory: "1Gi" cpu: "1"
- 检查节点资源:
4. 镜像拉取失败
- 现象:
ErrImagePull
或ImagePullBackOff
- 解决:
- 配置镜像加速器(修改
/etc/containerd/config.toml
):[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io", "https://mirror.ccs.tencentyun.com"]
- 配置镜像加速器(修改
六、多节点高可用架构建议
1. 控制平面高可用
- 部署架构:
HAProxy/Nginx → Master1 (API Server) → Master2 → Master3
- 安装步骤:
- 使用
kubeadm init
时指定--control-plane-endpoint=负载均衡器IP:端口
- 其他 Master 节点执行
kubeadm join
并添加--control-plane
参数
- 使用
2. ETCD 集群配置
kubeadm init \
--config=kubeadm-config.yaml # 包含 etcd 集群配置
示例 kubeadm-config.yaml
:
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
etcd:
external:
endpoints:
- "https://etcd1:2379"
- "https://etcd2:2379"
- "https://etcd3:2379"
3. 工作节点扩展策略
- 自动伸缩:部署 Cluster Autoscaler 根据负载动态增减节点
- 污点与容忍:隔离专用节点(如 GPU 节点)
kubectl taint nodes gpu-node dedicated=gpu:NoSchedule
七、监控与日志方案
1. 核心监控组件
工具 | 用途 |
---|---|
Prometheus | 采集集群指标 |
Grafana | 可视化监控仪表盘 |
Loki | 日志聚合 |
2. 快速部署监控栈
# 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 添加仓库并安装
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack
八、总结
通过本教程,你已掌握:
✅ 单机与多节点集群搭建
✅ 核心资源对象操作(Pod/Service/ConfigMap/PV)
✅ 生产级避坑指南
✅ 高可用架构设计
下一步建议:
- 学习 Kubernetes 官方文档 深入理解架构
- 实践 Helm Charts 管理复杂应用
- 探索 Istio 服务网格 实现高级流量管理
立即动手部署你的第一个生产级 K8s 集群! 🚢