1. 离线K8S集群部署概述
在企业级生产环境中,出于安全合规或网络隔离要求,经常需要在完全离线的内网环境中部署Kubernetes集群。与常规在线安装相比,离线部署面临三大核心挑战:
- 依赖包完整性问题:需要预先下载所有相关软件包(包括系统依赖、容器运行时、K8S组件等)并确保版本兼容性
- 镜像分发难题:所有容器镜像(系统组件、网络插件、监控工具等)必须通过离线方式导入
- 配置复杂度高:缺乏互联网访问时,所有配置(如镜像仓库地址、网络参数等)必须手动指定
本次部署采用的技术栈为:
- Kubernetes v1.26(当前长期支持版本)
- Containerd作为容器运行时(已取代Docker成为K8S默认推荐)
- Calico v3.25作为网络插件(支持NetworkPolicy等高级功能)
- 三节点架构:1个master + 2个worker节点
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与系统配置
2.1 硬件资源规划
| 节点类型 | IP地址 | 主机名 | 最低配置要求 |
|---|---|---|---|
| Master | 192.168.10.100 | k8s-master | 2核CPU/4GB内存/50GB存储 |
| Worker1 | 192.168.10.101 | k8s-node1 | 4核CPU/8GB内存/100GB存储 |
| Worker2 | 192.168.10.102 | k8s-node2 | 4核CPU/8GB内存/100GB存储 |
关键提示:生产环境建议master节点配置不低于4核8GB,且采用奇数个master实现高可用
2.2 离线软件包准备
需提前下载以下软件包并传输到各节点:
bash复制# 基础依赖
conntrack-tools-1.4.4-7.el7.x86_64.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
# K8S核心组件
kubeadm-1.26.0-0.x86_64.rpm
kubectl-1.26.0-0.x86_64.rpm
kubelet-1.26.0-0.x86_64.rpm
cri-tools-1.26.0-0.x86_64.rpm
kubernetes-cni-0.8.7-0.x86_64.rpm
# Containerd配置
containerd.io-1.6.9-3.1.el7.x86_64.rpm
下载技巧:
bash复制# 在有网络的机器上使用yum缓存功能
yum -y --downloadonly --downloaddir=./packages install conntrack-tools socat
2.3 系统基础配置
所有节点需执行以下配置:
bash复制# 设置主机名(分别在各节点执行)
hostnamectl set-hostname k8s-master # master节点
hostnamectl set-hostname k8s-node1 # node1节点
hostnamectl set-hostname k8s-node2 # node2节点
# 关闭防火墙和SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭swap分区
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 配置内核参数
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
常见问题:若未关闭swap,kubelet服务将无法正常启动,报错"Failed to start kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from doc
