5.4. 配置 etcd 监控
如果 etcd
服务没有正确运行,则整个 OpenShift Container Platform 集群的成功操作将处于危险之中。因此,最好为 etcd
配置监控。
按照以下步骤配置 etcd
监控 :
流程
验证监控堆栈是否正在运行:
$ oc -n openshift-monitoring get pods NAME READY STATUS RESTARTS AGE alertmanager-main-0 3/3 Running 0 34m alertmanager-main-1 3/3 Running 0 33m alertmanager-main-2 3/3 Running 0 33m cluster-monitoring-operator-67b8797d79-sphxj 1/1 Running 0 36m grafana-c66997f-pxrf7 2/2 Running 0 37s kube-state-metrics-7449d589bc-rt4mq 3/3 Running 0 33m node-exporter-5tt4f 2/2 Running 0 33m node-exporter-b2mrp 2/2 Running 0 33m node-exporter-fd52p 2/2 Running 0 33m node-exporter-hfqgv 2/2 Running 0 33m prometheus-k8s-0 4/4 Running 1 35m prometheus-k8s-1 0/4 ContainerCreating 0 21s prometheus-operator-6c9fddd47f-9jfgk 1/1 Running 0 36m
打开集群监控堆栈的配置文件:
$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
config.yaml: |+
下,添加etcd
部分。如果在 master 节点上运行静态 pod 的
etcd
,您可以使用选择器指定etcd
节点:... data: config.yaml: |+ ... etcd: targets: selector: openshift.io/component: etcd openshift.io/control-plane: "true"
如果在单独的主机上运行
etcd
,则需要使用 IP 地址指定节点:... data: config.yaml: |+ ... etcd: targets: ips: - "127.0.0.1" - "127.0.0.2" - "127.0.0.3"
如果
etcd
节点的 IP 地址有变化,您必须更新此列表。
验证
etcd
服务监控器现在是否正在运行:$ oc -n openshift-monitoring get servicemonitor NAME AGE alertmanager 35m etcd 1m 1 kube-apiserver 36m kube-controllers 36m kube-state-metrics 34m kubelet 36m node-exporter 34m prometheus 36m prometheus-operator 37m
- 1
etcd
服务监控器。
etcd
服务监控器最多可能需要一分钟才能启动。现在,您可以进入 Web 界面来查看有关
etcd
监控状态的更多信息。要获取 URL,请运行:
$ oc -n openshift-monitoring get routes NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... prometheus-k8s prometheus-k8s-openshift-monitoring.apps.msvistun.origin-gce.dev.openshift.com prometheus-k8s web reencrypt None
-
使用
https
,导航到为prometheus-k8s
列出的 URL。登录。
确保该用户属于
cluster-monitoring-view
角色。此角色提供查看集群监控 UI 的访问权限。例如,要将用户
developer
添加到cluster-monitoring-view
角色中,请运行:$ oc adm policy add-cluster-role-to-user cluster-monitoring-view developer
-
在 Web 界面中,以属于
cluster-monitoring-view
角色的用户身份登录。 单击 Status,然后单击 Targets。如果您看到
etcd
条目,则会监控etcd
。虽然
etcd
被监控,但 Prometheus 还无法通过etcd
进行身份验证,因此无法收集指标数据。针对
etcd
配置 Prometheus 身份验证:将
/etc/etcd/ca/ca.crt
和/etc/etcd/ca/ca.key
凭证文件从 master 节点复制到本地机器:$ ssh -i gcp-dev/ssh-privatekey cloud-user@35.237.54.213
创建包含以下内容的
openssl.cnf
文件:[ req ] req_extensions = v3_req distinguished_name = req_distinguished_name [ req_distinguished_name ] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, keyEncipherment, digitalSignature extendedKeyUsage=serverAuth, clientAuth
生成
etcd.key
私钥文件:$ openssl genrsa -out etcd.key 2048
生成
etcd.csr
证书签名请求文件:$ openssl req -new -key etcd.key -out etcd.csr -subj "/CN=etcd" -config openssl.cnf
生成
etcd.crt
证书文件:$ openssl x509 -req -in etcd.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out etcd.crt -days 365 -extensions v3_req -extfile openssl.cnf
将凭证置于 OpenShift Container Platform 使用的格式:
$ cat <<-EOF > etcd-cert-secret.yaml apiVersion: v1 data: etcd-client-ca.crt: "$(cat ca.crt | base64 --wrap=0)" etcd-client.crt: "$(cat etcd.crt | base64 --wrap=0)" etcd-client.key: "$(cat etcd.key | base64 --wrap=0)" kind: Secret metadata: name: kube-etcd-client-certs namespace: openshift-monitoring type: Opaque EOF
这会创建 etcd-cert-secret.yaml 文件
将凭证文件应用到集群:
$ oc apply -f etcd-cert-secret.yaml
现在您已配置了身份验证,请再次访问 Web 界面的 Targets 页面。验证
etcd
现在是否正确监控。可能需要几分钟后更改才会生效。如果您希望在更新 OpenShift Container Platform 时自动更新
etcd
监控,请将 Ansible 清单文件中的这个变量设置为true
:openshift_cluster_monitoring_operator_etcd_enabled=true
如果您在单独的主机上运行
etcd
,请按照 IP 地址使用此 Ansible 变量指定节点:openshift_cluster_monitoring_operator_etcd_hosts=[<address1>, <address2>, ...]
如果
etcd
节点的 IP 地址改变,您必须更新此列表。