温馨提示×

Debian如何离线部署K8s

小樊
37
2026-09-05 09:14:04
栏目: 智能运维

无外网(离线)环境的 Debian 上部署 Kubernetes,核心思路是:提前在有网机器下载所需软件包和镜像,再拷贝到目标节点安装。下面给你一套可落地的离线部署方案(以 kubeadm 方式为例,最常用、最标准)。


一、准备工作(有网机器)

1. 系统版本建议

  • Debian 11 (Bullseye) 或 Debian 12 (Bookworm)
  • 所有节点时间同步(chrony / ntp)
  • 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

二、离线下载软件包(有网 Debian)

1. 添加 K8s apt 源(有网机器)

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. 下载 deb 包(不安装)

mkdir -p /opt/k8s-debs
cd /opt/k8s-debs
apt-get download kubelet kubeadm kubectl kubernetes-cni

3. 下载容器运行时(推荐 containerd)

apt-get download containerd.io

三、离线下载 K8s 镜像(有网机器)

1. 查看所需镜像

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:v1.11.1

2. 使用 docker / nerdctl 导出镜像

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

四、拷贝到离线节点

使用 U 盘 / 内网传输:

scp -r /opt/k8s-debs node:/opt/
scp *.tar node:/opt/k8s-images/

五、离线节点安装(Debian)

1. 安装 containerd

dpkg -i /opt/k8s-debs/containerd.io*.deb

配置 containerd:

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd

2. 安装 kube 组件

dpkg -i /opt/k8s-debs/*.deb
systemctl enable kubelet

六、导入镜像(离线节点)

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

如果用 docker:

docker load -i xxx.tar

七、初始化 Master(离线)

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

成功后会输出:

kubeadm join xxx --token xxx

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

1. 有网机器下载

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

2. 下载 Calico 镜像并导出

grep image calico.yaml | awk '{print $2}' | sort -u

导入方式同上。

3. 应用

kubectl apply -f calico.yaml

九、加入 Worker 节点

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

十、常见问题

1. 镜像拉不到

  • 使用 ctr images list 确认是否导入成功
  • kubeadm init --image-repository 指定本地仓库

2. cgroup 驱动不一致

containerd 默认 systemd,kubelet 也要一致:

cat /var/lib/kubelet/config.yaml

十一、进阶方案(企业推荐)

  • 搭建内网 Harbor + apt 私有源
  • 使用 kubespray 离线部署
  • 使用 RKE / K3s 离线包

如果你愿意,我可以:

  • 给你一份 Debian 离线部署一键脚本
  • 或按 K3s / Rancher / 生产高可用 场景来写

你现在是 学习 / 生产 / 内网安全环境

0