Red Hat OpenShift on IBM CloudにPrometheusを追加インストールする(組み込みOperator編)
目的
OpenShiftには標準でPrometheusが組み込まれていますが、収集したメトリクスが永続化されないため、実運用で使用するには難しいところがあります。そこで、せっかくOpenShiftには組み込みのOperator Hubがあるので、そこから追加でPrometheusをインストールしてみます。
なお、この目的であればPrometheusではなくIBM Cloud Monitoring with Sysdigを使えばよいとIBMさんは言うかもしれませんが、PrometheusのPromQLがもつ柔軟な表現力や、各種Exporterとの連携でさまざまなメトリクスを収集できることはやはり捨てがたいです。
また、Prometheus Operatorはまだ挙動不審なところや情報不足なところがあるため、利用は自己責任でお願いします。
前提
- 検証環境: Red Hat OpenShift on IBM Cloud 4.3
手順
Operatorの確認
Webコンソールから確認できます。
Operatorのサブスクライブ
ここからはCLIで進めます。Operatorをサブスクライブします。
$ oc create -f - <<EOF
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: prometheus
spec:
channel: beta
installPlanApproval: Auto
name: prometheus
source: community-operators
sourceNamespace: openshift-marketplace
startingCSV: prometheusoperator.0.32.0
EOF
RBACの設定
prometheus-k8s
というServiceAccountが出来ていますが、なぜか何のClusterRoleも割り当てられていません。なので、手動でClusterRoleとClusterRoleBindingを設定します。
$ oc get sa prometheus-k8s
NAME SECRETS AGE
prometheus-k8s 2 3m29s
$ oc create -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ${ClusterRole名}
rules:
- apiGroups:
- ""
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
- apiGroups:
- "extensions"
resources:
- ingresses/status
- ingresses
verbs:
- get
- list
- watch
- nonResourceURLs:
- "/metrics"
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ${好きな名前}
subjects:
- kind: ServiceAccount
name: prometheus-k8s
namespace: ${サブスクライブしたネームスペース}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ${ClusterRole名}
EOF
Prometheusインスタンスの作成
Prometheusのインスタンスを作成します。今回は収集したメトリクスをFile Storageに永続化します。
$ oc create -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: server
labels:
prometheus: k8s
spec:
replicas: 1
serviceAccountName: prometheus-k8s
securityContext: {}
serviceMonitorSelector: {}
ruleSelector: {}
alerting:
alertmanagers: []
retention: 400d # メトリクスの保存期間
storage:
volumeClaimTemplate:
metadata:
labels:
billingType: hourly # またはmonthly
region: jp-tok # リージョン名
zone: tok02 # ゾーン名
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: ibmc-file-bronze-gid # ストレージクラス名
EOF
永続ボリュームは事前定義されたPersistentVolumeClaimには対応しておらず、動的プロビジョニングになります。
Prometheusは非rootユーザーで実行されるため、ストレージクラスは-gid付きのものを使用してください。また、bronzeだと遅すぎるので、実環境ではsilverやgoldを使用することをお勧めします。
数分程度待つとPodが起動します。
$ oc get pods | grep ^prometheus-server
prometheus-server-0 3/3 Running 1 114s
File StorageをNFS v3化(オプション)
File StorageのマウントをNFS v3にします。これはIBM Cloudでの推奨です。
$ _pv=$(oc get pv | grep prometheus-server-db-prometheus-server-0 | awk '{ print $1 }')
$ oc patch pv/${_pv} -p '{"spec":{"mountOptions":["nfsvers=3","hard","intr","lookupcache=none"]}}'
スクレイプ対象の追加
この段階では何もスクレイプしていませんのでスクレイプ対象を追加します。これには2つ方法があります。
- CRDで定義
- AdditionalScrapeConfigsで定義
CRDはスクレイプ対象に応じてPodMonitor、ServiceMonitor等があり、それをOpenShiftのリソースとして定義します。AdditionalScrapeConfigsは従来のPrometheusの設定ファイルをSecret化して指定します。
OpetatorならCRDでやりたいところですが、情報が少ないため、試行錯誤になりがちです。一方Prometheusの設定ファイルはいくらでもネットに情報があり、ノウハウが豊富です。今回はAdditionalScrapeConfigsを使用します。
簡単のため、Prometheus自身のメトリクスを収集するサンプルです。
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
これをSecret化します。
$ oc create secret generic prometheus-scrape-config --from-file additional-scrape-config.yaml --dry-run -o yaml | oc replace --force -f -
そしてPrometheusインスタンスのadditionalScrapeConfigs
でシークレット名とファイル名を指定します。
$ oc edit prometheus/server
spec:
additionalScrapeConfigs: # 追加
name: prometheus-scrape-config # 追加
key: additional-scrape-config.yaml # 追加
これでしばらく待つとスクレイプが開始します。
スクレイプ対象を追加する場合は、Secretを再作成すれば、prometheus-config-reloaderが自動で取り込んでくれます(最大数分待ちますが)。
Author And Source
この問題について(Red Hat OpenShift on IBM CloudにPrometheusを追加インストールする(組み込みOperator編)), 我々は、より多くの情報をここで見つけました https://qiita.com/teruq/items/50ddf113be243b91dff7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .