Quickstart
==========

このセクションでは、
`Kind <https://kind.sigs.k8s.io/>`_ または `Minikube <https://kubernetes.io/docs/setup/learning-environment/minikube/>`_ のいずれかを使用してローカルKubernetesクラスターにKubernetes用EDB
Postgresを展開することにより、ローカルマシンでPostgreSQLクラスターをテストする方法をガイドします。

Red Hat OpenShift Container Platformユーザーは、 :ref:`Red Hat OpenShift Local <Red Hat OpenShift>` 旧Red Hat
CodeReady ContainersでKubernetesのEDB
Postgresの認定オペレーターをテストできます。

..  Warning::
   このセクションに含まれる手順は、デモンストレーション、テスト、および練習のみを目的としているため、実稼働環境では使用しないでください。

他のKubernetesアプリケーションと同様に、KubernetesのEDB Postgresは、
YAMLで書かれた通常のマニフェストを使用して展開されます。

これらの手順に従うことにより、ローカルのKubernetes /
OpenshiftインストールでPostgreSQLクラスターを起動し、実験できるはずです。

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

または :ref:`how to install `oc` <Red Hat OpenShift>` のOpenshiftドキュメント

..  Note::
   Openshiftを実行している場合は、このドキュメントで`kubectl` が記載されているたびに`oc` を使用してください。 `kubectl` コマンドは、 `oc` コマンドと互換性があります。

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

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

:ref:`パート4 PrometheusとGrafanaを使用してクラスターを監視する <パート4 PrometheusとGrafanaを使用してクラスターを監視する>` では、ローカルテスト/評価のためにPrometheusとGrafanaを使用したモニタリングを設定する手順も提供します

Minikube
^^^^^^^^

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

詳細については、ローカルの個人環境の公式 `Kubernetes documentation on how toinstall Minikube <https://kubernetes.io/docs/tasks/tools/install-minikube>`_ で見つけることができます。インストールしたら、次のコマンドを実行してminikubeクラスターを作成します。

.. code:: sh

   minikube start

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

.. code:: sh

   kubectl get nodes

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

種類
^^^^

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

`Quickstart <https://kind.sigs.k8s.io/docs/user/quick-start>`_ の指示に従って、環境に\ ``kind``
をインストールし、次のKubernetesクラスターを作成します。

.. code:: sh

   kind create cluster --name pg

OpenShift Local旧CodeReady ContainersCRC
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1. :ref:`Download OpenShift Local <Red Hat OpenShift>` 

そして、バイナリを\ ``PATH`` のディレクトリ内に移動します。

2. 次のコマンドを実行します。

::

       crc setup
       crc start

``crc start`` 出力は、続行方法を説明します。

3. ``crc oc-env`` コマンドの出力を実行します。

4. 印刷した\ ``oc login`` コマンドを使用して、 ``kubeadmin``
   としてログインします。 ``crc console``
   を実行しているWebコンソールを開くこともできます。ユーザーとパスワードは\ ``oc login``
   コマンドの場合と同じです。

5. OpenShift
   LocalにはStorageClassが付属していないため、構成する必要があります。
   `Dynamic volume provisioning wiki page <https://github.com/code-ready/crc/wiki/Dynamic-volume-provisioning>`_ をフォローする

``rancher/local-path-provisioner`` をインストールします。

パート2KubernetesのEDB Postgresのインストール
---------------------------------------------

ラップトップでKubernetesインストールをアップして実行しているため、 EDB
Postgres for Kubernetesのインストールに進むことができます。

クラスター構成ファイルで指定されない限り、KubernetesのEDB
Postgresは現在デフォルトでCommunity
Postgresqlオペランドを展開します。詳細については、 :ref:`EDB Postgresサーバーの展開 <EDB Postgresサーバーの展開>` 
セクションを参照してください。

:ref:`YAMLマニフェストを介したKubernetesのインストール <YAMLマニフェストを介したKubernetesのインストール>` セクションを参照して、PostgreSQLクラスターの展開を続行します。

パート3 PostgreSQLクラスターを展開する
--------------------------------------

クラスター構成ファイルで指定されない限り、KubernetesのEDB
Postgresは現在デフォルトでCommunity
Postgresqlオペランドを展開します。詳細については、
:ref:`EDB Postgresサーバーの展開 <EDB Postgresサーバーの展開>` セクションを参照してください。

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

サンプルファイルでは、デフォルトのストレージクラスを使用して単純な\ ``Cluster``
を定義して、ディスク領域を割り当てます。

::

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

     storage:
       size: 1Gi

.. code:: yaml

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

     storage:
       size: 1Gi

..  Note "There's more"::
   使用可能なオプションの詳細については、 :ref:`API Reference - v1.25.1 <API Reference - v1.25.1>` を参照してください。

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

.. code:: sh

   kubectl apply -f cluster-example.yaml

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

.. code:: sh

   kubectl get pods

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

.. code:: sh

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

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

EDB Postgresサーバーの展開
^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     # [...]
   spec:
     # [...]
     imageName: docker.enterprisedb.com/k8s_enterprise/edb-postgres-advanced:16
     #[...]

EDB Postgres Extended 16をインストールするには、次を使用できます。

.. code:: yaml

   apiVersion: postgresql.k8s.enterprisedb.io/v1
   kind: Cluster
   metadata:
     # [...]
   spec:
     # [...]
     imageName: docker.enterprisedb.com/k8s_enterprise/edb-postgres-extended:16
     #[...]

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

..  Note "There's more"::
   オペレーターにバンドルされたクラスター構成の例がいくつかあります。 :ref:`Examples <Examples>` を参照してください。

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

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

このセクションでは、可観測性を実現するためにPrometheusとGrafanaを展開する方法、KubernetesクラスターのEDB
PostgresをモニタするためのGrafanaダッシュボードを作成する方法、およびアラート条件を定義するPrometheusルールセットを示します。

`Kube-Prometheus stack <https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack>`_  、 Helmチャートを利用します。これは、 `Prometheus Community <https://github.com/prometheus-community>`_ 
によって維持されます。追加のドキュメントと背景については、プロジェクトのWebサイトを参照してください。

Kube-Prometheus-stack Helmチャートは、 `Prometheus Operator <https://prometheus-operator.dev>`_  `Alert Manager <https://prometheus.io/docs/alerting/latest/alertmanager/>`_ 
および `Grafana <https://grafana.com>`_ 展開を含む `Prometheus Operator <https://prometheus-operator.dev>`_  をインストールします。

このHelmチャートの展開用の構成ファイルは、KubernetesクラスターのEDB
Postgresのオブザーバビリティに関する役立つ初期設定を提供します。

インストール
^^^^^^^^^^^^

`Helm <https://helm.sh>`_ をまだインストールしていない場合は、
:ref:`instructions <Quickstart>` に従ってシステムにインストールしてください。

``prometheus-community``
Helmチャートリポジトリを追加し、提供するサンプル構成を使用して_Kube
Prometheus stack_をインストールする必要があります。

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

.. code:: sh

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

   helm upgrade --install \
     -f https://raw.githubusercontent.com/EnterpriseDB/docs/main/product_docs/docs/postgres_for_kubernetes/1/samples/monitoring/kube-stack-config.yaml \
     prometheus-community \
     prometheus-community/kube-prometheus-stack

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

- Prometheusインストールから、 **any** ``PodMonitor``
  :ref:`_monitoring_ <Monitoring>` を参照してください。

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

..  Seealso::
   上記のコマンドの詳細については、 `helm install <https://helm.sh/docs/helm/helm_install/>`_ を参照してください。

ドキュメント。

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

.. code:: sh

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

および一連のサービス

.. code:: sh

   % 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での表示
^^^^^^^^^^^^^^^^^^

この時点で、モニタリングがアクティブ化された状態で展開されたKubernetesクラスターのEDB
Postgresは、 Prometheusを介して観察可能です。

たとえば、\ ``PodMonitor`` を有効にした単純なクラスターを展開できます。

.. code:: sh

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

     storage:
       size: 1Gi

     monitoring:
       enablePodMonitor: true
   EOF

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

.. code:: sh

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

次に、次のPrometheusコンソールにローカルにアクセスします。 `http://localhost:9090/ <http://localhost:9090/>`_ 

モニタリングスタックが正常に展開され、\ ``enablePodMonitor: true``
を使用したクラスターがあると仮定すると、KubernetesクラスターのEDB
Postgresに関連する一連のメトリックを見つける必要があります。詳細については、
:ref:`_monitoring section_ <Monitoring>` を参照してください。

.. figure:: /images/prometheus-local.png
   :width: 70% 
   :alt: local prometheus

   local prometheus

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

.. code:: sh

   kubectl apply -f \
     https://raw.githubusercontent.com/EnterpriseDB/docs/main/product_docs/docs/postgres_for_kubernetes/1/samples/monitoring/prometheusrule.yaml

デフォルトのアラートが表示されます。

.. code:: sh

   % kubectl get prometheusrules
   NAME                                                       AGE
   postgresql-operator-default-alerts                                        3m27s

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

Grafanaダッシュボード
^^^^^^^^^^^^^^^^^^^^^

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

ポートフォワードができます。

.. code:: sh

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

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

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

KubernetesのEDB Postgresは、公式
`Helm chart <https://github.com/cloudnative-pg/charts>`_ の一部としてGrafanaのデフォルトのダッシュボードを提供します。
`grafana-dashboard.json <https://github.com/cloudnative-pg/grafana-dashboards/blob/main/charts/cluster/grafana-dashboard.json>`_ をダウンロードすることもできます。

ファイルを作成し、GUIを介して手動でインポートします。

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

.. figure:: /images/grafana-local.png
   :width: 70% 
   :alt: local grafana

   local grafana

ローカル設定では、PrometheusとGrafanaは、モニタリング機能を有効にして展開されたKubernetesクラスターのEDB
Postgresを自動的に検出および監視するように構成されていることに注意してください。
