当前位置:首页 > 随笔 > 正文内容

离线环境搭建Kubernetes 1.27.2集群指南

访客 随笔 2026年7月3日 2

系统环境准备

本文档介绍如何在CentOS 7.9系统上离线部署Kubernetes 1.27.2集群。首先,我们需要准备三台最小化安装的CentOS 7.9服务器,具体配置如下:

主机名 IP地址
k8s-master 10.17.86.49
k8s-node1 10.17.86.48
k8s-node2 10.17.86.47

基础系统配置

在所有节点上执行以下基础配置:

  1. 配置网络环境
  2. 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
  3. 关闭SELinux:setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  4. 安装必要软件:yum install vim gcc wget lrzsz bash-completion gperf -y

安装Containerd运行时

  1. 从GitHub下载containerd相关二进制文件:
    • cri-containerd-cni-1.7.2-linux-amd64.tar
    • containerd-1.7.2-linux-amd64.tar.gz
  2. 解压并安装:
    tar Cxzvf /usr/local containerd-1.7.2-linux-amd64.tar.gz
    mkdir temp_dir;tar -xvf cri-containerd-cni-1.7.2-linux-amd64.tar.gz -C temp_dir/
    
    mkdir -p /usr/local/lib/systemd/system/
    cp temp_dir/etc/systemd/system/containerd.service /usr/local/lib/systemd/system/
    
    systemctl daemon-reload
    systemctl start containerd
    mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml
  3. 编辑containerd配置文件 /etc/containerd/config.toml,修改以下内容:
    [plugins]
       [plugins."io.containerd.grpc.v1.cri"]
           sandbox_image = "registry.k8s.io/pause:3.9"
           [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
               SystemdCgroup = true

系统内核参数配置

  1. 加载内核模块:
    modprobe br_netfilter
  2. 编辑 /etc/sysctl.conf 文件,添加以下参数:
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
  3. 使配置生效:sysctl -p
  4. 创建 /etc/modules-load.d/k8s.conf 文件,添加以下内容:
    overlay
    br_netfilter

安装Runc和CNI插件

  1. 编译安装libseccomp:
    tar -xvf libseccomp-2.5.4.tar.gz
    cd libseccomp-2.5.4
    ./configure && make -j8 && make install
    echo "/usr/local/lib" >> /etc/ld.so.conf
    ldconfig
  2. 安装runc:
    cp temp_dir/usr/local/sbin/runc /usr/local/sbin/
    runc --version
  3. 安装CNI插件:
    mkdir -p /opt/cni/bin
    cp temp_dir/opt/cni/bin/* /opt/cni/bin

安装Kubernetes组件

  1. 配置阿里云Yum源:
    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=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
  2. 安装Kubernetes组件:
    yum makecache
    yum install kubeadm-1.27.2-0.x86_64 kubectl-1.27.2-0.x86_64 kubelet-1.27.2-0.x86_64 -y
    systemctl start kubelet.service

准备Kubernetes镜像

  1. 获取所需镜像列表:
    kubeadm config images list
  2. 在有网络连接的机器上从阿里云镜像仓库下载并导出镜像:
    docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
    docker pull registry.aliyuncs.com/google_containers/etcd:3.5.7-0
    docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.27.2
    docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.27.2
    docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.27.2
    docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.27.2
    docker pull registry.aliyuncs.com/google_containers/pause:3.9
    
    # 重新标记镜像
    docker tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns:v1.10.1
    docker tag registry.aliyuncs.com/google_containers/etcd:3.5.7-0 registry.k8s.io/etcd:3.5.7-0
    docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.27.2 registry.k8s.io/kube-apiserver:v1.27.2
    docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.27.2 registry.k8s.io/kube-controller-manager:v1.27.2
    docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.27.2 registry.k8s.io/kube-proxy:v1.27.2
    docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.27.2 registry.k8s.io/kube-scheduler:v1.27.2
    docker tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9
    
    # 导出镜像
    docker save -o coredns-v1.10.1.tar registry.k8s.io/coredns:v1.10.1
    docker save -o etcd-3.5.7-0.tar registry.k8s.io/etcd:3.5.7-0
    docker save -o kube-apiserver-v1.27.2.tar registry.k8s.io/kube-apiserver:v1.27.2
    docker save -o kube-controller-manager-v1.27.2.tar registry.k8s.io/kube-controller-manager:v1.27.2
    docker save -o kube-proxy-v1.27.2.tar registry.k8s.io/kube-proxy:v1.27.2
    docker save -o kube-scheduler-v1.27.2.tar registry.k8s.io/kube-scheduler:v1.27.2
    docker save -o pause-3.9.tar registry.k8s.io/pause:3.9
  3. 在所有Kubernetes节点上导入镜像:
    ctr -n k8s.io image import coredns-v1.10.1.tar
    ctr -n k8s.io image import etcd-3.5.7-0.tar 
    ctr -n k8s.io image import kube-apiserver-v1.27.2.tar
    ctr -n k8s.io image import kube-controller-manager-v1.27.2.tar
    ctr -n k8s.io image import kube-proxy-v1.27.2.tar
    ctr -n k8s.io image import kube-scheduler-v1.27.2.tar 
    ctr -n k8s.io image import pause-3.9.tar

初始化Kubernetes集群

  1. 在主节点(k8s-master)上执行初始化命令:
    kubeadm init --kubernetes-version=v1.27.2 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=10.17.86.49
  2. 配置kubectl:
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
  3. 在从节点(k8s-node1和k8s-node2)上执行加入集群命令:
    kubeadm join 10.17.86.49:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  4. 在主节点上检查节点状态:
    kubectl get nodes

部署网络插件

  1. 下载Calico网络插件:
    wget https://github.com/projectcalico/calico/releases/download/v3.26.0/release-v3.26.0.tgz
  2. 在所有节点上导入Calico镜像:
    tar -xvf release-v3.26.0.tgz
    cd release-v3.26.0/images
    ctr -n k8s.io image import calico-cni.tar
    ctr -n k8s.io image import calico-node.tar
    ctr -n k8s.io image import calico-kube-controllers.tar
  3. 在主节点上应用Calico配置:
    cd release-v3.26.0/manifests
    kubectl apply -f calico.yaml
  4. 等待所有Pod状态变为Running:
    kubectl get pods -n kube-system

至此,Kubernetes 1.27.2集群离线部署完成,所有节点状态应为Ready,系统Pod正常运行。

标签: CentOS

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

Selenium自动化测试入门指南

Selenium自动化测试入门指南

什么是自动化测试? 自动化测试是指利用软件工具自动执行测试用例,模拟用户操作,如打开网页、点击链接、输入文本等,并验证结果是否符合预期。 其主要优点包括: 大幅减少人工成本 测试速度快 可以在非工作时间运行 支持持续集成和交付 然而,它也存在一些局限性,例如开发成本较高、不适合快速变化的项目、依赖稳定的UI界面等。 自动化测试的应用条件 适合引入自动化测试的情况包括: 手动测试耗时且需要大量...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。