Confluent for Kubernetes のデプロイ

Confluent for Kubernetes (CFK)バンドルには、Confluent Platform を Kubernetes クラスターにデプロイするための Helm チャート、テンプレート、スクリプトが用意されています。

以下のいずれかの方法を使用して CFK をデプロイできます。

CFK と連携動作するためのオプションの Confluent プラグインは、以下のいずれかの方法でインストールできます。

Confluent の Helm リポジトリからの Confluent for Kubernetes のデプロイ

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

    helm repo add confluentinc https://packages.confluent.io/helm
    
    helm repo update
    
  2. デフォルトの構成を使用して CFK をインストールします。

    helm upgrade --install confluent-operator \
      confluentinc/confluent-for-kubernetes \
      --namespace <namespace>
    

ダウンロードバンドルを使用した Confluent for Kubernetes のデプロイ

  1. 次のコマンドを使用して CFK バンドルをダウンロードし、ダウンロードしたバンドルを展開します。

    curl -O https://confluent-for-kubernetes.s3-us-west-1.amazonaws.com/confluent-for-kubernetes-2.3.1.tar.gz
    
  2. CFK バンドルをダウンロードした helm サブディレクトリから CFK をインストールします。

    helm upgrade --install confluent-operator \
      ./confluent-for-kubernetes \
      --namespace <namespace>
    

カスタマイズした Confluent for Kubernetes のデプロイ

CFK の構成は、インストールまたはアップデート時にカスタマイズできます。CFK は helm を使用してインストールおよびアップデートされるため、CFK 構成のカスタマイズ方法は helm に従います。つまり、以下が可能です。

  • --values または -f フラグ経由で helm コマンドに渡すことができる構成値を YAML ファイルで設定する
  • --set--set-string、および --set-file フラグ経由で構成値を key=value ペアとして helm コマンドで直接設定する
  • 上記の 2 つの方法を組み合わせて、構成の一部を値ファイルで設定し、残りを、--set フラグを使用してコマンドラインで設定する

これらのフラグの詳細については、Helm のドキュメントを参照してください。

CFK の values.yaml ファイルを使用して、カスタマイズされた Confluent for Kubernetes をデプロイするには、以下の手順を実行します。
  1. デフォルトの values.yaml ファイルを見つけます。

    • Helm リポジトリを使用して CFK をデプロイする場合は、CFK チャートをプルします。

      mkdir -p <CFK-home>
      
      helm pull confluentinc/confluent-for-kubernetes \
        --untar \
        --untardir=<CFK-home> \
        --namespace <namespace>
      

      values.yaml ファイルは <CFK-home>/confluent-for-kubernetes ディレクトリにあります。

    • ダウンロードバンドルを使用して CFK をデプロイしている場合は、バンドルをダウンロードした場所の helm/confluent-for-kubernetes ディレクトリに values.yaml ファイルがあります。

  2. values.yaml ファイルのコピーを作成して、CFK の構成をカスタマイズします。デフォルトの values.yaml ファイルは編集しないでください。任意の場所にファイルのコピーを保存します。この場所を <path-to-values-file> とします。

  3. カスタマイズした構成を使用して CFK をインストールします。

    helm upgrade --install confluent-operator \
      confluentinc/confluent-for-kubernetes \
      --values <path-to-values-file> \
      --namespace <namespace>
    
helm upgrade コマンドを使用して、カスタマイズされた Confluent for Kubernetes をデプロイするには、以下の手順を実行します。

--set フラグを使用して、次のように構成オプションを指定します。

helm upgrade --install confluent-operator \
  confluentinc/confluent-for-kubernetes \
  --set <setting1>=<value1> \
  --set <setting2>=<value2> \
  ...
  --namespace <namespace>

すべての名前空間で Confluent Platform コンポーネントを管理するための CFK の構成

デフォルトで CFK は、CFK 自体がデプロイされている同じ Kubernetes 名前空間のみで、Confluent Platform コンポーネントクラスターおよびリソースをデプロイし、管理します。すべての名前空間で CFK が Confluent Platform リソースを管理できるようにするには、インストールコマンドで namespaced 構成プロパティを false に設定します。

helm upgrade --install confluent-operator \
  confluentinc/confluent-for-kubernetes \
  --set namespaced=false \
  --namespace <namespace>

または、上記のように values.yaml ファイルをアップデートして、次のプロパティを設定します。

namespaced: false

ロールとロールバインディングを作成しない Confluent for Kubernetes のデプロイ

デフォルトでは利便性のために、helm を使用して CFK をデプロイする際に、CFK が機能するために必要な Kubernetes のロールおよびロールバインディング(または、クラスターロールとクラスターロールバインディング)も helm インストールによって同時に作成されます。ただし、CFK のデプロイを担当するユーザーに Kubernetes RBAC アクセス許可を管理する権限がない可能性があり、その場合は helm インストールは失敗します。Kubernetes RBAC アクセス許可を管理する責任者が Kubernetes クラスター管理者のみである可能性もあります。このような状況では、Kubernetes クラスター管理者が、必要な RBAC リソースを事前に作成しておく必要があります(「Confluent Platform 用の Kubernetes クラスターの準備」を参照)。helm に RBAC リソースの再作成をスキップさせるには、インストールコマンドに --set rbac=false を追加します。

helm upgrade --install confluent-operator \
  confluentinc/confluent-for-kubernetes \
  --set rbac=false \
  --namespace <namespace>

または、上記のように values.yaml ファイルをアップデートして、次のプロパティを設定します。

rbac: false

カスタムサービスアカウントを指定した Confluent for Kubernetes のデプロイ

CFK を管理するカスタムサービスアカウントを指定するには、次のようにインストールコマンドに --set serviceAccount.create=false --set serviceAccount.name=<name> を追加します。

helm upgrade --install confluent-operator \
  confluentinc/confluent-for-kubernetes \
  --set serviceAccount.create=false \
  --set serviceAccount.name=<service-account-name> \
  --namespace <namespace>

または、上記のように values.yaml ファイルをアップデートして、次のプロパティを設定します。

serviceAccount:
  create: false
  name: <service-account-name>

カスタムサービスアカウントを使用し、さらに rbac=false を設定した(つまり、ロールおよびロールバインディングが Kubernetes クラスター管理者によって事前に作成されている)場合は、<service-account-name>> が、事前に作成されたロールバインディングのサブジェクト名に必ず一致するようにする必要があります。

クラスターオブジェクトの削除から保護する Confluent for Kubernetes のデプロイ

注釈

この機能は早期アクセスの段階にあるため、開発環境でのみ使用してください。この機能を本稼働環境で使用することは想定されていません。

Confluent for Kubernetes (CFK)には、Confluent Platform クラスターの削除イベント向けの Validating Admission Webhook が用意されています。

このリリースの CFK では、CFK Webhook がデフォルトで無効になっています。

CFK には以下の Webhook が用意されています。

  • 永続ボリューム(PV)の回収ポリシーが Delete に設定されている場合にコンポーネントの削除を回避するための Webhook

    この Webhook は、ReclaimPolicy: Delete の PV で CR の削除リクエストをブロックします。この削除を回避しない場合、CR が削除された結果としてその PV が削除され、データが失われます。

    この Webhook は、永続ボリュームがあるコンポーネント、つまり ZooKeeper、Kafka、ksqlDB、Control Center のみに使用できます。

  • CFK StatefulSet の削除を回避するための Webhook

    Confluent Platform リソースを削除する場合、コンポーネントのカスタムリソース(CR)を削除するという方法が適切です。これは、CFK がこれらの削除イベントを監視しており、すべてを適切にクリーンアップするためです。StatefulSet が削除されると、意図しない PV の削除が発生し、データが失われる場合があります。

    この Webhook は、CFK の StatefulSet の削除リクエストをブロックします。

CFK デプロイの前提条件

Webhook を有効にした状態で CFK をデプロイする前に、TLS 証明書を作成して Kubernetes 名前空間にラベルを追加する必要があります。

TLS 証明書

Webhook を有効にするには、Webhook サーバーと Kubernetes API サーバーの間でセキュアな通信を実現するための TLS 証明書を準備する必要があります。

  1. Create signed TLS keys and certificates in the format as described in PEM 形式の TLS キーおよび証明書の提供. Provide the TLS Group 1 (ca.pem, server.pem, server-key.pem) or Group 3 (tls.crt, tls.key, ca.crt) certificates in the form of a secret or mounted using directoryPathInContainer.

    この証明書には、confluent-operator.<namespace>.svc という形式の SAN(Subject Alternative Name)が必要です。これは、CFK ポッドのデプロイ先である名前空間におけるサービスのクラスター内 DNS 名です。

  2. 前述した証明書を、以下のいずれかの方法で CFK ポッドに渡します。

    • Add the certificates to a Kubernetes secret and put them in the namespace that the CFK pod is getting deployed in.
    • Mount the certificates using the Directory Path in Container feature. All certs must be in the same directory.
Kubernetes メタデータラベル

CFK をバージョン 1.21 未満の Kubernetes にデプロイする場合、Webhook がリクエストを検証する必要があるすべての名前空間に kubernetes.io/metadata.name ラベルを設定します。

Kubernetes 1.21 以降では、このラベルは自動的に設定されます。詳細については、「Automatic labeling」を参照してください。

  1. Confluent Platform のデプロイ先である名前空間のラベルをチェックします。

    kubectl get namespace <namespace> --show-labels
    

    出力例:

    NAME       STATUS   AGE   LABELS
    operator   Active   48d   <none>
    
  2. kubernetes.io/metadata.name ラベルを名前空間の名前に設定します。

    kubectl label namespace <namespace> kubernetes.io/metadata.name=<namespace>
    
  3. 検証します。

    kubectl get namespace <namespace> --show-labels
    

    以下に出力例を示します。

    NAME       STATUS   AGE   LABELS
    operator   Active   48d   kubernetes.io/metadata.name=operator
    

Webhook の有効化と CFK のデプロイ

helm の値を使用して Validating Webhook を有効または無効にします。

前述 の説明に従って values.yaml ファイルをアップデートし、以下のプロパティを設定します。

webhooks:
  enabled: true                  --- [1]
  tls:                           --- [2]
    secretRef:
    directoryPathInContainer:
  • [1] CFK Webhook を有効にする場合に必須です。
  • [2] 「TLS 証明書」で作成した値 secretRef または directoryPathInContainer を指定します。

Webhook の無効化

Webhook を有効にした状態で CFK をデプロイした後で、名前空間またはコンポーネントの CR に以下のラベルを適用することで、名前空間またはコンポーネントレベルで CFK Webhook を無効にできます。

  • すべての CFK 検証 Webhook の無効化:

    confluent-operator.webhooks.platform.confluent.io/disable: "true"
    
  • StatefulSet の削除を検証する Webhook の無効化:

    confluent-operator.webhooks.platform.confluent.io/allow-statefulset-deletion: "true"
    

    このラベルは CR レベルでのみ適用されます。

  • PV の回収ポリシーに関する CR の削除を検証する Webhook の無効化:

    confluent-operator.webhooks.platform.confluent.io/allow-pv-deletion: "true"
    

たとえば、PV が Delete モードである場合に Kafka の CR の削除を許可するには、以下のラベルを適用します。

kubectl -n operator label kafka kafka \
  confluent-operator.webhooks.platform.confluent.io/allow-pv-deletion="true"

Confluent プラグインのインストール

Confluent for Kubernetes (CFK)バンドルには、Confluent for Kubernetes とやり取りするための Confluent プラグインが含まれています。これは Linux、Windows、Darwin の 3 つの環境でサポートされます。ツールの詳細については、「Confluent プラグイン」を参照してください。

  1. Helm リポジトリを使用して CFK をデプロイしている場合は、「ダウンロードバンドルを使用した Confluent for Kubernetes のデプロイ」の最初の手順の説明に従って、CFK バンドルをダウンロードし、展開する必要があります。

    ダウンロードバンドルを使用した Confluent for Kubernetes のデプロイ を使用した場合は、この手順をスキップしてください。

  2. 使用しているクライアント環境である Linux、Windows、Mac OS(Darwin)に対応する kubectl プラグインを、クライアント環境のローカルの実行ディレクトリに展開します。Mac OS と Linux の場合、/usr/local/bin/ がそれに該当します。これによって、標準 CLI kubectl からプラグインが見えるようになります。

    tar -xvf kubectl-plugin/kubectl-confluent-<environment>-amd64.tar.gz \
       -C <local directory for the plugin>
    

    たとえば、Mac OS では次のように指定します。

    tar -xvf kubectl-plugin/kubectl-confluent-darwin-amd64.tar.gz \
       -C /usr/local/bin/
    

Krew を使用した Confluent プラグインのインストール

Krew は、kubectl のプラグインマネージャーです。Krew を使用して Confluent プラグインをインストールする場合は、以下の手順に従ってください。

  1. Krew のユーザーガイド の説明に従って Krew をインストールします。

  2. Helm リポジトリを使用して CFK をデプロイしている場合は、「ダウンロードバンドルを使用した Confluent for Kubernetes のデプロイ」の最初の手順の説明に従って、CFK バンドルをダウンロードし、展開する必要があります。

    ダウンロードバンドルを使用した Confluent for Kubernetes のデプロイ を使用した場合は、この手順をスキップしてください。

  3. CFK バンドルの展開先ディレクトリにある kubectl-plugin サブディレクトリに移動します。

  4. 次のコマンドを使用して Confluent プラグインをインストールします。

    kubectl krew install \
      --manifest=confluent-platform.yaml \
      --archive=kubectl-confluent-<environment>-amd64.tar.gz
    

    たとえば、プラグインを MacOS にインストールするには、次のように入力します。

    kubectl krew  install \
      --manifest=confluent-platform.yaml \
      --archive=kubectl-confluent-darwin-amd64.tar.gz