[kubeasz] 快速部署和高效维护 Kubernetes 集群利器

131 阅读8分钟

当前快速部署一套高可用 Kubernetes 集群的工具有很多,如 kubeadmkubekey 等,都各有千秋,那如何挑选一把属于自己的运维利器呢?这篇文章或许能让你找到答案。

01 背 景

在当今的云原生时代,Kubernetes 已经成为容器编排的事实标准。然而,对于许多组织或个人来说,部署和管理 Kubernetes 集群依然是一个复杂且繁琐的过程。为了简化这一过程,我们需要选择一款可靠的、易用的、高效的工具来帮助我们去打破这个局面,在这里我推荐一款工具 kubeasz

02 介 绍

kubeasz 是基于二进制方式部署和利用 ansible-playbook 实现自动化的,能够快速部署高可用的 Kubernetes 集群,另外还能高效地维护 Kubernetes 集群,如节点管理、etcd 管理、集群备份等,这是其他工具所不具备的,同时,他也是经过 CNCF 官方认证的开源工具,社区非常活跃,已经支持最新版的 Kubernetes1.30.1 部署。

03 安 装

kubeasz 拉起一套 Kubernetes 集群的操作很是便捷,后续的集群维护也可以通过 ansible-playbook 进行维护,简直是省时省力,当然,如果是刚接触 Kubernetes,我还是推荐先用 kubeadm 进行部署,这样有助于加深对 Kubernetes 的认知,熟悉了之后再来使用这些快捷部署工具会好些,好了,让我们看下如何快速拉起一个 Kubernetes 集群吧。

下载工具脚本 ezdown,举例使用 kubeasz 版本 3.6.4

$ export release=3.6.4

# 下载二进制文件
$ wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
# 国内访问 GitHub 慢的话,使用
$ wget https://githubfast.com/easzlab/kubeasz/releases/download/${release}/ezdown

# 赋予可执行权限
$ chmod +x ./ezdown

下载 kubeasz 代码、二进制、默认容器镜像(更多关于 ezdown 的参数,运行 ./ezdown 查看)

# 下面的指令二选一即可
# 国内环境(目前默认使用清华源,但是目前无法正常使用该源)
$ ./ezdown -D

# 海外环境
$ ./ezdown -D -m standard

# 涉及到的 Docker images
$ docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
easzlab/kubeasz                                      3.6.4     1108a8be8fcc   15 months ago   157MB
easzlab/kubeasz-ext-bin                              1.10.1    fb29543bf6ab   16 months ago   722MB
easzlab/kubeasz-k8s-bin                              v1.30.1   41c3580883c5   16 months ago   1.2GB
easzlab/metrics-server                               v0.7.1    2c06895dd9cd   18 months ago   66.9MB
easzlab.io.local:5000/easzlab/metrics-server         v0.7.1    2c06895dd9cd   18 months ago   66.9MB
calico/kube-controllers                              v3.26.4   b32f99198153   22 months ago   74.7MB
easzlab.io.local:5000/calico/kube-controllers        v3.26.4   b32f99198153   22 months ago   74.7MB
calico/cni                                           v3.26.4   17d35f5bad38   22 months ago   209MB
easzlab.io.local:5000/calico/cni                     v3.26.4   17d35f5bad38   22 months ago   209MB
calico/node                                          v3.26.4   ded66453eb63   22 months ago   252MB
easzlab.io.local:5000/calico/node                    v3.26.4   ded66453eb63   22 months ago   252MB
easzlab/k8s-dns-node-cache                           1.22.28   c0120d8e4c91   23 months ago   77.5MB
easzlab.io.local:5000/easzlab/k8s-dns-node-cache     1.22.28   c0120d8e4c91   23 months ago   77.5MB
registry                                             2         26b2eb03618e   24 months ago   25.4MB
coredns/coredns                                      1.11.1    cbb01a7bd410   2 years ago     59.8MB
easzlab.io.local:5000/coredns/coredns                1.11.1    cbb01a7bd410   2 years ago     59.8MB
easzlab/pause                                        3.9       78d53e70b442   2 years ago     744kB
easzlab.io.local:5000/easzlab/pause                  3.9       78d53e70b442   2 years ago     744kB
kubernetesui/dashboard                               v2.7.0    07655ddf2eeb   3 years ago     246MB
easzlab.io.local:5000/kubernetesui/dashboard         v2.7.0    07655ddf2eeb   3 years ago     246MB
easzlab.io.local:5000/kubernetesui/metrics-scraper   v1.0.8    115053965e86   3 years ago     43.8MB
kubernetesui/metrics-scraper                         v1.0.8    115053965e86   3 years ago     43.8MB

使用 Docker 运行时环境!

03.1 Old 旧环境使用

创建集群配置实例

# 容器化运行 kubeasz
# 运行kubeasz容器和registry容器
$ ./ezdown -S

# 创建新集群 k8s-101(不适用)
$ docker exec -it kubeasz ezctl new k8s-101
2024-06-09 10:30:21 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-101
2024-06-09 10:30:21 DEBUG set version of common plugins
2024-06-09 10:30:21 DEBUG cluster k8s-01: files successfully created.
2024-06-09 10:30:21 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-101/hosts'
2024-06-09 10:30:21 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-101/config.yml'

然后根据提示配置'/etc/kubeasz/clusters/Kubernetes-101/hosts' 和 '/etc/kubeasz/clusters/Kubernetes-101/config.yml':根据前面节点规划修改 hosts 文件和其他集群层面的主要配置选项;其他集群组件等配置项可以在 config.yml 文件中修改。

$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED             STATUS             PORTS     NAMES
d64e860fad6d   easzlab/kubeasz:3.6.4   "tail -f /dev/null"      56 minutes ago      Up 56 minutes                kubeasz
070b15be71d5   registry:2              "/entrypoint.sh /etc…"   About an hour ago   Up About an hour             local_registry

03.2 New 新环境使用

在完成上述步骤后,便可以一键部署 Kubernetes 集群了

# 容器化运行 kubeasz
# 运行kubeasz容器和registry容器
$ ./ezdown -S

$ docker exec -it kubeasz ezctl setup Kubernetes-101 all
2025-09-30 00:01:05 ERROR invalid config, run 'ezctl new Kubernetes-101' first

# 执行命令
$ docker exec -it kubeasz ezctl new Kubernetes-101
2025-09-30 00:01:17 DEBUG generate custom cluster files in /etc/kubeasz/clusters/Kubernetes-101
2025-09-30 00:01:17 DEBUG set versions
2025-09-30 00:01:17 DEBUG cluster Kubernetes-101: files successfully created.
2025-09-30 00:01:17 INFO next steps 1: to config '/etc/kubeasz/clusters/Kubernetes-101/hosts'
2025-09-30 00:01:17 INFO next steps 2: to config '/etc/kubeasz/clusters/Kubernetes-101/config.yml'

# 修改配置文件
$ vim /etc/kubeasz/clusters/Kubernetes-101/hosts
# 'etcd' cluster should have odd member(s) (1,3,5,...)
[etcd]
192.168.160.91

# master node(s), set unique 'k8s_nodename' for each node
# CAUTION: 'k8s_nodename' must consist of lower case alphanumeric characters, '-' or '.',
# and must start and end with an alphanumeric character
[kube_master]
192.168.160.91 k8s_nodename='szubuntu-node091'

# work node(s), set unique 'k8s_nodename' for each node
# CAUTION: 'k8s_nodename' must consist of lower case alphanumeric characters, '-' or '.',
# and must start and end with an alphanumeric character
[kube_node]
192.168.160.91 k8s_nodename='szubuntu-node091'

$ docker exec -it kubeasz ezctl setup Kubernetes-101 all

$ docker ps
CONTAINER ID   IMAGE                   COMMAND               CREATED          STATUS          PORTS     NAMES
f35acf899f7c   easzlab/kubeasz:3.6.4   "tail -f /dev/null"   22 minutes ago   Up 22 minutes             kubeasz
$ ls -la ~/.kube/config
-r-------- 1 root root 6202 Sep 29 16:16 /root/.kube/config
$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURtakNDQW9LZ0F3SUJBZ0lVRGYyVUdkZDRkclJVNUhXeTJjTVc4RGY4djdNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pERUxNQWtHQTFVRUJoTUNRMDR4RVRBUEJnTlZCQWdUQ0VoaGJtZGFhRzkxTVFzd0NRWURWUVFIRXdKWQpVekVNTUFvR0ExVUVDaE1EYXpoek1ROHdEUVlEVlFRTEV3WlRlWE4wWlcweEZqQVVCZ05WQkFNVERXdDFZbVZ5CmJtVjBaWE10WTJFd0lCY05NalV3T1RJNU1UWXdNekF3V2hnUE1qRXlOVEE1TURVeE5qQXpNREJhTUdReEN6QUoKQmdOVkJBWVRBa05PTVJFd0R3WURWUVFJRXdoSVlXNW5XbWh2ZFRFTE1Ba0dBMVVFQnhNQ1dGTXhEREFLQmdOVgpCQW9UQTJzNGN6RVBNQTBHQTFVRUN4TUdVM2x6ZEdWdE1SWXdGQVlEVlFRREV3MXJkV0psY201bGRHVnpMV05oCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMlExblViSXJtWmxiQU50UWlObW8KK25zVGl6Vm5sanVpOWxzVlQvcmhSaVh4UmFEMjNSWjF3UytBQ1VIb1I1elFXdXVvamY4MEFRRlpPWnJranYvSgorVHlQT2hpU1dNUlBINzVBZXZqRnVMcVhRZUxJbFg5VU9ZbE1FaXpsbUVoMDZZOXNBSURXVFM3anlyZDJwVnhHCmk1K3RGYXZrZ1RDUy85a3FaaEIyOWJyOGZ0Tklyb1RzbGI0aW5zUElMc3RVa1hVVnNPRlFmR1JNS2RYNmtGbWoKcTlvNWY5VmNuc1VKZUplU0NmRUVUSUc1L0lkTUtsdDlSVUxtK0pNMXZrVHY4ZWcvcmtwcGV4bWFwSlhXYStPcAplZ1lQQldOVWJmZmFFNlN1djZJdm9xbmFzSWFCZlJmRldndnU4TUREejRrUmgyTWIzMW1ySU13WlgrN3JwZXRUCmpRSURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlYKSFE0RUZnUVVIRW43UmpOMjFxeGhlZmE2Z3R1NkhoWkNvcGd3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUluUgpTemVOUU9CS0FLMnF5a3RYdE80U3VjZXUzVHY0elFNVjFFN1UwYitibEJkYWpiRHJURDhySWpIcGY4aFJCZktUCjFEZHBGbEZsRWlheE8vM1NNZjFrVDNETktIWUlXYVlXek53YVNFK1ZUMndoV0lFOWtWVTY2eHRMRmlrb1hFOWgKYm9paFlzd1BCT0FmM3dibWViNVdUTENnRFpmTGVGTUE2Q2x3Qy9aNXU1UXRwVG94VE50S2VYSVRlWHN0dVg3Uwp6dy9GeEZXdFRDNUxsenBHb1ZhdmdMMG12SUVBLzFUeGgxVmh1Ty8relRxNlphUktoZkNMR0JxZnpOWjFXV2FxCmRnbHBtS1d6Z1JaMm45bXE3eUtXM0ZHK3ZVQmtpVmxlNXFDTWR3c25ZcUcra2JnOGRCdGprR084OEdyMVJNcHgKbjliVElXT3dsMTBJalF3ZVhvUT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    server: https://192.168.160.91:6443
  name: cluster1
contexts:
- context:
    cluster: cluster1
    user: admin
  name: context-cluster1
current-context: context-cluster1
kind: Config
preferences: {}
users:
- name: admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQyakNDQXNLZ0F3SUJBZ0lVTUV3eDE3TkJrL1p5eEdmM2V4eXJ2SjcyTzFjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pERUxNQWtHQTFVRUJoTUNRMDR4RVRBUEJnTlZCQWdUQ0VoaGJtZGFhRzkxTVFzd0NRWURWUVFIRXdKWQpVekVNTUFvR0ExVUVDaE1EYXpoek1ROHdEUVlEVlFRTEV3WlRlWE4wWlcweEZqQVVCZ05WQkFNVERXdDFZbVZ5CmJtVjBaWE10WTJFd0lCY05NalV3T1RJNU1UWXhNakF3V2hnUE1qQTNOVEE1TVRjeE5qRXlNREJhTUdjeEN6QUoKQmdOVkJBWVRBa05PTVJFd0R3WURWUVFJRXdoSVlXNW5XbWh2ZFRFTE1Ba0dBMVVFQnhNQ1dGTXhGekFWQmdOVgpCQW9URG5ONWMzUmxiVHB0WVhOMFpYSnpNUTh3RFFZRFZRUUxFd1pUZVhOMFpXMHhEakFNQmdOVkJBTVRCV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXliZHVXdXZQRTZ2VFN3ZXMKaStQN2RYK0c5UFU4dE5wOXl0Ujg5M1c2V3l4L2pyd3F5TzFUTUtoWjBGbTJvTkxMR3FMMDZ6d09pWWd6YXpRegpia1ZpV2VUYjhRZS84MFB2OUR4MU9QSDVJS1g3SGh6TGlXUkE1OFllTGx0Nmw5aE5aci9heE9WeU1rSitSYkhXCmxTeUxyRnhxY0Vzc3o3TERISUs0RXY3OHJpRWFzZVRZcjVNb3k4YTZ4djkwT1pWV1kzcllGd0tCS29kNjlyTC8KeHFMK3Y3VEhHOExwanVxYTNqKzB0c3NIVFNNbXIyY2VOV3V1ZjB2RDhyQ3BpV1NIYkFPMWxRRjFKdERvVnk4awpVRDdqTmdJcXJkUmFBaVFGRENIakY0SkR6OHQwMFc2R1g3RjQzVGNOcVVXcEthTnFtbDZab3lJZlJta2s2NmIrCnBzSE8wUUlEQVFBQm8zOHdmVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUgKQXdFR0NDc0dBUVVGQndNQ01Bd0dBMVVkRXdFQi93UUNNQUF3SFFZRFZSME9CQllFRlBpcWJWSmRrL3dhd0x0dwpXTVVPMUJkeXVYQVlNQjhHQTFVZEl3UVlNQmFBRkJ4SiswWXpkdGFzWVhuMnVvTGJ1aDRXUXFLWU1BMEdDU3FHClNJYjNEUUVCQ3dVQUE0SUJBUUFrVm9hUkpsK2ZOZXRibldsZnRQb25zQ2tGRTlTTFRSWWRaV3BhVUsxRWptODYKS3VDMnl5MkRJNzFmSDhTeml0Nk4rRnJrY0RPMlRjVFNISUZEQjhINU1kdnZlNDRHOVlTc0tjc0ltT0lGVmFRUAp6OE9jbTYvUHVUTDF5QW8xYVdkRGw4bjZ3a0VwTDRLTVFqQkFZLy90VWVxSklZSzhBUDRucGdvSlZMaFFHQnZ6CmY1aStCeWJkUXk5eE5Yd3R0alZ0dXdyMDlhazZUMjdhTXpMeGlUVWNpOGNZNjRZQ21mb1hWMjFyRENvOUtQeVUKc2t4UGY1YW1KY0gxWXBacG1YOGNpWWErT1ZCUDVoQjhyUDJab3dhOGFIK3U0WUpkT01rc3VOTFhtMXdjUGhwRwpwb2Nib0xwZmhaYjBkdkR0WW4vVXUrSlk4SmhsV2dkVGJmamYzVWhGCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBeWJkdVd1dlBFNnZUU3dlc2krUDdkWCtHOVBVOHROcDl5dFI4OTNXNld5eC9qcndxCnlPMVRNS2haMEZtMm9OTExHcUwwNnp3T2lZZ3phelF6YmtWaVdlVGI4UWUvODBQdjlEeDFPUEg1SUtYN0hoekwKaVdSQTU4WWVMbHQ2bDloTlpyL2F4T1Z5TWtKK1JiSFdsU3lMckZ4cWNFc3N6N0xESElLNEV2NzhyaUVhc2VUWQpyNU1veThhNnh2OTBPWlZXWTNyWUZ3S0JLb2Q2OXJML3hxTCt2N1RIRzhMcGp1cWEzaiswdHNzSFRTTW1yMmNlCk5XdXVmMHZEOHJDcGlXU0hiQU8xbFFGMUp0RG9WeThrVUQ3ak5nSXFyZFJhQWlRRkRDSGpGNEpEejh0MDBXNkcKWDdGNDNUY05xVVdwS2FOcW1sNlpveUlmUm1razY2Yitwc0hPMFFJREFRQUJBb0lCQVFERzBHYVNjcXp0QklRRApCWk5KWmZFb1JBTnVXRy8zQ1FyRzZWd3FRdnprZEIxZFA1VWo2TlgvdFU2Z2ptdjBZdzhRTitFU0lXVnFwTFdaClNpQU81WkFrYmU5aHgzT25meVI0STBhZVU5QnFIMjQ4cGNEdXI4TlJMZkg5V3VpZjFPK2xBQi9OeFNBaTdXcXIKb3JhTzNSTGxWVWtMV096WDRhZHc2RjRwU3UwZGFYNjVWQml3QnRtTHNTR0Jaa0NLTzBzZmpzUWZSb0FXUGxUZApBbklqY1d6M0hIMXNoV1hPTFJtQkI3ZlNOc3NOOXlQc2ZLRjZNNjJ4T3ZKbTFJUUtJZDRSQjVpVWtQME1UL3dQCkpKYmdmVGE4UitEdHVVSVd0S3lER1JxMlh5bWlQS0FYSDdxZkxVdm1DZFdGUkNEU2pVNHArZCtremVJV1kzTzAKVHgyWjhYUUJBb0dCQVBFcHpwQWZueGJTaXEzU1VETmpnZ2EzSldPejluQk8xMHc0OVFURkNMKzZNZDRiQ2ZOLwppb1AyVFZRaFc3R2JUODkwbDczZ0tMVzdmeWF6VFFDcHNmVmNseWNlV0NualQ0UVdUbkVvSVdNRDlKS25uRVFzCmtualI3ZVNONUVDanBETFNvMlcvMVRqTE1PTk1rVncxb1RFY3c2NVRHTC9BL1RtZDhTT09uMUJoQW9HQkFOWWcKVzhaQVU0ZXB3T2lpZ1JrUE9jWFlVV25XTHh4em1zVFd0bzZLbU1jMkhFaldXanNvRGY4bVp2akRlaVF3Nk1ZMQpqWG5nYStGbTdEZm90OUd2T0VmZmlyUEgwRmRVbTBrcUVpRUZUVTdqSG9jZ2NHRXF6bThORWs3RllBY1ZKRkxmCkpOa0Zla0JqM1pWNXY0WXAyRElmTllpZ09PZUhubmMwdnkxOFA5UnhBb0dBWC8zS0VLZmxoUW9NMVI5UGVRVDAKcm9PYnlGSExsK3hwMmhjWnYrcEZqenNudWtaODhZVWt0MTRFYmFaUmZ5Slk1RFIrYWIrZHRLaUs5ZmFNZ2VVSgp4cVl5TEFueUFjcE96ajZxdm5QQXhrNit2TmttWkNSeHNOR3VwVGl0VCtWUzZEL2JkaGFqWWxYT2djcnFXUStuCnQ0ckJnTlBtbC96VFRtbkZuK2VYRmtFQ2dZRUFnZnM4bXJrYnU2T2hkZGFIdFpXWGhYRU40c2hnNnMyR2F1ekgKL3ZsRlN0Q2ZGTndDQkIwSmVoUnV0NTI1L0ZRd1NYbml1dFF2eUxFNHZhdW9Ra0l5VVBieTlMVmIxRmVJdUQ0dwpxUmpWMkFobzFMQXRaOTZiVjdCQXA4Nkt2MkhuSGVOVk0rUnVWTDRLbVoxQlZRajdzMWxjbnVaY0JMZy95cThiClNsbzlTUkVDZ1lCL2QwZGRQQWZ6c1Rrczh6RVg1V1BVNG0xVFZ3MURUd2M2ZXVncVlkaHpOQUdMblNId3owb0oKaWhseTF6WDJoeXFCaFNOa2RjdHc4bFZLajJwa0lxd0luRnFLbE0yM3Ztc2E0K2Iyc3B4ZjFOUGNvazBKZXlXagpidmVLZkZNV2JhZGhHaFRlOU1vOHVVa05GMXo4WlhuTWdUL3dFR1h4SnlpbzdWVmlMZ2dYRVE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=

# 使用 Kubectl 命令执行即可
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ kubectl get node
NAME               STATUS     ROLES    AGE   VERSION
szubuntu-node091   Ready      master   19m   v1.30.1

04 总 结

这是一款我使用多年的 Kubernetes 集群部署和维护工具,很是好用,更新也快,在 Kubernetes 1.30 出来没多久他就支持了,很赞,当然 kubekey 也是不错的,条条大路通罗马,选择一款适合自己的工具很是重要,这期就分享到这里,谢谢!

​参考链接(更多的使用详见官方文档):​github.com/easzlab/kub…