クイックスタート¶
このセクションでは、 種類 または 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 を含む
デプロイメントをインストールします。
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¶
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¶
このセットアップ例では、PrometheusとGrafanaの両方が、Monitoringがアクティブ化されてデプロイされた他のCloudNativePGクラスターをピックアップすることに注意してください。