制作 K8S 组件离线安装包

制作 K8S 组件离线安装包

本文档介绍如何制作 K8S 组件离线安装包,对于没有外网的环境,可以通过离线安装包进行安装。

当前 kubeclipper v1.4 版本离线部署包中仅包含以下 K8S 组件:

  • k8s: v1.27.4
  • containerd: v1.6.4
  • calico: v3.26.1

对于有特殊需求的用户,可以通过本文档介绍的方法自行制作离线组件包,然后在 kubeclipper 中使用。

1. 准备工作

按照 文档 部署好 kubeclipper,确保 kcctl 命令可以正常使用。

kcctl version

以下操作均在 kubeclipper 部署节点上执行,使用 kcctl resource 命令进行组件包上传。

2. 确认组件版本

根据以下两个表格信息,确认需要制作的组件包版本,使用推送脚本或者手动上传组件包到 kubeclipper。

k8s 组件包表 记录当前对象存储里已制作好的各类组件包,后续我们将逐步开源更多组件包以及打包脚本。
k8s 版本与组件推荐版本对应关系表 记录了各个 k8s 版本对应的组件版本,可以根据自己的需求选择对应的组件版本。

k8s 版本与组件推荐版本对应关系表

k8s 版本containerd 版本docker 版本calico 版本
v1.28.0v1.6.4-v3.26.1
v1.27.4v1.6.4-v3.26.1
v1.26.7v1.6.4-v3.26.1
v1.25.4v1.6.4-v3.22.4
v1.24.8v1.6.4-v3.22.4
v1.23.9v1.6.420.10.20v3.22.4
v1.23.6v1.6.420.10.20v3.22.4
v1.22.12v1.6.420.10.20v3.22.4
v1.21.14v1.6.420.10.20v3.22.4
v1.20.15v1.6.420.10.20v3.16.10
v1.19.16v1.6.420.10.20v3.16.10
v1.18.20v1.6.420.10.20v3.16.10

k8s 组件包表

组件名称版本
k8sv1.28.0
k8sv1.27.4
k8sv1.26.7
k8sv1.25.4
k8sv1.24.8
k8sv1.23.9
k8sv1.23.6
k8sv1.22.12
k8sv1.21.14
k8sv1.20.15
k8sv1.19.16
k8sv1.18.20
containerd1.6.4
docker20.10.20
calicov3.26.1
calicov3.22.4
calicov3.21.2
calicov3.16.10
calicov3.11.2

3. 推送离线组件包到 kubeclipper

push_component.sh 脚本:

#!/usr/bin/env bash
# usage: ./push_component.sh [component] [version] [arch]
# usage: ./push_component.sh k8s v1.23.9 amd64

set -e

if type kcctl &>/dev/null; then
  kcctl version
else
  echo "kcctl command not found, please install it first!"
fi

PKG_URL_PREFIX="https://oss.kubeclipper.io/packages"
fileList=()

name=$1
if [[ "${name}" != "k8s" ]] && [[ "${name}" != "calico" ]] && [[ "${name}" != "containerd" ]] && [[ "${name}" != "docker" ]] && [[ "${name}" != "metallb" ]]; then
  echo "only 'k8s', 'calico','containerd','docker','metallb' packages are supported. default: $name"
  exit 1
fi
version=$2
if [[ -z "${version}" ]]; then
  echo "Please specify the package version!"
  exit 1
fi
arch=$3
if [[ "${arch}" != "amd64" ]] && [[ "${arch}" != "arm64" ]]; then
  echo "only 'amd64', 'arm64' architectures are supported. default: $arch"
  exit 1
fi
``
build_dir=${name}/${version}/${arch}
pkg_name=${name}-${version}-${arch}.tar.gz
pkg_type="k8s"

packaging() {
  case $name in
  k8s)
    fileList=(
      images.tar.gz
      configs.tar.gz
      manifest.json
    )
    pkg_type="k8s"
    ;;
  calico)
    fileList=(
      images.tar.gz
      manifest.json
    )
    if [[ "$(echo -e "3.26\n${version}" | sort -V | tail -n 1)" == "${version}" ]]; then
      fileList=(
        images.tar.gz
        charts.tgz
        manifest.json
      )
    fi
    pkg_type="cni"
    ;;
  containerd,docker)
    fileList=(
      configs.tar.gz
      manifest.json
    )
    pkg_type="cri"
    ;;
  metallb)
    fileList=(
      images.tar.gz
      manifest.json
    )
    pkg_type="metallb"
    ;;
  esac

  for file in "${fileList[@]}"; do
    echo "download ${file}..."
    wget ${PKG_URL_PREFIX}/${build_dir}/${file} -P ${build_dir}
  done

  echo "packaging ${pkg_name}..."
  tar -zcvf ${pkg_name} ${build_dir}
  echo "packaging ${pkg_name} done"
  echo "push ${pkg_name} to kc..."
  kcctl resource push --pkg ${pkg_name} --type ${pkg_type}
  echo "push ${pkg_name} to kc done"
}

packaging
echo "clean up..."
rm -rf ${build_dir}
rm -rf ${pkg_name}
echo "clean up done"

使用 push_component.sh 脚本推送组件包到 kubeclipper:

chmod +x push_component.sh

# 推送 k8s 组件包
./push_component.sh k8s v1.23.9 amd64

# 推送 calico 组件包
./push_component.sh calico v3.22.4 amd64

# 推送 containerd 组件包
./push_component.sh containerd v1.6.4 amd64

# 推送 docker 组件包
./push_component.sh docker 20.10.20 amd64

# 推送 metallb 组件包
./push_component.sh metallb v0.13.7 amd64

4. 查看离线组件包

使用 kcctl resource list 命令查看已上传的离线组件包:

kcctl resource list

5. 使用离线组件包

登录 kubeclipper 控制台,点击创建集群,进入集群配置页,镜像类型选择离线,即可选择已上传的离线组件包。

集群配置01 集群配置02