我在本地搭建,使用的 Multipass 创建的虚拟机,使用 kubeasz 先 Allinone 后添加节点的方式部署。
选择 kubeasz 是因为其通过了 CNCF 的一致性检验,同时有国内源使用起来更方便,另外中文文档对 k8s 初学者较为友好。
项目地址:https://github.com/easzlab/kubeasz
先行准备
本地需要有虚拟机,MacOS 系统可以通过 Multipass 创建。下载地址:https://github.com/canonical/multipass/releases/
使用可以参考这篇文章:《虚拟机管理工具 multipass 使用笔记》
构建机器
创建一个 2C2G 的虚拟机,用于部署 Master 节点。(focal 指代 20.02 Ubuntu 镜像,首次使用下载镜像较慢)
$ multipass launch --name allinone --memory 2G --cpus 2 --disk 30G --timeout 3600 focal
创建两个 Node 节点
$ multipass launch --name allinone-node1 --memory 2G --cpus 2 --disk 10G --timeout 3600 focal
$ multipass launch --name allinone-node2 --memory 2G --cpus 2 --disk 10G --timeout 3600 focal
创建后,可以使用以下命令登入系统执行命令
$ multipass shell allinone
部署 Master 节点
先使用 sudo -i 切换为 Root 用户
准备脚本
$ mkdir deploy && cd deploy
$ export release=3.6.0
$ wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
$ chmod +x ./ezdown
资源下载
部署前需要下载所需镜像、安装包等。
$ ./ezdown -D
海外环境:./ezdown -D -m standard
下载的内容存储在 /etc/kubeasz 目录
集群安装
# 容器化运行 kubeasz
$ ./ezdown -S
# 使用默认配置安装 aio 集群
$ docker exec -it kubeasz ezctl start-aio
如果安装失败,查看日志排除后,使用如下命令重新安装aio集群:docker exec -it kubeasz ezctl setup default all
测试验证
$ source ~/.bashrc
$ kubectl version # 验证集群版本
$ kubectl get node # 验证节点就绪 (Ready) 状态
$ kubectl get pod -A # 验证集群pod状态,默认已安装网络插件、coredns、metrics-server等
$ kubectl get svc -A # 验证集群服务状态
清理及销毁集群
如果需要重新部署集群,可使用以下命令
$ docker exec -it kubeasz ezctl destroy default
添加 Node 节点
参考:https://github.com/easzlab/kubeasz/blob/master/docs/op/op-index.md
在 Master 节点查看路径(/etc/kubeasz/clusters/default/hosts` 可以看到集群名称为 default)
获取 Master 节点的公钥,以下命令均在 Master 节点执行,Master 节点同样是部署脚本运行的节点,确保你已经通过 sudo -i 切换为 root 用户
$ cat ~/.ssh/id_rsa.pub
将内容追加到两台 Node 节点机器的 ~/.ssh/authorized_keys 文件内
而后在 Master 节点运行命令添加节点,注意替换 IP,从节点的 IP 可以通过 multipss list 命令查看
# 新增节点
$ dk ezctl add-node default 192.168.64.13 k8s_nodename=worker-01
$ dk ezctl add-node default 192.168.64.14 k8s_nodename=worker-02
# 删除节点
$ dk ezctl del-node default 192.168.64.13
$ dk ezctl del-node default 192.168.64.14
备注:dk 命令指代 docker exec -it kubeasz
运行后查看节点状态
$ kubectl get node
安装插件
以上的步骤没有安装可选组件,无法看到指标,此处我们安装 Prom 可选插件。
$ vim /etc/kubeasz/clusters/default/config.yml
# 修改 prom_install: "yes"
# 下载镜像
$ /etc/kubeasz/ezdown -X prometheus
# 安装
$ dk ezctl setup default 07
补充:这里的 07 是安装步骤,指代 “setup other useful plugins”, 其它步骤可以通过 dk ezctl setup help 查看。default 指代集群名,默认的 Namespace
安装验证
$ kubectl get pod,svc -n monitor
(注意替换 IP)
访问 Prometheus 的 web 界面:http://192.168.64.12:30901
访问 Alertmanager 的 web 界面:http://192.168.64.12:30902
访问 Grafana 的 web 界面:http://192.168.64.12:30903 (默认用户密码 admin:Admin1234!)
其中,Grafana 已经集成了多项指标的面板
K8S 客户端(可选)
初步尝试,Lens 客户端功能和页面都还不错,且提供有个人免费版本。下载地址:https://k8slens.dev/
添加 Cluster 需要 kubeconfig 文件,可以使用命令获取其内容
cat ~/.kube/config
如果找不到,可以使用命令生成 kubectl config view --flatten > kubeconfig 它们的内容是相同的,将内容粘贴到 Lens 客户端