Feb 212022
 

kubekey 2.0 的一个重大的功能,就是实现离线安装。目前已经到了rc3的阶段,这里就整理一下我的理解。

  • https://blog.k8s.li/pass-tob-k8s-offline-deploy.html

上面这篇文章,其实非常经典,介绍离线安装的关键点,对着来看kubekey实现的功能,就可以更好理解。

  • 系统 OS 的 rpm/deb 包:ipvsadm、conntrack 等;
  • 如 kubelet、kubectl、kubeadm、crictl ,docker-ce, containerd
  • 组件容器镜像:如 kube-apiserver、kube-proxy、coredns、calico、flannel 等;

我们就来看看kubekey如何解决上面的3个问题。

操作系统依赖

其实就是如何把依赖的包,搞成一个repo,对于kubekey来说,他是通过制作一个iso,挂在到节点上,添加临时的repo,解决k8s的安装,对系统的依赖问题。

Docker和contained,并不是才有repo的方式安装,所以对于kubekey来说,repo,只需要解决系统的k8s的依赖就可以。

  • https://github.com/kubesphere/kubekey/blob/master/docs/manifest-example.md
spec:
  arches: 
  - amd64
  operatingSystems: 
  - arch: amd64
    type: linux
    id: ubuntu
    version: "20.04"
    osImage: Ubuntu 20.04.3 LTS
    repository: 
      iso:
        localPath: 
        url: https://github.com/pixiake/k8s-dependencies/releases/download/v1.0.0/ubuntu-20.04-amd64-debs.iso
  - arch: amd64
    type: linux
    id: centos
    version: "7"
    osImage: CentOS Linux 7 (Core)
    repository:
      iso:
        localPath:
        url: https://github.com/pixiake/k8s-dependencies/releases/download/v1.0.0/centos-7-amd64-rpms.iso

后续kubekey会提供相应的工具,来制作这个iso,原理其实和木子文章介绍应该是一样的。

kubelet 等二进制

k8s的二进制包,kubekey 1.21,已经解决了这个问题,默认会做kk的目录下,创建一个kubekey的目录,目录下,如何已经存放好相应的二进制包,他就直接使用,如果没有,kk就会下载。通过ansbile 分发到各个节点的相应目录下。

所以kk会根据你需要k8s版本,下载相应的

  • kubeadm
  • kubelet
  • kubectl
  • cni

还有相关的

  • docker or contained
  • crictl

当然也会包括docker 相应的mirror,镜像仓库的设置。

组件容器镜像

这个是最复杂,涉及到镜像仓库,证书,镜像。要做的工作比较多。对于kubekey来说,

  • 初始化一个registry 或者harbor
  • 下载需要的镜像,导入到镜像仓库
  • 解决证书问题,所有的节点请求私有仓库,拉取镜像。

目前kubekey 2.0 ,已经基本都实现了。可以很流畅的把k8s和kubesphere都实现离线安装。

 Leave a Reply

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.