🌊

Grafana Helm Chartのちょっとしたハマりどころ

3 min read

はじめに

CloudNative Days Tokyo 2021(CNDT2021)の配信プラットフォームにGrafana Helm Chartを導入したときにハマったことを紹介します。

以下のふりかえりポエムで予告していたものです。

Grafanaダッシュボードを作るうえでハマったことなど技術的な話は後日Zennに投稿予定です。Observability Conferenceまで引っ張るネタでもないので。

https://ngoktanio.hatenablog.com/entry/2021/11/06/163755

ハマりどころ

Deploymentのローリングアップデートが進まない

Grafana Helm Chartをpersistence.enabled = trueとしてインストールするとgrafanaはDeploymentとして作成され、そのDeployment StrategyはRollingUpdateです。

grafanaをローリングアップデートしようとすると、現PodがVolumeをつかんでいて新Podにアタッチできない事象が発生しました。

https://github.com/cloudnativedaysjp/dreamkast-infra/issues/1056

転記しておきます。Argo CDを利用していますが、本題ではないため、さらっと流してしまいます。

FailedMount
Unable to attach or mount volumes: unmounted volumes=[storage], unattached volumes=[config dashboards-default storage kube-api-access-7pmf2]: timed out waiting for the condition

FailedMount
Unable to attach or mount volumes: unmounted volumes=[storage], unattached volumes=[storage kube-api-access-7pmf2 config dashboards-default]: timed out waiting for the condition

FailedMount
Unable to attach or mount volumes: unmounted volumes=[storage], unattached volumes=[dashboards-default storage kube-api-access-7pmf2 config]: timed out waiting for the condition

FailedAttachVolume
Multi-Attach error for volume "pvc-86994706-bcae-4bce-897f-13b70b0a59f1" Volume is already used by pod(s) grafana-778f96f899-98mqq


既知のバグであり、Deployment StrategyをRecreateとするか、StatefulSetを利用することで回避できます。後者を採用しました。

https://github.com/grafana/helm-charts/issues/146

DeploymentからStatefulSetに移行したらダッシュボードが消失した

まあ、そうですよね、という話ですが、StatefulSet移行時にPodもPersistentVolumeClaimも新しく作られたため、旧PersistentVolumeに保存されていたダッシュボード情報が消失しました。

現在はすべてのダッシュボードをコード管理しています。

https://github.com/cloudnativedaysjp/dreamkast-infra/pull/1084

詳しく調べていませんが、認証情報もPersistentVolumeに保存されているような気がします。
CloudNative Daysで利用しているGrafanaは、相方がAuth0連携してくれていたので影響ありませんでした。

admin-passwordのSyncがうまくいかない

相方が格闘していた部分で、私はあまり把握していませんが、admin-passwordまわりの挙動がおかしくてログインできない事象が発生しました。
kubectl execしてパスワード変更コマンドを実行する回避策があるようです。
こちらについてもAuth0連携後は影響がないため、解決を目指しませんでした。

自作ダッシュボード名に半角スペースを使えない

公開されているダッシュボードを利用する際、以下のAmazon RDSのようにキーに半角スペースを利用していました。

dashboards:
  default:
    Amazon RDS:
      gnetId: 11264
      revision: 2
    Amazon EC2:
      gnetId: 11265
      revision: 2

自作ダッシュボードも同じノリでやろうと、以下のように設定しました。

dashboards:
  default:
    Kubernetes Pod:
      json: |
        {
          "annotations": {
        ...

しかし、エラーとなってしまいました。

ConfigMap "grafana-dashboards-default" is invalid: data[Kubernetes Pod.json]: Invalid value: "Kubernetes Pod.json": a valid config key must consist of alphanumeric characters, '-', '_' or '.' (e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+')

自作ダッシュボードの場合、(Helm Chartのvalues.yamlの)キーがConfigMapのキーとして使われます。
ここには半角スペースを使えなかったため-に置き換えました。

dashboards:
  default:
    Kubernetes-Pod:
      json: |
        {
          "annotations": {
        ...

おわりに

Grafana Helm Chart導入時のハマりどころを4つ紹介しました。
今後は運用、活用の知見を蓄積していきたいです。2022年3月にObservability Conferenceやりますので!

Discussion

ログインするとコメントできます