Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

5.4. 配置 etcd 监控

如果 etcd 服务没有正确运行,则整个 OpenShift Container Platform 集群的成功操作将处于危险之中。因此,最好为 etcd 配置监控。

按照以下步骤配置 etcd 监控 :

流程

  1. 验证监控堆栈是否正在运行:

    $ 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
  2. 打开集群监控堆栈的配置文件:

    $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
  3. config.yaml: |+ 下,添加 etcd 部分。

    1. 如果在 master 节点上运行静态 pod 的 etcd,您可以使用选择器指定 etcd 节点:

      ...
      data:
        config.yaml: |+
          ...
          etcd:
            targets:
              selector:
                openshift.io/component: etcd
                openshift.io/control-plane: "true"
    2. 如果在单独的主机上运行 etcd,则需要使用 IP 地址指定节点:

      ...
      data:
        config.yaml: |+
          ...
          etcd:
            targets:
             ips:
             - "127.0.0.1"
             - "127.0.0.2"
             - "127.0.0.3"

      如果 etcd 节点的 IP 地址有变化,您必须更新此列表。

  4. 验证 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 服务监控器最多可能需要一分钟才能启动。

  5. 现在,您可以进入 Web 界面来查看有关 etcd 监控状态的更多信息。

    1. 要获取 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
    2. 使用 https,导航到为 prometheus-k8s 列出的 URL。登录。
  6. 确保该用户属于 cluster-monitoring-view 角色。此角色提供查看集群监控 UI 的访问权限。

    例如,要将用户 developer 添加到 cluster-monitoring-view 角色中,请运行:

    $ oc adm policy add-cluster-role-to-user cluster-monitoring-view developer
  7. 在 Web 界面中,以属于 cluster-monitoring-view 角色的用户身份登录。
  8. 单击 Status,然后单击 Targets。如果您看到 etcd 条目,则会监控 etcd

    etcd 无证书
  9. 虽然 etcd 被监控,但 Prometheus 还无法通过 etcd 进行身份验证,因此无法收集指标数据。

    针对 etcd 配置 Prometheus 身份验证:

    1. /etc/etcd/ca/ca.crt/etc/etcd/ca/ca.key 凭证文件从 master 节点复制到本地机器:

      $ ssh -i gcp-dev/ssh-privatekey cloud-user@35.237.54.213
    2. 创建包含以下内容的 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
    3. 生成 etcd.key 私钥文件:

      $ openssl genrsa -out etcd.key 2048
    4. 生成 etcd.csr 证书签名请求文件:

      $ openssl req -new -key etcd.key -out etcd.csr -subj "/CN=etcd" -config openssl.cnf
    5. 生成 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
    6. 将凭证置于 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 文件

    7. 将凭证文件应用到集群:

      $ oc apply -f etcd-cert-secret.yaml
  10. 现在您已配置了身份验证,请再次访问 Web 界面的 Targets 页面。验证 etcd 现在是否正确监控。可能需要几分钟后更改才会生效。

    etcd 监控工作
  11. 如果您希望在更新 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 地址改变,您必须更新此列表。