Linux に Postgres データストアを作成する。 x86_64
Postgres オペレーターをインストールし、データ・ストアをセットアップします。
準備
外部リポジトリーからイメージをプルするために、オンラインおよびオフラインのホストが準備されていることを確認します。 また、正しい Helm リポジトリーが追加されていることも確認してください。
詳しくは、 データ・ストアのインストールの準備を参照してください。
CloudNativePG オペレータを使用した Postgres のオンライン・インストール
Postgres データストアをオンライン環境にインストールするには、以下の手順を実行します。
instana-postgres
名前空間を作成します。kubectl create namespace instana-postgres
instana-postgres
名前空間の画像プルシークレットを作成します。kubectl create secret docker-registry instana-registry --namespace instana-postgres \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.io
Postgres を Red Hat® OpenShift® クラスタにインストールする場合は、
instana-postgres
ネームスペースからファイルシステムグループIDを決定します。 Red Hat OpenShift ファイルシステムグループが、その名前空間に固有の値の範囲内に収まることを要求します。kubectl get namespace instana-postgres -o yaml
コマンドの実行結果は、以下の例のような出力となります
apiVersion: v1 kind: Namespace metadata: annotations: ....... openshift.io/sa.scc.uid-range: 1000750000/10000 creationTimestamp: "2024-01-14T07:04:59Z" labels: kubernetes.io/metadata.name: instana-postgres ....... name: instana-postgres
openshift.io/sa.scc.supplemental-groups
の注釈には、許可されたIDの範囲が記載されています。1000750000/10000
の範囲は、ID1000750000
から始まる 10,000 の値を示しており、1000750000
から1000760000
までの ID の範囲を指定しています。 この例では、1000750000
という値がファイルシステムグループID(UID)として使用される可能性があります。Postgres オペレーターを取り付ける。 次のコマンドでは、前のステップで取得したUIDを
<UID from namespace>
として使用しますhelm install cnpg instana/cloudnative-pg --set image.repository=artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg --set image.tag=v1.21.1_v0.13.0 --version=0.21.1 --set imagePullSecrets[0].name=instana-registry --set containerSecurityContext.runAsUser=<UID from namespace> --set containerSecurityContext.runAsGroup=<UID from namespace> -n instana-postgres
base64 でパスワードを生成します。 パスワードをメモしてください。 このファイルは、後で
config.yaml
ファイルに保存する必要があります。openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echo
前のコマンドで取得したパスワードを使用して、
Secret
タイプのリソースを作成します。kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password>
Postgres の秘密鍵を作成します。
kubectl apply -f postgres-secret.yaml -n instana-postgres
Postgres クラスタ構成のYAMLファイルを作成します。例えば、
postgres.yaml
。apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 imageName: artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.17.0 imagePullPolicy: IfNotPresent imagePullSecrets: - name: instana-registry postgresql: parameters: shared_buffers: 32MB pg_stat_statements.track: all auto_explain.log_min_duration: '10s' pg_hba: - local all all trust - host all all 0.0.0.0/0 md5 - local replication standby trust - hostssl replication standby all md5 - hostnossl all all all reject - hostssl all all all md5 managed: roles: - name: instanaadmin login: true superuser: true createdb: true createrole: true passwordSecret: name: instanaadmin bootstrap: initdb: database: instanaadmin owner: instanaadmin secret: name: instanaadmin superuserSecret: name: instanaadmin storage: size: 1Gi # storageClass: "Optional"
Postgres クラスタをデプロイします。
kubectl apply -f postgres.yaml -n instana-postgres
Postgres (オンラインおよびオフライン) のデプロイおよび検証のステップを実行します。
Postgres をオフラインでインストールするには、 CloudNative を使用します。PGオペレーター
オフライン環境に Postgres Operator をインストールします。
インストールの準備時に外部レジストリーから Postgres イメージをまだプルしていない場合は、ここでプルできます。 要塞ホストで以下のコマンドを実行します。 次に、エアー・ギャップ環境内の Instana ホストにイメージをコピーします。
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg:v1.21.1_v0.13.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.17.0
Instana ホストで以下の手順を実行します。
イメージを内部イメージ・レジストリーに再タグ付けします。
docker tag artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg:v1.21.1_v0.13.0 <internal-image-registry>/operator/cloudnative-pg:v1.21.1_v0.13.0 docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.17.0 <internal-image-registry>/datastore/cnpg-containers:15_v0.17.0
イメージを要塞ホスト上の内部イメージ・レジストリーにプッシュします。
docker push <internal-image-registry>/operator/cloudnative-pg:v1.21.1_v0.13.0 docker push <internal-image-registry>/datastore/cnpg-containers:15_v0.17.0
instana-postgres
名前空間を作成します。kubectl create namespace instana-postgres
オプション:内部イメージ・レジストリの認証が必要な場合は、イメージ・プル・シークレットを作成します。
kubectl create secret docker-registry <secret_name> --namespace instana-postgres \ --docker-username=<registry_username> \ --docker-password=<registry_password> \ --docker-server=<internal-image-registry>:<internal-image-registry-port> \ --docker-email=<registry_email>
Postgres を Red Hat® OpenShift® クラスタにインストールする場合は、
instana-postgres
ネームスペースからファイルシステムグループIDを決定します。 Red Hat OpenShift ファイルシステムグループが、その名前空間に固有の値の範囲内に収まることを要求します。kubectl get namespace instana-postgres -o yaml
コマンドの実行結果は、以下の例のような出力となります
apiVersion: v1 kind: Namespace metadata: annotations: ....... openshift.io/sa.scc.uid-range: 1000750000/10000 creationTimestamp: "2024-01-14T07:04:59Z" labels: kubernetes.io/metadata.name: instana-postgres ....... name: instana-postgres
openshift.io/sa.scc.supplemental-groups
の注釈には、許可されたIDの範囲が記載されています。1000750000/10000
の範囲は、ID1000750000
から始まる 10,000 の値を示しており、1000750000
から1000760000
までの ID の範囲を指定しています。 この例では、1000750000
という値がファイルシステムグループID(UID)として使用される可能性があります。Postgres オペレーターを取り付ける。 次のコマンドで、<download_key>の値を自分のエージェントキーに更新します。 内部レジストリ用にイメージプルシークレットを作成した場合は、次のコマンドに
--set image.imagePullSecrets[0].name="<internal-image-registry-pull-secret>
を追加してください。Red Hat OpenShift クラスター
次のコマンドでは、前のステップで取得したUIDを
<UID from namespace>
として使用しますhelm install cnpg cloudnative-pg-0.21.1.tgz --set image.repository=image-registry.openshift-image-registry.svc:5000/instana-postgres/cloudnative-pg-operator --set image.tag=v1.21.1_v0.13.0 --version=0.21.1 --set containerSecurityContext.runAsUser=<UID from namespace> --set containerSecurityContext.runAsGroup=<UID from namespace> -n instana-postgres
Kubernetes クラスター
helm install cnpg cloudnative-pg-0.21.1.tgz --set image.repository=<internal-image-registry>/operator/cloudnative-pg --set image.tag=v1.21.1_v0.13.0 --version=0.21.1 -n instana-postgres
base64 でパスワードを生成します。 パスワードをメモしてください。 このファイルは、後で
config.yaml
ファイルに保存する必要があります。openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echo
前のコマンドで取得したパスワードを使用して、
Secret
タイプのリソースを作成します。kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password>
Postgres の秘密鍵を作成します。
kubectl apply -f postgres-secret.yaml -n instana-postgres
Postgres クラスタ構成のYAMLファイルを作成します。例えば、
postgres.yaml
。
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: postgres
spec:
instances: 3
imageName: <internal-image-registry>/datastore/cnpg-containers:15_v0.17.0
imagePullPolicy: IfNotPresent
# Optional: if you created an image pull secret for your internal registry, uncomment the following lines and update the image pull secret information.
# imagePullSecrets:
# - name: <internal-image-registry-pull-secret>
postgresql:
parameters:
shared_buffers: 32MB
pg_stat_statements.track: all
auto_explain.log_min_duration: '10s'
pg_hba:
- local all all trust
- host all all 0.0.0.0/0 md5
- local replication standby trust
- hostssl replication standby all md5
- hostnossl all all all reject
- hostssl all all all md5
managed:
roles:
- name: instanaadmin
login: true
superuser: true
createdb: true
createrole: true
passwordSecret:
name: instanaadmin
bootstrap:
initdb:
database: instanaadmin
owner: instanaadmin
secret:
name: instanaadmin
superuserSecret:
name: instanaadmin
storage:
size: 1Gi
# storageClass: "Optional"
- Postgres クラスタをデプロイします。
kubectl apply -f postgres.yaml -n instana-postgres
- Postgres (オンラインおよびオフライン) のデプロイおよび検証のステップを実行します。
Postgresのデプロイと検証(オンラインとオフライン)
以下のステップを実行して、 Postgres インスタンスをデプロイし、データ・ストアを作成します。
先ほど生成したパスワードを
config.yaml
。datastoreConfigs: ... postgresConfigs: - user: instanaadmin password: <USER_GENERATED_PASSWORD> adminUser: instanaadmin adminPassword: <USER_GENERATED_PASSWORD> ...
postgresql
リソースを作成します。kubectl apply -f postgres.yaml --namespace=instana-postgres
Postgres オペレータの配置を確認する。
kubectl get all -n instana-postgres
Postgres Operatorが正常に展開された場合、コマンドの結果は以下のようになる:
NAME READY STATUS RESTARTS AGE pod/postgres-1 1/1 Running 0 100s pod/postgres-2 1/1 Running 0 69s pod/postgres-3 1/1 Running 0 41s pod/cnpg-cloudnative-pg-64bbc87958-fqnrl 1/1 Running 0 11m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT service/cnpg-webhook-service ClusterIP 172.30.66.183 <none> 443/TCP service/postgres-r ClusterIP 172.30.163.146 <none> 5432/TCP service/postgres-ro ClusterIP 172.30.226.75 <none> 5432/TCP service/postgres-rw ClusterIP 172.30.235.178 <none> 5432/TCP NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/cnpg-cloudnative-p 1/1 1 1 11m NAME DESIRED CURRENT READY AGE replicaset.apps/cnpg-cloudnative-pg-64bbc87958 1 1 1 11m
Zalandoからデータを移行する CloudNativePG
pg_basebackup
ブートストラップモードを使用すると、既存の PostgreSQL インスタンス(ソース)の物理状態を正確に複製した新しい PostgreSQL クラスタ(ターゲット)を作成することができます。
有効なストリーミングレプリケーション接続を通じて、ライブクラスターからブートストラップすることができます。また、ソースの PostgreSQL インスタンスをプライマリまたはスタンバイの PostgreSQL サーバーとして使用することもできます。
Zalando PostgreSQL クラスタからデータを移行するには、 pg_basebackup
ブートストラップ モードから CloudNativePG レプリカ クラスターに移行する場合は、 「Zalando から CloudNativePG へのデータの移行」 を参照してください。