在无外网(离线)环境的 Debian 上安装 Kubernetes,核心思路是:在有网的机器上下载所需 deb 包和镜像,再拷贝到目标机器安装。下面给你一套可行、常用、偏实战的方案。
例如:
| 方式 | 说明 | 推荐度 |
|---|---|---|
| apt 离线包 | 下载 .deb 安装 | ✅ 推荐 |
| 二进制文件 | 手动下 kubelet/kubeadm | ⚠️ 麻烦 |
| kubeadm + 离线镜像 | 必须做 | ✅ 必须 |
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
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 盘或内网服务器。
apt-get install --download-only -y containerd
拷贝 deb 到离线机。
dpkg -i *.deb
containerd config default > /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd
kubeadm 启动需要镜像,必须离线导入。
kubeadm config images list
kubeadm config images pull
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,建议用
ctr或nerdctl
ctr -n k8s.io images import k8s-images.tar
swapoff -a
sed -i '/swap/d' /etc/fstab
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
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=k8s.gcr.io
curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
kubectl apply -f calico.yaml
(Calico 镜像也要提前导入)
Master 初始化后会输出:
kubeadm join 192.168.x.x:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
Node 机器同样:
ctr images list--image-repositorycontainerd 推荐:
[plugins."io.containerd.grpc.v1.cri"]
systemd_cgroup = true
systemd 作为 init✅ 最稳妥组合
如果你愿意,我可以:
你现在是 完全无外网 还是 有内网仓库?