クイックスタート

このセクションでは、 種類 または 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は、ノートパソコンの仮想マシン(VM)内でシングルノード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 を定義する構成ファイルを適用する必要があります。

は

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

  storage:
    size: 1Gi

サンプルファイルは、デフォルトのストレージクラスを使用してディスク領域を割り当てる単純な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 を含む

Prometheusオペレーターの例 、および パート4:PrometheusとGrafanaでクラスターを監視する

デプロイメントをインストールします。

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

インストール

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

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

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

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/

モニタリングスタックが正常にデプロイされ、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/ でローカルに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 ダッシュボードが表示されます。

警告

以前のダッシュボードの一部のグラフは、 kubelet_volume_stats_available_bytes や`kubelet_volume_stats_capacity_bytes` のように、これが作成された時点でアルファ段階にあるメトリックを利用しています。No data を表示するいくつかのグラフを生成します。

local grafana

local grafana

このセットアップ例では、PrometheusとGrafanaの両方が、Monitoringがアクティブ化されてデプロイされた他のCloudNativePGクラスターをピックアップすることに注意してください。