SuzukiTakamasa / CryptoFunds

0 stars 0 forks source link

GKEデプロイ #3

Open SuzukiTakamasa opened 3 months ago

SuzukiTakamasa commented 3 months ago

前提条件

Google Cloud Platform (GCP) アカウント gcloud コマンドラインツール Docker Kubernetes CLI (kubectl)

手順

1. GCPプロジェクトの作成

GCPコンソールで新しいプロジェクトを作成してください。

2. GKE Clusterの設定

2.1 gcloudの設定

sh

gcloud init 2.2 GKEクラスタの作成 sh

gcloud container clusters create todo-cluster --num-nodes=3 --zone=[YOUR_ZONE] gcloud container clusters get-credentials todo-cluster --zone=[YOUR_ZONE] [YOUR_ZONE]を適切なGCPゾーンに置き換えます。

3. デプロイ用のDockerイメージを作成&プッシュ

3.1 Dockerfileの作成

フロントエンド: todo-app/Dockerfile

Dockerfile

#Stage 1: Build
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

#Stage 2: Serve
FROM nginx:alpine
COPY --from=builder /app/out /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

バックエンド: todo-api/Dockerfile

Dockerfile

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start:prod"]

3.2 コンテナイメージのビルドとプッシュ

まず、GCPのコンテナレジストリに認証を行います。

sh

gcloud auth configure-docker

次に、次のコマンドでコンテナイメージをビルドし、GCPのコンテナレジストリにプッシュします。

sh

cd todo-app
docker build -t gcr.io/[YOUR_PROJECT_ID]/todo-app:latest .
docker push gcr.io/[YOUR_PROJECT_ID]/todo-app:latest
cd ../todo-api
docker build -t gcr.io/[YOUR_PROJECT_ID]/todo-api:latest .
docker push gcr.io/[YOUR_PROJECT_ID]/todo-api:latest

[YOUR_PROJECT_ID]はGCPのプロジェクトIDに置き換えます。

4. Kubernetes (GKE) デプロイメントの設定

4.1 YAMLファイルの作成

k8s/deployment.yaml

yaml

apiVersion: apps/v1 kind: Deployment metadata: name: todo-app spec: replicas: 2 selector: matchLabels: app: todo-app template: metadata: labels: app: todo-app spec: containers:


apiVersion: apps/v1 kind: Deployment metadata: name: todo-api spec: replicas: 2 selector: matchLabels: app: todo-api template: metadata: labels: app: todo-api spec: containers:


apiVersion: v1 kind: Service metadata: name: todo-app-service spec: type: LoadBalancer ports:


apiVersion: v1 kind: Service metadata: name: todo-api-service spec: type: LoadBalancer ports:

kubectl apply -f k8s/deployment.yaml Kubernetesクラスタがこれらの設定に基づいてPodとServiceを作成し、GKEはロードバランサを設定してくれます。

5. データベースの設定

GCPのCloud SQLを使用することをお勧めします。Cloud SQLをGKEクラスタに接続するための設定は少し手間がかかりますが、以下の手順を参考にしてください。

Cloud SQLインスタンスを作成し、PostgreSQLをインストールする。 Cloud SQLインスタンスの外部IPやVPCを設定。 KubernetesのSecretを作成し、データベースの接続情報を保存。 Podがデータベースに接続する際に、Secretを環境変数として読み込む。 例: Kubernetes Secretの作成

sh

kubectl create secret generic postgres-secret \ --from-literal=DB_HOST=[CLOUD_SQL_HOST] \ --from-literal=DB_PORT=5432 \ --from-literal=DB_USER=[DB_USER] \ --from-literal=DB_PASSWORD=[DB_PASSWORD] \ --from-literal=DB_NAME=[DB_NAME]