Installing EDB Postgres AI for ClickHouse on Kubernetes#

EDB ClickHouse Kubernetesオペレーターは、KubernetesでのClickHouse展開を管理し、クラスターのプロビジョニング、構成、アップグレード、およびスケーリングを処理します。

Helmチャートを介してインストールされると、以下を作成します。

  • 4つのカスタムリソース定義CRD

  • clickhouseinstallations 略称chi
  • clickhouseinstallationtemplates

  • clickhouseoperatorconfigurations

  • clickhousekeeperinstallations 略称chk

  • オペレーターおよびメトリックエクスポーターサイドカー2/2 Ready を実行する展開。

  • オペレーターがクラスター全体でClickHouseリソースを管理するために必要なサービスアカウント、ロール、クラスターロール、およびバインディング。

前提条件#

  • 実行中のKubernetesクラスター1.26以降

  • kubectl はクラスターと通信するように構成

  • Helm 3.8以降

  • clickhouse リポジトリへの読み取りアクセスを持つEDB Cloudsmithアカウント。そこから2つの資格情報を使用します。

  • 資格トークン — HelmチャートリポジトリのURLに埋め込まれています。 https://www.enterprisedb.com/accounts/loginにあるEDBアカウントから取得します。

  • Cloudsmith APIキー — Kubernetesがdocker.enterprisedb.com からイメージをプルするときにDockerパスワードとして使用されます。 https://cloudsmith.io/user/settings/api/から取得しますEDB SSOを介してログインします。

イメージプルシークレットの作成#

Kubernetesがdocker.enterprisedb.com からEDBコンテナイメージをプルするには資格情報が必要です。オペレーターをインストールする名前空間にdocker-registry シークレットを作成します。

kubectl create namespace clickhouse
kubectl create secret docker-registry cs-pull \
  --namespace=clickhouse \
  --docker-server=docker.enterprisedb.com \
  --docker-username=<your-cloudsmith-username> \
  --docker-password=<your-cloudsmith-api-key>

Helmインストールでオペレーターポッドが独自のイメージをプルできるように、すべてのClickHouseInstallation ClickHouseポッドがedb-clickhouse-server をプルできるように、の両方でcs-pull を参照します。

オペレーターのインストール#

  1. EDB Helmリポジトリを追加します。 <entitlement-token> をEDBアカウントのトークンに置き換え、 <cs-repo> をリリースノートにリストされているEDB Cloudsmithリポジトリ名に置き換えます。

helm repo add edb \
  "https://dl.cloudsmith.io/<entitlement-token>/enterprisedb/<cs-repo>/helm/charts/"
helm repo update edb
  1. チャートをインストールします。 EDBリリースサフィックス-NedbM はSemVerプレリリースタグであり、helm search がデフォルトでこれらをフィルタリングするため、 --version を明示的に指定します。

helm upgrade --install clickhouse-operator \
  edb/edb-clickhouse-operator-chart \
  --version <operator-version> \
  --namespace clickhouse \
  --set imagePullSecrets[0].name=cs-pull
  1. オペレーターが実行されていることを確認します。

kubectl get pods -n clickhouse

オペレーターポッドは、約30秒以内に2/2 Ready を報告します。2つのコンテナは、オペレーターとメトリックエクスポーターサイドカーです。

  1. 登録されたCRDを確認します。

kubectl get crds | grep altinity

上記の4つのCRDすべてが出力に表示されます。

ClickHouseクラスターの作成#

オペレーターはClickHouseInstallation リソースを監視し、実行中のClickHouseポッドにそれらを調整します。 clickhouse-installation.yaml という名前のファイルを作成します。

apiVersion: clickhouse.altinity.com/v1
kind: ClickHouseInstallation
metadata:
  name: my-clickhouse
  namespace: clickhouse
spec:
  configuration:
    clusters:
      - name: my-cluster
        templates:
          podTemplate: edb-clickhouse
        layout:
          shardsCount: 1
          replicasCount: 1
  templates:
    podTemplates:
      - name: edb-clickhouse
        spec:
          imagePullSecrets:
            - name: cs-pull
          containers:
            - name: clickhouse
              image: docker.enterprisedb.com/<cs-repo>/edb-clickhouse-server:<server-version>
              ports:
                - name: http
                  containerPort: 8123
                - name: client
                  containerPort: 9000

imagePullSecrets はポッドテンプレートの内部にあることに注意してください。これは、オペレーターポッド自分自身ではなく、オペレーターが作成するClickHouseポッドに適用されます。どちらもそれが必要です。

<server-version> は、edb-clickhouse-server のDockerイメージタグです。 Dockerタグには、RPMパッケージが使用する-NedbM サフィックスがありません。上流バージョンのみ 26.3.12.1 など。オペレーターバージョンと互換性のあるバージョンについては、リリースノートを確認してください。

リソースを適用し、クラスターが起動するのを確認します。

kubectl apply -f clickhouse-installation.yaml
kubectl get chi -n clickhouse -w

STATUS がCompleted を表示するまで待ちます。これには約60〜90秒かかります。

ClickHouseに接続する#

オペレーターは、クラスターごとにヘッドレスサービスを作成します。ポート転送を使用してサービス名を介して接続します。

kubectl port-forward -n clickhouse svc/clickhouse-my-clickhouse 9000:9000

次に、別のターミナルで

clickhouse-client --host 127.0.0.1 --port 9000

または、クラスター内でワンショットクエリーを実行します。

kubectl exec -it -n clickhouse \
  "$(kubectl get pods -n clickhouse -l clickhouse.altinity.com/chi=my-clickhouse -o name | head -1)" \
  -- clickhouse-client --query "SELECT version()"

返されたバージョンには(EDB Build) サフィックスが含まれ、EDBディストリビューションを実行していることを確認します。

アンインストール#

kubectl delete chi my-clickhouse -n clickhouse        # operator deletes pods and services
helm uninstall clickhouse-operator -n clickhouse      # removes the operator Deployment; CRDs survive
kubectl delete secret cs-pull -n clickhouse           # optional

CRDは、helm uninstall によって意図的に削除されません。 CRDを削除すると、他の名前空間のものも含む、すべての依存ClickHouseInstallation が削除されます。クラスター内に他のオペレーターインスタンスがない場合にのみそれらを削除します。

kubectl delete crd \
  clickhouseinstallations.clickhouse.altinity.com \
  clickhouseinstallationtemplates.clickhouse.altinity.com \
  clickhouseoperatorconfigurations.clickhouse.altinity.com \
  clickhousekeeperinstallations.clickhouse-keeper.altinity.com