推荐工具:kubeadm
它是 Kubernetes 官方发布的部署工具,社区支持最好,文档最全,流程清晰可控。适合单节点 CentOS 7 的环境。
部署前提(环境)
-
一台 CentOS 7.x 服务器
-
已安装 Docker
-
可 root 权限操作
单节点 Kubernetes 集群部署文档(基于 kubeadm)
如果有残留!
第 1 步:彻底清理旧环境
避免与之前 kubeasz 的残留冲突。
# 1. 重置任何已有的 kubeadm 安装
kubeadm reset -f
# 2. 清理相关文件
rm -rf $HOME/.kube
rm -rf /etc/cni/net.d
# 3. 清理 iptables 规则
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
# 4. 重启 Docker(确保干净的网络环境)
systemctl restart docker
第 2 步:安装必备组件
# 1. 配置 Kubernetes 的 yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
# 2. 安装 kubeadm、kubelet、kubectl(指定与您需求匹配的版本 >1.24)
# 这里安装 1.28.x 稳定版(1.24之后的版本,且社区支持成熟)
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes
# 3. 设置 kubelet 开机自启(先不启动,等 kubeadm init 后再启动)
systemctl enable kubelet
第 3 步:配置容器运行时
Kubernetes 1.24+ 已移除对 Docker 的直接支持,需要安装 cri-dockerd 或使用 containerd 。这里选择更稳定的 containerd。
# 1. 安装 containerd
yum install -y containerd.io
# 2. 生成默认配置
containerd config default > /etc/containerd/config.toml
# 3. 将配置中的 sandbox 镜像替换为国内可访问的地址
sed -i 's|registry.k8s.io/pause|registry.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml
# 4. 将 cri 插件中的 systemd_cgroup 设置为 true(对于使用 systemd 的系统很重要)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# 5. 启动并设置开机自启
systemctl restart containerd
systemctl enable containerd
这里我遇到了问题:
CentOS 7 的默认仓库中没有 containerd.io包。这需要从 Docker 官方仓库安装。
使用阿里云镜像的 Docker 仓库,然后再配置。
# 1. 卸载旧版本 Docker(如果已安装且不需要保留)
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3. 添加阿里云 Docker CE 仓库(国内镜像,速度快)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4. 安装 containerd
yum install -y containerd.io
# 5. 配置 containerd
containerd config default > /etc/containerd/config.toml
# 6. 替换 sandbox 镜像为国内源
sed -i 's|registry.k8s.io/pause|registry.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml
# 7. 启用 systemd cgroup 驱动
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# 8. 启动并设置开机自启
systemctl start containerd
systemctl enable containerd
安装后验证
# 检查 containerd 版本
containerd --version
# 检查服务状态
systemctl status containerd
# 检查 containerd 运行时是否正常
ctr version
第 4 步:初始化前系统检查
确保环境干净并符合要求
# 1. 关闭并禁用防火墙(避免端口冲突)
systemctl stop firewalld && systemctl disable firewalld
# 2. 关闭 SELinux(简化权限问题)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 3. 关闭 swap(Kubernetes 要求)
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
# 4. 配置网络转发和桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat <<EOF | 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
sysctl --system
第 5 步:初始化单节点控制平面
安装好 containerd 后,使用以下命令将当前节点初始化为 Kubernetes 控制平面(Master)
# 获取本机内网 IP(用于 API Server 通告地址)
NODE_IP=$(hostname -I | awk '{print $1}')
# 初始化命令(重要:所有参数请勿随意更改)
kubeadm init \
--apiserver-advertise-address=$NODE_IP \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.0 \
--cri-socket=unix:///run/containerd/containerd.sock \
--ignore-preflight-errors=all # 忽略所有预检错误(在已知环境干净时使用)
初始化过程需要 1-3 分钟 。成功后,终端尾部会显示:
第 6 步:配置 kubectl 命令行工具
如果您是以普通用户(非root)登录的,执行以下三条命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果您是以 root 用户登录的,执行这一条命令即可:
export KUBECONFIG=/etc/kubernetes/admin.conf
# 建议也将配置永久写入文件
echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bashrc
source ~/.bashrc
验证配置 :执行 kubectl get nodes,您应该会看到当前节点,状态为 NotReady(因为网络插件还没装)。

第 7 步:安装 Pod 网络插件
这是必须的一步。没有网络插件,集群内的 Pod 无法相互通信。
请任选以下一种网络插件安装:
-
推荐:Flannel (最简单稳定)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
-
备选:Calico (功能更强大)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

允许在 Master 节点上调度 Pod(单节点集群必需)
默认情况下,Master 节点不允许运行普通的工作负载 Pod。由于我们是单节点集群,必须解除这个限制,否则您部署的应用将无法运行。
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
执行此命令后,Master 节点就可以像 Worker 节点一样运行 Pod 了。
最终验证
完成以上所有步骤后,运行以下命令进行最终健康检查:
echo "=== 1. 节点状态(应为 Ready)==="
kubectl get nodes
echo -e "\n=== 2. 核心系统 Pod 状态(所有应为 Running)==="
kubectl get pods -n kube-system
echo -e "\n=== 3. 集群信息 ==="
kubectl cluster-info