クイックスタート

このセクションでは、 種類 または Minikubeでのテスト のローカル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は、日常的にKubernetesを試したり、開発したりしようとしているユーザーのために、ラップトップ上の仮想マシン(VM)内でシングルノードの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

デフォルトでは、オペレーターは、オペレーターがリリースされたときに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 を含む

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

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

インストール

Helmチャートの使用 をまだインストールしていない場合は、 instructions に従ってシステムにインストールしてください。

prometheus-community ヘルムチャートリポジトリを追加し、提供するサンプル構成を使用して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で表示する

この時点で、Monitoringを有効にしてデプロイされた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/

モニタリングスタックが正常にデプロイされ、enablePodMonitoring: 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

そして、資格情報admin をユーザー名として、prom-operator をパスワードとして指定して、

http://localhost:3000/ でローカルにGrafanaにアクセスします(

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の両方が、Monitoringがアクティブ化されてデプロイされた他のCloudNativePGクラスターを取得することに注意してください。