CentOS 上使用 kubeadm 安装 Kubernetes 集群
一 环境准备
- 系统要求:建议使用 CentOS 7/8,每台节点至少 2 核 CPU、2GB 内存、30GB 磁盘,节点间网络互通且可访问外网。
- 主机名与解析:为各节点设置唯一主机名(如 master、node1),并在 /etc/hosts 中添加解析。
- 关闭交换分区:执行
swapoff -a,并在 /etc/fstab 中注释含 swap 的行,避免 kubelet 启动失败。
- 关闭防火墙或放行端口:生产环境建议按需放行,实验环境可临时关闭
firewalld(systemctl stop/disable firewalld)。
- 关闭 SELinux:临时
setenforce 0,并修改 /etc/selinux/config 为 SELINUX=disabled(重启生效)。
- 内核参数与桥接:启用桥接与转发,创建 /etc/sysctl.d/k8s.conf,内容示例:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
执行 sysctl --system 使配置生效。
- 时间同步:安装并同步时间(如
yum install -y ntpdate && ntpdate ntp.aliyun.com)。
二 安装容器运行时与 Kubernetes 组件
- 安装 Docker(或 containerd):
- 安装依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加仓库:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装并启动:
yum install -y docker-ce docker-ce-cli containerd.io && systemctl enable --now docker
- 可选镜像加速:在 /etc/docker/daemon.json 中添加
{“registry-mirrors”: [“https://mirrors.aliyuncs.com”]}
然后 systemctl daemon-reload && systemctl restart docker。
- 添加 Kubernetes YUM 源(国内镜像示例):
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 安装 kubelet、kubeadm、kubectl(建议固定版本):
yum install -y kubelet-<VERSION> kubeadm-<VERSION> kubectl-<VERSION> && systemctl enable --now kubelet
- 容器运行时配置要点:如使用 Docker,建议将 kubelet 的 cgroup-driver 设置为 systemd,与 Docker 保持一致(常见做法为在 kubelet 配置或 systemd drop-in 中设置)。
三 初始化控制平面与加入工作节点
- 初始化 Master(将 <MASTER_IP> 替换为实际地址):
kubeadm init \
–apiserver-advertise-address=<MASTER_IP> \
–image-repository=registry.aliyuncs.com/google_containers \
–kubernetes-version=v1.22.15 \
–service-cidr=10.96.0.0/12 \
–pod-network-cidr=10.244.0.0/16
说明:上述镜像仓库与网段为常用组合;如网络可达,也可使用官方仓库。
- 配置 kubectl:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 获取 Worker 加入命令:
kubeadm token create --print-join-command
在 Worker 节点执行输出的 kubeadm join ... 命令(包含 –token 与 –discovery-token-ca-cert-hash)。
- 验证节点状态:
kubectl get nodes
待节点状态为 Ready 后继续。
四 部署 CNI 网络插件
- 选择其一部署(与上面 Pod CIDR 保持一致):
- Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 再次检查:
kubectl get nodes
kubectl get pods -A
确保 CoreDNS、kube-proxy 与 CNI 组件处于 Running 状态。
五 常见问题与优化
- 镜像拉取失败:使用国内镜像仓库(如 registry.aliyuncs.com/google_containers),或提前
kubeadm config images pull。
- 节点 NotReady:多因 CNI 未部署 或 cgroup-driver 不一致;检查 kubelet 配置与容器运行时配置。
- 端口与防火墙:确保 6443(APIServer)、10250(kubelet)、2379/2380(etcd)、10251/10252(kube-scheduler/controller-manager) 等端口放通。
- 版本匹配:保持 kubelet、kubeadm、kubectl 版本一致,并与集群版本兼容。
- 生产建议:启用 RBAC、kube-proxy 的 IPVS 模式、持久化存储、日志与监控,并定期升级集群。