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