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
セクションを追加します。マスターノードの静的 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
サービスモニターが起動するには 1 分程度の時間がかかる場合があります。これで、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
に対して認証できないため、メトリックスを収集できません。Prometheus 認証を
etcd
に対して設定するには、以下を実行します。/etc/etcd/ca/ca.crt
および/etc/etcd/ca/ca.key
認証情報ファイルをマスターノードからローカルマシンにコピーします。$ 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
を実行する場合、この Ansible 変数を使用して IP アドレスでノードを指定します。openshift_cluster_monitoring_operator_etcd_hosts=[<address1>, <address2>, ...]
etcd
ノードの IP アドレスが変更される場合は、この一覧を更新する必要があります。