温馨提示×

Debian如何离线装K8s

小樊
44
2026-09-14 10:20:27
栏目: 智能运维

无外网(离线)环境的 Debian 上安装 Kubernetes,核心思路是:在有网的机器上下载所需 deb 包和镜像,再拷贝到目标机器安装。下面给你一套可行、常用、偏实战的方案。


一、准备工作(在有网的 Debian / Ubuntu 机器上)

1. 系统要求

  • Debian 10/11/12(推荐 11/12)
  • 架构:amd64
  • 至少 2 台机器(1 master + 1 node 起)

2. 确定版本

例如:

  • Kubernetes:1.28.x
  • Container runtime:containerd

二、离线安装方式选择(推荐第 2 种)

方式 说明 推荐度
apt 离线包 下载 .deb 安装 ✅ 推荐
二进制文件 手动下 kubelet/kubeadm ⚠️ 麻烦
kubeadm + 离线镜像 必须做 ✅ 必须

三、在有网机器下载 deb 包

1. 添加 Kubernetes 源

apt-get update
apt-get install -y apt-transport-https ca-certificates curl

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/kubernetes.gpg

echo "deb [signed-by=/usr/share/keyrings/kubernetes.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" \
> /etc/apt/sources.list.d/kubernetes.list

apt-get update

2. 下载 kubeadm / kubelet / kubectl

apt-get install --download-only -y \
  kubelet=1.28.4-00 \
  kubeadm=1.28.4-00 \
  kubectl=1.28.4-00

下载的 deb 在:

/var/cache/apt/archives/

拷贝到 U 盘或内网服务器。


四、安装 Containerd(离线)

1. 有网机器下载

apt-get install --download-only -y containerd

拷贝 deb 到离线机。

2. 离线机安装

dpkg -i *.deb

3. 初始化 containerd 配置

containerd config default > /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd

五、导入 Kubernetes 镜像(关键)

kubeadm 启动需要镜像,必须离线导入

1. 有网机器拉取镜像

kubeadm config images list
kubeadm config images pull

2. 导出镜像

docker save \
  k8s.gcr.io/kube-apiserver:v1.28.4 \
  k8s.gcr.io/kube-controller-manager:v1.28.4 \
  k8s.gcr.io/kube-scheduler:v1.28.4 \
  k8s.gcr.io/kube-proxy:v1.28.4 \
  k8s.gcr.io/pause:3.9 \
  k8s.gcr.io/etcd:3.5.9-0 \
  k8s.gcr.io/coredns:v1.10.1 \
  -o k8s-images.tar

若使用 containerd,建议用 ctrnerdctl

3. 离线机导入

ctr -n k8s.io images import k8s-images.tar

六、离线初始化 Kubernetes

1. 关闭 swap

swapoff -a
sed -i '/swap/d' /etc/fstab

2. 内核参数

cat <<EOF > /etc/modules-load.d/k8s.conf
br_netfilter
EOF

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

sysctl --system

3. kubeadm init(离线)

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --image-repository=k8s.gcr.io

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

1. 有网机器下载

curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml

2. 离线机应用

kubectl apply -f calico.yaml

(Calico 镜像也要提前导入)


八、Node 加入集群

Master 初始化后会输出:

kubeadm join 192.168.x.x:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx

Node 机器同样:

  • 装 kubelet / kubeadm
  • 导入镜像
  • 执行 join

九、常见问题

1. 镜像拉不到

  • 确认 ctr images list
  • 确认 --image-repository

2. cgroup 驱动不一致

containerd 推荐:

[plugins."io.containerd.grpc.v1.cri"]
  systemd_cgroup = true

3. Debian 12 注意

  • 使用 systemd 作为 init
  • 关闭 AppArmor(可选)

十、推荐离线方案总结

最稳妥组合

  • Debian 12
  • containerd
  • kubeadm
  • calico
  • 离线 deb + 离线镜像

如果你愿意,我可以:

  • 给你一份完整离线安装脚本
  • 或按 ** Debian 11 / 12 + 内网私有仓库** 给你定制方案
  • 或用 sealos / kubekey 离线安装方式

你现在是 完全无外网 还是 有内网仓库

0