- Published on
Istio on GKEでハマったこと
- Authors
- Name
- ko-da-k
- @ko_da_k
旧ブログ(除却予定)から記事を移行しました
備忘録として書き留めます。コメントありましたらよろしくお願いいたします。
TL;DR
- Terraformで、default nodeを削除してクラスタを立てると0 nodeになる
- promsd (defaultのprometheus) はいくつかexporterがなく、かつReconcile設定が入っているのでConfigmapを書き換えられない
- kialiやjaegerを入れる場合は、IstioのHelm Chartからの差分を手動でManifestに設定してapplyする必要がある
Istio on GKEとは?
https://cloud.google.com/istio/docs/istio-on-gke/overview?hl=ja
Istio on GKEは、Google Kubernetes EngineでIstio有効にするためのアドオンです。これを利用することによって、わざわざクラスタにIstioをinstallしなくても、Istioが有効なクラスタが立ち上がります
通常Istioを入れる場合はHelm Chartを利用してInstallする必要があります
https://istio.io/docs/setup/kubernetes/install/helm/
ただ、Helmで入れない場合、いくつかハマりどころがあったのでそれを紹介したいと思います
default nodeを利用しないとPodが立ち上がらない
基本、GKEの構成管理はTerraformを利用することが多いのだが、ここで一つトラップがあった。
現在、柔軟なリソース管理のために、いくつかリソースの異なるNodeを利用してPodのスケジューリングを行うことができる。
https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool?hl=ja
その際、デフォルトの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を追加したりすることができなかった
https://qiita.com/inajob/items/300805e895eec6535dd2
解決法としては、Istio on GKEの公式にも書かれている方法での独自PrometheusのInstallで落ち着いた
https://cloud.google.com/istio/docs/istio-on-gke/installing#adding_prometheus
監視系の追加Install
KialiやJaegerといった監視や可視化のComponentsはIstio on GKEでは入っていない。 これらを入れるには、IstioのHelm Chartから上記Adaptersの差分を取り出してきて、手動でmanifestの作成を行う必要がある
https://cloud.google.com/istio/docs/istio-on-gke/installing#adding_adapters
どんな感じで設定するかというと、例えば、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を取って、それらを手動で整形していくという形になる。これは運用事故りそうだなと感じてはいるが、現状はこの方法が一番ベストなはず