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以降

  • EDBサブスクリプショントークン、 EDB customer portal から入手できます。これは、HelmチャートリポジトリURLと、KubernetesがイメージをプルするときのDockerパスワードの両方で使用します。

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

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

export EDB_SUBSCRIPTION_TOKEN=<your-token>
kubectl create namespace clickhouse
kubectl create secret docker-registry cs-pull \
  --namespace=clickhouse \
  --docker-server=docker.enterprisedb.com \
  --docker-username=clickhouse \
  --docker-password="$EDB_SUBSCRIPTION_TOKEN"

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

注釈

ユーザー名は、プル元のリポジトリと一致する必要があります。 Dockerは、リポジトリを区別せずにレジストリをキーとした資格情報を保存するため、各ログインは以前のログインを上書きします。 docker.enterprisedb.com の別のリポジトリからイメージをプルする必要がある場合は、適切なユーザー名で再度ログインします。

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

  1. EDB Helmリポジトリを追加します。

helm repo add edb \
  "https://dl.cloudsmith.io/$EDB_SUBSCRIPTION_TOKEN/enterprisedb/clickhouse/helm/charts/"
helm repo update edb
  1. チャートをインストールします。

helm upgrade --install clickhouse-operator \
  edb/edb-clickhouse-operator-chart \
  --version 0.27.2+1edb1 \
  --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 clickhouse

上記の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/clickhouse/edb-clickhouse-server:26.3.13.31-1edb1
              ports:
                - name: http
                  containerPort: 8123
                - name: client
                  containerPort: 9000

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

オペレーターバージョンと互換性のあるedb-clickhouse-server バージョンのリリースノートを確認してください。

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

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

次に、別のターミナルで。 default ユーザーのデフォルトのパスワードはadmin123 です。

clickhouse-client --host 127.0.0.1 --port 9000 --password admin123

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

kubectl exec -it -n clickhouse \
  "$(kubectl get pods -n clickhouse -l clickhouse.altinity.com/chi=my-clickhouse -o name | head -1)" \
  -- clickhouse-client --password admin123 --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