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]:
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 の構成¶
Red Hat のウェブサイト にログインします。
ログインしたら、Clusters -> Create Cluster -> Red Hat OpenShift Container Platform に移動します。
OCP のデプロイ先となるクラウドを選択します。このチュートリアルでは、AWS にデプロイします。AWS タイルをクリックします。
Installer-provisioned infrastructure をクリックします。これが OCP をデプロイする場合の推奨オプションです。
Copy pull secret をクリックします。
シェルに切り替え、インストーラーを実行します。
mkdir oc-aws-demo openshift-install create install-config --dir=oc-aws-demo/
以下の手順で示されているようなオプションの選択を求められます。
プラットフォームとして
aws
を選択し、Enter キーを押します。? Platform [Use arrows to move, enter to select, type to filter, ? for more help] > aws azure gcp openstack ovirt
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)
この目的で作成された基本ドメインを選択するか、
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
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
プルシークレットをプルして、構成の作成を完了します。
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] ********************************** ********************************** **********************************
これで、インストーラーコマンドの引数として渡された
oc-aws-demo
ディレクトリに、install-config.yaml
ファイルが作成されます。使用するデプロイシナリオに合わせて
install-config.yaml
ファイルをアップデートします。このチュートリアルでは、CPU やメモリーの少ない AWS インスタンスを選択します。
compute: - architecture: amd64 hyperthreading: Enabled name: worker platform: aws: types: m5.xlarge replicas: 3
install-config.yaml
パラメーターの微調整については、こちら を参照してください。
OCP クラスターのデプロイ¶
OCP クラスターをデプロイします。
openshift-install create cluster --dir=oc-aws-demo/
デプロイには 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
OCP クラスターが正常にデプロイされ、
INFO Install complete!
メッセージが表示されたら、以下のコマンドを使用してクラスターにアクセスします。以下のコマンドでは、前のステップでコマンドを
~/Documents/work/k8s/oc/
ディレクトリから実行したと想定されています。export KUBECONFIG=~/Documents/work/k8s/oc/oc-aws-demo/auth/kubeconfig oc get nodes
以下のような出力が表示されます。
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
OCP のインストールはこれで完了です。次のステップに進んで、Confluent Operator をデプロイします。
Confluent Operator と Confluent Platform¶
以降のセクションのステップでは、以下が想定されています。
Helm バージョン 3
以下のコマンドを実行して、Helm のバージョンを確認します。
helm version
コマンドは以下のディレクトリから発行されます。
~/Documents/work/k8s/oc/550/helm
新しいプロジェクトの作成¶
このチュートリアル用のプロジェクトを作成します。OpenShift プロジェクトは、追加アノテーションを持つ Kubernetes 名前空間です。helm
コマンドを実行する際には、--namespace
フラグでプロジェクト名を渡します。
oc new-project confluent
Confluent Operator のデプロイ¶
最新のブログで使用されているサンプル oc-aws.yaml
は、こちら で入手できます。
サンプルファイル
oc-aws.yaml
をproviders/oc-aws.yaml
にコピーします。ドメイン名などの構成に合わせて、
providers/oc-aws.yaml
ファイルをカスタマイズします。Confluent Operator をインストールします。
helm install operator ./confluent-operator \ --values providers/oc-aws.yaml \ --namespace confluent \ --set operator.enabled=true
OpenShift セキュリティコンテキストの設定¶
customUID ファイルを使用して、OpenShift セキュリティコンテキストを設定します。これはクラスター全体の設定です。
oc create -f scripts/openshift/customUID/scc.yaml
ZooKeeper のデプロイ¶
helm install zookeeper ./confluent-operator \
--values providers/oc-aws.yaml \
--namespace confluent \
--set zookeeper.enabled=true
前のステップで指定した適切なポッドセキュリティコンテキストが正しく設定されたことを確認します。
ZooKeeper シェルを起動します。
oc exec -ti zookeeper-0 bash
ZooKeeper シェルで、以下のコマンドを実行します。
id
以下のような出力が返されます。
uid=1002580000(1002580000) gid=0(root) groups=0(root),1002580000
Kafka ブローカーのデプロイ¶
helm install kafka-oc-demo ./confluent-operator \
--values providers/oc-aws.yaml \
--namespace confluent \
--set kafka.enabled=true
Schema Registry のデプロイ¶
helm install schemaregistry ./confluent-operator \
--values providers/oc-aws.yaml \
--namespace confluent \
--set schemaregistry.enabled=true
Control Center のデプロイ¶
helm install controlcenter ./confluent-operator \
--values providers/oc-aws.yaml \
--namespace confluent \
--set controlcenter.enabled=true
Connect のデプロイ¶
helm install connectors ./confluent-operator \
--values providers/oc-aws.yaml \
--namespace confluent \
--set connect.enabled=true
デプロイの検証¶
次のコマンドを実行して、デプロイを検証します。
oc get pods
出力は以下のようになります。
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
Confluent Control Center へのアクセス¶
Control Center へのアクセスにエラスティックロードバランサー(elb)を使用できます。
Confluent Control Center のアドレスを取得するには、以下のコマンドを実行します。
oc get svc | grep control
出力には 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
elb アドレスを使用して Confluent Control Center にアクセスします。
ab7ece27b585c4f238616abd5e2c857c-1775407194.us-east-1.elb.amazonaws.com
Control Center ログインのデフォルトのユーザー名とパスワードは admin
/Developer1
です。
デプロイのテスト¶
外部および内部クライアントが Apache Kafka® にアクセスするための詳細な手順を取得するには、次のコマンドを実行します。
helm status kafka-oc-demo
クライアントの JAAS 構成の取得
kubectl -n confluent get kafka kafka-oc-demo -ojsonpath='{.status.internalClient}'
いずれかの Kafka ポッドで bash セッションを開始します。
oc exec -ti kafka-oc-demo-0 bash
ポッドに
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
トピックを作成します。
kafka-topics --create \ --topic demo_topic \ --command-config kafka.properties \ --partitions 6 \ --replication-factor 3 \ --bootstrap-server kafka-oc-demo:9071
トピックにデータを生成します。
kafka-producer-perf-test \ --topic demo_topic \ --producer.config kafka.properties \ --record-size 4096 \ --throughput -1 \ --num-records 10000
データを消費します。
kafka-consumer-perf-test \ --topic demo_topic \ --broker-list kafka-oc-demo:9071 \ --messages 10000 \ --consumer.config kafka.properties
クリーンアップ¶
confluent
プロジェクトに作成した Confluent Operator、ZooKeeper、Kafka ブローカー、Confluent Control Center などのアセットをすべてクリーンアップします。oc delete project confluent
OCP クラスターを破棄します。
openshift-install destroy cluster --dir=oc-aws-demo/