在 CentOS 上安装 Kubernetes 的标准步骤
一 环境准备
- 系统要求:建议使用 CentOS 7/8,内核版本尽量不低于 4.x;所有节点保持 时间同步(如 chrony/ntp)。
- 基础配置:
- 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
- 关闭 SELinux:setenforce 0 并修改 /etc/selinux/config 为 SELINUX=permissive/disabled
- 禁用 Swap:swapoff -a 并注释 /etc/fstab 中的 swap 行
- 设置主机名:hostnamectl set-hostname
- 可选:配置 /etc/hosts 解析与 静态 IP
- 内核与网络参数:
- 加载 bridge 模块并开启桥接流量入 iptables:
- 写入 /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
- 说明:生产环境不建议直接关闭防火墙,应改为按需放通端口(如 6443、10250、2379-2380、10251、10252、8472/udp 等,具体取决于网络插件与控制平面组件)。
二 安装容器运行时
- 安装依赖:yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加 Docker 仓库(可选国内镜像):
- yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装 Docker:yum install -y docker-ce docker-ce-cli containerd.io
- 配置 Docker(使用 systemd cgroup 驱动并可选镜像加速):
- 编辑 /etc/docker/daemon.json:
- {
- “exec-opts”: [“native.cgroupdriver=systemd”],
- “log-driver”: “json-file”,
- “log-opts”: { “max-size”: “100m” },
- “storage-driver”: “overlay2”,
- “registry-mirrors”: [“https://.mirror.aliyuncs.com”]
- }
- 启动与开机自启:systemctl daemon-reload && systemctl enable --now docker
- 验证:docker info | grep -i cgroup 应显示 systemd。
三 安装 kubeadm kubelet kubectl
- 添加 Kubernetes 仓库(可选国内镜像):
- cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-$basearch/
- 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
- 安装组件:yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
- 启动 kubelet:systemctl enable --now kubelet
- 说明:如遇到 Swap 限制导致 preflight 失败,可在 /etc/sysconfig/kubelet 增加 KUBELET_EXTRA_ARGS=“–fail-swap-on=false” 后重启 kubelet(仅测试环境建议)。
四 初始化控制平面 Master
- 拉取镜像(可选,提前拉取以提速):kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
- 初始化命令(按需替换参数):
- *kubeadm init *
- *–apiserver-advertise-address=<MASTER_IP> *
- *–image-repository=registry.aliyuncs.com/google_containers *
- *–kubernetes-version= *
- *–service-cidr=10.96.0.0/12 *
- –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
- 保存输出中的 kubeadm join … 命令,用于 Node 加入集群。
五 安装 CNI 网络插件与加入 Node 并验证
- 安装 CNI 网络插件(二选一,Pod CIDR 需与初始化参数一致):
- Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml
- 加入 Worker 节点:在各 Node 上执行上一步保存的 kubeadm join 命令。
- 验证集群:
- kubectl get nodes(状态应为 Ready)
- kubectl get pods -A(系统 Pod 应为 Running)
- 常见问题处理:
- 节点 NotReady:检查 CNI 是否安装、Pod CIDR 是否匹配、kubelet 是否 Running、防火墙/SELinux 策略
- 镜像拉取失败:更换 image-repository 为国内镜像或提前拉取
- 重置环境:kubeadm reset 后清理 /etc/cni/net.d、/var/lib/etcd、~/.kube 再重试。