在 CentOS 离线环境部署 Kubernetes(k8s),核心思路是:提前在有网环境下载好所有依赖(rpm、镜像、二进制),再拷贝到离线机器安装。下面给你一套通用、可落地的离线部署方案(以 kubeadm + containerd 为例,CentOS 7/8 均适用)。
离线部署步骤:
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 禁用 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install --downloadonly --downloaddir=./k8s-rpm \
kubelet kubeadm kubectl
yum install --downloadonly --downloaddir=./containerd-rpm \
containerd.io
或使用 docker:
yum install --downloadonly --downloaddir=./docker-rpm \
docker-ce docker-ce-cli
kubeadm config images list
示例:
k8s.gcr.io/kube-apiserver:v1.28.0
k8s.gcr.io/kube-controller-manager:v1.28.0
k8s.gcr.io/kube-scheduler:v1.28.0
k8s.gcr.io/kube-proxy:v1.28.0
k8s.gcr.io/pause:3.9
k8s.gcr.io/etcd:3.5.9
k8s.gcr.io/coredns:v1.10.1
images=$(kubeadm config images list)
for img in $images
do
docker pull $img
docker save $img -o $(echo $img | tr '/' '_').tar
done
for f in *.tar
do
docker load -i $f
done
✅ 如果是 containerd:
ctr -n k8s.io images import xxx.tar
yum localinstall -y ./*.rpm
systemctl enable --now kubelet
systemctl enable --now containerd
kubeadm init \
--apiserver-advertise-address=192.168.1.10 \
--image-repository=k8s.gcr.io \
--kubernetes-version=v1.28.0 \
--pod-network-cidr=10.244.0.0/16
镜像已离线导入,不会再去拉取
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
curl -O https://docs.projectcalico.org/manifests/calico.yaml
修改镜像为离线镜像(或直接导入)
离线机执行:
kubectl apply -f calico.yaml
Master 初始化后会输出:
kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash xxx
docker images / ctr images list 能看到--image-repository 指定journalctl -u kubelet -f
podman 或 containerd如果你不想手动搞:
这些都支持 离线部署包
如果你愿意,我可以:
你现在是 CentOS 几?k8s 哪个版本?单节点还是集群?