在无外网(离线)环境的 Debian 上部署 Kubernetes,核心思路是:提前在有网机器下载所需软件包和镜像,再拷贝到目标节点安装。下面给你一套可落地的离线部署方案(以 kubeadm 方式为例,最常用、最标准)。
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
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
mkdir -p /opt/k8s-debs
cd /opt/k8s-debs
apt-get download kubelet kubeadm kubectl kubernetes-cni
apt-get download containerd.io
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
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/
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
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
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=k8s.gcr.io
成功后会输出:
kubeadm join xxx --token xxx
curl -O https://docs.projectcalico.org/manifests/calico.yaml
grep image calico.yaml | awk '{print $2}' | sort -u
导入方式同上。
kubectl apply -f calico.yaml
kubeadm join <master-ip>:6443 \
--token xxx \
--discovery-token-ca-cert-hash sha256:xxx
ctr images list 确认是否导入成功kubeadm init --image-repository 指定本地仓库containerd 默认 systemd,kubelet 也要一致:
cat /var/lib/kubelet/config.yaml
如果你愿意,我可以:
你现在是 学习 / 生产 / 内网安全环境?