0
0

More than 1 year has passed since last update.

Kuber(minikube)でnode.js + PostgreSQLを使う

Last updated at Posted at 2022-11-10

この記事の続き。

minikubeのインストール

Mac前提であれば基本以下で動きますが、詳細はこちらをどうぞ。

brew install minikube
minikube start

前準備

DB 接続文字列の書き換え

node.js側のコードのDB接続文字列を構成に合わせて変更します。
接続先ホストはdbコンテナを公開するServiceの名前になります(コンテナ名とかは動的になるから)。

// PostgreSQL connect info
const pool = new pg.Pool({
    user: "postgres",
    host: "my-db",
    database: "postgres",
    password: "postgres",
    port: 5432
});

kubernetesのpod名にはアンダースコア使えないみたい。。。なので-に変更。

ローカルイメージの取り込み

DockerでビルドしたローカルImageをminikubeで利用するためにはminikube側のリポジトリに取り込む必要があるみたいです。

なお、Tagがついてないと(latestでは)取り込めないみたい。
タグがついてない場合はdocker tag image_id image:tagでタグ付します。

minikube image load my_node:v1
minikube image load my_postgres:v1

動かしてみる

PostgreSQLコンテナとサービスのデプロイ

PostgreSQLをデプロイ。内部からしかアクセスしないのでServiceのtypeはClusterIPにしてみました。

kubectl create deployment my-db --image=my_postgres:v1
kubectl expose deployment  my-db --type=ClusterIP --port=5432

上記のService名(my-db)がDBのhost名となります。

node.jsコンテナとサービスのデプロイ

外部に公開するのでSerivceのtypeはNodePort。本番だとLBだろうけど。

Webなのでレプリカを増やしてみるのもありかも。

kubectl create deployment my-app --image=my_node:v1
kubectl expose deployment  my-app --type=NodePort --port=3000

動作確認

以下のコマンドでプロキシされたWebが起動する。

minikube service my-app

期待通り動きました。

片付け

片付け。

kubectl delete deployment my-app
kubectl delete deployment my-db
kubectl delete service my-app
kubectl delete service my-db

マニフェストファイルの生成と利用

ここではコマンドラインでkubernetesの設定を行いましたが、実運用ではマニュフェストファイル(各種yaml)を利用することが一般的です。0ベースで記述することもできますが、コマンドラインを--dry-runすることで、検証および雛形の出力ができるのでやってみます。

Deployment雛形の生成

コンポーネント生成コマンド(実コマンド)

kubectl create deployment my-db --image=my_postgres:v1

雛形生成コマンド

kubectl create deployment --image=my_postgres my-db --dry-run=client -o yaml > db-deployment.yml

生成ファイル

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-db
  name: my-db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-db
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-db
    spec:
      containers:
      - image: my_postgres
        name: my-postgres-4rrbr
        resources: {}
status: {}

Service雛形の生成

コンポーネント生成コマンド(実コマンド)

kubectl expose deployment  my-db --type=ClusterIP --port=5432

雛形生成コマンド

kubectl create service clusterip my-db --tcp=5432:5432 --dry-run=client -o yaml > db-service.yml

生成ファイル

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-db
  name: my-db
spec:
  ports:
  - name: 5432-5432
    port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    app: my-db
  type: ClusterIP
status:
  loadBalancer: {}

各種ファイルの利用

kubectl apply -f [yaml]

kubectl create -f [yaml]でもいい。微妙に動作が違うので注意。詳しくはこちらを参考に。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0