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.io

2. 关键配置:修改 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
EOF

2. 安装组件并锁定版本

复制代码
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 !

相关推荐
小白的码BUG之路4 天前
K8S -- 下载安装dashboard
k8s
切糕师学AI6 天前
K8s 滚动更新与 Spring Boot 优雅停机实战:如何做到真正的平滑发布?
spring boot·云原生·容器·kubernetes·k8s
fengkai45458 天前
7、Kubernetes的Ingress&Network&Scheduler
运维·kubernetes·k8s·ingress·network·scheduler
mengge.cloud12 天前
1022小白入门教程(番外筑基)— nerdctl 容器基本功 + K8s 资源编写
linux·网络·云原生·容器·kubernetes·云计算·k8s
上火的金鱼妹13 天前
节点调度优化 + redis 现有问题优化
k8s
fengkai454514 天前
3、Kubernetes的Namespace&Contexts&Pod&YAML格式
运维·容器·kubernetes·k8s·namespace·yaml·pod
meijinmeng14 天前
Karpenter + Keda 让Kuberntes实现动态扩缩容机制方案指南
k8s
.冰块.15 天前
VMware+Ubuntu24.04 kubeadm 部署 K8s 1.30.2 三节点集群
运维·云原生·容器·kubernetes·k8s·容器编排
我不会起名字32217 天前
K8s Ingress 返回 502 但后端日志正常:4 类上游断连与排查链
kubernetes·k8s·ingress·502·keepalive