公开 kube-scheduler、etcd 或 kube-controller 管理器(并持久化更改)
您可以在 0.0.0.0 上公开指标,就像您通过编辑配置映射然后将这些更改拉到每个控制平面节点所做的那样。然后,这些更改将在升级过程中持续存在。对于 etcd,这也可以通过另一种可能更可取的方式来完成(请参阅下文)
第一步:使用以下命令编辑配置映射:
kubectl edit -n kube-system cm/kubeadm-config
按照here 的描述添加/更改相关的绑定地址,但例如如下概述的 etcd:
kind: ClusterConfiguration
etcd:
local:
extraArgs:
listen-metrics-urls: http://0.0.0.0:2381
第二步:注意:请阅读here了解升级命令之前 将其应用于您关心的任何集群,因为它也可能会更新集群组件版本,除非您刚刚进行了升级:)
因此,要反映更改,您需要在每个控制平面节点上运行 kubeadm upgrade node(请每次运行一个)。这将关闭受影响的 Pod(您已对其进行更改的 Pod)并开始一个新的公开指标的实例。您可以在之前和之后进行验证,例如:netstat -tulpn | grep etcd
对于 etcd,Prometheus 中的默认端口是 2379,因此还需要在您的 prometheus 值文件中将其调整为 2381:
kubeEtcd:
service:
port: 2381
targetPort: 2381
以上解决方案来源here
访问现有的 etcd 指标而不进一步暴露它
对于 ETCD 指标,还有另一种可能是首选的方式来使用端口 2379 上已经公开的 https 指标端点(需要身份验证)来访问指标。您可以使用 Curl 验证这一点:
curl https://<your IP>:2379/metrics -k --cert /etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.key
为此,我们需要为 Prometheus 提供正确的证书作为 kubernetes 中的机密。步骤描述here 并概述如下:
在部署 Prometheus 的命名空间中创建一个 Secret。
kubectl -n monitoring create secret generic etcd-client-cert --from-file=/etc/kubernetes/pki/etcd/ca.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key
将以下内容添加到您的 prometheus helm 值文件中
prometheus:
prometheusSpec:
secrets: ['etcd-client-cert']
kubeEtcd:
serviceMonitor:
scheme: https
insecureSkipVerify: false
serverName: localhost
caFile: /etc/prometheus/secrets/etcd-client-cert/ca.crt
certFile: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.crt
keyFile: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.key
Prometheus 现在应该能够使用我们安装在密钥中的证书访问 https 端点。我会说这是 etcd 的首选方式,因为我们不会进一步公开开放的 http 端点。