温馨提示×

Debian K8s怎么离线装

小樊
48
2026-09-17 11:12:53
栏目: 智能运维

在离线环境部署 Debian + Kubernetes(K8s),核心思路是:提前在有网的机器上下载好所有依赖(系统包、容器运行时、K8s 组件、镜像),然后拷贝到目标机器安装。

下面给你一套可落地的离线安装方案(以 kubeadm + containerd 为例,最常用、最稳定)。


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

1. 系统要求

  • Debian 11 / 12
  • 2核+ / 2G+(master 建议 4G+)
  • 关闭 swap
  • 静态 IP
  • 主机名唯一
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 设置主机名
hostnamectl set-hostname master01

# 关闭防火墙(或放行端口)
ufw disable

二、在有网机器上准备离线包

✅ 1. 准备一台同版本 Debian(联网)

mkdir -p /opt/k8s-offline
cd /opt/k8s-offline

✅ 2. 下载系统依赖(containerd 需要)

apt update
apt install -y --download-only \
  containerd \
  runc \
  socat \
  conntrack \
  ebtables \
  ipset \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg

下载的 deb 在:

/var/cache/apt/archives/

拷贝出来:

mkdir debs
cp /var/cache/apt/archives/*.deb debs/

✅ 3. 下载 Kubernetes 组件(离线 deb)

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o kubernetes.gpg
cp kubernetes.gpg /etc/apt/trusted.gpg.d/

echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > kubernetes.list
cp kubernetes.list /etc/apt/sources.list.d/

apt update
apt install -y --download-only kubelet kubeadm kubectl
cp /var/cache/apt/archives/*.deb debs/

✅ 4. 下载容器镜像(最关键)

查看需要的镜像:

kubeadm config images list

示例:

k8s.gcr.io/kube-apiserver:v1.29.0
k8s.gcr.io/kube-controller-manager:v1.29.0
k8s.gcr.io/kube-scheduler:v1.29.0
k8s.gcr.io/kube-proxy:v1.29.0
k8s.gcr.io/pause:3.9
k8s.gcr.io/etcd:3.5.10
k8s.gcr.io/coredns/coredns:v1.11.1

下载镜像

mkdir images
for img in $(kubeadm config images list); do
  docker pull $img
  docker save $img -o images/$(echo $img | tr '/:' '__').tar
done

(如果没有 docker,用 containerd + nerdctl 也可以)


✅ 5. 打包离线文件

tar czf k8s-offline.tar.gz debs images kubernetes.gpg kubernetes.list

拷贝到目标机器:

scp k8s-offline.tar.gz debian-node:/root/

三、离线节点安装

1. 解压

tar xf k8s-offline.tar.gz

2. 安装系统 deb

dpkg -i debs/*.deb
apt -f install -y

3. 配置 containerd

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# 修改 sandbox 镜像(国内很重要)
sed -i 's#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml

systemctl restart containerd
systemctl enable containerd

4. 导入镜像

for img in images/*.tar; do
  ctr -n k8s.io images import $img
done

5. 初始化 Master

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --image-repository=registry.aliyuncs.com/google_containers

成功后:

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

6. 安装网络插件(Calico 离线)

在有网机器下载:

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

拷贝到节点后:

kubectl apply -f calico.yaml

四、Worker 节点加入

kubeadm join <master-ip>:6443 \
  --token xxx \
  --discovery-token-ca-cert-hash sha256:xxx

五、常见坑

❌ crictl 找不到镜像
✅ 一定要 ctr -n k8s.io images import

❌ kubeadm init 拉镜像失败
✅ 使用 --image-repository

❌ Debian 12 不兼容老 K8s
✅ 用 K8s ≥ 1.28


六、进阶方案(可选)

  • 离线私有仓库(Harbor)
  • PXE + 自动化部署
  • Kubespray 离线部署
  • Debian 最小化镜像

如果你愿意,我可以:

  • ✅ 给你 一键离线脚本
  • ✅ 按 Debian 11 / 12 精确版本写
  • ✅ 帮你选 kubeadm / k3s / microk8s

你现在是 单节点还是集群?Debian 几?

0 踩