避开网络依赖:用本地Nginx搭建Kubernetes 1.29.4离线安装源(含containerd配置)

张开发
2026/4/21 13:55:26 15 分钟阅读

分享文章

避开网络依赖:用本地Nginx搭建Kubernetes 1.29.4离线安装源(含containerd配置)
构建企业级Kubernetes离线安装源NginxContainerd全栈实战指南当企业需要在内网环境批量部署Kubernetes集群时依赖互联网下载安装文件不仅效率低下还存在版本管理混乱、安全审计困难等问题。本文将手把手教你搭建一个完整的私有化安装源实现从二进制文件到容器镜像的全链路离线部署能力。1. 离线源架构设计与核心组件一个完整的Kubernetes离线安装源需要包含以下核心组件二进制文件仓库托管kubelet、kubectl等Kubernetes核心组件容器运行时包包含containerd、runc等容器管理工具网络插件库存放CNI插件和必要依赖镜像仓库私有Registry存储所有依赖镜像需配合镜像同步方案我们选择Nginx作为文件服务器主要考虑其高性能、低资源占用和易配置特性。典型的目录结构如下/opt/k8s-offline/ ├── archives/ # 原始安装包 │ ├── kubernetes-v1.29.4.tar.gz │ ├── containerd-1.7.11.tar.gz │ └── ... ├── repo/ # 解压后的文件目录 │ ├── kubernetes/ │ ├── containerd/ │ └── ... └── nginx.conf # Nginx配置文件2. 环境准备与依赖下载2.1 基础环境要求准备一台具有互联网访问权限的跳板机建议配置操作系统CentOS 7.9/Ubuntu 20.04磁盘空间≥50GB取决于需要缓存的版本数量内存≥4GB网络能够访问Google Storage、GitHub等资源站2.2 自动化下载脚本使用以下脚本批量下载所需组件以Kubernetes 1.29.4为例#!/bin/bash set -eo pipefail # 版本定义 K8S_VERv1.29.4 CONTAINERD_VER1.7.11 RUNC_VER1.1.9 CNI_VER1.3.0 # 创建下载目录 mkdir -p ./offline-packages cd ./offline-packages # 下载Kubernetes组件 wget https://dl.k8s.io/release/${K8S_VER}/bin/linux/amd64/kubeadm wget https://dl.k8s.io/release/${K8s_VER}/bin/linux/amd64/kubelet wget https://dl.k8s.io/release/${K8s_VER}/bin/linux/amd64/kubectl # 下载containerd全家桶 wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VER}/containerd-${CONTAINERD_VER}-linux-amd64.tar.gz wget https://github.com/opencontainers/runc/releases/download/v${RUNC_VER}/runc.amd64 # 下载网络插件 wget https://github.com/containernetworking/plugins/releases/download/v${CNI_VER}/cni-plugins-linux-amd64-v${CNI_VER}.tgz # 验证文件完整性 sha256sum -c EOF $(curl -sL https://dl.k8s.io/release/${K8S_VER}/bin/linux/amd64/kubeadm.sha256) $(curl -sL https://dl.k8s.io/release/${K8S_VER}/bin/linux/amd64/kubelet.sha256) $(curl -sL https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VER}/containerd-${CONTAINERD_VER}-linux-amd64.tar.gz.sha256sum) EOF提示建议定期更新版本号并重新下载确保安全补丁及时同步3. Nginx服务器配置实战3.1 安装与基础配置# Ubuntu/Debian sudo apt install -y nginx # CentOS/RHEL sudo yum install -y epel-release sudo yum install -y nginx修改Nginx配置/etc/nginx/conf.d/k8s-repo.confserver { listen 80; server_name k8s-repo.internal; root /opt/k8s-offline/repo; autoindex on; location / { try_files $uri $uri/ 404; } # 大文件下载优化 client_max_body_size 1024M; sendfile on; tcp_nopush on; keepalive_timeout 65; }3.2 文件目录组织策略建议按组件类型版本号组织目录结构/opt/k8s-offline/repo/ ├── kubernetes/ │ └── v1.29.4/ │ ├── kubeadm │ ├── kubelet │ └── kubectl ├── containerd/ │ └── v1.7.11/ │ ├── containerd │ └── runc └── cni/ └── v1.3.0/ └── cni-plugins.tgz使用符号链接创建latest版本指向ln -s /opt/k8s-offline/repo/kubernetes/v1.29.4 /opt/k8s-offline/repo/kubernetes/latest4. 客户端节点自动化部署方案4.1 节点初始化脚本改造将在线安装脚本转换为离线版本主要修改下载URL# 原在线下载命令 # curl -LO https://dl.k8s.io/release/v1.29.4/bin/linux/amd64/kubeadm # 改为离线版本 K8S_REPOhttp://k8s-repo.internal wget ${K8S_REPO}/kubernetes/v1.29.4/kubeadm chmod x kubeadm sudo mv kubeadm /usr/local/bin/4.2 containerd离线配置模板创建/etc/containerd/config.tomlversion 2 [plugins.io.containerd.grpc.v1.cri] sandbox_image registry.internal/pause:3.9 [plugins.io.containerd.grpc.v1.cri.containerd] snapshotter overlayfs [plugins.io.containerd.grpc.v1.cri.registry] [plugins.io.containerd.grpc.v1.cri.registry.mirrors] [plugins.io.containerd.grpc.v1.cri.registry.mirrors.docker.io] endpoint [http://registry.internal]4.3 系统服务单元文件示例/etc/systemd/system/kubelet.service.d/10-offline.conf[Service] EnvironmentKUBELET_EXTRA_ARGS--pod-infra-container-imageregistry.internal/pause:3.95. 高级维护与版本管理5.1 版本升级流程在新目录下载新版本组件如v1.30.0测试确认兼容性更新latest符号链接滚动更新集群节点sudo ln -sfn /opt/k8s-offline/repo/kubernetes/v1.30.0 /opt/k8s-offline/repo/kubernetes/latest5.2 完整性校验方案建议为每个版本生成校验文件cd /opt/k8s-offline/repo/kubernetes/v1.29.4 sha256sum kube* SHA256SUMS客户端节点下载后验证sha256sum -c SHA256SUMS5.3 监控与告警配置使用Prometheus监控Nginx服务状态scrape_configs: - job_name: nginx metrics_path: /status/format/prometheus static_configs: - targets: [k8s-repo.internal:80]结合Grafana设置磁盘空间告警当存储使用超过80%时触发通知。

更多文章