ããã«ã¡ã¯ãAIã»æ©æ¢°å¦ç¿ãã¼ã ï¼ä»¥ä¸AIãã¼ã ï¼ãã¼ã ãªã¼ãã¼ãå ¼ãã¨ã³ã¸ãã¢ãªã³ã°ã°ã«ã¼ãã¼ãã©ã«ããã¼ã¸ã£ã¼ã®æ¨ªæ¬(@yokomotod)ã§ãã
AIãã¼ã ã§ã¯éçºããMLãããã¯ãã®å®è¡åºç¤ã¨ãã¦Google Kubernetes Engineï¼ä»¥ä¸GKEï¼ãæ¡ç¨ãã¦ãã¾ãããããã¤é¢é£ã³ã¼ãã®ãã³ãã¬ã¼ããæ´åãããæ°ãããããã¯ããã¹ã¿ã¼ããããã¨ãã¯GKEåå¿è ã§ãç°¡åã«ãããã¤ã¾ã§æã£ã¦ãããããã«ãªã£ã¦ãã¾ãã
ãããèªåçæã¯ä¸æ¹ã§ããªã«ãã©ããªã£ã¦ãããã¤ããã¦ããã®ããã©ãã¯ããã¯ã¹ã®ã¾ã¾ã«ãªã£ã¦ãã¾ããã¡ã¨ããåé¡ãããã¾ãã
ããã§ä»åã¯ããã¼ã ã¡ã³ãã¼ã¸ã®ãªã³ãã¼ãã£ã³ã°ãããã¦Kubernetesã触ã£ã¦ã¿ãã人ã®åèã«ãªãã°ã¨æå¾ ãã¦ã ã¼ãããGKEã«ãããã¤ãããã³ãºãªã³å½¢å¼ã®ãã¥ã¼ããªã¢ã«ãä½ã£ã¦ã¿ã¾ããã
- What's this
- GKEã¯ã©ã¹ã¿ã®æºå
- ãããã¤ããDockerã¤ã¡ã¼ã¸ã®æºå
- ãããããã¤
- æ¹å
- ãçä»ã
- ããã
What's this
ãã®ãã¥ã¼ããªã¢ã«ã§ã¯
- GKEã§ã¯ã©ã¹ã¿ãä½æ
- ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ã®Dockerã¤ã¡ã¼ã¸ãbuildãpush
- ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ã®ã¯ã©ã¹ã¿ã¸ã®ãããã¤
- dev/prodã®2ç°å¢ã«ãããã¤ããããã®æ¹è¯
ãè¡ãã¾ãã
ãã¥ã¼ããªã¢ã«ä¸ã§ä½¿ããã¡ã¤ã«ãªã©ã¯ä»¥ä¸ã®githubã¬ãã¸ããªã§ãå ¬éãã¦ãã¾ã
åææ¡ä»¶
Google Cloudã®ã¢ã«ã¦ã³ãã®ä½æã gcloud
CLIã®ã¤ã³ã¹ãã¼ã«ã¾ã§ã¯å®äºãã¦ããåæã¨ãã¦ãã¾ãã
GKEã¯ã©ã¹ã¿ã®æºå
ã¾ãã¯ãã¥ã¼ããªã¢ã«ãè¡ãããã®GKEã¯ã©ã¹ã¿ããæºåãã¾ãã
å ¬å¼ããã¥ã¡ã³ã: https://cloud.google.com/kubernetes-engine/docs/how-to/creating-an-autopilot-cluster
ããã¸ã§ã¯ãã®ä½æ
ã¯ã©ã¹ã¿ãé ç½®ããããã¸ã§ã¯ãã§ãããæå¾ã«ã¾ã¨ãã¦æé¤ã§ããããã«ãã¾ãä»ã®ãªã½ã¼ã¹ã¨å¹²æ¸ããªãããã«ãä»åã®ãã¥ã¼ããªã¢ã«å°ç¨ã®ããã¸ã§ã¯ããä½æãã¾ãããã
ä¾ãã° m3-ai-team-k8s-tutorial-(ã©ã³ãã ãªæ°å)
ã¨ããååã§ããã¸ã§ã¯ããä½æãã¾ãã
PROJECT_ID=m3-ai-team-k8s-tutorial-$RANDOM gcloud projects create $PROJECT_ID
Billing Account ã®è¨å®
GKEã使ç¨ããããã«ã¯ãããã¸ã§ã¯ãã«Billing Accountãè¨å®ããã¦ããå¿ è¦ãããã¾ãã
æå¹ã«ãªã£ã¦ããã確èª
gcloud billing projects describe $PROJECT_ID
åºå
billingAccountName: '' billingEnabled: false name: projects/m3-ai-team-k8s-tutorial-xxxxx/billingInfo projectId: m3-ai-team-k8s-tutorial-xxxxx
ä½æç´å¾ã§ããã° billingEnabled: false
ã«ãªã£ã¦ããã¯ããªã®ã§ãBilling Account ãè¨å®ãã¾ãã
Billing Account ã®ä¸è¦§ãåå¾ãã¦ãè¨å®ãããACCOUNT_IDã確èªã
gcloud billing accounts list
ããã¸ã§ã¯ãã«ç´ã¥ãã¾ãã
ACCOUNT_ID=xxxxxx-xxxxxx-xxxxxx gcloud billing projects link $PROJECT_ID --billing-account=$ACCOUNT_ID
ãã㧠billingEnabled: true
ã«ãªã£ã¦ããã¯ãã§ãã
gcloud billing projects describe $PROJECT_ID
åºå
billingAccountName: billingAccounts/xxxxxx-xxxxxx-xxxxxx billingEnabled: true name: projects/m3-ai-team-k8s-tutorial-xxxxx/billingInfo projectId: m3-ai-team-k8s-tutorial-xxxxx
GKEãµã¼ãã¹ã®APIãæå¹å
GKEãå©ç¨ããããã«APIãæå¹åããå¿ è¦ãããã¾ããã¾ãã¯APIãæå¹ã«ãªã£ã¦ããã確èªãã¾ãã
gcloud services list --project=$PROJECT_ID \ | grep container.googleapis.com
ããã¸ã§ã¯ãä½æç´å¾ã§ã¯ container.googleapis.com
ã表示ãããªã = APIç¡å¹ç¶æ
ã®ã¯ããªã®ã§ã次ã®ããã«ãã¦æå¹åãã¾ãã
gcloud services enable container.googleapis.com --project=$PROJECT_ID
æå¹ã«ãªã£ãããå度確èª
gcloud services list --project=$PROJECT_ID \ | grep container.googleapis.com
åºå
container.googleapis.com Kubernetes Engine API
GKEã¯ã©ã¹ã¿ã®ä½æ
ããããGKEã¯ã©ã¹ã¿ãä½æãã¾ããä»åã¯Autopilotã¢ã¼ãã§ä½æãã¾ãã
ã¯ã©ã¹ã¿åãªã©
export CLUSTER_NAME=tutorial-cluster export LOCATION=asia-northeast1
ããä½æï¼
gcloud container clusters create-auto $CLUSTER_NAME \ --location=$LOCATION \ --project=$PROJECT_ID
ãã°ããæéããããã¾ããã以ä¸ã®ããã«åºåãããã°æ§ç¯å®äºã§ãã
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS tutorial-cluster asia-northeast1 1.30.6-gke.1125000 34.146.50.13 e2-small 1.30.6-gke.1125000 3 RUNNING
⻠次ã®ãããªè¦åãåºã¾ãããå¾ã»ã©ã¤ã³ã¹ãã¼ã«ããã®ã§ä»ã¯æ°ã«ããªãã¦å¤§ä¸å¤«ã§ãã
CRITICAL: ACTION REQUIRED: gke-gcloud-auth-plugin, which is needed for continued use of kubectl, was not found or is not executable. Install gke-gcloud-auth-plugin for use with kubectl by following https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#install_plugin
Webã³ã³ã½ã¼ã«
https://console.cloud.google.com/kubernetes/list/overview
ã¯ã©ã¹ã¿ã¸ã®æ¥ç¶
ãããã¤ãªã©ã®æä½ããããã®CLI kubectl
ã¨ãè¦åã«åºã¦ããèªè¨¼ç¨ã®ãã©ã°ã¤ã³ãå¿
è¦ãªã®ã§ã¤ã³ã¹ãã¼ã«ãã¾ãã
gcloud components install kubectl gke-gcloud-auth-plugin
ä½æããã¯ã©ã¹ã¿ã«å¯¾ãã¦èªè¨¼ãéãã¾ãã
gcloud container clusters get-credentials $CLUSTER_NAME \ --location=$LOCATION \ --project=$PROJECT_ID
ããã§ã¯ã©ã¹ã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ããã試ãã«Namespace ä¸è¦§ã表示ãã¦ã¿ã¾ãããã
kubectl get namespaces
åºå
NAME STATUS AGE default Active 9m47s gke-gmp-system Active 8m36s gke-managed-cim Active 9m19s gke-managed-filestorecsi Active 9m9s gke-managed-system Active 8m54s gmp-public Active 8m36s kube-node-lease Active 9m48s kube-public Active 9m48s kube-system Active 9m48s
Namespaceã表示ããã¦ããã°æåã§ãï¼
ãããã¤ããDockerã¤ã¡ã¼ã¸ã®æºå
ã¯ã©ã¹ã¿ã®æºåãåºæ¥ãã®ã§ã次ã¯ãããã¤ãããµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ã®Dockerã¤ã¡ã¼ã¸ãæºåãã¾ãã
å ¬å¼ããã¥ã¡ã³ã: https://cloud.google.com/kubernetes-engine/docs/deploy-app-cluster
ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ããã«ããã
Google Cloudãæä¾ãããµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ããã«ããã¾ãã
ã½ã¼ã¹ã³ã¼ã: https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/main/quickstarts/hello-app/main.go
å®ã¯ãã®ãµã³ãã«ã®ãã«ãæ¸ã¿ã¤ã¡ã¼ã¸ãå ¬éããã¦ãã¦ãå ¬å¼ããã¥ã¡ã³ãã§ã¯ãã¡ãã使ã£ã¦ãã¾ããããããã§ã¯ãã«ããã¦ããã·ã¥ããé¨åããã£ã¦ã¿ã¾ãããã
ã½ã¼ã¹ã³ã¼ããcloneã
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git cd kubernetes-engine-samples/quickstarts/hello-app/
ãã«ããã¤ã¡ã¼ã¸ã¿ã°ã¯å¾ã»ã©ä½æããArtifact Registryã®è¨å®ã«åããã¦æå®ãã¾ãã
docker build -t $LOCATION-docker.pkg.dev/$PROJECT_ID/tutorial/hello-app:latest .
ãã¼ã«ã«ã§åä½ç¢ºèªãã¦ã¿ã¾ããã
docker run --rm -p 8080:8080 $LOCATION-docker.pkg.dev/$PROJECT_ID/tutorial/hello-app
èµ·åãã°
2024/12/26 18:52:16 Server listening on port 8080
curlããã©ã¦ã¶ã§ã¢ã¯ã»ã¹ã§ããã°ãã«ãæåã§ãã
curl localhost:8080
åºå
Hello, world! Version: 1.0.0 Hostname: 748b9d88aa6e
Artifact Registryã«ããã·ã¥ãã
ç¡äºãã«ãã§ããã®ã§ãArtifact Registryã«ããã·ã¥ãã¾ããArtifact Registry ã¯ãDockerã¤ã¡ã¼ã¸ï¼ãå種ããã±ã¼ã¸ãï¼ãä¿åã»é ä¿¡ããGoogle Cloudã®ãµã¼ãã¹ã§ãã
ããã·ã¥å ã®ãªãã¸ããªãå¿ è¦ãªã®ã§ä½æãã¾ãããã
gcloud artifacts repositories create tutorial --repository-format=docker \ --location=$LOCATION \ --project=$PROJECT_ID
ããã·ã¥ã§ããããã«èªè¨¼ãè¨å®ãã¾ãã
gcloud auth configure-docker $LOCATION-docker.pkg.dev
pushï¼
docker push $LOCATION-docker.pkg.dev/$PROJECT_ID/tutorial/hello-app:latest
ãããããã¤
ãç²ãæ§ã§ãããã¯ã©ã¹ã¿ã¨ã¢ããªã±ã¼ã·ã§ã³ã®ã¤ã¡ã¼ã¸ãåºæ¥ãã®ã§ããããããããã¤ãã¦ããã¾ãï¼
ãã¬ã¼ã³ãªYAMLãã¡ã¤ã«ã§ã®ãããã¤
Kubernetesã«ãããã¤ããæ§æã¯åºæ¬çã«YAMLãã¡ã¤ã«ã§è¨è¿°ãã¾ãã
ã¾ãã¯æ®éã«YAMLãã¡ã¤ã«ãæ¸ãã¦ãããã¤ãã¦ã¿ã¾ãããã
Namespaceã®ä½æ
Namespaceã¯ãããã¤ãããªã½ã¼ã¹ãåããããã®ãã®ã§ãã
ä»å㯠tutorial-dev
ã¨ããååã§ä½æãã¾ãã
apiVersion: v1 kind: Namespace metadata: name: tutorial-dev
kubectl apply
ã³ãã³ãã§ãã¡ã¤ã«ã®å
容ãé©ç¨ãã¾ãã
kubectl apply -f namespace.yaml
Deployment ã®ä½æ
Deploymentã¯Podã®ãããã¤ã管çãããªã½ã¼ã¹ã§ãã
apiVersion: apps/v1 kind: Deployment metadata: name: helloweb namespace: tutorial-dev labels: app: hello spec: selector: matchLabels: app: hello replicas: 3 template: metadata: labels: app: hello spec: containers: - name: hello-app image: asia-northeast1-docker.pkg.dev/m3-ai-team-k8s-tutorial-xxxxx/tutorial/hello-app:latest ports: - containerPort: 8080 resources: requests: cpu: 200m
å°ãé·ãã§ããã使ç¨ããDockerã¤ã¡ã¼ã¸ãportãªã© docker run -p 8080:8080 IMAGE
ã¨åæ§ã®è¨å®ãã使ç¨ããCPUéãªã©ãæ¸ãã¦ãã¾ãã
kubectl apply -f deployment.yaml
ãããã¤ãã㨠replicas: 3
ã«å¾ã£ã¦Podã3ã¤ä½æããã¦ããã¯ãã§ãã
kubectl -n tutorial-dev get po
NAME READY STATUS RESTARTS AGE helloweb-5b6b6cc799-wq6n6 1/1 Running 0 14s helloweb-5b6b6cc799-sl38s 1/1 Running 0 14s helloweb-5b6b6cc799-t6n8h 1/1 Running 0 14s
Webã³ã³ã½ã¼ã«
https://console.cloud.google.com/kubernetes/workload/overview
ãã°ãè¦ã¦ã¿ã¾ãããã
kubectl -n tutorial-dev logs helloweb-5b6b6cc799-t6n8h
2024/12/26 19:02:32 Server listening on port 8080
ç¡äºã³ã³ãããèµ·åãã¾ãããããã¾ã å¤é¨ããã¢ã¯ã»ã¹ã§ããããã«ã¯ãªã£ã¦ãã¾ããã
ServiceãIngress ã®ä½æ
Global Load Balancerã使ã£ã¦å¤é¨ããã¢ã¯ã»ã¹ã§ããããã«ãã¾ãã
Global Load Balancerã¯Google Cloudã®ãªã½ã¼ã¹ã§ãããGKEã§ã¯Ingressãªã½ã¼ã¹ã使ããã¨ã§k8sããæ§ç¯ã§ãã¾ãã
Serviceã®ä½æ
apiVersion: v1 kind: Service metadata: name: helloweb namespace: tutorial-dev spec: selector: app: hello ports: - port: 80 targetPort: 8080
Serviceã®apply
kubectl apply -f service.yaml
Ingreesã®ä½æ
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: helloweb namespace: tutorial-dev spec: defaultBackend: service: name: helloweb port: number: 80
Ingressã®apply
kubectl apply -f ingress.yaml
applyãã¦ãã°ãããã㨠ADDRESS
ãå²ãå½ã¦ãããããã«ã¾ããã°ããããã¨ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ãã
Webã³ã³ã½ã¼ã«ã§ãä½æãããGlobal Load Balancerã確èªã§ãã¾ãã
ï¼è¦ãç®æ§ç¯ãå®äºããããã«è¦ãã¦ãã¢ã¯ã»ã¹ãåºæ¥ãªãæéããã°ããããã®ã§ããªã«ãæ§ç¯ãééããã®ãã¨å¿é ã«ãªãã®ã§ãããç¦ãããã°ããå¾ ã£ã¦ã¿ã¾ãããï¼
kubectl -n tutorial-dev get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE helloweb <none> * 34.54.192.203 80 5m28s
curl 34.54.192.203
Hello, world! Version: 1.0.0 Hostname: helloweb-5b6b6cc799-t6n8h
ããã§ã¨ããããã¾ãï¼ãããã¤ããã¢ããªã±ã¼ã·ã§ã³ã«ã¢ã¯ã»ã¹ãåºæ¥ãããã«ãªãã¾ããï¼ï¼
æ¹å
ãã¬ã¼ã³ãªYAMLã使ã£ã¦ãããã¤ã«æåãã¾ããããå®éã®éç¨ã§ã¯ãã¿æ¸ãã®YAMLã§ã¯ç®¡çãé£ãããªããã¡ã§ãã
ä¾ãã°devç°å¢ã¨prodç°å¢ã®ããã«ãããã¤å ãè¤æ°ãã£ã¦è¨å®ãå°ãã ãç°ãªããã¨ãããã¨ã¯ããããã¾ãã
ã»ã¨ãã©åãYAMLãã³ããç¶æ ã§è¤æ°ã¡ã³ããã³ã¹ãããã¨ã¯å¤æ´æ¼ãããã¹ãèµ·ããããã管çã大å¤ãªã®ã§ãããæãã«YAMLãåæããæ¹æ³ã欲ãããªãã¾ãã
ããããã¯ãæ§æãã¡ã¤ã«ãããå°ã管çãããããããã¼ã«ãå°å ¥ãã¦æ¹åãã¦ã¿ã¾ãããã
Kustomize ã®å°å ¥
Kustomizeã使ããã¨ã§YAMLãåæãããã¨ãã§ãã¾ãã
ä¾ãã°ã以ä¸ã®ããã«baseã¨ãªãYAMLãä½æããããã«å¯¾ãã¦devã¨prodã®ç°å¢ãã¨ã«å·®åãé©ç¨ããã¨ãã£ããã¨ãå¯è½ã§ã*1ã
base/kustomization.yaml
:
namespace: TO_BE_SPECIFIED resources: - deployment.yaml - service.yaml - ingress.yaml
ï¼- namespace.yaml
ã®è¡ãç¡ããã¨ã«æ°ã¥ããéãæ¹ã¯ãã°ããå¾
ã¡ä¸ãããï¼
ä»åã¯Namespaceåã ããå¤æ´ãããããªå·®åãé©ç¨ãã¦ã¿ã¾ãã
dev/kustomization.yaml
:
namespace: tutorial-dev resources: - ../base
prod/kustomization.yaml
:
namespace: tutorial-prod resources: - ../base
ãããã¤æ¸ã¿ã®devç°å¢ã¯ãKustomizeåããã ãã§åæçµæã®YAMLã¯å¤åãã¦ããªãã¯ããªã®ã§ãå·®åããªããã¨ã確èªãã¾ãã
kubectl diff -k dev/
ãããã¤ããå ´åã¯
kubectl apply -k dev/
ã®ããã«ãããã¤ã§ãã¾ãã
æªä½æã®prodç°å¢ãåæ§ã«ãããã¤åºæ¥ã¾ããããã®åã«ããï¼ã¤ãã¼ã«ãå°å ¥ãã¾ãããã
Skaffold ã®å°å ¥
Kustomizeãå°å ¥ãããã¨ã§YAMLã®ç®¡çã楽ã«ãªãã¾ããããã¾ã Dockerã¤ã¡ã¼ã¸ã®ãã«ãã¨ãããã¤ãåå¥ã«è¡ãå¿ è¦ãããã¾ãã
Skaffoldã使ããã¨ã§ãDockerã¤ã¡ã¼ã¸ã®ãã«ãã¨ãããã¤ã¨ãã£ããã¤ãã©ã¤ã³ãä¸æ¬ã§è¡ããããã«ãã¦ã¿ã¾ãããã
ã¾ãskaffoldãã¤ã³ã¹ãã¼ã«ãã¾ãã
gcloud components install skaffold
skaffold.yaml
ã¨ããæ§æãã¡ã¤ã«ãè¨è¿°ãã¾ãã
apiVersion: skaffold/v4beta11 kind: Config build: artifacts: - image: asia-northeast1-docker.pkg.dev/m3-ai-team-k8s-tutorial-xxxxx/tutorial/hello-app context: ../kubernetes-engine-samples/quickstarts/hello-app/ docker: dockerfile: Dockerfile local: useBuildkit: true manifests: kustomize: paths: - dev profiles: - name: dev - name: prod manifests: kustomize: paths: - prod
ããã§ãã³ãã³ãï¼ã¤ã§Dockerã¤ã¡ã¼ã¸ã®ãã«ãã¨ãããã¤ãä¸æ¬ã§è¡ããããã«ãªãã¾ãã
skaffold run -p dev
prodç°å¢ãæ§ç¯ãã¾ãããã
ããã§ä¸ã¤AIãã¼ã æµã§ãNamespaceã¯Kustomizeã«å«ãããå¤é¨ã§ä½æãã¦ãã¾ã*2ããããããã¨ã§ããªãããã®ééãã§æ¥ç¶å ã®ç°å¢ãéã£ã¦ããå ´åãnamespaceãç¡ãã®ã§ãããã¤ãå®å ¨ã«å¤±æããããã«ãã¦ãã¾ãã
ã¨ããããã§ãprodç°å¢ã®Namespaceãä½æ
kubectl create namespace tutorial-prod
skaffold runã§ä¸æ¬ãããã¤ï¼
skaffold run -p prod
ããã§ãdev, prodã®ï¼ç°å¢ã®æ§æãã¡ã¤ã«ãDRYã«ä¿ã¡ãç°¡åã«ãããã¤åºæ¥ãããã«ãªãã¾ããã
ãçä»ã
ãã¥ã¼ããªã¢ã«ã¯ä»¥ä¸ã§ãï¼
ç¡é§ãªæéãçºçãããªãããã«ãnamespaceãã¨åé¤ãã¦ããã¾ãããã
kubectl delete namespace tutorial-dev tutorial-prod
ããã¸ã§ã¯ããåé¤ã
gcloud projects delete $PROJECT_ID
ããã
å¦ä½ã§ããã§ãããããå ¥éç¨ãã¥ã¼ããªã¢ã«ã¯ãããä¸ã«ãå¤ãããã¾ãããGKEãKubernetesã®ä¸çã¯åºããã¡ããã©èªåãã¡ã欲ããã¹ã³ã¼ãã欲ããæé ã®ãã³ãºãªã³ããã£ã¦ãããããªã¨æã£ã¦æ¸ãã¦ã¿ã¾ããã
ãå½¹ã«ç«ã¦ã°å¹¸ãã§ãã
We are hiring !!
ããã¾ã§èªã¿é²ãã¦ããã ããããã¨ããããã¾ããããã§ãã¤ã§ãAIãã¼ã ã§ãã±ããã¹ã¿ã¼ãã§ãã¾ããï¼
ãããèå³ããã¾ããããã¡ãã®ãã¼ã¸ããã©ããã ã«ã¸ã¥ã¢ã«é¢è«ã»ãå¿åãå¾ ã¡ãã¦ããã¾ãï¼
ã¨ã³ã¸ãã¢æ¡ç¨ãã¼ã¸ã¯ãã¡ã
ã«ã¸ã¥ã¢ã«é¢è«ããæ°è»½ã«ã©ãã
ã¤ã³ã¿ã¼ã³ã常æåéãã¦ãã¾ã
*1:ä»åã¯ç°¡åã®ããã«åä¸ã¯ã©ã¹ã¿ä¸ã§namespaceã ãã§ç°å¢ãåé¢ãã¦ãã¾ããå®éã«ã¯devç°å¢ã¨prodç°å¢ã¯ããã¸ã§ã¯ãã¬ãã«ã§åé¢ããã¦å¥ã¯ã©ã¹ã¿ã«ãã¾ã
*2:å®éã«ã¯terraformã使ã£ã¦ä»ã®k8så¤ã®ãªã½ã¼ã¹ã¨ä¸ç·ã«ä½æãã¦ãã¾ãããããã§terraform destroyã§k8sãªã½ã¼ã¹ãå«ãã¦ãããã«æ¶ããã¨ãåºæ¥ããããã¾ãã