OpenShift Cluster Logging が要求しているリソース量を調べる


はじめに

個人的な実験メモで、他の方が読む事を想定してはおらず、読みやすいものではないのでご了承頂ければ幸いです。

環境確認

記録用に環境の情報を取得する。

各 Node の情報 (OpenShift 4.8.26)

[root@bastion openshift]# oc version
Client Version: 4.8.26
Server Version: 4.8.26
Kubernetes Version: v1.21.6+bb8d50a
[root@bastion openshift]#
[root@bastion openshift]# oc get nodes
NAME                          STATUS   ROLES          AGE     VERSION
ocp48-6vldl-infra-94vjm       Ready    infra,worker   11d     v1.21.6+bb8d50a
ocp48-6vldl-infra-gjgwb       Ready    infra,worker   11d     v1.21.6+bb8d50a
ocp48-6vldl-infra-ocs-dbjbd   Ready    infra,worker   4d12h   v1.21.6+bb8d50a
ocp48-6vldl-infra-ocs-rdt8b   Ready    infra,worker   4d12h   v1.21.6+bb8d50a
ocp48-6vldl-infra-ocs-xdhvn   Ready    infra,worker   4d12h   v1.21.6+bb8d50a
ocp48-6vldl-infra-qvwvk       Ready    infra,worker   11d     v1.21.6+bb8d50a
ocp48-6vldl-master-0          Ready    master         16d     v1.21.6+bb8d50a
ocp48-6vldl-master-1          Ready    master         16d     v1.21.6+bb8d50a
ocp48-6vldl-master-2          Ready    master         16d     v1.21.6+bb8d50a
ocp48-6vldl-worker-85crs      Ready    worker         16d     v1.21.6+bb8d50a
ocp48-6vldl-worker-hdj9r      Ready    worker         16d     v1.21.6+bb8d50a
ocp48-6vldl-worker-xp4bf      Ready    worker         16d     v1.21.6+bb8d50a
[root@bastion openshift]# 
  • Master Node x 3
  • Worker Node x 3
  • Infra Node x 6
    合計 12本の Node で構成されたクラスター。環境は VMware。

OpenShift Cluster Logging の バージョンの確認

2種類の Operator の組み合わせとして提供される。それぞれバージョンが付けられている。

[root@bastion openshift]# oc get csv
NAME                              DISPLAY                            VERSION    REPLACES   PHASE
cluster-logging.5.3.5-20          Red Hat OpenShift Logging          5.3.5-20              Succeeded
elasticsearch-operator.5.3.5-20   OpenShift Elasticsearch Operator   5.3.5-20              Succeeded
[root@bastion openshift]# 

OpenShift Logging の Opearator のバージョンは、5.3.5-20
Cluster Logging Operator と、Elastic Search Operator で構成される。

これらは通常、OpenShift コンソールの Operator Hubから導入する。(コマンドラインからも導入できるはず)

openshift-logging namespace の Pod のデプロイ状況

nodeSelectortaint 等を使って infra ノードに配置

[root@bastion openshift]# oc get pods -o wide
NAME                                            READY   STATUS      RESTARTS   AGE     IP             NODE                          NOMINATED NODE   READINESS GATES 
cluster-logging-operator-6df7db84bb-rg868       1/1     Running     0          11d     10.128.4.25    ocp48-6vldl-infra-gjgwb       <none>           <none>
collector-5jzxh                                 2/2     Running     0          47h     10.130.4.67    ocp48-6vldl-infra-ocs-xdhvn   <none>           <none>
collector-7bf6t                                 2/2     Running     0          47h     10.130.0.45    ocp48-6vldl-master-0          <none>           <none>
collector-7kmfv                                 2/2     Running     0          47h     10.129.2.9     ocp48-6vldl-worker-85crs      <none>           <none>
collector-9njjr                                 2/2     Running     0          47h     10.129.4.12    ocp48-6vldl-infra-ocs-rdt8b   <none>           <none>
collector-9z77f                                 2/2     Running     0          47h     10.131.2.10    ocp48-6vldl-infra-94vjm       <none>           <none>
collector-b7hjd                                 2/2     Running     0          47h     10.128.2.10    ocp48-6vldl-worker-hdj9r      <none>           <none>
collector-cctmt                                 2/2     Running     0          47h     10.131.4.67    ocp48-6vldl-infra-ocs-dbjbd   <none>           <none>
collector-j7pb9                                 2/2     Running     0          47h     10.131.0.8     ocp48-6vldl-worker-xp4bf      <none>           <none>
collector-mz9ql                                 2/2     Running     0          47h     10.130.2.10    ocp48-6vldl-infra-qvwvk       <none>           <none>
collector-pd4g4                                 2/2     Running     0          47h     10.128.4.132   ocp48-6vldl-infra-gjgwb       <none>           <none>
collector-srbdx                                 2/2     Running     0          47h     10.129.0.47    ocp48-6vldl-master-2          <none>           <none>
collector-wl6ng                                 2/2     Running     0          47h     10.128.0.46    ocp48-6vldl-master-1          <none>           <none>
elasticsearch-cdm-gjm8weln-1-7fc97cc94-b7qr6    2/2     Running     0          19h     10.131.4.8     ocp48-6vldl-infra-ocs-dbjbd   <none>           <none>
elasticsearch-cdm-gjm8weln-2-75787bdc7f-thh2f   2/2     Running     0          19h     10.129.4.11    ocp48-6vldl-infra-ocs-rdt8b   <none>           <none>
elasticsearch-cdm-gjm8weln-3-6478496ddd-tp78x   2/2     Running     0          19h     10.130.4.8     ocp48-6vldl-infra-ocs-xdhvn   <none>           <none>
elasticsearch-im-app-27476700-lk5s4             0/1     Completed   0          3m34s   10.128.4.209   ocp48-6vldl-infra-gjgwb       <none>           <none>
elasticsearch-im-audit-27476700-qnbzd           0/1     Completed   0          3m34s   10.128.4.208   ocp48-6vldl-infra-gjgwb       <none>           <none>
elasticsearch-im-infra-27476700-hckww           0/1     Completed   0          3m34s   10.128.4.210   ocp48-6vldl-infra-gjgwb       <none>           <none>
kibana-6f894f5bc4-7zkc4                         2/2     Running     0          19h     10.128.4.92    ocp48-6vldl-infra-gjgwb       <none>           <none>
[root@bastion openshift]#

環境認識

  • 各 Node毎に collector が Deploy されている。Master 含めた Node が12本あるので合計 12 の collector
  • elasticsearch-cdm-xxxxPod は、デフォルト設定を使ったので、冗長化のため 3つデプロイされている。
  • kibanaPod もデフォルト設定をそのまま使ったので 1つデプロイされている。
  • cluster-logging-operator-xxxx は、1つだけ depoy されている。
  • elasticsearch-im-app/audit/infra-xxx は、ジョブぽい (後で調べる)

ClusterLogging 設定用の Custom Resource

Cluster Logging Operator を Deploy した後、実際の Pod 群を生成するために ClusterLogging という CRD の Customer Resource を作成する必要がある。デフォルトで instance という名前がセットされたテンプレートが用意されているのでそれを改造する。

replica 数などはデフォルトを使用。nodeSelectortolerationinfrastructure Node に配置するために追加。

ClusterLogging 設定用の Custom Resource
[root@bastion openshift]# oc get ClusterLogging instance -o yaml
apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
  creationTimestamp: "2022-03-28T01:09:18Z"
  generation: 3
  name: instance
  namespace: openshift-logging
  resourceVersion: "11292909"
  uid: a7735abe-3541-4b70-bf88-5bda1f8dfab7
spec:
  collection:
    logs:
      fluentd: {}
      type: fluentd
  logStore:
    elasticsearch:
      nodeCount: 3
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      redundancyPolicy: SingleRedundancy
      storage:
        size: 200G
        storageClassName: thin
      tolerations:
      - effect: NoSchedule
        key: infra
        value: reserved
      - effect: NoExecute
        key: infra
        value: reserved
    retentionPolicy:
      application:
        maxAge: 7d
    type: elasticsearch
  managementState: Managed
  visualization:
    kibana:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      replicas: 1
      tolerations:
      - effect: NoSchedule
        key: infra
        value: reserved
      - effect: NoExecute
        key: infra
        value: reserved
    type: kibana
status:
  <略>
[root@bastion openshift]#

主要 Pod の Request / Limit 調査

Pod 毎に egrep で、Requests/Limits 周辺の値を抜いていく

[root@bastion openshift]#  oc describe pod cluster-logging-operator-6df7db84bb-rg868  | egrep 'Limits|Requests' -A3
[root@bastion openshift]#
[root@bastion openshift]# oc describe pod elasticsearch-cdm-gjm8weln-1-7fc97cc94-b7qr6 | egrep 'Limits|Requests' -A3
    Limits:
      memory:  16Gi
    Requests:
      cpu:      1
      memory:   16Gi
    Readiness:  exec [/usr/share/elasticsearch/probe/readiness.sh] delay=10s timeout=30s period=5s #success=1 #failure=3
--
    Limits:
      memory:  256Mi
    Requests:
      cpu:     100m
      memory:  256Mi
    Environment:
[root@bastion openshift]#  oc describe pod collector-5jzxh | egrep 'Limits|Requests' -A3
    Limits:
      memory:  736Mi
    Requests:
      cpu:     100m
      memory:  736Mi
    Environment:
[root@bastion openshift]#
[root@bastion openshift]#  oc describe pod kibana-6f894f5bc4-7zkc4 | egrep 'Limits|Requests' -A3
    Limits:
      memory:  736Mi
    Requests:
      cpu:      100m
      memory:   736Mi
    Readiness:  exec [/usr/share/kibana/probe/readiness.sh] delay=5s timeout=4s period=5s #success=1 #failure=3
--
    Limits:
      memory:  256Mi
    Requests:
      cpu:     100m
      memory:  256Mi
    Environment:
[root@bastion openshift]# 

上記のコマンドの結果のまとめ
空白部分は特に指定が無かった事を表す。

Pod 名 container名 CPU (Limits) CPU (Requests) Memory (Limits) Memory (Requests)
Operator(controller)
cluster-logging-operator-xxxx
ElasticSearch
elasticsearch-cdm-xxxx elasticsearch 1 16Gi 16Gi
proxy 100m 256Mi 256Mi
collector
collector-xxxx 100m 736Mi 736Mi
kibana
kibana-xxxx kibana 100m 736Mi 736Mi
kibana-proxy 100m 256Mi 256Mi

Pod内のcontainer 名は、別コマンドで確認して別途補則

後で、jsonpath で、Pod 内の container 毎の limits/requests の取り方を考えたが時すでに遅し。

[root@bastion openshift]# oc get pod elasticsearch-cdm-gjm8weln-1-7fc97cc94-b7qr6 -o=jsonpath='{range .spec.containers[*]} {.name}{"\t"}{.resources}{"\n"}'
 elasticsearch  {"limits":{"memory":"16Gi"},"requests":{"cpu":"1","memory":"16Gi"}}
 proxy  {"limits":{"memory":"256Mi"},"requests":{"cpu":"100m","memory":"256Mi"}}

[root@bastion openshift]# 

実際のリソース消費量

OpenShift を単純インストール後、ほぼ素の状態でのリソース使用量。

[root@bastion openshift]# kubectl top pods -n openshift-logging --use-protocol-buffers
NAME                                            CPU(cores)   MEMORY(bytes)   
cluster-logging-operator-6df7db84bb-rg868       1m           61Mi
collector-5jzxh                                 6m           363Mi
collector-7bf6t                                 18m          550Mi
collector-7kmfv                                 3m           327Mi
collector-9njjr                                 5m           354Mi
collector-9z77f                                 5m           409Mi
collector-b7hjd                                 4m           314Mi
collector-cctmt                                 5m           361Mi
collector-j7pb9                                 4m           339Mi
collector-mz9ql                                 10m          408Mi
collector-pd4g4                                 7m           406Mi
collector-srbdx                                 29m          611Mi
collector-wl6ng                                 17m          669Mi
elasticsearch-cdm-gjm8weln-1-7fc97cc94-b7qr6    365m         10129Mi
elasticsearch-cdm-gjm8weln-2-75787bdc7f-thh2f   376m         10079Mi
elasticsearch-cdm-gjm8weln-3-6478496ddd-tp78x   411m         10126Mi
kibana-6f894f5bc4-7zkc4                         2m           134Mi
[root@bastion openshift]# 

elasticsearch-cdm-xxxx の CPU / Memory 使用量がやはり多い。
elasticsearch-cdm-xxxx は、Memory の request は 16Gi だが、インストール直後では、10Gi 程度になっている。