在 CentOS 上用 kubeadm 快速部署 Kubernetes 单主集群
一 环境准备与系统初始化
- 建议准备至少 2 核 CPU、2GB 内存、20GB 磁盘 的机器,节点间网络互通,最好配置 SSH 免密 与 主机名解析。
- 关闭 Swap:
- 临时:swapoff -a
- 永久:sed -i ‘/swap/s/^/#/g’ /etc/fstab
- 关闭防火墙与 SELinux(测试环境):
- systemctl stop firewalld && systemctl disable firewalld
- setenforce 0 && sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
- 内核与桥接参数:
- cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
- sysctl --system
- 可选优化(提升 kube-proxy 性能):加载 ip_vs 模块并持久化。
- 时间同步:yum install -y ntpdate && ntpdate ntp.aliyun.com。
二 安装容器运行时与 Kubernetes 组件
- 方案 A(推荐)使用 containerd(与 kubelet 的 systemd cgroup 驱动配合更稳定):
- 配置模块与内核:
- cat >/etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
- modprobe overlay && modprobe br_netfilter
- 安装与启动:yum install -y containerd.io && systemctl enable --now containerd
- 方案 B 使用 Docker(如已熟悉):
- 安装:yum install -y yum-utils && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 启动:systemctl enable --now docker
- 添加 Kubernetes YUM 源并安装组件:
- cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
- yum install -y kubelet kubeadm kubectl && systemctl enable --now kubelet
- 若使用 Docker,建议将 cgroup 驱动设为 systemd(/etc/docker/daemon.json):
- { “exec-opts”: [“native.cgroupdriver=systemd”] } 并重启 Docker。
三 初始化控制平面与加入工作节点
- 在 Master 节点初始化(将 <MASTER_IP> 替换为实际 IP):
- kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=10.244.0.0/16
- 配置 kubectl(普通用户):
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 获取加入命令(在 Master 上):
- kubeadm token create --print-join-command
- 在 Worker 节点执行上一步输出的 kubeadm join 命令加入集群。
四 部署网络插件与验证
- 部署 Flannel(Pod 网络 CIDR 需与初始化参数一致:10.244.0.0/16):
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 验证:
- kubectl get nodes(状态应为 Ready)
- kubectl get pods -A(核心组件与 flannel Pod 均为 Running)
五 常见问题与快速排查
- kubelet 启动失败:检查是否禁用 Swap、内核参数是否生效、cgroup 驱动是否与容器运行时一致(Docker 建议 systemd)。
- 节点 NotReady:确认网络插件已部署且 Pod CIDR 与 kubeadm init 参数一致(如 10.244.0.0/16)。
- 镜像拉取慢或失败:可预先用 kubeadm config images list 查看所需镜像,配置国内镜像源或使用私有仓库。
- 加入节点失败:确认 Token 未过期、Master 与 Node 网络互通、所需端口未被占用。