Skip to content

Latest commit

 

History

History
317 lines (265 loc) · 9.66 KB

08-离线安装.md

File metadata and controls

317 lines (265 loc) · 9.66 KB

离线安装

约定

  • 本文以 CentOS 7.9_x86 64位操作系统 为例进行讲解。
  • 执行本教程中命令的用户为 root

准备离线包

  • 下载所需离线包

    # 离线安装环境
    curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubeadm-ha-base-amd64.tar
    # 集群运行所需的镜像
    curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubernetes-1.27.6-images-amd64.tgz
    # CentOS 7 系统对应软件包
    curl -LO https://oss.choerodon.com.cn/kubeadm-ha/centos7/kubernetes-1.27.6-centos7-amd64.tgz
    # 克隆脚本
    git clone -b release-1.27 https://ghproxy.com/github.com/TimeBye/kubeadm-ha.git
    
  • 其他系统或ARM64架构点击这里查看所有离线包

离线安装 kubernetes 集群

节点信息

ip hostname OS role
192.168.56.11 node1 CentOS 7.9 master etcd worker
192.168.56.12 node2 CentOS 7.9 master etcd worker
192.168.56.13 node3 CentOS 7.9 master etcd worker
192.168.56.14 node4 CentOS 7.9 worker
192.168.56.15 deploy CentOS 7.9 kubeadm-ha(ansible)

注意: 以下操作未特殊说明都在 192.168.56.15 deploy 节点执行。

kubeadm-ha(ansible) 环境准备

  • 上传准备好的 2 个缓存文件至搭建 kubeadm-ha(ansible) 环境的服务器上,目录为 /root

  • 准备 kubeadm-ha(ansible) 环境

    • 解压离线包
    tar -xzvf kubernetes-1.27.6-images-amd64.tgz
    tar -xzvf kubernetes-1.27.6-centos7-amd64.tgz
    • CentOS 类系统添加软件源

      cat <<EOF | tee /etc/yum.repos.d/kubeadm-ha.repo
      [kubeadm-ha]
      name=Kubeadm HA - \$basearch
      baseurl=file:///root/packages/
      enabled=1
      gpgcheck=0
      repo_gpgcheck=0
      EOF
      
    • Debian 类系统添加软件源

      echo "deb [trusted=yes] file:///root/ packages/" | tee /etc/apt/sources.list.d/kubeadm-ha.list
      
  • 使用 containerd 运行 kubeadm-ha 镜像(与 docker 安装二选一)

    • CentOS 类系统安装 containerd

      # Kylin V10 需要移除以下软件包
      yum remove -y selinux-policy python3-setools thin-provisioning-tools
      
      yum install -y --disablerepo=\* --enablerepo=kubeadm-ha \
        containerd.io
      
    • Debian 类系统安装 containerd

      apt-get update
      apt-get install -y containerd.io
      
    • 配置 containerd

      # root 为 containerd 存储目录,可修改为其他非共享存储目录。
      cat <<EOF | tee /etc/containerd/config.toml
      version = 2
      root = "/var/lib/containerd"
      state = "/run/containerd"
      oom_score = -999
      [grpc]
        max_recv_message_size = 16777216
        max_send_message_size = 16777216
      [debug]
        level = "info"
      [metrics]
        address = ""
        grpc_histogram = false
      [plugins]
        [plugins."io.containerd.grpc.v1.cri"]
          sandbox_image = "registry.custom.local:12480/kubeadm-ha/pause:3.9"
          max_container_log_line_size = -1
          [plugins."io.containerd.grpc.v1.cri".containerd]
            default_runtime_name = "runc"
            snapshotter = "overlayfs"
            [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
              [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
                runtime_type = "io.containerd.runc.v2"
                runtime_engine = ""
                runtime_root = ""
                [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
                  SystemdCgroup = true
          [plugins."io.containerd.grpc.v1.cri".registry]
            config_path = "/etc/containerd/certs.d"
      EOF
      
    • 配置 crictl 命令行

      cat <<EOF | tee /etc/crictl.yaml
      runtime-endpoint: unix:///var/run/containerd/containerd.sock
      image-endpoint: unix:///var/run/containerd/containerd.sock
      timeout: 30
      debug: false
      EOF
      
    • 启动并加载 kubeadm-ha 镜像

      systemctl enable containerd
      systemctl restart containerd
      gunzip -c kubeadm-ha-base-amd64.tar | ctr -n k8s.io images import -
      
    • 运行 kubeadm-ha 镜像

      ctr -n k8s.io run -d --net-host \
        --mount type=bind,src=$PWD/registry,dst=/var/lib/registry,options=rbind:ro \
        --mount type=bind,src=$PWD/packages,dst=/kubernetes/packages,options=rbind:ro \
        --mount type=bind,src=$PWD/kubeadm-ha,dst=/etc/ansible,options=rbind:ro \
        docker.io/setzero/kubeadm-ha:base \
        kubeadm-ha
      
  • 使用 docker 运行 kubeadm-ha 镜像(与 containerd 安装二选一)

    • CentOS 类系统安装 docker

      # Kylin V10 需要移除以下软件包
      yum remove -y selinux-policy python3-setools thin-provisioning-tools
      
      yum install -y --disablerepo=\* --enablerepo=kubeadm-ha \
        docker-ce \
        docker-ce-cli \
        containerd.io
      
    • Debian 类系统安装 docker

      apt-get update
      apt-get install -y \
        docker-ce \
        docker-ce-cli \
        containerd.io
      
    • 配置 docker

      mkdir -p /etc/docker
      # data-root 为 docker 存储目录,可修改为其他非共享存储目录。
      cat <<EOF | tee /etc/docker/daemon.json
      {
        "insecure-registries": ["registry.custom.local:12480"],
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
          "max-size": "100m"
        },
        "data-root": "/var/lib/docker",
        "storage-driver": "overlay2",
        "storage-opts": [
          "overlay2.override_kernel_check=true"
        ]
      }
      EOF
      
    • 启动并加载 kubeadm-ha 镜像

      systemctl enable docker
      systemctl restart docker
      docker load -i kubeadm-ha-base-amd64.tar
      
    • 运行 kubeadm-ha 镜像

      docker run -d --restart=always --name kubeadm-ha \
        -p 12480:12480 \
        -v $PWD/registry:/var/lib/registry \
        -v $PWD/packages:/kubernetes/packages \
        -v $PWD/kubeadm-ha:/etc/ansible \
        setzero/kubeadm-ha:base
  • 推送镜像到已有镜像库(可选项,可跳过)

    • 如果你不知道这一步可以干什么,请立即跳过
      # 命令格式:sync-images 镜像库地址 镜像库用户名 镜像库用户密码
      
      # containerd 示例
      ctr -n k8s.io task exec -t --exec-id "shell$RANDOM" kubeadm-ha bash
      sync-images harbor.custom.io/kubeadm-ha admin Harbor12345
      
      # docker 示例
      docker exec -it kubeadm-ha bash
      sync-images harbor.custom.io/kubeadm-ha admin Harbor12345

编写配置文件

  • 编辑变量文件 ./kubeadm-ha/variables.yaml,内容如下

    # 自定义 hosts 记录,方便后期调整 IP;IP 配置为 kubeadm-ha 镜像运行的服务器的 IP
    # 本例中 192.168.56.15 就是运行 kubeadm-ha 镜像的服务器
    custom_hosts: 
      "192.168.56.15": 
      - "pkgs.custom.local"
      - "registry.custom.local"
    # 安装时发现 docker 或者 containerd 配置被修改则强制其重启应用新配置
    # 重启可能中断集群安装,再次执行集群安装命令即可
    restar_container_manager_force: true
    # 注意地址末尾 / 必须加上
    base_yum_repo: http://pkgs.custom.local:12480/packages/
    epel_yum_repo: http://pkgs.custom.local:12480/packages/
    docker_yum_repo: http://pkgs.custom.local:12480/packages/
    kubernetes_yum_repo: http://pkgs.custom.local:12480/packages/
    base_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
    docker_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
    kubernetes_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
    # 若使用 Docker 作为运行时,则添加此配置
    cri_dockerd_download_url: http://pkgs.custom.local:12480/packages/cri-dockerd.tgz
    # 设置信任镜像库
    docker_insecure_registries:
    - "registry.custom.local:12480"
    containerd_registries:
      "registry.custom.local:12480": "http://registry.custom.local:12480"
    # 配置镜像地址
    kube_image_repository: registry.custom.local:12480/kubeadm-ha
  • 参考 01-集群安装 编写 ansible inventory 文件 ./kubeadm-ha/inventory.ini

  • 集群部署

    • 使用 containerd 进行集群部署(与 docker 安装二选一)

      ctr -n k8s.io task exec -t --exec-id "shell$RANDOM" kubeadm-ha bash
      ansible-playbook -i inventory.ini -e @variables.yaml 90-init-cluster.yml
      
    • 使用 docker 进行集群部署(与 containerd 安装二选一)

      docker exec -it kubeadm-ha bash
      ansible-playbook -i inventory.ini -e @variables.yaml 90-init-cluster.yml
      
  • 安装 helm(可选项,可跳过)

    注意: 以下操作未特殊说明都在 192.168.56.11 第一台 master 节点执行。

    • 下载helm客户端

      curl -sO http://pkgs.custom.local:12480/packages/helm.tar.gz
    • 解压压缩包(以linux-amd64为例)

      tar -zxvf helm.tar.gz
    • 将文件移动到PATH目录中(以linux-amd64为例)

      sudo mv linux-amd64/helm /usr/bin/helm
    • 执行命令,出现以下信息即部署成功。

      $ helm version
      version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e",   GitTreeState:"clean", GoVersion:"go1.20.7"}