GCP gkeのメモ4(google cloud registoryからgoogle artifact registryへ引っ越し) 

先週にgoogleから対処必要ってメールが来た。

せっかく覚えたのに、GCR(google cloud registry)があと1年でフェードアウトするから、さっさとGAR(artifact registry)へ引っ越せってさ。

Container Registry のサポート終了  |  Container Registry のドキュメント  |  Google Cloud

非推奨にはなってるけど、すぐには使えなくなるわけじゃなさそう。
こういう響きは、すぐになくなっちゃう可能性もあるのかなぁ。

気持ち悪いから引っ越しちゃう。
dockerイメージをコピーする方法もあるみたいやけど、GCRからローカルにpullしてGARへpushするかな。
それをGKEで動かしてみる。

前にローカルPCで作ったイメージをGCRに登録してGKEで動かしたから、その材料を使う。

VMイメージ壊さずに残ってたかな。

GARを用意

料金の確認

もちろんgoogleは商売としてサーバを貸してくれる。
まずは料金確認。

料金  |  Artifact Registry  |  Google Cloud
Artifact Registry の料金を確認する

今の環境やと0.5GBまで無料、ネットワークは同じリージョンなら下りは無料、上りは全部無料、ストレージ使った分がかかるってことかな。
ま、練習やから今はあんまり気にしない。

リポジトリ作成

docker扱える標準リポジトリを作ってく。

標準リポジトリを作成する  |  Artifact Registry のドキュメント  |  Google Cloud

gcraneってツールを使ってコピーすることもできるらしい。
一回しか使わないツールは使わない。
セットアップ方法も書いてある。

標準リポジトリへの移行  |  Artifact Registry のドキュメント  |  Google Cloud

ちゃんと動きを確認して使いましょ。

gvis-gke-memo04

APIの有効化

GAR使うためのおまじない。

gvis-gke-memo04

GCRからローカルPCにpull

ローカルPCのイメージをカラにする

前に作ったイメージを確認ね。

gavannitsales@ubuntu22:~$ docker ps -a 
CONTAINER ID   IMAGE                                                    COMMAND                  CREATED       STATUS                   PORTS     NAMES
923557c064da   gcr.io/fourth-elixir-383118/hello-world-container:v1.0   "/usr/bin/gunicorn -…"   2 weeks ago   Exited (0) 2 weeks ago             nervous_gagarin
b202ef51299f   hello-world-container                                    "/usr/bin/gunicorn -…"   2 weeks ago   Exited (0) 2 weeks ago             gracious_swirles

残ってるコンテナを潰す。

gavannitsales@ubuntu22:~$ docker rm 923557c064da
923557c064da
gavannitsales@ubuntu22:~$ docker rm b202ef51299f
b202ef51299f
gavannitsales@ubuntu22:~$ docker ps -a 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
gavannitsales@ubuntu22:~$ 

dockerイメージも潰す。

gavannitsales@ubuntu22:~$ docker images 
REPOSITORY                                          TAG       IMAGE ID       CREATED       SIZE
hello-world-container                               latest    5de507c26f8a   2 weeks ago   245MB
gcr.io/fourth-elixir-383118/hello-world-container   v1.0      5de507c26f8a   2 weeks ago   245MB
gavannitsales@ubuntu22:~$ docker rmi hello-world-container:latest 
Untagged: hello-world-container:latest
gavannitsales@ubuntu22:~$ docker rmi gcr.io/fourth-elixir-383118/hello-world-container:v1.0
Untagged: gcr.io/fourth-elixir-383118/hello-world-container:v1.0
Untagged: gcr.io/fourth-elixir-383118/hello-world-container@sha256:fe215a34dc5b5ea4cc1f22c809798e507562daaf9085e1a8304d91d515758554
Deleted: sha256:5de507c26f8a19e551cf039c5805c670d0efc75a9ce373d8b64eca6502bc79fd
gavannitsales@ubuntu22:~$ docker images 
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
gavannitsales@ubuntu22:~$ 

ローカルPCへGCRからpull

前にGCRへ登録したイメージをローカルPCへpullする。

gavannitsales@ubuntu22:~$ docker pull gcr.io/fourth-elixir-383118/hello-world-container:v1.0
v1.0: Pulling from fourth-elixir-383118/hello-world-container
2e6e20c8e2e6: Already exists 
0551a797c01d: Already exists 
512123a864da: Already exists 
1e583242b4c3: Already exists 
86c34855c25e: Already exists 
3b856a94d9d0: Already exists 
4f4fb700ef54: Already exists 
Digest: sha256:fe215a34dc5b5ea4cc1f22c809798e507562daaf9085e1a8304d91d515758554
Status: Downloaded newer image for gcr.io/fourth-elixir-383118/hello-world-container:v1.0
gcr.io/fourth-elixir-383118/hello-world-container:v1.0
gavannitsales@ubuntu22:~$ docker images 
REPOSITORY                                          TAG       IMAGE ID       CREATED       SIZE
gcr.io/fourth-elixir-383118/hello-world-container   v1.0      5de507c26f8a   2 weeks ago   245MB
gavannitsales@ubuntu22:~$ 

ローカルPCにあるイメージでdockerコンテナ動かす

念のため動くか確認。
参照先のURLはcompute engineの画面で、vmのネットワークのエフィメラルって書いてある箇所のIPを確認したらわかる。
エフィメラルやから起動しなおすごとに変わる。

gvis-gke-memo04
gavannitsales@ubuntu22:~$ docker run -p 80:8000 gcr.io/fourth-elixir-383118/hello-world-container:v1.0
2023-05-20 17:34:51 [1] [INFO] Starting gunicorn 17.5
2023-05-20 17:34:51 [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
2023-05-20 17:34:51 [1] [INFO] Using worker: sync
2023-05-20 17:34:51 [11] [INFO] Booting worker with pid: 11

はい、Helloworldが見えた。

gvis-gke-memo04

ローカルPCに元のイメージを戻したので、タグ付けもローカルPCでビルドしてGCR登録し終わったときと同じような状態にしてみる。

gavannitsales@ubuntu22:~$ docker tag gcr.io/fourth-elixir-383118/hello-world-container:v1.0 hello-world-container
gavannitsales@ubuntu22:~$ docker images 
REPOSITORY                                          TAG       IMAGE ID       CREATED       SIZE
hello-world-container                               latest    5de507c26f8a   2 weeks ago   245MB
gcr.io/fourth-elixir-383118/hello-world-container   v1.0      5de507c26f8a   2 weeks ago   245MB
gavannitsales@ubuntu22:~$ 

GARへ登録

手続き踏まないと登録はできん。

gcp認証

前と同じようなことする。

gavannitsales@ubuntu22:~$ gcloud auth login
:(中略)
Enter authorization code: xxxxxxxxxxxxxxxxxxx

You are now logged in as [gavannitsales@gmail.com].
Your current project is [fourth-elixir-383118].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID
gavannitsales@ubuntu22:~$ 

docker認証ヘルパーの登録

docker認証ヘルパーの登録は前にgcloud auth configure-dockerってやってjsonファイルできてるからパス。
でもこれだけじゃダメってのが後でわかって"us-central1-docker.pkg.dev": "gcloud"を追記しないとpushがうまくいかない。

gavannitsales@ubuntu22:~$ cat /home/gavannitsales/.docker/config.json 
{
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud"
  }
}gavannitsales@ubuntu22:~$

GAR登録するときの権限をつける

やらなアカンみたい。
ロールはroles/artifactregistry.writeと、roles/artifactregistry.createOnPushWriterをつけた。

gavannitsales@ubuntu22:~$ gcloud projects add-iam-policy-binding fourth-elixir-383118 \
--member=user:gavannitsales@gmail.com \
--role=roles/artifactregistry.createOnPushWriter
Updated IAM policy for project [fourth-elixir-383118].
bindings:
- members:
  - user:gavannitsales@gmail.com
  role: roles/artifactregistry.createOnPushWriter
:(中略)
version: 1
gavannitsales@ubuntu22:~$ 

gavannitsales@ubuntu22:~$ gcloud projects add-iam-policy-binding fourth-elixir-383118 \
--member=user:gavannitsales@gmail.com \
--role=roles/artifactregistry.writer
Updated IAM policy for project [fourth-elixir-383118].
bindings:
- members:
  - user:gavannitsales@gmail.com
  role: roles/artifactregistry.createOnPushWriter
:(中略)
version: 1
gavannitsales@ubuntu22:~$ 

GARへpush

ローカルのdockerイメージにタグ付けしてからpushする。

GCRへの登録はこうしてた。

docker tag hello-world-container gcr.io/fourth-elixir-383118/hello-world-container:v1.0
docker push gcr.io/fourth-elixir-383118/hello-world-container:v1.0

GARへの登録はこうする。

docker tag hello-world-container us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container:v1.0
docker push us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container:v1.0

やってみたら失敗した。

gavannitsales@ubuntu22:~$ docker push us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container:v1.0
The push refers to repository [us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container]
5f70bf18a086: Preparing 
76587561c5b7: Preparing 
16c5158656f7: Preparing 
fdbd8112be4a: Preparing 
83109fa660b2: Preparing 
30d3c4334a23: Waiting 
f2fa9f4cf8fd: Waiting 
denied: Permission "artifactregistry.repositories.uploadArtifacts" denied on resource "projects/fourth-elixir-383118/locations/us-central1/repositories/gavannitsales" (or it may not exist)
gavannitsales@ubuntu22:~$

docker認証ヘルパーの登録で作るjsonファイルに追記しないといけないみたいなので書き足した。

"us-central1-docker.pkg.dev": "gcloud"ってのが書き足したところ。

gavannitsales@ubuntu22:~/.docker$ cat config.json 
{
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud",
    "us-central1-docker.pkg.dev": "gcloud"
  }
}

気を取り直してもう1回動かす。

gavannitsales@ubuntu22:~/.docker$ docker push us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container:v1.0
The push refers to repository [us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container]
5f70bf18a086: Layer already exists 
76587561c5b7: Pushed 
16c5158656f7: Pushed 
fdbd8112be4a: Pushed 
83109fa660b2: Pushed 
30d3c4334a23: Pushed 
f2fa9f4cf8fd: Pushed 
v1.0: digest: sha256:fe215a34dc5b5ea4cc1f22c809798e507562daaf9085e1a8304d91d515758554 size: 1779
gavannitsales@ubuntu22:~/

はい、入った〜。

gvis-gke-memo04

GKEでGARにあるイメージを使ってPod起動

クラスタ作成

これも前にやったけど、GCRからじゃなくてGARでやってみる。
クラスタは削除しちゃってるので、もう1回作る。
5分ほど待つ。

gavannitsales@ubuntu22:~$ cat makeGke.sh 
gcloud container clusters create narigke --num-nodes=3


gavannitsales@ubuntu22:~$ sh ./makeGke.sh 
Default change: VPC-native is the default mode during cluster creation for versions greater than 1.21.0-gke.1500. To create advanced routes based clusters, please pass the `--no-enable-ip-alias` flag
Default change: During creation of nodepools or autoscaling configuration changes for cluster versions greater than 1.24.1-gke.800 a default location policy is applied. For Spot and PVM it defaults to ANY, and for all other VM kinds a BALANCED policy is used. To change the default values use the `--location-policy` flag.
Note: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s).
Creating cluster narigke in us-central1-a... Cluster is being health-checked (master is healthy)...done.      
Created 
https://container.googleapis.com/v1/projects/fourth-elixir-383118/zones/us-central1-a/clusters/narigke
. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-a/narigke?project=fourth-elixir-383118 kubeconfig entry generated for narigke. NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS narigke us-central1-a 1.25.8-gke.500 34.28.16.121 e2-medium 1.25.8-gke.500 3 RUNNING gavannitsales@ubuntu22:~$

クラスタの認証情報を取得して接続する。

gavannitsales@ubuntu22:~$ gcloud container clusters get-credentials narigke
Fetching cluster endpoint and auth data.
kubeconfig entry generated for narigke.
gavannitsales@ubuntu22:~$ kubectl config get-contexts
CURRENT   NAME                                                 CLUSTER                                              AUTHINFO                                             NAMESPACE
*         gke_fourth-elixir-383118_us-central1-a_narigke       gke_fourth-elixir-383118_us-central1-a_narigke       gke_fourth-elixir-383118_us-central1-a_narigke       
gavannitsales@ubuntu22:~$

Pod起動

GCRのときはこうしてた。

kubectl run hello-world --image=gcr.io/fourth-elixir-383118/hello-world-container:v1.0 --port=8000

GARなのでこうする。
長いなぁ。

kubectl run hello-world --image=us-central1-docker.pkg.dev/fourth-elixir-383118/gavannitsales/hello-world-container:v1.0 --port=8000

Podはすぐに起動できた。

gvis-gke-memo04

ログにもエラーないので割愛して、外部接続できるように公開設定入れる。

gavannitsales@ubuntu22:~$ kubectl expose pod/hello-world --port=80 --target-port=8000 --type=LoadBalancer
service/hello-world exposed
gavannitsales@ubuntu22:~$ kubectl describe service/hello-world 
Name:                     hello-world
Namespace:                default
Labels:                   run=hello-world
Annotations:              cloud.google.com/neg: {"ingress":true}
Selector:                 run=hello-world
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.112.11.129
IPs:                      10.112.11.129
LoadBalancer Ingress:     34.122.202.245
Port:                     <unset>  80/TCP
TargetPort:               8000/TCP
NodePort:                 <unset>  32248/TCP
Endpoints:                10.108.0.6:8000
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  EnsuringLoadBalancer  2m3s  service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   76s   service-controller  Ensured load balancer
gavannitsales@ubuntu22:~$ 

LoadBalancer Ingress:に公開アドレスあるから、httpつけてブラウザで開く。

gvis-gke-memo04

はい、開いたー。

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