小言_互联网的博客

在 arm64 架构上一键部署高可用 k8s v1.20.0 集群

248人阅读  评论(0)


更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io

前言

项目的由来

随着“中兴事件”不断升级,引起了国人对国产自主可控技术的高度关注;希望能找到一个稳定、能兼容国产 CPU 的一整套架构方案,来构建 IaaS 平台和 PaaS 平台,满足单位对安全自主可控的需求。要基于全国产方式解决公司业务需求至少要在软硬件层面满足,而国内基本都是基于 x86 解决方案,想找到满足需求的国产化解决方案还是非常困难的事情。

说明

一个二进制工具加一个资源包,不依赖 haproxy keepalived ansible 等重量级工具,一条命令就可实现 kubernetes 高可用集群构建, 无论是单节点还是集群,单 master 还是多 master,生产还是测试都能很好支持!简单不意味着阉割功能,照样能全量支持 kubeadm 所有配置。立即获取 sealos 及 arm64 安装包[1]

1.20 完全移除 docker. 使用containerd作为 cri. kubernetes < 1.20, 仍使用 docker

sealos 特性与优势:

  • 支持 arm64 架构, v1.20 版本离线包支持 containerd 集成,完全抛弃 docker.

  • 支持离线安装,工具与资源包(二进制程序 配置文件 镜像 yaml 文件等)分离,这样不同版本替换不同离线包即可

  • 百年证书

  • 使用简单

  • 支持自定义配置

  • 内核负载,极其稳定,因为简单所以排查问题也极其简单

  • 不依赖 ansible haproxy keepalived, 一个二进制工具,0 依赖

  • 资源包放在阿里云 oss 上,再也不用担心网速

  • dashboard ingress prometheus 等 APP 同样离线打包,一键安装

  • etcd 一键备份(etcd 原生 api 调用)。支持上传至 oss,实现异地备份, 用户无需关心细节。

快速开始

img

注意事项

  1. 必须同步所有服务器时间

  2. 所有服务器主机名不能重复

推荐

系统支持:centos7.6 以上 ubuntu16.04 以上 内核推荐 4.14 以上

推荐配置:centos7.8

环境信息

主机名 IP 地址
master0 192.168.0.2
master1 192.168.0.3
master2 192.168.0.4
node0 192.168.0.5

服务器密码:123456

kubernetes 高可用安装教程(arm64)

只需要准备好服务器(arm64),在任意一台服务器上执行下面命令即可


   
  1. # 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
  2. $ wget -c https: //sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos-arm64 && \
  3.     chmod +x sealos-arm64 && mv sealos-arm64 /usr/bin/sealos
  4. # 下载离线资源包, arm64 版本就不免费了. 请自行购买.
  5. # 安装一个三master的kubernetes集群
  6. $ sealos init --passwd  123456
  7. --master  192.168 .0 .2  --master  192.168 .0 .3  --master  192.168 .0 .4
  8. --node  192.168 .0 .5
  9. --pkg-url /root/kube1 .20 .0-arm64.tar.gz
  10. --version v1 .20 .0

参数含义

参数名 含义 示例
passwd 服务器密码 123456
master k8s master 节点 IP 地址 192.168.0.2
node k8s node 节点 IP 地址 192.168.0.3
pkg-url 离线资源包地址,支持下载到本地,或者一个远程地址 /root/kube1.19.0-arm64.tar.gz
version 资源包[2]对应的版本 v1.19.0

增加 master


   
  1. $ sealos join --master  192.168 .0 .6 --master  192.168 .0 .7
  2. $ sealos join --master  192.168 .0 .6 -192.168 .0 .9  # 或者多个连续IP

增加 node


   
  1. $ sealos join --node  192.168 .0 .6 --node  192.168 .0 .7
  2. $ sealos join --node  192.168 .0 .6 -192.168 .0 .9  # 或者多个连续IP

项目的构建

我们解决的问题

  1. containerd 支持 arm64 的二进制

  2. kubernetes 的 arm64 二进制版本(原生支持)

  3. kubernetes 的基础镜像 arm64 版本(原生支持)

  4. 基于 ipvs 的高可用需要支持 arm64 镜像版本

  5. 快速构建打包产品, 并自动化测试及部署上线.

containerd 支持 arm64

官方的 containerd 是没有 release 到 arm64 版本的二进制, 我们只能基于官方源码, 自己构建二进制项目. 项目开源在这个仓库[3]. 官方的 github仓库[4].

由于官方不发布arm64版本的containerd二进制, 所以手动编写了Makefile. 构建和 linux adm64 一模一样.

基于 ipvs 的 lvscare 支持 arm64

官方源码[5], 我们重写了 dockerfile. 更好的支持 arm64 架构系列.

docker

$ docker pull fanux/lvscare

containerd

$ ctr -n=k8s.io image pull fanux/lvscare

自动化 ci/cd

目前采用 github 的 action 进行自动化 CI/CD. 源码在这里[6]. 测试采用华为云的鲲鹏服务器构建 3master, 1node 进行测试部署. 部署完成后打包发布到sealyun.com[7]

测试调用

因为华为云没有官方的命令行调用生成服务器/公网 ip. 因此自己写了一个小工具[8], 快速生成 ecs. 结合 action 进行快速部署. 下载即可使用.


   
  1. $ mycli huawei create  --help
  2. create ecs in sgp
  3. Usage:
  4.   mycli huawei create [flags]
  5. Flags:
  6.       --FlavorRef  string   huawei falvor id ,  default is centos  7.6 ( default  "kc1.large.2")
  7.       --ImageRef  string    huawei image id ,  default is  24G ( default  "456416e6-1270-46a4-975e-3558ac03d4cd")
  8.       --SubnetId  string    huawei subnet id ( default  "b5ea4e5d-de19-442b-ac32-3998100e4854")
  9.       --Vpcid  string       huawei Vpcid  ( default  "a55545d8-a4cb-436d-a8ec-45c66aff725c")
  10.       --Zone  string        huawei AvailabilityZone ,  default is centos xin jia po ( default  "ap-southeast-3a")
  11.       --adminPass  string   huawei root pass ( default  "Louishong4168@123")
  12.   -c, --count  int32        Specify huawei ecs count ( default  1)
  13.       --eip                create huawei ecs with eip or not
  14.   -h, --help               help  for create
  15.       --keyName  string     ssh key name
  16.       --projectId  string   huawei project id ( default  "06b275f705800f262f3bc014ffcdbde1")
  17. Global Flags:
  18.       --config  string   config file ( default is $HOME/.mycli.yaml)

安装演示

安装, 下载最新的sealos, 以及kubernetes-arm64的安装包[9].


   
  1. $ wget -c https: //sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos-arm64 && \
  2.     chmod +x sealos-arm64 && mv sealos-arm64 /usr/bin/sealos
  3. $ sealos init --master  192.168 .0 .35 --master  192.168 .0 .83 --master  192.168 .0 .20     --node  192.168 .0 .242 --passwd  123456 --version v1 .20 .0 --pkg-url /tmp/kube1 .20 .0-arm64.tar.gz
  4. ...
  5. 13: 55: 14 [DEBG] [ssh. go: 25] [ssh][ 192.168 .0 .242: 22]command result is:
  6. 13: 55: 14 [INFO] [scp. go: 159] [ssh][ 192.168 .0 .242: 22]transfer total size is:  0MB
  7. 13: 55: 14 [INFO] [ssh. go: 58] [ssh][ 192.168 .0 .242: 22] rm -rf /root/kube
  8. 13: 55: 14 [DEBG] [ print. go: 21] ==>SendPackage==>KubeadmConfigInstall==>InstallMaster0==>JoinMasters==>JoinNodes
  9. 13: 55: 14 [INFO] [ print. go: 26] sealos install success.
  10.       ___           ___           ___           ___       ___           ___
  11.      /\  \         /\  \         /\  \         /\__\     /\  \         /\  \
  12.     /::\  \       /::\  \       /::\  \       /:/  /    /::\  \       /::\  \
  13.    /:/\ \  \     /:/\:\  \     /:/\:\  \     /:/  /    /:/\:\  \     /:/\ \  \
  14.   _\:\~\ \  \   /::\~\:\  \   /::\~\:\  \   /:/  /    /:/  \:\  \   _\:\~\ \  \
  15.  /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/    /:/__/ \:\__\ /\ \:\ \ \__\
  16.  \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/  / \:\  \    \:\  \ /:/  / \:\ \:\ \/__/
  17.   \:\ \:\__\    \:\ \:\__\        \::/  /   \:\  \    \:\  /:/  /   \:\ \:\__\
  18.    \:\/:/  /     \:\ \/__/        /:/  /     \:\  \    \:\/:/  /     \:\/:/  /
  19.     \::/  /       \:\__\         /:/  /       \:\__\    \::/  /       \::/  /
  20.      \/__/         \/__/         \/__/         \/__/     \/__/         \/__/
  21.                   官方文档:sealyun.com
  22.                   项目地址:github.com/fanux/sealos
  23.                   QQ群   : 98488045
  24.                   常见问题:sealyun.com/faq

查看部署状态


   
  1. kubectl get node && kubectl get pod -A
  2. NAME          STATUS   ROLES                  AGE     VERSION
  3. sealos        Ready    control-plane,master    4m55s   v1 .20 .0
  4. sealos -0001   Ready    control-plane,master    4m17s   v1 .20 .0
  5. sealos -0002   Ready    control-plane,master    4m16s   v1 .20 .0
  6. sealos -0003   Ready    <none>                  3m27s   v1 .20 .0
  7. NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
  8. kube-system   calico-kube-controllers -69b47f4dfb -2mcv2    1/ 1     Running    0           4m38s
  9. kube-system   calico-node-g78tq                           1/ 1     Running    0           3m32s
  10. kube-system   calico-node-gccbm                           1/ 1     Running    0           3m27s
  11. kube-system   calico-node-gjw2r                           1/ 1     Running    0           4m38s
  12. kube-system   calico-node-hc4t8                           1/ 1     Running    0           4m17s
  13. kube-system   coredns -74ff55c5b -9fjnm                     1/ 1     Running    0           4m38s
  14. kube-system   coredns -74ff55c5b-nttdl                     1/ 1     Running    0           4m38s
  15. kube-system   etcd-sealos                                 1/ 1     Running    0           4m37s
  16. kube-system   etcd-sealos -0001                            1/ 1     Running    0           3m59s
  17. kube-system   etcd-sealos -0002                            1/ 1     Running    0           3m57s
  18. kube-system   kube-apiserver-sealos                       1/ 1     Running    0           4m37s
  19. kube-system   kube-apiserver-sealos -0001                  1/ 1     Running    0           4m17s
  20. kube-system   kube-apiserver-sealos -0002                  1/ 1     Running    1           3m54s
  21. kube-system   kube-controller-manager-sealos              1/ 1     Running    1           4m36s
  22. kube-system   kube-controller-manager-sealos -0001         1/ 1     Running    0           4m17s
  23. kube-system   kube-controller-manager-sealos -0002         1/ 1     Running    0           2m59s
  24. kube-system   kube-proxy -7bs98                            1/ 1     Running    0           4m17s
  25. kube-system   kube-proxy -88lv5                            1/ 1     Running    0           4m38s
  26. kube-system   kube-proxy-g8zfj                            1/ 1     Running    0           3m32s
  27. kube-system   kube-proxy-gl6vd                            1/ 1     Running    0           3m27s
  28. kube-system   kube-scheduler-sealos                       1/ 1     Running    1           4m37s
  29. kube-system   kube-scheduler-sealos -0001                  1/ 1     Running    0           4m17s
  30. kube-system   kube-scheduler-sealos -0002                  1/ 1     Running    0           2m50s
  31. kube-system   kube-sealyun-lvscare-sealos -0003            1/ 1     Running    0           3m23s
  32. [root@sealos -0001 ~]# arch
  33. aarch64

至此, arm64 版本的kubernetes云平台构建完毕。

参考资料

[1]

立即获取 sealos 及 arm64 安装包: https://www.sealyun.com/goodsDetail?type=cloud_kernel&name=kubernetes-arm64

[2]

资源包: https://www.sealyun.com/goodsDetail?type=cloud_kernel&name=kubernetes-arm64

[3]

仓库: https://github.com/sealyun-market/containerd

[4]

仓库: https://github.com/containerd/containerd

[5]

官方源码: https://github.com/sealyun/lvscare

[6]

这里: https://github.com/oldthreefeng/arm64-test

[7]

sealyun.com: https://www.sealyun.com

[8]

小工具: https://github.com/oldthreefeng/mycli

[9]

安装包: https://www.sealyun.com/goodsDetail?type=cloud_kernel&name=kubernetes-arm64

原文链接:https://www.fenghong.tech/blog/kubernetes/sealos-install-arm64-1.20/


你可能还喜欢

点击下方图片即可阅读

云原生世界中的高端玩法:数据包标记

云原生是一种信仰 ????

码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️

转载:https://blog.csdn.net/alex_yangchuansheng/article/details/111465622
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场