Grafana Helm Chartのちょっとしたハマりどころ
はじめに
CloudNative Days Tokyo 2021(CNDT2021)の配信プラットフォームにGrafana Helm Chartを導入したときにハマったことを紹介します。
以下のふりかえりポエムで予告していたものです。
Grafanaダッシュボードを作るうえでハマったことなど技術的な話は後日Zennに投稿予定です。Observability Conferenceまで引っ張るネタでもないので。
ハマりどころ
Deploymentのローリングアップデートが進まない
Grafana Helm Chartをpersistence.enabled = true
としてインストールするとgrafana
はDeploymentとして作成され、そのDeployment StrategyはRollingUpdate
です。
grafana
をローリングアップデートしようとすると、現PodがVolumeをつかんでいて新Podにアタッチできない事象が発生しました。
転記しておきます。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を利用することで回避できます。後者を採用しました。
DeploymentからStatefulSetに移行したらダッシュボードが消失した
まあ、そうですよね、という話ですが、StatefulSet移行時にPodもPersistentVolumeClaimも新しく作られたため、旧PersistentVolumeに保存されていたダッシュボード情報が消失しました。
現在はすべてのダッシュボードをコード管理しています。
詳しく調べていませんが、認証情報も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