kubeasz 工具一键安装部署K8S 集群
kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。
kubeasz 从每一个单独部件组装到完整的集群,提供最灵活的配置能力,几乎可以设置任何组件的任何参数;同时又为集群创建预置一套运行良好的默认配置,甚至自动化创建适合大规模集群的BGP Route Reflector网络模式。
- 集群特性 Master高可用、离线安装、多架构支持(amd64/arm64)
- 集群版本 kubernetes v1.24, v1.25, v1.26, v1.27, v1.28, v1.29, v1.30, v1.31, v1.32, v.1.33, v1.34
- 运行时 containerd v1.7.x, v2.0.x, v2.1.x
- 网络 calico, cilium, flannel, kube-ovn, kube-router
kubeasz 是基于 ansible 和 shell 制作的工具,可以快速搭建一个高可用的 k8s 集群(二进制部署),不需要额外的负载均衡。kubeasz 每个版本对应了支持的 k8s 版本, 可以到项目主页查看, 这里使用 kubeasz 版本 3.6.8, 部署 k8s 1.34.1,ARM架构和X86 架构都支持。
开源地址:https://github.com/easzlab/kubeasz
推荐版本对照
| Kubernetes | 1.23 | 1.24-1.28 | 1.29 | 1.30 | 1.31 | 1.32 | 1.33 | 1.34 |
| kubeasz | 3.2.0 | 3.6.2 | 3.6.3 | 3.6.4 | 3.6.5 | 3.6.6 | 3.6.7 | 3.6.8 |
支持系统
- Alibaba Linux 2.1903, 3.2104(notes)
- Alma Linux 8, 9
- Anolis OS 8.x RHCK, 8.x ANCK
- CentOS/RHEL 7, 8, 9
- Debian 10, 11(notes)
- Fedora 34, 35, 36, 37
- Kylin Linux Advanced Server V10 麒麟V10 Tercel, Lance
- openEuler 22.03 LTS, 24.03 LTS(notes)
- openSUSE Leap 15.x(notes)
- Rocky Linux 8, 9
- Ubuntu 16.04, 18.04, 20.04, 22.04, 24.04
- 注意1:确保各节点时区设置一致、时间同步。 如果你的环境没有提供NTP 时间同步,推荐集成安装chrony
- 注意2:确保在干净的系统上开始安装,不要使用曾经装过kubeadm或其他k8s发行版的环境
- 注意3:建议操作系统升级到新的稳定内核,请结合阅读内核升级文档
- 注意4:在公有云上创建多主集群,请结合阅读在公有云上部署 kubeasz
高可用集群所需节点配置如下
| 部署节点 | 1 | 运行ansible/ezctl命令,一般复用第一个master节点 |
| etcd节点 | 3 | 注意etcd集群需要1,3,5,...奇数个节点,一般复用master节点 |
| master节点 | 2 | 高可用集群至少2个master节点 |
| node节点 | n | 运行应用负载的节点,可根据需要提升机器配置/增加节点数 |
机器配置:
- master节点:4c/8g内存/50g硬盘
- worker节点:建议8c/32g内存/200g硬盘以上
注意:默认配置下容器运行时和kubelet会占用/var的磁盘空间,如果磁盘分区特殊,可以设置config.yml中的容器运行时和kubelet数据目录:CONTAINERD_STORAGE_DIR DOCKER_STORAGE_DIR KUBELET_ROOT_DIR
在 kubeasz 2x 版本,多节点高可用集群安装可以使用2种方式
- 1.按照本文步骤先规划准备,预先配置节点信息后,直接安装多节点高可用集群
- 2.先部署单节点集群 AllinOne部署,然后通过 节点添加 扩容成高可用集群
安装准备
准备机器如下:
机器 IP
kubeasz 操作机 10.0.0.7
master1 10.0.0.31
master2 10.0.0.32
master3 10.0.0.33
worker1 10.0.0.41
首先确保操作机可以通过 ssh 连接到其他所有机器,最好密钥打通(这是使用 ansible 的必要条件)
安装 kubeasz
下载 ezdown 部署工具
# 设置kubeasz版本
export release=3.6.8
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
下载 kubeasz 离线包等
下载的文件位于 /etc/kubeasz/ 目录中。
# 下载默认版本
./ezdown -D
# 可以使用-k参数指定需要下载的k8s版本
# ./ezdown -D -k v1.34.1
# 下载Docker容器版ezctl
./ezdown -S
source ~/.bashrc
# 下载flannel组件可选
./ezdown -X flannel
# 下载离线deb/rpm包
# ./ezdown -P
部署集群
cd /etc/kubeasz/
生成集群配置文件
dk ezctl new k8s-cluster
根据需求修改配置文件
ansible 主机清单(定义主机 IP)/etc/kubeasz/clusters/k8s-cluster/hosts
集群配置文件 /etc/kubeasz/clusters/k8s-cluster/config.yml
开始部署
dk ezctl setup k8s-cluster all
检查部署结果
查看 kubernetes 集群的组件状态(基本都是通过 systemd 管理的)
在 master 节点上查看
systemctl status etcd
systemctl status kube-apiserver
systemctl status kube-scheduler
systemctl status kube-controller-manager
在 master 和 node 节点上查看
systemctl status kubelet
systemctl status kube-proxy
systemctl status docker
清理集群
如果需要执行清理操作:
dk ezctl destroy k8s-cluster
节点管理
操作机建议保留, 后期进行扩容等会非常方便。
# 新增master节点
dk ezctl add-master k8s-cluster 10.0.0.34
# 新增etcd节点
dk ezctl add-etcd k8s-cluster 10.0.0.34
# 新增worker节点
dk ezctl add-node k8s-cluster 10.0.0.41
# 删除etcd节点
dk ezctl del-etcd k8s-cluster 10.0.0.34
# 删除master节点
dk ezctl del-master k8s-cluster 10.0.0.34
# 删除worker节点
dk ezctl del-node k8s-cluster 10.0.0.41
#master 允许调度
kubectl uncordon master-01
kubectl uncordon master-02
kubectl uncordon master-03
混合架构集群部署
混合架构集群本文是指集群中既有linux amd64架构机器,也有linux arm64架构机器;这里只记录一个简单的操作说明,实际操作注意风险。
部署思路
- 先选定一台amd64架构的机器做“amd64部署机”,使用它先部署amd64架构的集群
- 选一台arm64架构的机器做“arm64部署机”,复制amd64部署机的/etc/kubeasz目录文件(除去目录中的bin、down子目录),然后重新下载arm64架构的二进制和镜像,然后添加arm64节点到原有集群即可
操作步骤
- 假设已经正常部署了amd64架构的三节点集群
- 在“amd64部署机” 目录 /etc/kubeasz 中移除子目录 bin 和 down,然后把整体/etc/kubeasz 目录复制到“arm64部署机”
# 登录amd64部署机
cd /etc/kubeasz; mv bin down /tmp/; scp -r /etc/kubeasz root@{_ip_arm64}:/etc/
# 复制完成后找回 bin 和 down 子目录
mv /tmp/bin /etc/kubeasz/; mv /tmp/down /etc/kubeasz/
- 登录“arm64部署机”,执行下载,其他准备工作
cd /etc/kubeasz
# 下载基础部分
./ezdown -D
# 下载额外部分(如有)
./ezdown -X ...
# 运行部署容器
./ezdown -S
# 配置机器ssh免密码登录,集群所有节点都免密,包括待新增arm64节点
ssh-copy-id xx.xx.xx.xx
ssh-copy-id ...
# 复制kubeconfig
mkdir /root/.kube/; cp clusters/default/kubectl.kubeconfig /root/.kube/config
- 添加arm64新节点到集群
source ~/.bashrc
# 添加新节点 x.x.x.x
dk ezctl add-node default x.x.x.x
- 验证
$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-x.x.x-19 Ready master 5d8h v1.33.1 x.x.x.19 <none> Ubuntu 20.04.4 LTS 5.4.0-122-generic containerd://2.1.1
k8s-x.x.x-90 Ready node 5d8h v1.33.1 x.x.x.90 <none> Ubuntu 22.04.5 LTS 5.15.0-134-generic containerd://2.1.1
k8s-x.x.x-91 Ready node 5d8h v1.33.1 x.x.x.91 <none> Ubuntu 22.04.5 LTS 5.15.0-134-generic containerd://2.1.1
k8s-x.x.x-93 Ready node 79s v1.33.1 x.x.x.93 <none> Ubuntu 22.04.5 LTS 5.15.0-140-generic containerd://2.1.1
$ kubectl describe node|grep beta.kubernetes.io/arch
Labels: beta.kubernetes.io/arch=amd64
Labels: beta.kubernetes.io/arch=amd64
Labels: beta.kubernetes.io/arch=amd64
Labels: beta.kubernetes.io/arch=arm64
小结
通过以上步骤,成功实现了在amd64集群中添加arm64节点;充分展示kubeasz 项目部署集群的灵活性和可配置性;部署过程中ansible执行的过程性输出内容,以近乎白盒的方式展示每一个细节;假如出错有详细的说明,帮助定位,并且随时可以修改执行脚本,安装的幂等性保证随时可以重新安装以修复错误。Hack it, and have fun!

浙公网安备 33010602011771号