はじめに
PostgreSQLは、ACID準拠のトランザクションを特徴とする信頼性が高く堅牢なリレーショナルデータベースシステムです。あらゆるサイズのワークロードを処理するように設計されているため、個人的な使用や、データウェアハウス、ビッグデータサーバー、Webサービスなどの大規模な展開に最適です。
PostgreSQLをKubernetesにデプロイすると、RDBMSとオーケストレーションプラットフォームの両方の優れた側面を活用して、スケーラブルでポータブルなPostgreSQLインスタンスが作成されます。
この記事では、KubernetesにPostgreSQLをデプロイする2つの方法(Helmチャートを使用する方法と手動で構成を作成する方法)について説明します。
前提条件
- kubectlがインストールされたKubernetesクラスター
- ヘルム3がインストールされています
- システムの管理者権限
Helmを使用してPostgreSQLをデプロイする
Helmを使用すると、PostgreSQLインスタンスをクラスタにすばやく簡単にデプロイできます。
ステップ1:Helmリポジトリを追加する
1. Artifact Hubで、使用するPostgreSQLHelmチャートを検索します。次のように入力して、チャートのリポジトリをローカルのHelmインストールに追加します。
helm repo add [repository-name] [repository-address]
この記事では、PostgreSQLのインストールにBitnamiHelmチャートを使用しています。
2.リポジトリを追加したら、ローカルリポジトリを更新します。
helm repo update
更新が成功したことを確認します。
ステップ2:永続ストレージボリュームを作成して適用する
Postgresデータベースのデータは、ポッドを再起動しても保持される必要があります。
1.これを実現するには、nanoなどのテキストエディターを使用して、YAMLファイルにPersistentVolumeリソースを作成します。
nano postgres-pv.yaml
ファイルの内容は次のように定義します:
- リソース自体。
- ストレージクラス。
- 割り当てられたストレージの量。
- アクセスモード。
- ホストシステムのマウントパス。
この例では、次の構成を使用しています。
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgresql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
2.ファイルを保存して終了します。次に、 kubectl
を使用して構成を適用します :
kubectl apply -f postgres-pv.yaml
システムは永続ボリュームの作成を確認します。
ステップ3:永続的なボリュームクレームを作成して適用する
1.永続ボリュームクレーム(PVC)を作成して、前の手順で割り当てられたストレージを要求します。
nano postgres-pvc.yaml
この例では、次の構成を使用しています。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgresql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
2.ファイルを保存して終了します。 kubectl
を使用して構成を適用します :
kubectl apply -f postgres-pvc.yaml
システムはPVCの作成が成功したことを確認します。
3. kubectl get
を使用します PVCがPVに正常に接続されているかどうかを確認するには:
kubectl get pvc
ステータス列には、申し立てがバインド済みであることが示されています 。
ステップ4:ヘルムチャートをインストールする
helm install
を使用してヘルムチャートをインストールします 指図。 --set
を追加します インストールを作成したPVCに接続し、ボリューム権限を有効にするコマンドのフラグ:
helm install [release-name] [repo-name] --set persistence.existingClaim=[pvc-name] --set volumePermissions.enabled=true
インストールが成功すると、システムにレポートが表示されます。
ステップ5:PostgreSQLクライアントに接続する
1. POSTGRES_PASSWORD
をエクスポートします PostgreSQLインスタンスにログインできるようにするための環境変数:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default psql-test-postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
2.別のターミナルウィンドウを開き、次のコマンドを入力してPostgresポートを転送します。
kubectl port-forward --namespace default svc/psql-test-postgresql 5432:5432
システムはポート接続の処理を開始します。
3.ポート転送ウィンドウを最小化し、前のウィンドウに戻ります。 PostgreSQLクライアントであるpsqlに接続するコマンドを入力します。
PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U postgres -d postgres -p 5432
psql
コマンドプロンプトが表示され、PostgreSQLが入力を受け取る準備ができています。
最初から構成を作成してPostgreSQLをデプロイする
KubernetesでPostgresを手動で構成すると、デプロイ構成を微調整できます。
ステップ1:ConfigMapを作成して適用する
ConfigMapリソースには、展開プロセス中に使用されるデータが含まれています。
1.テキストエディタでConfigMapYAMLファイルを作成します。
nano postgres-configmap.yaml
2.ファイルの最も重要な部分はデータセクションであり、ここでデータベースの名前を指定します 、ユーザー名 、およびパスワード PostgreSQLインスタンスにログインするため。
この例では、ConfigMapファイルで次のパラメーターを使用しています。
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: admin
POSTGRES_PASSWORD: test123
3.ファイルを保存して終了します。次に、 kubectl
を使用してリソースを適用します :
kubectl apply -f postgres-configmap.yaml
システムは、構成ファイルが正常に作成されたことを確認します。
ステップ2:永続ストレージボリュームと永続ボリュームクレームを作成して適用する
1.ストレージ構成用のYAMLファイルを作成します。
nano postgres-storage.yaml
2. Helmチャートの展開方法では、永続ボリュームと永続ボリュームクレームに2つの別々のファイルを使用しましたが、以下の例のように、両方の構成を1つのファイルに配置することもできます。
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
type: local
app: postgres
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
3.ファイルを保存して終了します。 kubectl
を使用してリソースを適用します :
kubectl apply -f postgres-storage.yaml
システムは、PVとPVCの両方が正常に作成されたことを確認します。
4.次のコマンドを使用して、PVCがPVに接続されていることを確認します。
kubectl get pvc
PVCのステータスはバインド済みです 、およびPVCはPostgreSQLデプロイメントで使用する準備ができています。
ステップ3:PostgreSQLデプロイメントを作成して適用する
1.デプロイYAMLファイルを作成します。
nano postgres-deployment.yaml
2.デプロイメントファイルにはPostgreSQLデプロイメントの構成が含まれ、コンテナーとボリュームの仕様が提供されます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:10.1
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
3.ファイルを保存して終了します。 kubectl
を使用してデプロイを適用します :
kubectl apply -f postgres-deployment.yaml
システムは、デプロイメントが正常に作成されたことを確認します。
ステップ4:PostgreSQLサービスを作成して適用する
1.最後に、PostgreSQLサービスを構成するためのYAMLファイルを作成します。
nano postgres-service.yaml
2.サービスタイプとポートを指定します。この例では、次の構成を使用しています。
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
3.ファイルを保存して終了します。 kubectl
を使用して構成を適用します :
kubectl apply -f postgres-service.yaml
システムは、サービスが正常に作成されたことを確認します。
4.次のコマンドを使用して、システム上のすべてのリソースを一覧表示します。
kubectl get all
ポッドとデプロイメントは1/1を示しています 準備完了ステータス。必要なレプリカセットの数は、デプロイYAMLファイルで構成されているものを反映しています。
ステップ5:PostgreSQLに接続する
1.すべてのリソースの準備ができたら、 kubectl exec
を使用します PostgreSQLインスタンスにログインします。
kubectl exec -it [pod-name] -- psql -h localhost -U admin --password -p [port] postgresdb
2.システムがパスワードを要求します。手順1で定義したパスワードを入力し、 Enterを押します。 。 psql
コマンドプロンプトが表示されます。
これで、データベースはユーザー入力を受け取る準備ができました。