多个 Kubernetes 集群指标采集最佳实践¶
简介¶
一个工作空间接入多个 Kubernetes 集群时,需要设置 ENV_NAMESPACE 环境变量,值为非空字符,不同集群值不能相同。
针对一个工作空间接入多个 Kubernetes 集群指标,观测云提供了使用全局 Tag 的方式来进行区分。当集群中只有一个采集对象,比如采集 Kubernetes API Server 指标,集群中 DataKit 的数量会大于一个,为了避免指标采集重复,DataKit 开启了选举功能,这个时候区分集群的方式是增加 ENV_GLOBAL_ELECTION_TAGS
。
而针对非选举类的指标采集,比如为 Pod 增加 annotations 的方式进行指标采集,观测云提供了在 ENV_GLOBAL_HOST_TAGS
环境变量中增加全局 Tag 的方式。
- name: ENV_GLOBAL_HOST_TAGS
value: host=__datakit_hostname,host_ip=__datakit_ip,cluster_name_k8s=k8s-prod
上述采集到的指标集都会加上 cluster_name_k8s
的 Tag,值是 k8s-prod
,这就是区分集群的原理。
下面就以采集多个集群中的 Kubernetes API Server 指标为例来进行详细说明。
前置条件¶
- 安装 Kubernetes 1.18+
- 观测云账号
操作步骤¶
步骤 1 测试环境集群部署 DataKit¶
1.1 下载 datakit.yaml¶
登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml
。
1.2 替换 Token¶
登录观测云控制台,进入「管理」模块,在「基本设置」里面复制 token,替换 datakit.yaml
文件中的 ENV_DATAWAY
环境变量的 value 值中的 <your-token>
。
1.3 增加全局 Tag¶
- 在
datakit.yaml
文件中的ENV_GLOBAL_HOST_TAGS
环境变量值,最后增加cluster_name_k8s=k8s-test
。 - 再增加环境变量
ENV_GLOBAL_ELECTION_TAGS
,这样测试环境的集群就是 k8s-test。 - 设置环境变量
ENV_NAMESPACE
值是k8s-test
,这是开启了 DataKit 选举,工作空间 + 这个命名空间只有一个 DataKit 采集 kubernetes API Server 的指标。
- name: ENV_NAMESPACE
value: k8s-test
- name: ENV_GLOBAL_ELECTION_TAGS
value: cluster_name_k8s=k8s-test
1.4 配置 Kubernetes API Server 指标采集¶
详见<Kubernetes API Server 集成文档>
1.5 部署 DataKit¶
把 datakit.yaml
上传到测试集群的 Master 节点,执行部署命令。
步骤 2 生产环境集群部署 DataKit¶
2.1 修改 datakit.yaml¶
使用 步骤 1 中的 datakit.yaml
,把 k8s-test
改成 k8s-prod
,这样生产环境的集群就是 k8s-prod
。
还需要修改一下 api-server.conf
中的 url
。
2.2 部署 DataKit¶
把 datakit.yaml
上传到生产集群的 Master 节点,执行部署命令。
步骤 3 视图预览¶
3.1 指标预览¶
登录观测云控制台,点击「指标」,搜索「prom_api_server」,在 cluster_name_k8s
标签下面已经有两个集群的名称。
3.2 新建视图¶
登录观测云控制台,点击「场景」 - 「新建仪表板」,选择 Kubernetes API Server 监控视图,集群名称下拉框可以区分集群了。