在离线环境部署 Debian + Kubernetes(K8s),核心思路是:提前在有网的机器上下载好所有依赖(系统包、容器运行时、K8s 组件、镜像),然后拷贝到目标机器安装。
下面给你一套可落地的离线安装方案(以 kubeadm + containerd 为例,最常用、最稳定)。
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 设置主机名
hostnamectl set-hostname master01
# 关闭防火墙(或放行端口)
ufw disable
mkdir -p /opt/k8s-offline
cd /opt/k8s-offline
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/
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/
查看需要的镜像:
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 也可以)
tar czf k8s-offline.tar.gz debs images kubernetes.gpg kubernetes.list
拷贝到目标机器:
scp k8s-offline.tar.gz debian-node:/root/
tar xf k8s-offline.tar.gz
dpkg -i debs/*.deb
apt -f install -y
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
for img in images/*.tar; do
ctr -n k8s.io images import $img
done
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
在有网机器下载:
curl -O https://docs.projectcalico.org/manifests/calico.yaml
拷贝到节点后:
kubectl apply -f calico.yaml
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
如果你愿意,我可以:
你现在是 单节点还是集群?Debian 几?