この記事の続き。
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]でもいい。微妙に動作が違うので注意。詳しくはこちらを参考に。
参考
- https://info.drobe.co.jp/blog/engineering/minikube-driver
- https://miyazi888.hatenablog.com/entry/2022/05/22/194940
- https://amateur-engineer-blog.com/kubectl-create-manifest/
- https://goodbyegangster.hatenablog.com/entry/2021/01/20/205735
- https://qiita.com/sourjp/items/f0c8c8b4a2a494a80908
- https://qiita.com/tkusumi/items/0bf5417c865ef716b221