在 CentOS 上部署 Kubernetes 的主流方式
- kubeadm 手动部署:官方推荐路径,灵活可控,适合学习、测试与生产环境的标准化落地。
- 一键脚本自动化:社区/自研脚本封装 kubeadm 与系统初始化,适合快速交付与内网统一规范(注意审查脚本来源与内容)。
- 离线/内网环境部署:提前导入镜像或使用私有仓库,解决无外网或受限网络环境的安装问题。
- 云厂商托管或一键平台:如公有云的 ACK/ACK Edge、TKE、EKS 等托管集群,或开源平台的一键安装器(适合降低运维复杂度)。
方式对比
| 方式 |
复杂度 |
适用场景 |
优点 |
注意点 |
| kubeadm 手动部署 |
中 |
学习、测试、生产 |
官方路径、可控性强、生态完善 |
步骤较多,需自行处理镜像、网络、内核参数 |
| 一键脚本自动化 |
低-中 |
快速交付、内网标准化 |
部署快、可复用 |
需审核脚本安全性与版本兼容性 |
| 离线/内网部署 |
中-高 |
无外网/受限网络 |
不依赖公网、可审计 |
需提前准备镜像/私有仓库与离线包 |
| 云厂商托管/平台 |
低 |
生产、弹性业务 |
运维成本低、高可用 |
成本与平台绑定、细粒度控制受限 |
关键前置条件与通用步骤
- 基础要求
- 操作系统:CentOS 7/8 x86_64;硬件建议至少 2 核 CPU、2GB 内存、30GB 磁盘。
- 禁用 swap:swapoff -a 并注释 /etc/fstab 中 swap 行。
- 关闭 SELinux:setenforce 0 且 /etc/selinux/config 设为 disabled(或 permissive)。
- 配置内核参数与转发:开启 net.bridge.bridge-nf-call-iptables/ip6tables=1、net.ipv4.ip_forward=1,加载 br_netfilter。
- 时间同步:安装并启用 chrony/ntpdate。
- 主机名与 /etc/hosts:规范命名并互通解析。
- 防火墙策略:测试环境可临时关闭 firewalld;生产环境建议按需放行端口(如 6443、2379-2380、10250、10251、10252、10255 等)。
- 容器运行时
- Kubernetes v1.24+ 起内置 CRI 已移除 dockershim,常用为 containerd(推荐)或 CRI-O;早期版本或兼容性需求可使用 Docker(需 cri-dockerd 适配)。
- 初始化与网络
- 使用 kubeadm init 初始化控制面,常见参数:–pod-network-cidr(如 Flannel 常用 10.244.0.0/16,Calico 常用 192.168.0.0/16)、–apiserver-advertise-address。
- 安装网络插件(二选一或按网络方案选择):Flannel 或 Calico。
- 节点加入:执行 kubeadm 生成的 kubeadm join 命令。
- 验证:kubectl get nodes 为 Ready 即正常。
方法一 kubeadm 手动部署步骤要点
- 安装组件
- 配置 Kubernetes YUM 源(可选国内镜像源加速)。
- 安装 kubeadm、kubelet、kubectl(建议固定版本)。
- 配置 containerd(或 Docker):设置 SystemdCgroup=true,镜像仓库与镜像加速。
- 初始化控制面
- kubeadm init 指定 –pod-network-cidr 与 –apiserver-advertise-address。
- 完成后执行:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config。
- 安装网络插件
- 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
- 加入工作节点
- 使用 kubeadm 输出的 join 命令在各 Node 执行。
- 验证
- kubectl get nodes、kubectl get pods -A 检查状态。
方法二 一键脚本自动化
- 适用场景:内网多台机器快速交付、统一基线。
- 常见做法:脚本统一完成 DNS/iptables、内核参数、时间同步、Docker/containerd、kubeadm/kubelet/kubectl 安装、镜像预拉取、kubeadm init/join、Flannel/Calico 部署 等。
- 示例与要点
- 非高可用脚本:覆盖主机名、内核参数、yum 源、Docker/registry、kubeadm 初始化与 Flannel 部署,适合快速验证。
- 离线脚本:使用 containerd,通过离线包与镜像 tar 导入,设置 image-repository 与 sandbox_image,执行 kubeadm init/join。
- 风险提示:务必审查脚本来源、版本匹配与变更记录,避免生产环境引入安全隐患。
方法三 离线或受限网络环境部署
- 核心思路:提前准备 kubeadm、kubelet、kubectl、容器运行时与系统镜像,通过 私有仓库 或 镜像 tar 包导入,再执行 kubeadm 初始化与加入。
- 实施要点
- 离线包准备:打包所需 RPM/镜像,搭建 内网 YUM/容器镜像仓库。
- containerd 配置:启用 SystemdCgroup,必要时替换 sandbox_image 为内网可拉取镜像。
- kubeadm 初始化:使用 –image-repository 指向私有仓库;若镜像 tag 不一致,可先 kubeadm config images list 核对并拉取/重打 tag。
- 网络插件:优先使用已镜像到内网的 Flannel/Calico 清单。
- 适用:隔离网络、合规要求高或无公网的机房/园区。