AWS 上の OpenShift Container Platform での Confluent Platform

Confluent Operator では、Confluent Platform を Kubernetes や OpenShift にクラウドネイティブのステートフルなコンテナーアプリケーションとしてデプロイおよび管理できます。OpenShift 製品シリーズの代表製品である OpenShift Container Platform(OCP)は、Red Hat Enterprise Linux が基盤の Kubernetes でオーケストレーションおよび管理される Docker コンテナーを軸に構築された、サービスとしてのオンプレミスプラットフォームです。全体をパブリッククラウドとしてデプロイすることもできます。

前提条件

このセクションでは、Confluent Platform を AWS 上の OCP にデプロイするために必要な以下の前提条件について詳しく見ていきます。

  • AWS アカウントへのアクセス
  • Red Hat Network(RHN)へのアクセス
  • OCP SDK( oc コマンドラインユーティリティ)と OpenShift インストーラー に関する知識
  • Confluent Operator

AWS クラウドアカウント

AWS へのアクセスに使用するのが root ログイン(非推奨)か SSO かを問わず、ユーザーを作成し、( aws configure コマンドで)AWS アクセスキー ID と AWS シークレットアクセスキーを使用して、使用するシェル上でセットアップを行う必要があります。

仮想マシンを作成し、Route53 サービスにアクセスするには、AWS アカウントに適切なロールが必要です。このチュートリアルでは example.com を使用しますが、稼動している実在のドメインを持っていることが重要です。

aws configure コマンドの典型的な出力を以下に示します。

aws configure

AWS Access Key ID [****************OOPS]:
AWS Secret Access Key [****************NOOP]:
Default region name [None]:
Default output format [json]:
Copy

Red Hat Network アカウント

OCP にアクセスするには Red Hat Network のサブスクリプションが必要です。Red Hat のウェブサイト にログインするとアクセスできます。

OCP の SDK とインストーラー

OCP の SDK を ウェブサイト からダウンロードしてインストールします。このリンクは MacOS 用です。

インストールしたディレクトリを $PATH に追加します。

OCP の SDK をインストールすると、OpenShift インストーラーと OpenShift コマンドラインユーティリティ( oc )が使用できるようになります。

Confluent Operator

Confluent Operator バンドル をダウンロードして展開します。

OCP クラスター

OCP の構成

  1. Red Hat のウェブサイト にログインします。

  2. ログインしたら、Clusters -> Create Cluster -> Red Hat OpenShift Container Platform に移動します。

  3. OCP のデプロイ先となるクラウドを選択します。このチュートリアルでは、AWS にデプロイします。AWS タイルをクリックします。

  4. Installer-provisioned infrastructure をクリックします。これが OCP をデプロイする場合の推奨オプションです。

  5. Copy pull secret をクリックします。

  6. シェルに切り替え、インストーラーを実行します。

    mkdir oc-aws-demo
    
    openshift-install create install-config --dir=oc-aws-demo/
    
    Copy

    以下の手順で示されているようなオプションの選択を求められます。

  7. プラットフォームとして aws を選択し、Enter キーを押します。

    ? Platform  [Use arrows to move, enter to select, type to filter, ? for more help]
    > aws
      azure
      gcp
      openstack
      ovirt
    
    Copy
  8. OCP クラスターをデプロイするリージョンを選択します。

    ? Platform aws
    
    INFO Credentials loaded from the "default" profile in file "<your home directory>/.aws/credentials"
    
    ? Region  [Use arrows to move, enter to select, type to filter, ? for more help]
      eu-west-3 (Paris)
      me-south-1 (Bahrain)
      sa-east-1 (São Paulo)
    > us-east-1 (N. Virginia)
      us-east-2 (Ohio)
      us-west-1 (N. California)
      us-west-2 (Oregon)
    
    Copy
  9. この目的で作成された基本ドメインを選択するか、example.com などの既存の基本ドメインを選択します。

    ./openshift-install create install-config --dir=oc-aws-demo/
    
    ? Platform aws
    INFO Credentials loaded from the "default" profile in file "<your home directory>/.aws/credentials"
    ? Region us-east-1
    
    ? Base Domain  [Use arrows to move, enter to select, type to filter, ? for more help]
    > example.com
    
    Copy
  10. OCP クラスターに名前を付けます。たとえば、ocp-us-east-1-k8s-demo-cluster とします。

    openshift-install create install-config --dir=oc-aws-demo/
    ? Platform aws
    INFO Credentials loaded from the "default" profile in file "<your home directory>/.aws/credentials"
    ? Region us-east-1
    ? Base Domain example.com
    ? Cluster Name [? for help] ocp-us-east-1-k8s-demo-cluster
    
    Copy
  11. プルシークレットをプルして、構成の作成を完了します。

    openshift-install create install-config --dir=oc-aws-demo/
    ? Platform aws
    INFO Credentials loaded from the "default" profile in file "<your home directory>/.aws/credentials"
    ? Region us-east-1
    ? Base Domain example.com
    ? Cluster Name ocp-us-east-1-k8s-demo-cluster
    ? Pull Secret [? for help]
    **********************************
    **********************************
    **********************************
    
    Copy
  12. これで、インストーラーコマンドの引数として渡された oc-aws-demo ディレクトリに、install-config.yaml ファイルが作成されます。

  13. 使用するデプロイシナリオに合わせて install-config.yaml ファイルをアップデートします。

    このチュートリアルでは、CPU やメモリーの少ない AWS インスタンスを選択します。

    compute:
    - architecture: amd64
      hyperthreading: Enabled
      name: worker
      platform:
        aws:
          types: m5.xlarge
      replicas: 3
    
    Copy

    install-config.yaml パラメーターの微調整については、こちら を参照してください。

OCP クラスターのデプロイ

  1. OCP クラスターをデプロイします。

    openshift-install create cluster --dir=oc-aws-demo/
    
    Copy

    デプロイには 30 ~ 35 分ほどかかります。以下のような出力が表示されます。

    INFO Install complete!
    
    INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=~/Documents/work/k8s/oc/oc-aws-demo/auth/kubeconfig'
    
    INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp-us-east-1-k8s-demo-cluster.example.com
    
    INFO Login to the console with user: kubeadmin, password: XXXXXXXxxxxXXXXxxxx
    
    Copy
  2. OCP クラスターが正常にデプロイされ、INFO Install complete! メッセージが表示されたら、以下のコマンドを使用してクラスターにアクセスします。

    以下のコマンドでは、前のステップでコマンドを ~/Documents/work/k8s/oc/ ディレクトリから実行したと想定されています。

    export KUBECONFIG=~/Documents/work/k8s/oc/oc-aws-demo/auth/kubeconfig
    
    oc get nodes
    
    Copy

    以下のような出力が表示されます。

    NAME                           STATUS    ROLES     AGE       VERSION
    ip-10-0-135-239.ec2.internal   Ready     master    24h       v1.17.1
    ip-10-0-140-27.ec2.internal    Ready     worker    23h       v1.17.1
    ip-10-0-144-235.ec2.internal   Ready     worker    23h       v1.17.1
    ip-10-0-151-53.ec2.internal    Ready     master    24h       v1.17.1
    ip-10-0-166-231.ec2.internal   Ready     worker    23h       v1.17.1
    ip-10-0-168-131.ec2.internal   Ready     master    24h       v1.17.1
    
    Copy

OCP のインストールはこれで完了です。次のステップに進んで、Confluent Operator をデプロイします。

Confluent Operator と Confluent Platform

以降のセクションのステップでは、以下が想定されています。

  • Helm バージョン 3

    以下のコマンドを実行して、Helm のバージョンを確認します。

    helm version
    
    Copy
  • コマンドは以下のディレクトリから発行されます。

    ~/Documents/work/k8s/oc/550/helm
    
    Copy

新しいプロジェクトの作成

このチュートリアル用のプロジェクトを作成します。OpenShift プロジェクトは、追加アノテーションを持つ Kubernetes 名前空間です。helm コマンドを実行する際には、--namespace フラグでプロジェクト名を渡します。

oc new-project confluent
Copy

Confluent Operator のデプロイ

最新のブログで使用されているサンプル oc-aws.yaml は、こちら で入手できます。

  1. サンプルファイル oc-aws.yamlproviders/oc-aws.yaml にコピーします。

  2. ドメイン名などの構成に合わせて、providers/oc-aws.yaml ファイルをカスタマイズします。

  3. Confluent Operator をインストールします。

    helm install operator ./confluent-operator \
      --values providers/oc-aws.yaml \
      --namespace confluent \
      --set operator.enabled=true
    
    Copy

OpenShift セキュリティコンテキストの設定

customUID ファイルを使用して、OpenShift セキュリティコンテキストを設定します。これはクラスター全体の設定です。

oc create -f scripts/openshift/customUID/scc.yaml
Copy

ZooKeeper のデプロイ

helm install zookeeper ./confluent-operator \
  --values providers/oc-aws.yaml \
  --namespace confluent  \
  --set zookeeper.enabled=true
Copy

前のステップで指定した適切なポッドセキュリティコンテキストが正しく設定されたことを確認します。

  1. ZooKeeper シェルを起動します。

    oc exec -ti zookeeper-0 bash
    
    Copy
  2. ZooKeeper シェルで、以下のコマンドを実行します。

    id
    
    Copy

    以下のような出力が返されます。

    uid=1002580000(1002580000) gid=0(root) groups=0(root),1002580000
    
    Copy

Kafka ブローカーのデプロイ

helm install kafka-oc-demo ./confluent-operator \
  --values providers/oc-aws.yaml \
  --namespace confluent \
  --set kafka.enabled=true
Copy

Schema Registry のデプロイ

helm install schemaregistry ./confluent-operator \
  --values providers/oc-aws.yaml \
  --namespace confluent \
  --set schemaregistry.enabled=true
Copy

Control Center のデプロイ

helm install controlcenter ./confluent-operator \
  --values providers/oc-aws.yaml \
  --namespace confluent \
  --set controlcenter.enabled=true
Copy

Connect のデプロイ

helm install connectors ./confluent-operator \
  --values providers/oc-aws.yaml  \
  --namespace confluent \
  --set connect.enabled=true
Copy

デプロイの検証

次のコマンドを実行して、デプロイを検証します。

oc get pods
Copy

出力は以下のようになります。

NAME                        READY     STATUS    RESTARTS   AGE
cc-operator-fcb87457-7d6pn  1/1       Running   0          2d20h
connectors-0                1/1       Running   0          19m
controlcenter-0             1/1       Running   0          25h
kafka-oc-demo-0             1/1       Running   0          2d8h
kafka-oc-demo-1             1/1       Running   0          2d8h
kafka-oc-demo-2             1/1       Running   0          2d7h
schemaregistry-0            1/1       Running   0          25h
schemaregistry-1            1/1       Running   0          25h
zookeeper-0                 1/1       Running   0          2d19h
zookeepe                    1/1       Running   0          2d19h
zookeeper-2                 1/1       Running   0          2d19h
Copy

Confluent Control Center へのアクセス

Control Center へのアクセスにエラスティックロードバランサー(elb)を使用できます。

Confluent Control Center のアドレスを取得するには、以下のコマンドを実行します。

oc get svc | grep control
Copy

出力には elb アドレスが以下のように示されます。

controlcenter                ClusterIP      None             <none>                                                                    9021/TCP,7203/TCP,7777/TCP
controlcenter-0-internal     ClusterIP      172.30.213.238   <none>                                                                    9021/TCP,7203/TCP,7777/TCP
controlcenter-bootstrap-lb   LoadBalancer   172.30.250.158   ab7ece27b585c4f238616abd5e2c857c-1775407194.us-east-1.elb.amazonaws.com   80:32275/TCP
Copy

elb アドレスを使用して Confluent Control Center にアクセスします。

ab7ece27b585c4f238616abd5e2c857c-1775407194.us-east-1.elb.amazonaws.com
Copy

Control Center ログインのデフォルトのユーザー名とパスワードは admin/Developer1 です。

デプロイのテスト

外部および内部クライアントが Apache Kafka® にアクセスするための詳細な手順を取得するには、次のコマンドを実行します。

helm status kafka-oc-demo
Copy
  1. クライアントの JAAS 構成の取得

    kubectl  -n confluent get kafka kafka-oc-demo -ojsonpath='{.status.internalClient}'
    
    Copy
  2. いずれかの Kafka ポッドで bash セッションを開始します。

    oc exec -ti kafka-oc-demo-0 bash
    
    Copy
  3. ポッドに kafka.properties ファイルを作成し、ステップ #1 で取得された内容をファイルに手動でコピーします。以下に例を示します。

    cat << EOF > kafka.properties
    bootstrap.servers=kafka:9071
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="test" password="test123";
    sasl.mechanism=PLAIN
    security.protocol=SASL_PLAINTEXT
    EOF
    
    Copy
  4. トピックを作成します。

    kafka-topics --create \
      --topic demo_topic \
      --command-config kafka.properties \
      --partitions 6 \
      --replication-factor 3 \
      --bootstrap-server kafka-oc-demo:9071
    
    Copy
  5. トピックにデータを生成します。

    kafka-producer-perf-test \
      --topic demo_topic \
      --producer.config kafka.properties \
      --record-size 4096 \
      --throughput -1 \
      --num-records 10000
    
    Copy
  6. データを消費します。

    kafka-consumer-perf-test \
      --topic demo_topic \
      --broker-list kafka-oc-demo:9071 \
      --messages 10000 \
      --consumer.config kafka.properties
    
    Copy

クリーンアップ

  1. confluent プロジェクトに作成した Confluent Operator、ZooKeeper、Kafka ブローカー、Confluent Control Center などのアセットをすべてクリーンアップします。

    oc delete project confluent
    
    Copy
  2. OCP クラスターを破棄します。

    openshift-install destroy cluster --dir=oc-aws-demo/
    
    Copy