kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。
kubeasz 从每一个单独部件组装到完整的集群,提供最灵活的配置能力,几乎可以设置任何组件的任何参数;同时又为集群创建预置一套运行良好的默认配置,甚至自动化创建适合大规模集群的BGP Route Reflector网络模式。
Ubuntu16以上或者CentOS7以上
注意: 确保在干净的系统上开始安装,不能使用曾经装过kubeadm或其他k8s发行版的环境
export release=3.5.2
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
下载kubeasz代码、二进制、默认容器镜像
#
./ezdown -D
【可选】下载额外容器镜像(cilium,flannel,prometheus等)
./ezdown -X
【可选】下载离线系统包 (适用于无法使用yum/apt仓库情形)
./ezdown -P
上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/kubeasz
/etc/kubeasz
包含 kubeasz 版本为 ${release} 的发布代码/etc/kubeasz/bin
包含 k8s/etcd/docker/cni 等二进制文件/etc/kubeasz/down
包含集群安装时需要的离线容器镜像/etc/kubeasz/down/packages
包含集群安装时需要的系统基础软件./ezdown -S
...
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 # 验证集群服务状态
本文档基于 dashboard 2.2 版本,k8s 1.22 版本,因 dashboard 1.7 以后默认开启了自带的登录验证机制,因此不同版本登录有差异:
参考 https://github.com/kubernetes/dashboard
api-server
方式访问dashboardNodePort
方式暴露服务,这样集群外部可以使用 https://NodeIP:NodePort
(注意是https不是http,区别于1.6.3版本) 直接访问 dashboard。安装部署
# ezctl 集成部署组件,xxxx 代表集群部署名
# dashboard 部署文件位于 /etc/kubeasz/clusters/xxxx/yml/dashboard/ 目录
./ezctl setup xxxx 07
# 查看pod 运行状态
kubectl get pod -n kube-system | grep dashboard
dashboard-metrics-scraper-856586f554-l6bf4 1/1 Running 0 35m
kubernetes-dashboard-698d4c759b-67gzg 1/1 Running 0 35m
# 查看dashboard service
kubectl get svc -n kube-system|grep dashboard
kubernetes-dashboard NodePort 10.68.219.38 <none> 443:24108/TCP 53s
# 查看pod 运行日志
kubectl logs -n kube-system kubernetes-dashboard-698d4c759b-67gzg
因为dashboard 作为k8s 原生UI,能够展示各种资源信息,甚至可以有修改、增加、删除权限,所以有必要对访问进行认证和控制,为演示方便这里使用 https://NodeIP:NodePort
方式访问 dashboard,支持两种登录方式:Kubeconfig、令牌(Token)。
选择 Token 方式登录,复制下面输出的admin token 字段到输入框
# 获取 Bearer Token,找到输出中 ‘token:’ 开头的后面部分
$ kubectl describe -n kube-system secrets admin-user
Name: dashboard-read-user-token-68g2q
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-read-user
kubernetes.io/service-account.uid: 2aeac11f-5498-491d-832d-bd4e6b307c08
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1350 bytes
namespace: 11 bytes
token:
eyJhbGciOiJSUzI1NiIsImtpZCI6ImpBQzEyelVYNjdwaDRBMm5HbHZLSE5sTTgzTTNQWU5Rak1Ja24tU29ybGcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL
3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc
2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtcmVhZC11c2VyLXRva2VuLTY4ZzJxIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb
3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRhc2hib2FyZC1yZWFkLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtY
WNjb3VudC51aWQiOiIyYWVhYzExZi01NDk4LTQ5MWQtODMyZC1iZDRlNmIzMDdjMDgiLCJz
注意: 使用chrome浏览器访问 https://NodeIP:NodePort
可能提示安全风险无法访问,可以换firefox浏览器设置安全例外,继续访问。按照上面的提示,我这里的访问地址是:https://172.23.13.168:24108
注意: 使用 chrome 浏览器访问 https://NodeIP:NodePort 可能提示安全风险无法访问,选择高级继续访问。
Kubeconfig登录(admin) Admin kubeconfig文件默认位置:/root/.kube/config
,该文件中默认没有token字段,使用Kubeconfig方式登录,还需要将token追加到该文件中,完整的文件格式如下:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdxxxxxxxxxxxxxx
server: https://192.168.1.2:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: admin
name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRxxxxxxxxxxx
client-key-data: LS0tLS1CRUdJTxxxxxxxxxxxxxx
token: eyJhbGcixxxxxxxxxxxxxxxx
以上步骤创建的K8S开发测试环境请尽情折腾,碰到错误尽量通过查看日志、上网搜索、提交issues
等方式解决;当然你也可以清理集群后重新创建。
在宿主机上,按照如下步骤清理
docker exec -it kubeasz ezctl destroy default