dockerはlinuxに入れてもう5年ぐらい使ってる。
gkeを業務で扱うことになったのでやってみる。
gkeではdocker使わなくなったってどっかで見た。
dockerとは違うところもあるんやろけど楽しみ。
ググるとサラっとやってるページあったので参考にさせてもらった。
作者さんありがとう。
gkeでapi有効化とクラスタ作成
「kubernetes engine」⇒「クラスタ」を選ぶ。
初回はAPIを有効化する。
クラスタの基本
GKE Autopilotの「構成」をクリックする。
クラスタに名前つけて使いたいリージョンを選ぶ。
ネットワーキング
一般公開クラスタが選択できていることを確認してそのまま次へ。
詳細設定
特に変更せず次へ。
クラスタ作られたことの確認
確認と作成の画面もそのまま次へ行く。
「ステータス」がクルンクルン回るので、終わるのを5分ほど待つ。
後で書いとくけど、ここがうまく行くのに実際はトラブった。
うまく行くとステータスが緑色のチェック入りで表示される。
nginxをデプロイ
やっとアプリケーション設置。
あんまり設定することはないけど、「選択」ってするとイメージ指定できるんやろ。
他にどんなイメージ使えるんか
nginx以外を選択するときはArtifact Registry API
ってのを有効にせなアカンのか。
今度また使うから、有効にして一覧見えるようにできるか。
認証情報って作らなアカンの?
って、下のほう見たらgkeで実行するアプリには必要なしやでって書いてある。
時間なくなったから、いったんこのへんまでにしとこ。
nginx普通に使えるようにしよか。
使えるようにする
名前はデフォルトのまま。クラスタも指定できてるのを確認。
いきなり公開するのはやめとこか。
ちゃんとデプロイできるか見てからやね。
さぁ行ってみよっか。
なんやねん、Unschedulableってあるやん。
リソース確保にたぶん失敗したんやろなぁ。少し待ったら自律回復してくれるかも。
5分ほどタバコ休憩してからワークロード見たら、シレっと動いてた。
公開されたものが見えるか確認
公開してみたろやんけ。普通にhttpでいってみ。
普通に外部エンドポイントのIP出てきた。
別ホストのfirefoxで表示どやさ。
いったん表示はできるようになったな。
練習終わり。
あとでクラスタ潰しとこ。
実際はトラブった
クラスタ作るとき、初回はエラーが出て1日考えた。
PERMISSIONS_ERROR
ってあるのでどうも権限が不足しているらしい。
読みにくいけど「when acting as〜」って書いてある。
内部アカウントみたいなのがあるってこと?
同じ感じで困ってる人がいた。
answerにある解決策見ると、サービスアカウントってのがあって、権限が不足してるのを回避すればええみたいやった。
サービスアカウントにも権限があるらしい。
エラーの原因で思い当たること
どこで読んだか忘れたけど、例えばgkeを使うときには、裏側でcompute engine使うらしい。
クラスタ作ってデプロイしてもgceのvm一覧にはなんも表示されへんから嘘ついてるかも。
このvm作るときにサービスアカウントを使うんかなぁ。
で、そのサービスアカウントにgcp使う権限がないからエラーになってるんかなぁ。
権限つけたる
さっきのstackoverflowのサイトにあったanswerを元にして権限つけてみた。
2つある。
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)$
もういっちょ。
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にあるプリンシパル別表示はこうなってる。
サービスアカウントに権限付与してみたけど、やり方悪いんかもしれん。
面倒やからもう1つプロジェクト作って見比べてみた。
なんやねん!! 1行多いやないかい!!
「cloudservices.gserviceaccount.com」って感じのプリンシパルが入っとるやんけ!!
もう面倒やから、自分の本番プロジェクト使うのやめてこっち使うことにしよ。
って、テスト用のプロジェクト作ってからgke使うとスンナリ使えるようになった。