温馨提示×

centos如何离线部署k8s

小樊
33
2026-09-27 13:11:19
栏目: 智能运维

在 CentOS 离线环境部署 Kubernetes(k8s),核心思路是:提前在有网环境下载好所有依赖(rpm、镜像、二进制),再拷贝到离线机器安装。下面给你一套通用、可落地的离线部署方案(以 kubeadm + containerd 为例,CentOS 7/8 均适用)。


一、整体方案概览

离线部署步骤:

  1. 准备一台 可联网的同版本 CentOS
  2. 下载:
    • Kubernetes 相关 rpm
    • 容器运行时(containerd / docker)
    • k8s 所需镜像
  3. 拷贝到离线机器
  4. 安装 & 初始化集群

二、环境准备(所有节点)

1. 系统要求

  • CentOS 7.9 / CentOS 8
  • 2C4G 以上
  • 关闭 swap
  • 静态 IP
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 禁用 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2. 内核参数

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

三、离线包准备(联网机器)

1. 配置 yum 源(联网机)

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

2. 下载 Kubernetes rpm

yum install --downloadonly --downloaddir=./k8s-rpm \
kubelet kubeadm kubectl

3. 下载 containerd(或 docker)

yum install --downloadonly --downloaddir=./containerd-rpm \
containerd.io

或使用 docker:

yum install --downloadonly --downloaddir=./docker-rpm \
docker-ce docker-ce-cli

四、离线镜像准备(关键)

1. 查看所需镜像

kubeadm config images list

示例:

k8s.gcr.io/kube-apiserver:v1.28.0
k8s.gcr.io/kube-controller-manager:v1.28.0
k8s.gcr.io/kube-scheduler:v1.28.0
k8s.gcr.io/kube-proxy:v1.28.0
k8s.gcr.io/pause:3.9
k8s.gcr.io/etcd:3.5.9
k8s.gcr.io/coredns:v1.10.1

2. 联网机拉取并导出

images=$(kubeadm config images list)

for img in $images
do
  docker pull $img
  docker save $img -o $(echo $img | tr '/' '_').tar
done

3. 拷贝到离线机后导入

for f in *.tar
do
  docker load -i $f
done

✅ 如果是 containerd:

ctr -n k8s.io images import xxx.tar

五、离线机安装

1. 安装 rpm

yum localinstall -y ./*.rpm

2. 启动服务

systemctl enable --now kubelet
systemctl enable --now containerd

六、初始化 Master(离线)

kubeadm init \
  --apiserver-advertise-address=192.168.1.10 \
  --image-repository=k8s.gcr.io \
  --kubernetes-version=v1.28.0 \
  --pod-network-cidr=10.244.0.0/16

镜像已离线导入,不会再去拉取

配置 kubectl

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

七、安装网络插件(Calico 离线)

  1. 联网机下载:
curl -O https://docs.projectcalico.org/manifests/calico.yaml
  1. 修改镜像为离线镜像(或直接导入)

  2. 离线机执行:

kubectl apply -f calico.yaml

八、Node 节点加入

Master 初始化后会输出:

kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash xxx

九、常见问题

1. 镜像拉取失败

  • 确保 docker images / ctr images list 能看到
  • 使用 --image-repository 指定

2. kubelet 起不来

journalctl -u kubelet -f

3. CentOS 8 注意事项

  • 使用 podman 或 containerd
  • 避免 docker 版本冲突

十、简化方案(推荐)

如果你不想手动搞:

  • KubeKey(KubeSphere)
  • sealos
  • kubespray(ansible)

这些都支持 离线部署包


如果你愿意,我可以:

  • ✅ 给你一个 完整离线部署脚本
  • ✅ 按 CentOS 7 / 8 分开写
  • ✅ 给你 1.24 / 1.28 / 1.30 具体版本方案

你现在是 CentOS 几?k8s 哪个版本?单节点还是集群?

0 踩