dockerはlinuxに入れてもう5年ぐらい使ってる。
gkeを業務で扱うことになったのでやってみる。
gkeではdocker使わなくなったってどっかで見た。
dockerとは違うところもあるんやろけど楽しみ。
ググるとサラっとやってるページあったので参考にさせてもらった。
作者さんありがとう。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9R0tFJTIwQXV0b3BpbG90JUU0JUI4JThBJUUzJTgxJUFCTmdpbnglRTclOTIlQjAlRTUlQTIlODMlRTMlODIlOTIlRTYlQTclOEIlRTclQUYlODkmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtY2xpcD1lbGxpcHNpcyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTA3ZDlmOGNlMTViMzg1NGExMWY4MWY0N2NkNTQ2ZDFl&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwTmFnYW9rYUtlbmljaGkmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTU3YTc2NmExYjA2Yjc4MjJmYWQ4NTFhNDYxMjIxZGEw&blend-x=142&blend-y=491&blend-mode=normal&s=522fe73e642bda33299380091dcde170)
gkeでapi有効化とクラスタ作成
「kubernetes engine」⇒「クラスタ」を選ぶ。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke001.png)
初回はAPIを有効化する。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke002.png)
クラスタの基本
GKE Autopilotの「構成」をクリックする。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke003.png)
クラスタに名前つけて使いたいリージョンを選ぶ。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke004.png)
ネットワーキング
一般公開クラスタが選択できていることを確認してそのまま次へ。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke005.png)
詳細設定
特に変更せず次へ。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke006.png)
クラスタ作られたことの確認
確認と作成の画面もそのまま次へ行く。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke007.png)
「ステータス」がクルンクルン回るので、終わるのを5分ほど待つ。
後で書いとくけど、ここがうまく行くのに実際はトラブった。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke008.png)
うまく行くとステータスが緑色のチェック入りで表示される。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke009.png)
nginxをデプロイ
やっとアプリケーション設置。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke015.png)
あんまり設定することはないけど、「選択」ってするとイメージ指定できるんやろ。
他にどんなイメージ使えるんか
nginx以外を選択するときはArtifact Registry API
ってのを有効にせなアカンのか。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke011.png)
今度また使うから、有効にして一覧見えるようにできるか。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke012.png)
認証情報って作らなアカンの?
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke013.png)
って、下のほう見たらgkeで実行するアプリには必要なしやでって書いてある。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke014.png)
時間なくなったから、いったんこのへんまでにしとこ。
nginx普通に使えるようにしよか。
使えるようにする
名前はデフォルトのまま。クラスタも指定できてるのを確認。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke016.png)
いきなり公開するのはやめとこか。
ちゃんとデプロイできるか見てからやね。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke017.png)
さぁ行ってみよっか。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke018.png)
なんやねん、Unschedulableってあるやん。
リソース確保にたぶん失敗したんやろなぁ。少し待ったら自律回復してくれるかも。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke019.png)
5分ほどタバコ休憩してからワークロード見たら、シレっと動いてた。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke020.png)
公開されたものが見えるか確認
公開してみたろやんけ。普通にhttpでいってみ。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke021.png)
普通に外部エンドポイントのIP出てきた。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke022.png)
別ホストのfirefoxで表示どやさ。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke023.png)
いったん表示はできるようになったな。
練習終わり。
あとでクラスタ潰しとこ。
実際はトラブった
クラスタ作るとき、初回はエラーが出て1日考えた。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke009_NG.png)
PERMISSIONS_ERROR
ってあるのでどうも権限が不足しているらしい。
読みにくいけど「when acting as〜」って書いてある。
内部アカウントみたいなのがあるってこと?
同じ感じで困ってる人がいた。
![](https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a)
answerにある解決策見ると、サービスアカウントってのがあって、権限が不足してるのを回避すればええみたいやった。
サービスアカウントにも権限があるらしい。
![](https://gavann-it.com/wp-content/uploads/cocoon-resources/blog-card-cache/c193befae2b22183db2de37e2c6b61a9.png)
エラーの原因で思い当たること
どこで読んだか忘れたけど、例えば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にあるプリンシパル別表示はこうなってる。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke009_reason1.png)
サービスアカウントに権限付与してみたけど、やり方悪いんかもしれん。
面倒やからもう1つプロジェクト作って見比べてみた。
![gvis-gke-memo01 gvis-gke-memo01](https://gavann-it.com/wp-content/uploads/2023/04/gvis-gke009_reason2.png)
なんやねん!! 1行多いやないかい!!
「cloudservices.gserviceaccount.com」って感じのプリンシパルが入っとるやんけ!!
もう面倒やから、自分の本番プロジェクト使うのやめてこっち使うことにしよ。
って、テスト用のプロジェクト作ってからgke使うとスンナリ使えるようになった。