Kubernetes教程:13步构建集群 [2026](2026-07-18)
你还在为搭建Kubernetes集群而头疼?面对几十个YAML文件、复杂的网络插件的选择,以及令人抓狂的证书配置,许多新手往往会半途而废。但今天,我们直接用 13个步骤,从零开始,让你拥有一套可用的生产级别集群(哪怕只有一台虚拟机)。本文将带领你走完从环境准备到应用部署的全过程,所有命令都已为你整理好。
1. 准备工作:硬件与前置条件
在开始之前,请确保你拥有 1台Linux服务器(Ubuntu 22.04 LTS 或 CentOS 7.9 以上皆可,建议2核4GB内存,20GB磁盘)。本教程将以 单机All-In-One 模式演示,但所有步骤完全适用于多节点集群。
关键数据: 根据CNCF 2025年调查报告,超过78%的企业集群节点数小于10台,单机集群是学习与测试的最佳起点。
实用建议: 如果你使用的是云服务器,请关闭防火墙(或放行6443、2379、10250端口),并确保能访问外网的Docker Hub镜像仓库。
2. 13步构建集群 (核心步骤)
第一步:设置主机名与Hosts映射
sudo hostnamectl set-hostname k8s-master
echo "127.0.0.1 k8s-master" | sudo tee -a /etc/hosts
这一步很重要,Kubernetes需要稳定的节点标识。
第二步:安装容器运行时(Containerd)
# 安装Docker(作为Containerd的依赖)
curl -fsSL https://get.docker.com | sudo sh
# 启动并设置开机自启
sudo systemctl enable --now docker
案例: 某电商平台曾因使用旧版Docker导致Pod频繁重启,务必使用Docker 24.0+。
第三步:关闭Swap并配置内核参数
Kubernetes要求关闭Swap,否则kubelet无法启动。
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo modprobe br_netfilter
echo 'net.bridge.bridge-nf-call-iptables=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
第四步:安装kubeadm、kubelet与kubectl
# 添加Kubernetes仓库 (以Ubuntu为例)
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00
sudo apt-mark hold kubelet kubeadm kubectl
锁定版本能避免因版本不兼容导致集群崩溃。
第五步:初始化控制平面(Master)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
命令中的--apiserver-advertise-address请替换为你服务器的内网IP地址。
第六步:配置kubectl命令行工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
第七步:安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待约30秒后,检查CoreDNS状态。
第八步:检查节点状态
kubectl get nodes
输出应该显示Ready状态,如果一直NotReady,排查Flannel或防火墙。
第九步:移除Master节点上的污点(可选,单机必须)
kubectl taint nodes --all node-role.kubernetes.io/master-
这句命令允许普通Pod调度到Master节点,单机集群必备。
第十步:验证集群功能
kubectl run nginx --image=nginx --port=80
kubectl get pods -w
当Pod状态变为Running时,集群搭建成功!此时执行kubectl expose命令即可对外暴露服务。
第十一步:创建Deployment示例
# nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25-alpine
ports:
- containerPort: 80
应用该配置:kubectl apply -f nginx-deploy.yaml
第十二步:暴露服务为NodePort
kubectl expose deployment nginx-deployment --type=NodePort --port=80
kubectl get svc
你会得到一个高随机端口(如32567),通过http://你的公网IP:32567即可访问。
第十三步:测试并清理
访问你的Nginx Pod,看到Welcome页面后,恭喜你,集群已完全可用!最后可清理测试资源:
kubectl delete deployment nginx-deployment
kubectl delete svc nginx-deployment
3. 常见问题与调试技巧
问题一:Pod一直Pending / CrashLoopBackOff
- 原因: 通常是镜像拉取失败或资源不足。
- 解决方法:
检查日志:kubectl describe pod <pod-name>
检查节点资源:kubectl top nodes
问题二:CoreDNS无法启动
- 原因: 网络插件未安装或冲突。
- 解决方法:
重新应用Flannel,等待30秒后检查:kubectl get pods -n kube-system | grep dns
实用建议: 如需快速重置集群,执行
sudo kubeadm reset然后rm -rf $HOME/.kube。
4. 行动号召
现在,该你动手了!
根据这13步,在你的服务器上跑一遍,你将拥有一套完整的Kubernetes集群。如果卡在任意一步,可以在评论区发送错误日志,我会以最快速度帮你排查。
另外,强烈建议你将昨晚的教程 收藏或转发 给正在学K8s的朋友。从入门到“生产可用”,有时候只差这13步。
⚠️ 免责声明
本文提供的脚本和命令仅供学习和测试环境使用。若用于生产环境,请务必结合安全加固、高可用配置及监控方案(如Prometheus)。作者不对因直接套用本文配置导致的任何服务中断或数据丢失承担责任。请始终在理解每一步含义的前提下进行操作。