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

只能用丝滑一词形容的kubernetes高可用安装工具,一条命令,离线安装,包含所有依赖,内核负载不依赖haproxy keepalived,纯golang开发,100年证书,支持v1.16 v1.17 v1.18 v1.19 v1.20

post thumb
Kubernetes
作者 Louis 发表于 2020年12月16日

[TOC]

项目的由来

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

说明

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

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),在任意一台服务器上执行下面命令即可

# 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
$ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos-arm64 && \ 
    chmod +x sealos-arm64 && mv sealos-arm64 /usr/bin/sealos

# 下载离线资源包, arm64 版本就不免费了. 请自行购买.

# 安装一个三master的kubernetes集群
$ sealos init --passwd 123456 \
--master 192.168.0.2  --master 192.168.0.3  --master 192.168.0.4 \
--node 192.168.0.5 \
--pkg-url /root/kube1.20.0-arm64.tar.gz \
--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 资源包对应的版本 v1.19.0

增加master

$ sealos join --master 192.168.0.6 --master 192.168.0.7
$ sealos join --master 192.168.0.6-192.168.0.9  # 或者多个连续IP

增加node

$ sealos join --node 192.168.0.6 --node 192.168.0.7
$ 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版本的二进制, 我们只能基于官方源码, 自己构建二进制项目. 项目开源在这个仓库. 官方的github仓库.

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

基于ipvs的lvscare支持arm64

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

docker

$ docker pull fanux/lvscare

containerd

$ ctr -n=k8s.io images pull docker.io/fanux/lvscare:latest

自动化ci/cd

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

测试调用

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

$ mycli huawei create  --help
create ecs in sgp

Usage:
  mycli huawei create [flags]

Flags:
      --FlavorRef string   huawei falvor id , default is centos 7.6 (default "kc1.large.2")
      --ImageRef string    huawei image id , default is 2C 4G (default "456416e6-1270-46a4-975e-3558ac03d4cd")
      --SubnetId string    huawei subnet id (default "b5ea4e5d-de19-442b-ac32-3998100e4854")
      --Vpcid string       huawei Vpcid  (default "a55545d8-a4cb-436d-a8ec-45c66aff725c")
      --Zone string        huawei AvailabilityZone , default is centos xin jia po (default "ap-southeast-3a")
      --adminPass string   huawei root pass (default "Louishong4168@123")
  -c, --count int32        Specify huawei ecs count (default 1)
      --eip                create huawei ecs with eip or not
  -h, --help               help for create
      --keyName string     ssh key name
      --projectId string   huawei project id (default "06b275f705800f262f3bc014ffcdbde1")

Global Flags:
      --config string   config file (default is $HOME/.mycli.yaml)

安装演示

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

$ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos-arm64 && \ 
    chmod +x sealos-arm64 && mv sealos-arm64 /usr/bin/sealos
    
$ 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
...
13:55:14 [DEBG] [print.go:21] ==>SendPackage==>KubeadmConfigInstall==>InstallMaster0==>JoinMasters==>JoinNodes
13:55:14 [INFO] [print.go:26] sealos install success.

      ___           ___           ___           ___       ___           ___     
     /\  \         /\  \         /\  \         /\__\     /\  \         /\  \    
    /::\  \       /::\  \       /::\  \       /:/  /    /::\  \       /::\  \   
   /:/\ \  \     /:/\:\  \     /:/\:\  \     /:/  /    /:/\:\  \     /:/\ \  \  
  _\:\~\ \  \   /::\~\:\  \   /::\~\:\  \   /:/  /    /:/  \:\  \   _\:\~\ \  \ 
 /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/    /:/__/ \:\__\ /\ \:\ \ \__\
 \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/  / \:\  \    \:\  \ /:/  / \:\ \:\ \/__/
  \:\ \:\__\    \:\ \:\__\        \::/  /   \:\  \    \:\  /:/  /   \:\ \:\__\  
   \:\/:/  /     \:\ \/__/        /:/  /     \:\  \    \:\/:/  /     \:\/:/  /  
    \::/  /       \:\__\         /:/  /       \:\__\    \::/  /       \::/  /   
     \/__/         \/__/         \/__/         \/__/     \/__/         \/__/  

                  官方文档:sealyun.com
                  项目地址:github.com/fanux/sealos
                  QQ群   :98488045
                  常见问题:sealyun.com/faq

查看部署状态

kubectl get node && kubectl get pod -A
NAME          STATUS   ROLES                  AGE     VERSION
sealos        Ready    control-plane,master   4m55s   v1.20.0
sealos-0001   Ready    control-plane,master   4m17s   v1.20.0
sealos-0002   Ready    control-plane,master   4m16s   v1.20.0
sealos-0003   Ready    <none>                 3m27s   v1.20.0
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-69b47f4dfb-2mcv2   1/1     Running   0          4m38s
kube-system   calico-node-g78tq                          1/1     Running   0          3m32s
kube-system   calico-node-gccbm                          1/1     Running   0          3m27s
kube-system   calico-node-gjw2r                          1/1     Running   0          4m38s
kube-system   calico-node-hc4t8                          1/1     Running   0          4m17s
kube-system   coredns-74ff55c5b-9fjnm                    1/1     Running   0          4m38s
kube-system   coredns-74ff55c5b-nttdl                    1/1     Running   0          4m38s
kube-system   etcd-sealos                                1/1     Running   0          4m37s
kube-system   etcd-sealos-0001                           1/1     Running   0          3m59s
kube-system   etcd-sealos-0002                           1/1     Running   0          3m57s
kube-system   kube-apiserver-sealos                      1/1     Running   0          4m37s
kube-system   kube-apiserver-sealos-0001                 1/1     Running   0          4m17s
kube-system   kube-apiserver-sealos-0002                 1/1     Running   1          3m54s
kube-system   kube-controller-manager-sealos             1/1     Running   1          4m36s
kube-system   kube-controller-manager-sealos-0001        1/1     Running   0          4m17s
kube-system   kube-controller-manager-sealos-0002        1/1     Running   0          2m59s
kube-system   kube-proxy-7bs98                           1/1     Running   0          4m17s
kube-system   kube-proxy-88lv5                           1/1     Running   0          4m38s
kube-system   kube-proxy-g8zfj                           1/1     Running   0          3m32s
kube-system   kube-proxy-gl6vd                           1/1     Running   0          3m27s
kube-system   kube-scheduler-sealos                      1/1     Running   1          4m37s
kube-system   kube-scheduler-sealos-0001                 1/1     Running   0          4m17s
kube-system   kube-scheduler-sealos-0002                 1/1     Running   0          2m50s
kube-system   kube-sealyun-lvscare-sealos-0003           1/1     Running   0          3m23s
[root@sealos-0001 ~]# arch
aarch64

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

上一篇
一键在arm64架构上部署高可用kubernetes v1.19.0集群