非正常安装 KubeSphere 踩坑记录

听说最近 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

https://github.com/kubesphere/kubesphere/blob/4e3d37a994736ceade0680ef5c959cdd3bf0a7ca/pkg/simple/client/monitoring/prometheus/promql.go

"apiserver_request_rate":              `apiserver:apiserver_request_total:sum_irate`,

根据这条记录去 ks-installer 查询,可以找到这个配置

kubesphere/ks-installer

为了支持 ks-console 直接查询我们的监控,我们需要在自己的 prometheus-operator 中加上这个配置

# 默认的 namespace 为 kubesphere-monitoring-system,需要手动修改为自己
k apply -f prometheus-rules-v1.16%2B.yaml

改完之后发现 controller manager 监控可以拿到了,apiserver 还是不行,然后发现这条 promql 无法查询到数据,去查询 apiserver 代码里面的 metric 定义,发现是我的 k8s 版本太高了,1.18 的 apiserver 已经弃用这个指标了

apiserver:apiserver_request_latencies:avg

kubernetes/kubernetes

目前看来 kube-sphere 没有解耦监控部分,还是比较依赖于 Prometheus 的配置,现在比较流行的方式是直接通过 metrics-api 获取集群内部的监控信息