在 CentOS 上部署 Kubernetes(k8s) 之前,需要完成一系列 系统、网络、内核、容器运行时 的准备和配置。下面按 部署前 → 部署中 → 网络/组件 来系统说明。
cat /etc/centos-release
uname -r
systemctl disable firewalld --now
或放行 k8s 所需端口(6443、10250 等)
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/swap/d' /etc/fstab
验证:
free -m
hostnamectl set-hostname master01
cat >> /etc/hosts <<EOF
192.168.1.10 master01
192.168.1.11 node01
EOF
yum install -y chrony
systemctl enable chronyd --now
modprobe br_netfilter
modprobe overlay
开机自动加载:
cat > /etc/modules-load.d/k8s.conf <<EOF
br_netfilter
overlay
EOF
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
yum install -y containerd.io
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
修改:
SystemdCgroup = true
systemctl enable containerd --now
yum install -y docker-ce docker-ce-cli
systemctl enable docker --now
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.1.10
成功后:
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
| 配置项 | 是否必须 |
|---|---|
| 关闭 swap | ✅ |
| 关闭 SELinux | ✅ |
| 内核参数 | ✅ |
| 容器运行时 | ✅ |
| 网络插件 | ✅ |
| 时间同步 | ✅ |
| hosts 解析 | ✅ |
❌ swap 没关 → kubelet 起不来
❌ SELinux 没关 → pod 起不来
❌ 内核参数没配 → 网络不通
❌ containerd SystemdCgroup=false → 报错
你可以直接告诉我:
我可以给你 完整可复制的一键部署脚本 ✅