GCP gkeのメモ1(autopilot上でnginxを起動)

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

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

gkeではdocker使わなくなったってどっかで見た。
dockerとは違うところもあるんやろけど楽しみ。

ググるとサラっとやってるページあったので参考にさせてもらった。
作者さんありがとう。

GKE Autopilot上にNginx環境を構築 - Qiita
はじめに本記事ではGKE Autopilot上にNginxを構築してみます。GKE Autopilotとは2021年にリリースされたGKEの新しい運用モードで、ノードやPodの管理はマネージドにな…

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〜」って書いてある。

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

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

GCP GKE - Google Compute Engine: Not all instances running in IGM
Turned out this is Terraform issue Terraform google_project_iam_binding deletes GCP compute engine default service accou...

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

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

IAM 許可ポリシーを作成する  |  Google Kubernetes Engine (GKE)  |  Google Cloud

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

どこで読んだか忘れたけど、例えば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

サービスアカウントに権限付与してみたけど、やり方悪いんかもしれん。
面倒やからもう1つプロジェクト作って見比べてみた。

gvis-gke-memo01

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

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

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

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

タイトルとURLをコピーしました