部署集群

    openEuler 提供的 Kubernetes 集群自动化部署工具:

    • 支持在多种常见 Linux 发行版(例如 openEuler、CentOS、Ubuntu)上部署 Kubernetes 集群。
    • 支持在不同 CPU 架构(例如 AMD64 和 ARM64)上混合部署。

    使用 Kubernetes 集群自动化部署工具,需要满足如下要求:

    • 部署集群需要使用 root 权限
    • 待部署 Kubernetes 的机器已经配置好机器名称 hostname ,并且已安装 tar 命令,确保能够使用 tar 命令解压 tar.gz 格式的压缩包。
    • 待部署 Kubernetes 的机器已经配置 ssh ,确保能够远程访问。如果是普通用户 ssh 登录,需要确保该用户有免密执行 sudo 的权限。

    如果是离线安装,请根据集群的架构,准备对应架构的依赖包(ETCD 相关软件包、容器引擎相关软件包、Kubernetes 集群组件软件包、网络相关的软件包、coredns 软件包、依赖的容器镜像等)。

    假设网络插件为 calico、集群中所有机器的架构为 ARM64,准备安装包的步骤如下:

    1. 下载依赖的软件包和 calico.yaml 。

    2. 按照规定的目录存放下载的安装包、文件和镜像(具体存放格式请参见 “准备环境”)。例如:

      1. package
      2. ├── bin
      3. ├── bandwidth
      4. ├── bridge
      5. ├── conntrack
      6. ├── containerd
      7. ├── containerd-shim
      8. ├── coredns
      9. ├── ctr
      10. ├── dhcp
      11. ├── docker
      12. ├── dockerd
      13. ├── docker-init
      14. ├── docker-proxy
      15. ├── etcd
      16. ├── etcdctl
      17. ├── firewall
      18. ├── flannel
      19. ├── host-device
      20. ├── host-local
      21. ├── ipvlan
      22. ├── kube-apiserver
      23. ├── kube-controller-manager
      24. ├── kubectl
      25. ├── kubelet
      26. ├── kube-proxy
      27. ├── loopback
      28. ├── macvlan
      29. ├── portmap
      30. ├── ptp
      31. ├── runc
      32. ├── sbr
      33. ├── socat
      34. ├── static
      35. ├── vlan
      36. └── vrf
      37. ├── file
      38. ├── calico.yaml
      39. └── docker.service
      40. ├── image
      41. └── images.tar
      42. └── packages_notes.md
    3. 编写 packages_notes.md,声明软件包来源,便于用户查看。

      1. 1. ETCD
      2. - etcd,etcdctl
      3. - 架构:arm64
      4. - 版本:3.5.0
      5. - 地址:https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-arm64.tar.gz
      6. 2. Docker Engine
      7. - containerd,containerd-shim,ctr,docker,dockerd,docker-init,docker-proxy,runc
      8. - 架构:arm64
      9. - 版本:19.03.0
      10. - 地址:https://download.docker.com/linux/static/stable/aarch64/docker-19.03.0.tgz
      11. 3. Kubernetes
      12. - kube-apiserver,kube-controller-manager,kube-scheduler,kubectl,kubelet,kube-proy
      13. - 架构:arm64
      14. - 版本:1.21.3
      15. - 地址:https://www.downloadkubernetes.com/
      16. 4. network
      17. - bandwidth,dhcp,flannel,host-local,loopback,portmap,sbr,tuning,vrf,bridge,firewall,host-device,ipvlan,macvlan,ptp,static,vlan
      18. - 架构:arm64
      19. - 版本:0.9.1
      20. - 地址:https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-arm64-v0.9.1.tgz
      21. 5. coredns
      22. - coredns
      23. - 架构:arm64
      24. - 地址:https://github.com/coredns/coredns/releases/download/v1.8.4/coredns_1.8.4_linux_arm64.tgz
      25. 6. images.tar
      26. - calico/node:v3.19.1 calico/cni:v3.19.1 calico/kube-controllers:v3.19.1 calico/pod2daemon-flexvol:v3.19.1 k8s.gcr.io/pause:3.2
      27. - 架构:arm64
      28. - 版本:NA
      29. - 地址:NA
      30. 7. calico.yaml
      31. - 架构:NA
      32. - 版本:v3.19.1
      33. - 地址:https://docs.projectcalico.org/manifests/calico.yaml
    4. 进入 package 目录,将下载的软件包打包成 packages-arm64.tar.gz

      1. $ tar -zcf package-arm64.tar.gz *
    5. 查看压缩包,确认打包成功。

    准备部署时使用的 YAML 配置文件。可以使用如下命令生成一个模板配置,然后根据部署需求修改生成的 template.yaml 。

    1. $ eggo template -f template.yaml
    1. $ eggo template -f template.yaml -n k8s-cluster -u username -p password --masters 192.168.0.1 --masters 192.168.0.2 --workers 192.168.0.3 --etcds 192.168.0.4 --loadbalancer 192.168.0.5

    安装 Kubernetes 集群。此处假设指定配置文件 template.yaml 。

    1. $ eggo -d deploy -f template.yaml

    安装完成后,根据回显信息,确认集群各节点是否安装成功。

    当集群中节点不满足业务需求,需要扩容时,可以在集群中新增节点。

    • 添加单个节点:通过命令行添加。示例参考如下:

      1. $ eggo -d join --id k8s-cluster --type master,worker --arch arm64 --port 22 192.168.0.5
    • 添加多个节点:通过配置文件方式添加。

      1. $ eggo -d join --id k8s-cluster --file join.yaml
      1. masters: # 配置master节点列表,建议每个master节点同时作为worker节点,否则master节点可能无法直接访问pod
      2. - name: test0 # 该节点的名称,为 k8s 集群查询显示的该节点名称
      3. ip: 192.168.0.2 # 该节点的 IP 地址
      4. port: 22 # ssh 登录的端口号
      5. arch: arm64 # 机器架构,x86_64 配置为 amd64
      6. - name: test1
      7. ip: 192.168.0.3
      8. port: 22
      9. arch: arm64
      10. workers: # 配置 worker 节点列表
      11. - name: test0 # 该节点的名称,为 k8s 集群查询显示的该节点名称
      12. ip: 192.168.0.4 # 该节点的 IP 地址
      13. port: 22 # ssh 登录的端口号
      14. arch: arm64 # 机器架构,x86_64 配置为 amd64
      15. - name: test2
      16. ip: 192.168.0.5
      17. arch: arm64