Kubernetes 1.29 零线网环境 kubeadm + Docker 部署步骤 部分一:联网环境下的准备操作 一、环境设置 1. 主机配置 例:
Master IP: 192.168.0.10
Node1 IP: 192.168.0.11
私有 Docker Registry: 192.168.0.100:5000
2. 版本信息
Kubernetes: v1.29.0
Docker 作为 container runtime(需配合额外组件 cri-dockerd)
二、网络环境下操作 1. 使用 yum 下载 kubeadm、kubelet、kubectl 到指定位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo mkdir -p /data/k8s-rpmssudo cp /etc/yum.repos.d /data/k8s-rpms/ -rcat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF sudo yum install --downloadonly --downloaddir=/data/k8s-rpms kubelet kubeadm kubectl --disableexcludes=kubernetes
2. 下载 Docker 和 cri-dockerd RPM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 yum install -y yum-utils --downloadonly --downloaddir=./docker_rpms yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yumdownloader --resolve --destdir=./docker_rpms docker-ce docker-ce-cli containerd.io wget https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgz tar -czvf docker_rpms.tar.gz ./docker_rpms
3. 参照下面的安装步骤先安装docker和kubeadm …
4. 下载 Kubernetes 所需镜像 1 kubeadm config images list --kubernetes-version=v1.29.0
镜像清单:
1 2 3 4 5 6 7 registry .k8s.io/kube-apiserver:v1.29 .0 registry .k8s.io/kube-controller-manager:v1.29 .0 registry .k8s.io/kube-scheduler:v1.29 .0 registry .k8s.io/kube-proxy:v1.29 .0 registry .k8s.io/pause:3 .9 registry .k8s.io/etcd:3 .5 .9 -0 registry .k8s.io/coredns/coredns:v1.11 .1
5. 下载镜像并推送到私有仓库 生成脚本 images-download-push.sh
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/bin/bash REGISTRY=192.168.0.100:5000 K8S_VERSION=v1.29.0 IMAGES=( kube-apiserver:$K8S_VERSION kube-controller-manager:$K8S_VERSION kube-scheduler:$K8S_VERSION kube-proxy:$K8S_VERSION pause:3.9 etcd:3.5.9-0 coredns/coredns:v1.11.1 ) mkdir -p ./imagesfor image in ${IMAGES[@]} ; do docker pull registry.k8s.io/$image local_image=$REGISTRY /$(basename $image ) docker tag registry.k8s.io/$image $local_image docker save -o ./images/$(basename $image ).tar $local_image done
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 cd ../imagesfor img in $(kubeadm config images list); do filename=$(echo "$img " | sed 's/\//_/g' | sed 's/:/_/g' ) echo "拉取镜像: $img " docker pull "$img " echo "保存镜像到: ./$filename .tar" docker save -o "./$filename .tar" "$img " done echo "所有镜像处理完成。"
6. 下载 Flannel 网络插件 1 2 3 4 5 6 7 8 9 cd ../manifestswget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml sed -i 's|quay.io/coreos/flannel|192.168.0.10:5000/flannel|g' docker pull flannel/flannel:v0.24.2 docker tag flannel/flannel:v0.24.2 192.168.10.11:5000/flannel:v0.24.2 docker save -o flannel.tar 192.168.10.11:5000/flannel:v0.24.2
7. 打包离线安装包 1 2 3 4 5 6 7 8 9 10 11 12 13 k8s-offline-package/ ├── rpms/ │ ├── kubeadm-*.rpm │ ├── kubelet-*.rpm │ ├── kubectl-*.rpm │ ├── docker*.rpm │ └── cri-dockerd*.rpm ├── images/ │ ├── kube-apiserver.tar │ ├── ... ├── kubeadm-config.yaml ├── kube-flannel.yml ├── install-guide.txt
部分二:离线环境下的部署步骤 一、基础环境配置 1. 关闭 swap/selinux/firewalld 1 2 3 sudo swapoff -a && sudo sed -i '/swap/d' /etc/fstabsudo setenforce 0 && sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/configsudo systemctl disable firewalld --now
2. 添加内核参数 1 2 3 4 5 6 7 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sudo modprobe br_netfiltersudo sysctl --system
3. 设置主机名 1 2 3 4 5 6 7 8 cat >> /etc/hosts <<EOF 192.168.0.10 k8s-master 192.168.0.11 k8s-node1 192.168.0.12 k8s-node2 EOF hostnamectl set-hostname k8s-master
二、安装 Docker 和 cri-dockerd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 cd rpms && sudo rpm -ivh docker*.rpmsudo systemctl enable docker --nowcat <<EOF | sudo tee /etc/docker/daemon.json { "insecure-registries": ["192.168.0.100:5000"] } EOF sudo systemctl restart dockersudo rpm -ivh cri-dockerd*.rpmsudo systemctl enable cri-docker --now
创建私有 Docker Registry 1 2 docker run -d -p 5000:5000 --restart=always --name registry \ -v /opt/registry:/var/lib/registry registry:2
配置各节点信任 Registry 在所有节点 /etc/docker/daemon.json:
1 { "insecure-registries" : ["192.168.0.10:5000" ] }
然后重启:
1 2 systemctl daemon-reexec systemctl restart docker
安装cri-dockerd
1 2 3 4 5 sudo rpm -ivh cri-dockerd*.rpmsudo systemctl daemon-reexecsudo systemctl daemon-reloadsudo systemctl enable cri-docker --now
三、安装 kubeadm/kubelet/kubectl 1 2 cd rpms && sudo rpm -ivh kubelet-*.rpm kubeadm-*.rpm kubectl-*.rpmsudo systemctl enable kubelet
四、导入镜像 1 2 cd imagesfor img in *.tar; do sudo docker load -i $img ; done
五、初始化 Master 1. 配置 kubeadm 模板 kubeadm-config.yaml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168 .0 .10 bindPort: 6443 criSocket: unix:///var/run/cri-dockerd.sock --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.29.0 imageRepository: 192.168 .0 .100 :5000 networking: podSubnet: 10.244 .0 .0 /16 serviceSubnet: 10.96 .0 .0 /12 --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: iptables
2. 初始化 1 sudo kubeadm init --config kubeadm-config.yaml --upload-certs
3. 配置 kubectl 用户 1 2 3 mkdir -p $HOME /.kubesudo cp /etc/kubernetes/admin.conf $HOME /.kube/configsudo chown $(id -u):$(id -g) $HOME /.kube/config
六、部署 Flannel 网络 1 kubectl apply -f kube-flannel.yml
七、Node 节点加入 在 Node 节点执行 Master 初始化时输出的 join 指令:
1 2 3 sudo kubeadm join 192.168.0.10:6443 --token xxx \ --discovery-token-ca-cert-hash sha256:xxxx \ --cri-socket unix:///var/run/cri-dockerd.sock
确保每个节点都导入了需要镜像,且 docker 配置了信任私有仓库,同时已安装并启动 cri-dockerd
八、校验状态 1 2 kubectl get nodes kubectl get pods -A
注意事项
Kubernetes 1.24+ 开始弃用 Dockershim,1.29 如继续使用 Docker 需安装 cri-dockerd。
私有 registry 必须是可访问的 IP + 端口。
Docker 必须配置 insecure-registries
。
镜像名称必须和 kubeadm 配置一致。
如果不想使用私有仓库,需把镜像 tag 成 registry.k8s.io/格式名称。
如使用非 root 用户安装:
必须具有 sudo
权限,确保能安装软件包、配置 systemd 和访问 /etc
等目录。
.kube/config
拷贝后需执行 chown
,确保普通用户能使用 kubectl。
建议用 sudo tee
和 sudo systemctl
替代直接写入配置或启用服务命令。
如需打包成一套可上传的 .tar.gz 资源包,或自动化安装脚本,可再继续要求。