Istio on GKEでハマったこと
備忘録として書き留めます。コメントありましたらよろしくお願いいたします。
TL;DR
- Terraformで、default nodeを削除してクラスタを立てると0 nodeになる
- promsd (defaultのprometheus) はいくつかexporterがなく、かつReconcile設定が入っているのでConfigmapを書き換えられない
- kialiやjaegerを入れる場合は、IstioのHelm Chartからの差分を手動でManifestに設定してapplyする必要がある
Istio on GKEとは?
Istio on GKEは、Google Kubernetes EngineでIstio有効にするためのアドオンです。これを利用することによって、わざわざクラスタにIstioをinstallしなくても、Istioが有効なクラスタが立ち上がります
通常Istioを入れる場合はHelm Chartを利用してInstallする必要があります
ただ、Helmで入れない場合、いくつかハマりどころがあったのでそれを紹介したいと思います
default nodeを利用しないとPodが立ち上がらない
基本、GKEの構成管理はTerraformを利用することが多いのだが、ここで一つトラップがあった。
現在、柔軟なリソース管理のために、いくつかリソースの異なるNodeを利用してPodのスケジューリングを行うことができる。
その際、デフォルトのnodepoolを使わずにクラスタを立てる方法があり、terraformだと以下のように記述ができる
しかし、この方法でClusterを作成すると、後から作ったNodeが0Nodeとなって、Podがスケジューリングできない現象に遭遇した。エラーメッセージは、 Increase maximum size limit for autoscaling in one or more node pools that have autoscaling enabled.
と表示される
この問題は、Default node poolを使ってクラスタを立てることで解決した。後からNode poolを足していくことは問題なさそう
promsdの設定が書き換えられない
Istio on GKEでIstioを入れた場合、デフォルトでpromsd(混乱を割けるためにpromsdという名前になったらしい https://cloud.google.com/istio/docs/istio-on-gke/release-notes )
ただし、このpromsdはトラップがあって、Helmで入るPrometheusと設定が異なっているうえに、
labels: addonmanager.kubernetes.io/mode: Reconcile
が設定されたconfigmapで、後からPrometheusの設定を変更したり、exporterを追加したりすることができなかった
解決法としては、Istio on GKEの公式にも書かれている方法での独自PrometheusのInstallで落ち着いた
監視系の追加Install
KialiやJaegerといった監視や可視化のComponentsはIstio on GKEでは入っていない。 これらを入れるには、IstioのHelm Chartから上記Adaptersの差分を取り出してきて、手動でmanifestの作成を行う必要がある
どんな感じで設定するかというと、例えば、Kialiを入れたい場合、
curl -L https://git.io/getLatestIstio | ISTIO_VERSION=${CHART_ISTIO_VERSION} sh - helm template --set kiali.enabled=false --namespace istio-system istio-${CHART_ISTIO_VERSION}/install/kubernetes/helm/istio > off.yaml helm template --set kiali.enabled=true --namespace istio-system istio-${CHART_ISTIO_VERSION}/install/kubernetes/helm/istio > on.yaml diff -u off.yaml on.yaml > kiali.yaml
といった感じで、Installする場合としない場合のyamlのdiffを取って、それらを手動で整形していくという形になる。これは運用事故りそうだなと感じてはいるが、現状はこの方法が一番ベストなはず