dockerはlinuxに入れてもう5年ぐらい使ってる。

gkeを業務で扱うことになったのでやってみる。

gkeではdocker使わなくなったってどっかで見た。

dockerとは違うところもあるんやろけど楽しみ。

ググるとサラっとやってるページあったので参考にさせてもらった。

作者さんありがとう。

gkeでapi有効化とクラスタ作成

「kubernetes engine」⇒「クラスタ」を選ぶ。

gvis-gke-memo01

初回はAPIを有効化する。

gvis-gke-memo01

クラスタの基本

GKE Autopilotの「構成」をクリックする。

gvis-gke-memo01

クラスタに名前つけて使いたいリージョンを選ぶ。

gvis-gke-memo01

ネットワーキング

一般公開クラスタが選択できていることを確認してそのまま次へ。

gvis-gke-memo01

詳細設定

特に変更せず次へ。

gvis-gke-memo01

クラスタ作られたことの確認

確認と作成の画面もそのまま次へ行く。

gvis-gke-memo01

「ステータス」がクルンクルン回るので、終わるのを5分ほど待つ。 後で書いとくけど、ここがうまく行くのに実際はトラブった。

gvis-gke-memo01

うまく行くとステータスが緑色のチェック入りで表示される。

gvis-gke-memo01

nginxをデプロイ

やっとアプリケーション設置。

gvis-gke-memo01

あんまり設定することはないけど、「選択」ってするとイメージ指定できるんやろ。

他にどんなイメージ使えるんか

nginx以外を選択するときはArtifact Registry APIってのを有効にせなアカンのか。

gvis-gke-memo01

今度また使うから、有効にして一覧見えるようにできるか。

gvis-gke-memo01

認証情報って作らなアカンの?

gvis-gke-memo01

って、下のほう見たらgkeで実行するアプリには必要なしやでって書いてある。

gvis-gke-memo01

時間なくなったから、いったんこのへんまでにしとこ。 nginx普通に使えるようにしよか。

使えるようにする

名前はデフォルトのまま。クラスタも指定できてるのを確認。

gvis-gke-memo01

いきなり公開するのはやめとこか。 ちゃんとデプロイできるか見てからやね。

gvis-gke-memo01

さぁ行ってみよっか。

gvis-gke-memo01

なんやねん、Unschedulableってあるやん。 リソース確保にたぶん失敗したんやろなぁ。少し待ったら自律回復してくれるかも。

gvis-gke-memo01

5分ほどタバコ休憩してからワークロード見たら、シレっと動いてた。

gvis-gke-memo01

公開されたものが見えるか確認

公開してみたろやんけ。普通にhttpでいってみ。

gvis-gke-memo01

普通に外部エンドポイントのIP出てきた。

gvis-gke-memo01

別ホストのfirefoxで表示どやさ。

gvis-gke-memo01

いったん表示はできるようになったな。

練習終わり。

あとでクラスタ潰しとこ。

実際はトラブった

クラスタ作るとき、初回はエラーが出て1日考えた。

gvis-gke-memo01

PERMISSIONS_ERRORってあるのでどうも権限が不足しているらしい。

読みにくいけど「when acting as〜」って書いてある。

内部アカウントみたいなのがあるってこと?

同じ感じで困ってる人がいた。

https://stackoverflow.com/questions/70691196/gcp-gke-google-compute-engine-not-all-instances-running-in-igm

answerにある解決策見ると、サービスアカウントってのがあって、権限が不足してるのを回避すればええみたいやった。

サービスアカウントにも権限があるらしい。

エラーの原因で思い当たること

どこで読んだか忘れたけど、例えばgkeを使うときには、裏側でcompute engine使うらしい。

クラスタ作ってデプロイしてもgceのvm一覧にはなんも表示されへんから嘘ついてるかも。

このvm作るときにサービスアカウントを使うんかなぁ。

で、そのサービスアカウントにgcp使う権限がないからエラーになってるんかなぁ。

権限つけたる

さっきのstackoverflowのサイトにあったanswerを元にして権限つけてみた。 2つある。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
naritomitsukasa@cloudshell:~ (gvis-3579)$ gcloud iam service-accounts add-iam-policy-binding \
908917777161-compute@developer.gserviceaccount.com \
--member='serviceAccount:908917777161-compute@developer.gserviceaccount.com' \
--role=roles/iam.serviceAccountUser
Updated IAM policy for serviceAccount [908917777161-compute@developer.gserviceaccount.com].
bindings:
- members:
- serviceAccount:908917777161-compute@developer.gserviceaccount.com
role: roles/iam.serviceAccountUser
etag: BwX4zSp2yuk=
version: 1
naritomitsukasa@cloudshell:~ (gvis-3579)$

もういっちょ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
naritomitsukasa@cloudshell:~ (gvis-3579)$ gcloud iam service-accounts add-iam-policy-binding \
908917777161-compute@developer.gserviceaccount.com \
--member='serviceAccount:908917777161-compute@developer.gserviceaccount.com' \
--role=roles/editor
Updated IAM policy for serviceAccount [908917777161-compute@developer.gserviceaccount.com].
bindings:
- members:
- serviceAccount:908917777161-compute@developer.gserviceaccount.com
role: roles/editor
- members:
- serviceAccount:908917777161-compute@developer.gserviceaccount.com
role: roles/iam.serviceAccountUser
etag: BwX4zS-MzGE=
version: 1
naritomitsukasa@cloudshell:~ (gvis-3579)$

やってみたけど、クラスタ作るのまた失敗やった。

残念。

設定するサービスアカウントの対象が違うんかなぁ。

なんでそんなことになったのか

今使ってるgcpのプロジェクトは、もう5年ぐらい前に作った。

その途中でIAMってのが登場して、権限の概念が入ってきた。

あんときに何か確認メッセージみたいなの表示されたような、そうでないような・・・。

急いでたから忘れた。

権限が不足しているのは、gke使うサービスアカウントが欠落してるからやなぁ。

実際のIAMにあるプリンシパル別表示はこうなってる。

gvis-gke-memo01

サービスアカウントに権限付与してみたけど、やり方悪いんかもしれん。

面倒やからもう1つプロジェクト作って見比べてみた。

gvis-gke-memo01

なんやねん!! 1行多いやないかい!!

「cloudservices.gserviceaccount.com」って感じのプリンシパルが入っとるやんけ!!

もう面倒やから、自分の本番プロジェクト使うのやめてこっち使うことにしよ。

って、テスト用のプロジェクト作ってからgke使うとスンナリ使えるようになった。