centos安装K8s步骤
在 CentOS 上安装 K8s,生产环境推荐使用kubeadm配合containerd作为容器运行时。以下是基于 CentOS 7/8 的核心步骤,重点在于系统预处理和运行时配置,这两步最容易出错。
第一步:所有节点(Master和Worker节点都执行)系统预处理
在安装任何组件前,必须完成以下配置,否则 kubelet 无法正常启动。
1. 关闭 Swap
K8s 强制要求关闭 Swap。需同时临时关闭并注释/etc/fstab中的 swap 行,确保重启后依然生效。
2. 关闭 SELinux 与防火墙
setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config systemctl disable --now firewalld注意:生产环境若必须开启防火墙,需放行 K8s 组件及 CNI 插件所需的大量端口,复杂度较高,通常建议在内部可信网络关闭防火墙。
3. 加载内核模块与网络参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay && modprobe br_netfilter cat <<EOF | sudo 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第二步:安装并配置 containerd
CentOS 的默认源可能不包含较新的 containerd,建议使用 Docker 官方源或 containerd 官方源安装。
1. 安装 containerd
yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y containerd.io2. 关键配置:修改 CGroup 驱动
containerd 默认的 CGroup 驱动是cgroupfs,必须改为systemd以与 kubelet 保持一致,否则集群会不稳定。
containerd config default > /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml systemctl restart containerd && systemctl enable containerd这一步是 CentOS 安装中最常见的“坑”,如果漏改,后续 Pod 可能无法启动或资源限制失效。
第三步:安装 kubeadm、kubelet、kubectl
1. 添加 K8s 仓库(使用阿里云镜像加速)
cat <<EOF | sudo 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=0 repo_gpgcheck=0 EOF2. 安装组件并锁定版本
yum install -y kubelet kubeadm kubectl systemctl enable kubelet注意:kubelet版本不能高于控制平面版本,安装后kubelet处于 crashloop 状态是正常的,等待kubeadm init下发配置后才会正常。
第四步:初始化控制平面(仅 Master 节点)
1. 执行初始化
你需要根据选用的 CNI 插件决定--pod-network-cidr。若用 Flannel,通常用10.244.0.0/16;若用 Calico,常用192.168.0.0/16。
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers(--image-repository指向阿里云镜像,避免拉取registry.k8s.io失败)
2. 配置 kubectl 权限
初始化成功后,按提示执行:
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config第五步:安装网络插件与加入节点
1. 安装 CNI 插件
在 Master 节点执行。以下以 Flannel 为例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml安装后检查kubectl get pods -n kube-system,确认 CoreDNS 变为Running,说明网络就绪。
2. Worker 节点加入
在 Master 节点生成加入命令:
kubeadm token create --print-join-command复制输出的kubeadm join ...命令,在每个 Worker 节点上以 root 执行即可。
验证
在 Master 节点执行kubectl get nodes,所有节点状态应为Ready。若 Worker 节点长期为NotReady,优先检查 Worker 上的 containerd 状态以及SystemdCgroup是否已正确改为true。
Master 节点:
Worker 节点:
OK !