制作 K8S 组件离线安装包

制作 K8S 组件离线安装包

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

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

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

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

1. 准备工作

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

  1. 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 脚本:

  1. #!/usr/bin/env bash
  2. # usage: ./push_component.sh [component] [version] [arch]
  3. # usage: ./push_component.sh k8s v1.23.9 amd64
  4. set -e
  5. if type kcctl &>/dev/null; then
  6. kcctl version
  7. else
  8. echo "kcctl command not found, please install it first!"
  9. fi
  10. PKG_URL_PREFIX="https://oss.kubeclipper.io/packages"
  11. fileList=()
  12. name=$1
  13. if [[ "${name}" != "k8s" ]] && [[ "${name}" != "calico" ]] && [[ "${name}" != "containerd" ]] && [[ "${name}" != "docker" ]] && [[ "${name}" != "metallb" ]]; then
  14. echo "only 'k8s', 'calico','containerd','docker','metallb' packages are supported. default: $name"
  15. exit 1
  16. fi
  17. version=$2
  18. if [[ -z "${version}" ]]; then
  19. echo "Please specify the package version!"
  20. exit 1
  21. fi
  22. arch=$3
  23. if [[ "${arch}" != "amd64" ]] && [[ "${arch}" != "arm64" ]]; then
  24. echo "only 'amd64', 'arm64' architectures are supported. default: $arch"
  25. exit 1
  26. fi
  27. ``
  28. build_dir=${name}/${version}/${arch}
  29. pkg_name=${name}-${version}-${arch}.tar.gz
  30. pkg_type="k8s"
  31. packaging() {
  32. case $name in
  33. k8s)
  34. fileList=(
  35. images.tar.gz
  36. configs.tar.gz
  37. manifest.json
  38. )
  39. pkg_type="k8s"
  40. ;;
  41. calico)
  42. fileList=(
  43. images.tar.gz
  44. manifest.json
  45. )
  46. if [[ "$(echo -e "3.26\n${version}" | sort -V | tail -n 1)" == "${version}" ]]; then
  47. fileList=(
  48. images.tar.gz
  49. charts.tgz
  50. manifest.json
  51. )
  52. fi
  53. pkg_type="cni"
  54. ;;
  55. containerd,docker)
  56. fileList=(
  57. configs.tar.gz
  58. manifest.json
  59. )
  60. pkg_type="cri"
  61. ;;
  62. metallb)
  63. fileList=(
  64. images.tar.gz
  65. manifest.json
  66. )
  67. pkg_type="metallb"
  68. ;;
  69. esac
  70. for file in "${fileList[@]}"; do
  71. echo "download ${file}..."
  72. wget ${PKG_URL_PREFIX}/${build_dir}/${file} -P ${build_dir}
  73. done
  74. echo "packaging ${pkg_name}..."
  75. tar -zcvf ${pkg_name} ${build_dir}
  76. echo "packaging ${pkg_name} done"
  77. echo "push ${pkg_name} to kc..."
  78. kcctl resource push --pkg ${pkg_name} --type ${pkg_type}
  79. echo "push ${pkg_name} to kc done"
  80. }
  81. packaging
  82. echo "clean up..."
  83. rm -rf ${build_dir}
  84. rm -rf ${pkg_name}
  85. echo "clean up done"

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

  1. chmod +x push_component.sh
  2. # 推送 k8s 组件包
  3. ./push_component.sh k8s v1.23.9 amd64
  4. # 推送 calico 组件包
  5. ./push_component.sh calico v3.22.4 amd64
  6. # 推送 containerd 组件包
  7. ./push_component.sh containerd v1.6.4 amd64
  8. # 推送 docker 组件包
  9. ./push_component.sh docker 20.10.20 amd64
  10. # 推送 metallb 组件包
  11. ./push_component.sh metallb v0.13.7 amd64

4. 查看离线组件包

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

  1. kcctl resource list

5. 使用离线组件包

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

集群配置01 集群配置02