クイックスタート

このセクションでは、 親切 または ミニキューブ のローカル Kubernetes クラスターで CloudNativePG を使用して、ラップトップ/コンピューターで PostgreSQL クラスターをテストする方法について説明します。

警告

このセクションに含まれる手順は、デモンストレーション、テスト、および実践のみを目的としており、本番環境では使用しないでください。

他の Kubernetes アプリケーションと同様に、CloudNativePG は YAML で記述された通常のマニフェストを使用してデプロイされます。

このページの手順に従うことで、ローカルの Kubernetes インストールで PostgreSQL クラスターを開始し、それを試すことができるはずです。

重要

Kubernetes クラスターに接続するために、マシンに kubectl がインストールされていることを確認してください。 how to install `kubectl <https://kubernetes.io/docs/tasks/tools/install-kubectl/>`__ の Kubernetes ドキュメントに従ってください。

パート 1 - ローカルの Kubernetes プレイグラウンドをセットアップする

最初の部分は、Minikube または Kind のインストールについてです。時間をかけてシステムについて読んで、どちらを先に進めるかを決めてください。いずれかを設定したら、パート 2 に進んでください。

パート 4 - Prometheus と Grafana を使用してクラスターを監視する では、ローカルでのテスト/評価のために Prometheus と

Grafana を使用して監視をセットアップする手順も提供しています。

ミニキューブ

Minikube は、Kubernetes をローカルで簡単に実行できるようにするツールです。 Minikube は、ラップトップの仮想マシン (VM) 内で単一ノードの Kubernetes クラスターを実行し、Kubernetes を試したり、日常的に Kubernetes を使用して開発したりしようとしているユーザーを対象としています。通常、VirtualBox と組み合わせて使用します。

詳細については、ローカルの個人環境の公式 Kubernetes documentation on how to install Minikube を参照してください。インストールしたら、次のコマンドを実行して minikube クラスターを作成します。

minikube start

これにより、Kubernetes クラスターが作成され、使用する準備が整います。次のコマンドで動作することを確認します。

kubectl get nodes

minikube という 1 つのノードが表示されます。

親切

仮想マシンのハイパーバイザーを使用したくない場合、Kind は Docker コンテナーの「ノード」を使用してローカルの Kubernetes クラスターを実行するためのツールです (Kind は実際には「Kubernetes IN Docker」を表します)。

クイックスタート の手順に従って、環境に kind

をインストールし、次を使用して Kubernetes クラスターを作成します。

kind create cluster --name pg

パート 2 - CloudNativePG をインストールする

ラップトップで Kubernetes がインストールされて実行されているので、CloudNativePG のインストールに進むことができます。

インストールとアップグレード セクションを参照してから、PostgreSQL

クラスターのデプロイに進んでください。

パート 3 - PostgreSQL クラスターをデプロイする

Kubernetes での他のデプロイと同様に、PostgreSQL クラスターをデプロイするには、目的の Cluster を定義する構成ファイルを適用する必要があります。

cluster-example.yaml サンプル ファイルは、デフォルトのストレージ

クラスを使用して単純な Cluster を定義し、ディスク スペースを割り当てます。

#  Example of PostgreSQL cluster

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-example
spec:
  instances: 3

  # Example of rolling update strategy:
  # - unsupervised: automated update of the primary once all
  #                 replicas have been upgraded (default)
  # - supervised: requires manual supervision to perform
  #               the switchover of the primary
  primaryUpdateStrategy: unsupervised

  # Require 1Gi of space
  storage:
    size: 1Gi

3 ノードの PostgreSQL クラスターを作成するには、次のコマンドを実行する必要があります。

kubectl apply -f cluster-example.yaml

get pods コマンドを使用して、ポッドが作成されていることを確認できます。

kubectl get pods

これにより、デフォルトの名前空間でポッドが検索されます。クラスターを Kubernetes インストール上の他のワークロードから分離するために、クラスターをデプロイするための新しい名前空間をいつでも作成できます。または、ラベルを使用することもできます。オペレーターは、特定のクラスターに関連するすべてのオブジェクトに cnpg.io/cluster ラベルを適用します。例えば:

kubectl get pods -l cnpg.io/cluster=<CLUSTER>

重要

cnpg.io/cluster をラベルとして使用していることに注意してください。過去に postgresql を見たり使用したりしたことがあるかもしれません。このラベルは非推奨であり、将来的に削除される予定です。 cngp.io/cluster を使用してください。

デフォルトでは、オペレーターは、オペレーターがリリースされたときに、PostgreSQL の最新のメジャー バージョンの利用可能な最新のマイナー バージョンをインストールします。これは、Cluster 定義の spec セクションに imageName キーを設定することでオーバーライドできます。たとえば、PostgreSQL 13.6 をインストールするには、次のようにします。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
   # [...]
spec:
   # [...]
   imageName: ghcr.io/cloudnative-pg/postgresql:13.6
   #[...]

重要

不変のインフラストラクチャ パラダイムでは、コンテナー イメージの特定のバージョンを常に指す必要があります。 latest や 13 などのタグは、クラスター内の更新ポリシーとバージョンの一貫性に関して予測できないシナリオにつながる可能性があるため、運用環境では使用しないでください。厳密に決定論的で反復可能な展開の場合、<image>:<tag>@sha256:<digestValue> 形式を使用してダイジェストをイメージ名に追加できます。

パート 4 - Prometheus と Grafana を使用してクラスターを監視する

重要

Prometheus と Grafana のインストールは、このプロジェクトの範囲外です。このセクションの手順は、実験と説明のみを目的として提供されています。

このセクションでは、可観測性のために Prometheus と Grafana をデプロイする方法、CloudNativePG クラスターを監視する Grafana ダッシュボードを作成する方法、およびアラート条件を定義する一連の Prometheus ルールを示します。

Prometheus Community によって維持される Kube-Prometheus stack 、Helm

チャートを活用します。追加のドキュメントと背景については、プロジェクトの Web サイトを参照してください。

Kube-Prometheus-stack Helm チャートは、 Alert Manager を含む

プロメテウス オペレーターの例 と パート 4 - Prometheus と Grafana を使用してクラスターを監視する デプロイメントをインストールします。

CloudNativePG クラスターの可観測性に役立つ初期設定を提供する、この Helm チャートのデプロイ用の構成ファイルが含まれています。

インストール

Helm チャートの使用 をまだインストールしていない場合は、 instructions

に従ってシステムにインストールしてください。

prometheus-community Helm チャート リポジトリを追加し、提供されているサンプル構成を使用して Kube Prometheus スタック をインストールする必要があります。

これは、次のコマンドで実現できます。

helm repo add prometheus-community \
  https://prometheus-community.github.io/helm-charts

helm upgrade --install \
  -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/docs/src/samples/monitoring/kube-stack-config.yaml \
  prometheus-community \
  prometheus-community/kube-prometheus-stack

完了すると、Prometheus、Grafana、Alert Manager が kube-stack-config.yaml ファイルの値でインストールされます。

  • Prometheus のインストールから、Prometheus Operator が any PodMonitor を監視します ( *monitoring* を参照)。

  • Grafana インストールは、Grafana ダッシュボード ConfigMap を監視します。

参考

上記のコマンドの詳細については、 helm install のドキュメントを参照してください。

いくつかのカスタム リソースが作成されていることがわかります。

% kubectl get crds
NAME                                        CREATED AT
…
alertmanagers.monitoring.coreos.com         <timestamp>
…
prometheuses.monitoring.coreos.com          <timestamp>
prometheusrules.monitoring.coreos.com       <timestamp>
…

および一連のサービス:

% kubectl get svc
NAME                                      TYPE        PORT(S)
…                                         …           …
prometheus-community-grafana              ClusterIP   80/TCP
prometheus-community-kube-alertmanager    ClusterIP   9093/TCP
prometheus-community-kube-operator        ClusterIP   443/TCP
prometheus-community-kube-prometheus      ClusterIP   9090/TCP

Prometheus で見る

この時点で、モニタリングを有効にしてデプロイされた CloudNativePG クラスターは、Prometheus を介して監視可能になります。

たとえば、PodMonitor を有効にして単純なクラスターをデプロイできます。

kubectl apply -f - <<EOF
- --
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-with-metrics
spec:
  instances: 3

  storage:
    size: 1Gi

  monitoring:
    enablePodMonitor: true
EOF

Prometheus にアクセスするには、Prometheus サービスをポート転送します。

kubectl port-forward svc/prometheus-community-kube-prometheus 9090

次に、Prometheus コンソールにローカルでアクセスします: http://localhost:9090/

監視スタックが正常にデプロイされ、enablePodMonitor: true を含むクラスターがあると仮定すると、CloudNativePG クラスターに関連する一連のメトリックが見つかるはずです。詳細については、 *monitoring section* を参照してください。

local prometheus

local prometheus

prometheusRule を作成することで、いくつかのアラートを定義できるようになりました。

kubectl apply -f \
  https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/docs/src/samples/monitoring/cnpg-prometheusrule.yaml

デフォルトのアラートが表示されるはずです。

% kubectl get prometheusrules
NAME                                                       AGE
cnpg-default-alerts                                        3m27s

Prometheus コンソールで、Alerts メニューをクリックして、インストールしたばかりのアラートを表示できます。

Grafana ダッシュボード

「プレーン」インストールでは、事前定義されたダッシュボードなしで Grafana がデプロイされます。

ポート転送できます:

  kubectl port-forward svc/prometheus-community-grafana 3000:80

`http://localhost:3000/ <http://localhost:3000/>`__  でローカルに Grafana にアクセスします。

資格情報 admin をユーザー名として、prom-operator をパスワードとして提供します (kube-stack-config.yaml で定義)。

サンプルの Grafana ダッシュボードをインストールできるようになりました。

kubectl apply -f \
  https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/docs/src/samples/monitoring/grafana-configmap.yaml

これは、Grafana ページによって数秒で取得されます。 CloudNativePG ダッシュボードが表示されます。

local grafana

local grafana

このセットアップ例では、Prometheus と Grafana の両方が、モニタリングを有効にしてデプロイされた他の CloudNativePG クラスターをピックアップすることに注意してください。