听说最近 kubesphere 3.0 要发布了,周末无聊,遂研究一下。
笔者已经存在一个基于 kubeadm 部署,5 节点的 k8s 集群,架构如下
- Kubernetes 版本 1.18.3
- 操作系统 Ubuntu 18.04.2 LTS 内核 5.4.0-37-generic
- 网络: cilium
- 存储: rook + ceph
- 使用 metallb 作为 LoadBalancer,nginx-ingress 作为 IngressController
- kube-prometheus + Thanos
看 Requirements 是不支持笔者的 k8s 版本的,但是按理来说区别不大,所以就有了以下踩坑记录。
部署
根据官网文档的步骤,基于 ks-installer 在集群内部安装 kube-sphere,由于我的集群版本太高了,无法通过 precheck,遂即通过修改脚本 ansible task 来实现部署
installer/roles/preinstall/tasks/precheck.yaml |
ks-installer 是用于部署 kube-sphere 的一组 Ansible role,在 kube-sphere 3.0 后被 keubkey 来替代,但是目前看来 kubekey 里面的 kube-sphere 的安装还是基于 ks-installer 的。
红帽的 openshift 最新的版本在部署方面选择直接通过 Terraform 来实现对接多个 Provider,而 Rancher 直接通过 Docker-machine,目前来看 kubekey 目前的代码和 Roadmap 还有很长的路要走。
监控
由于集群已经部署了 Prometheus,但 ks 会自行在 kubesphere-monitoring-system 这个 namespace 下部署一套 prometheus-operator,无法复用原来的,后面发现在 ks-router-config 这个 configmap 里面可以自行修改 monitoring endpoint,替换成自己的 Prometheus
然后重启 apiserver 即可
k -n kubesphere-system rollout restart deployment ks-apiserver |
但是发现只能拿到 Workload 和节点的监控信息,无法获取 Kubernetes 组件的监控
查询代码发现写死了 apiserver 的查询语句,明显可以看出这是 Prometheus 中的一个 Rule Record
"apiserver_request_rate": `apiserver:apiserver_request_total:sum_irate`, |
根据这条记录去 ks-installer 查询,可以找到这个配置
为了支持 ks-console 直接查询我们的监控,我们需要在自己的 prometheus-operator 中加上这个配置
# 默认的 namespace 为 kubesphere-monitoring-system,需要手动修改为自己 |
改完之后发现 controller manager 监控可以拿到了,apiserver 还是不行,然后发现这条 promql 无法查询到数据,去查询 apiserver 代码里面的 metric 定义,发现是我的 k8s 版本太高了,1.18 的 apiserver 已经弃用这个指标了
apiserver:apiserver_request_latencies:avg |
目前看来 kube-sphere 没有解耦监控部分,还是比较依赖于 Prometheus 的配置,现在比较流行的方式是直接通过 metrics-api 获取集群内部的监控信息