第2章 Streams for Apache Kafka Console の Kafka クラスターへの接続
Streams for Apache Kafka Console を、Streams for Apache Kafka によって管理される Kafka クラスターと同じ OpenShift クラスターにデプロイします。Streams for Apache Kafka Console に付属のインストールファイルを使用します。
各 Kafka クラスターでは、クラスターのインストールに使用される Kafka
リソースの設定に以下が必要です。
- コンソールがクラスターに接続するための十分な権限。
- Prometheus が有効になっており、クラスターからメトリクスを取得できます。
-
Prometheus に適した形式でメトリクスをエクスポートするためのメトリクス設定 (
ConfigMap
経由)。
Streams for Apache Kafka Console では、KafkaUser
カスタムリソースとして設定された Kafka ユーザーが必要です。これは、コンソールが認証および認可されたユーザーとしてクラスターにアクセスするために必要です。
KafkaUser
認証および認可メカニズムを設定する場合、必ず同等の Kafka
設定と一致するようにしてください。
-
KafkaUser.spec.authentication
はKafka.spec.kafka.listeners[*].authentication
と一致します。 -
KafkaUser.spec.authorization
はKafka.spec.kafka.authorization
と一致します。
Kubernetes および Kafka クラスターからメトリクスをスクレイピングし、コンソールにメトリクスグラフを入力するには、Prometheus をインストールして設定する必要があります。
前提条件
-
インストール用に
system:admin
などのcluster-admin
ロールを持つ OpenShift ユーザーを用意する。 - OpenShift 4.12 - 4.15 クラスター。
- OpenShift クラスター上で実行されている Streams for Apache Kafka によって管理される Kafka クラスター。
- Prometheus Operator。これは、OpenShift モニタリング用にデプロイされた Operator とは別の Operator である必要があります。
-
oc
コマンドラインツールがインストールされ、OpenShift クラスターに接続するように設定されている。 コンソール内のセッション管理と認証のためのシークレットの値。
次のように OpenSSL TLS 管理ツールを使用して値を生成できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SESSION_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated SESSION_SECRET: $SESSION_SECRET" NEXTAUTH_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated NEXTAUTH_SECRET: $NEXTAUTH_SECRET"
SESSION_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated SESSION_SECRET: $SESSION_SECRET" NEXTAUTH_SECRET=$(LC_CTYPE=C openssl rand -base64 32) echo "Generated NEXTAUTH_SECRET: $NEXTAUTH_SECRET"
使用されるオプションのコマンドラインの説明は、
openssl help
を使用してください。
コンソールをインストールするためのファイルに加えて、Streams for Apache Kafka Operator、Prometheus Operator、Prometheus インスタンス、および Kafka クラスターをインストールするための事前設定済みファイルも、Streams for Apache Kafka Console のインストールアーティファクトに含まれています。この手順では、Operator がインストールされていることを前提としています。インストールファイルを使用すると、最も簡単にコンソールをセットアップして試すことができます。ただし、Streams for Apache Kafka と Prometheus の独自のデプロイメントを使用することもできます。
手順
Streams for Apache Kafka Console インストールアーティファクトをダウンロードして展開します。
アーティファクトは、Streams for Apache Kafka ソフトウェアダウンロードページ から入手できるインストールおよびサンプルファイルに含まれています。
ファイルには、コンソール、Kafka クラスター、および Prometheus に必要なデプロイメント設定が含まれています。
この Kafka 設定の例では、コンソールが Kafka クラスターに接続するために使用するルートリスナーを作成します。コンソールと Kafka クラスターは同じ OpenShift クラスターにデプロイされるため、ルートの代わりに Kafka クラスターの内部ブートストラップアドレスを使用できます。
Prometheus インストールファイルを適用して、コンソールに必要な設定を持つ Prometheus インスタンスを作成します。
console-prometheus-server.clusterrolebinding.yaml
ファイルの${NAMESPACE}
を編集して、Prometheus インスタンスがインストールされる namespace を使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow sed -i 's/${NAMESPACE}/'"my-project"'/g' <resource_path>/console-prometheus-server.clusterrolebinding.yaml
sed -i 's/${NAMESPACE}/'"my-project"'/g' <resource_path>/console-prometheus-server.clusterrolebinding.yaml
たとえば、この手順では、
my-project
namespace にインストールします。この設定では、Prometheus のロールとそのサービスアカウントをバインドします。次の順序でインストールファイルを適用して、Prometheus インスタンスを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Prometheus security resources Prometheus PodMonitor and Kubernetes scrape configurations Prometheus instance
# Prometheus security resources oc apply -n my-project -f <resource_path>/prometheus/console-prometheus-server.clusterrole.yaml oc apply -n my-project -f <resource_path>/prometheus/console-prometheus-server.serviceaccount.yaml oc apply -n my-project -f <resource_path>/prometheus/console-prometheus-server.clusterrolebinding.yaml # Prometheus PodMonitor and Kubernetes scrape configurations oc apply -n my-project -f <resource_path>/prometheus/kafka-resources.podmonitor.yaml oc apply -n my-project -f <resource_path>/prometheus/kubernetes-scrape-configs.secret.yaml # Prometheus instance oc apply -n my-project -f <resource_path>/prometheus/console-prometheus.prometheus.yaml
インスタンスの名前は
console-prometheus
で、コンソールに接続するためのサービスの URL はhttp://prometheus-operated.my-project.svc.cluster.local:9090
です (my-project
は namespace 名から取得されます)。注記console-prometheus
インスタンスは OpenShift クラスターの外部からアクセスする必要がないため、ルートはデプロイされません。
Kafka クラスターを作成してデプロイします。
KRaft モードで動作している Kafka クラスターでコンソールを使用している場合は、
console-kafka-metrics.configmap.yaml
ファイルでクラスターのメトリクス設定を更新します。- KRaft 関連のメトリクス設定のコメントを解除します。
- ZooKeeper 関連のメトリクスをコメントアウトします。
このファイルには、コンソールに必要なメトリクス設定が含まれています。
console-kafka-user1.kafkauser.yaml
ファイル内のKafkaUser
カスタムリソースを編集し、ACL タイプを追加して、コンソールから Kafka クラスターへの承認済みアクセスを付与します。少なくとも、Kafka ユーザーには次の ACL ルールが必要です。
-
cluster
リソースのDescribe
、DescribeConfigs
権限 -
すべての
topic
リソースに対するRead
、Describe
、DescribeConfigs
権限 すべての
group
リソースに対するRead
、Describe
権限ユーザー認証設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaUser metadata: name: console-kafka-user1 labels: strimzi.io/cluster: console-kafka spec: authentication: type: scram-sha-512 authorization: type: simple acls: - resource: type: cluster name: "" patternType: literal operations: - Describe - DescribeConfigs - resource: type: topic name: "*" patternType: literal operations: - Read - Describe - DescribeConfigs - resource: type: group name: "*" patternType: literal operations: - Read - Describe
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaUser metadata: name: console-kafka-user1 labels: strimzi.io/cluster: console-kafka spec: authentication: type: scram-sha-512 authorization: type: simple acls: - resource: type: cluster name: "" patternType: literal operations: - Describe - DescribeConfigs - resource: type: topic name: "*" patternType: literal operations: - Read - Describe - DescribeConfigs - resource: type: group name: "*" patternType: literal operations: - Read - Describe
-
console-kafka.kafka.yaml
ファイルを編集して、プレースホルダーを置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow sed -i 's/type: ${LISTENER_TYPE}/type: route/g' console-kafka.kafka.yaml sed -i 's/\${CLUSTER_DOMAIN}/'"<my_router_base_domain>"'/g' console-kafka.kafka.yaml
sed -i 's/type: ${LISTENER_TYPE}/type: route/g' console-kafka.kafka.yaml sed -i 's/\${CLUSTER_DOMAIN}/'"<my_router_base_domain>"'/g' console-kafka.kafka.yaml
このファイルには、Kafka クラスターを作成するための
Kafka
カスタムリソース設定が含まれています。これらのコマンドは次のことを実行します。
-
type: ${LISTENER_TYPE}
をtype: route
に置き換えます。この例ではroute
タイプを使用していますが、${LISTENER_TYPE}
をデプロイメントの有効なリスナータイプに置き換えることもできます。 -
${CLUSTER_DOMAIN}
を、ブートストラップおよび各ブローカーのサービスで使用されるルートリスナーホストを指定するために必要なベースドメインの値に置き換えます。デフォルトでは、route
リスナーのホストは OpenShift によって自動的に割り当てられます。ただし、ホストを指定して、割り当てられたルートをオーバーライドすることができます。
あるいは、サンプル設定を独自の Kafka デプロイメントにコピーする こともできます。
-
次の順序でインストールファイルを適用して、Kafka クラスターを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Metrics configuration Create the cluster Create a user for the cluster
# Metrics configuration oc apply -n my-project -f <resource_path>/console-kafka-metrics.configmap.yaml # Create the cluster oc apply -n my-project -f <resource_path>/console-kafka.kafka.yaml # Create a user for the cluster oc apply -n my-project -f <resource_path>/console-kafka-user1.kafkauser.yaml
独自の Kafka クラスターを使用している場合は、
console-kafka.kafka.yaml
の代わりに更新されたKafka
リソース設定を適用します。インストールファイルは、Kafka クラスターと、クラスターに接続するためにコンソールで必要な Kafka ユーザーおよびメトリクス設定を作成します。コンソールから監視する Kafka クラスターごとに、Kafka ユーザーとメトリクス設定が必要です。各 Kafka ユーザーには一意の名前が必要です。
Kafka クラスターが Prometheus インスタンスとは異なる namespace にある場合は、
kafka-resources.podmonitor.yaml
ファイルを変更してnamespaceSelector
を含めます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: kafka-resources labels: app: console-kafka-monitor spec: namespaceSelector: matchNames: - <kafka_namespace> # ...
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: kafka-resources labels: app: console-kafka-monitor spec: namespaceSelector: matchNames: - <kafka_namespace> # ...
これにより、Prometheus が Kafka Pod を監視できるようになります。
<kafka_namespace>
は、Kafka クラスターがデプロイされている実際の namespace に置き換えます。
デプロイメントのステータスを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n <my_console_namespace>
oc get pods -n <my_console_namespace>
出力には Operator とクラスターの準備状況が表示されます
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME READY STATUS RESTARTS strimzi-cluster-operator 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 console-kafka-kafka-1 1/1 Running 0 console-kafka-kafka-2 1/1 Running 0 prometheus-operator-... 1/1 Running 0 prometheus-console-prometheus 1/1 Running 0
NAME READY STATUS RESTARTS strimzi-cluster-operator 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 console-kafka-kafka-1 1/1 Running 0 console-kafka-kafka-2 1/1 Running 0 prometheus-operator-... 1/1 Running 0 prometheus-console-prometheus 1/1 Running 0
ここで、
console-kafka
はクラスターの名前です。Pod ID は作成された Pod を識別します。
デフォルトのデプロイメントでは、3 つの Pod をインストールします。
READY は、ready/expected 状態のレプリカ数を表示します。STATUS が Running と表示されれば、デプロイメントは成功です。
Streams for Apache Kafka Console をインストールします。
コンソールインスタンスがインストールされる namespace を使用するように
console-server.clusterrolebinding.yaml
ファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow sed -i 's/${NAMESPACE}/'"my-project"'/g' /<resource_path>console-server.clusterrolebinding.yaml
sed -i 's/${NAMESPACE}/'"my-project"'/g' /<resource_path>console-server.clusterrolebinding.yaml
設定により、コンソールのロールとそのサービスアカウントがバインドされます。
次の順序でインストールファイルを適用して、コンソールユーザーインターフェイスをインストールし、インターフェイスにルートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Console security resources Console user interface service Console route
# Console security resources oc apply -n my-project -f <resource_path>/console-server.clusterrole.yaml oc apply -n my-project -f <resource_path>/console-server.serviceaccount.yaml oc apply -n my-project -f <resource_path>/console-server.clusterrolebinding.yaml # Console user interface service oc apply -n my-project -f <resource_path>/console-ui.service.yaml # Console route oc apply -n my-project -f <resource_path>/console-ui.route.yaml
インストールにより、コンソールユーザーインターフェイスを実行するために必要なロール、ロールバインディング、サービスアカウント、サービス、およびルートが作成されます。
コンソール内でのセッション管理と認証のための 2 つのシークレット値 (前提条件で説明) を含む
console-ui-secrets
というSecret
を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic console-ui-secrets -n my-project \ --from-literal=SESSION_SECRET="<session_secret_value>" \ --from-literal=NEXTAUTH_SECRET="<next_secret_value>"
oc create secret generic console-ui-secrets -n my-project \ --from-literal=SESSION_SECRET="<session_secret_value>" \ --from-literal=NEXTAUTH_SECRET="<next_secret_value>"
コンソールがデプロイされると、シークレットは環境変数としてマウントされます。
コンソールユーザーインターフェイス用に作成されたルートのホスト名を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route console-ui-route -n my-project -o jsonpath='{.spec.host}'
oc get route console-ui-route -n my-project -o jsonpath='{.spec.host}'
コンソールユーザーインターフェイスにアクセスするには、ホスト名が必要です。
console.deployment.yaml
ファイルを編集してプレースホルダーを置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow sed -i 's/${CONSOLE_HOSTNAME}/'"<route_hostname>"'/g' console.deployment.yaml sed -i 's/${NAMESPACE}/'"my-project"'/g' console.deployment.yaml
sed -i 's/${CONSOLE_HOSTNAME}/'"<route_hostname>"'/g' console.deployment.yaml sed -i 's/${NAMESPACE}/'"my-project"'/g' console.deployment.yaml
これらのコマンドは次のことを実行します。
-
https://${CONSOLE_HOSTNAME}
を、コンソールユーザーインターフェイスにアクセスするために使用されるルートであるhttps://<route_hostname>
に置き換えます。 -
コンソールが使用する Prometheus インスタンスの URL である
http://prometheus-operated.${NAMESPACE}.svc.cluster.local:9090
内の${NAMESPACE}
をmy-project
namespace に置き換えます。
独自の Kafka クラスターを使用している場合は、正しいクラスター名が使用され、他の環境変数が 正しい値で設定されている ことを確認してください。これらの値により、コンソールはクラスターに接続してメトリクスを取得できるようになります。
-
コンソールをインストールします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -n my-project -f <resource_path>/console.deployment.yaml
oc apply -n my-project -f <resource_path>/console.deployment.yaml
出力はコンソールの準備状況を示します
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME READY STATUS RESTARTS strimzi-cluster-operator 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 prometheus-operator-... 1/1 Running 0 prometheus-console-prometheus 1/1 Running 0 console-... 2/2 Running 0
NAME READY STATUS RESTARTS strimzi-cluster-operator 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 console-kafka-kafka-0 1/1 Running 0 prometheus-operator-... 1/1 Running 0 prometheus-console-prometheus 1/1 Running 0 console-... 2/2 Running 0
独自の Kafka クラスターにサンプル設定を追加する
Kafka クラスターがすでにインストールされている場合は、必要な設定で Kafka
リソースを更新できます。クラスター設定ファイルを適用するときは、Streams for Apache Kafka Console インストールファイルに付属する Kafka
リソースではなく、更新した Kafka
リソースを使用します。
Kafka
リソースには次の設定が必要です。
-
コンソール接続用にクラスターを公開する
route
リスナー - クラスター上のメトリクスを取得するために Prometheus メトリクスが有効になっています。メタデータ管理に ZooKeeper を使用している場合は、ZooKeeper に同じ設定を追加します。
-
クラスター名がコンソールデプロイメントファイル (
console- kafka
) で使用されているクラスター名と一致しない場合は、console-kafka-user1.kafkauser.yaml
などの Kafka クラスターの名前を参照するデプロイメントファイルを更新します。
Prometheus メトリクス設定は、コンソールに必要なメトリクス設定を提供する ConfigMap
を参照する必要があります。メトリクス設定は、console-cluster-metrics.configmap.yaml
リソース設定ファイルで提供されます。
コンソール接続用の Kafka クラスター設定の例
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: console-kafka namespace: my-project spec: entityOperator: topicOperator: {} userOperator: {} kafka: authorization: type: simple config: allow.everyone.if.no.acl.found: 'true' default.replication.factor: 3 inter.broker.protocol.version: '3.6' min.insync.replicas: 2 offsets.topic.replication.factor: 3 transaction.state.log.min.isr: 2 transaction.state.log.replication.factor: 3 listeners: - name: route1 port: 9094 tls: true type: route authentication: type: scram-sha-512 replicas: 3 storage: type: jbod volumes: - id: 0 type: persistent-claim size: 10Gi deleteClaim: false metricsConfig: type: jmxPrometheusExporter valueFrom: configMapKeyRef: name: console-cluster-metrics key: kafka-metrics-config.yml version: 3.6.0 zookeeper: replicas: 3 storage: deleteClaim: false size: 10Gi type: persistent-claim metricsConfig: type: jmxPrometheusExporter valueFrom: configMapKeyRef: name: console-cluster-metrics key: zookeeper-metrics-config.yml
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: console-kafka
namespace: my-project
spec:
entityOperator:
topicOperator: {}
userOperator: {}
kafka:
authorization:
type: simple
config:
allow.everyone.if.no.acl.found: 'true'
default.replication.factor: 3
inter.broker.protocol.version: '3.6'
min.insync.replicas: 2
offsets.topic.replication.factor: 3
transaction.state.log.min.isr: 2
transaction.state.log.replication.factor: 3
listeners:
- name: route1
port: 9094
tls: true
type: route
authentication:
type: scram-sha-512
replicas: 3
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 10Gi
deleteClaim: false
metricsConfig:
type: jmxPrometheusExporter
valueFrom:
configMapKeyRef:
name: console-cluster-metrics
key: kafka-metrics-config.yml
version: 3.6.0
zookeeper:
replicas: 3
storage:
deleteClaim: false
size: 10Gi
type: persistent-claim
metricsConfig:
type: jmxPrometheusExporter
valueFrom:
configMapKeyRef:
name: console-cluster-metrics
key: zookeeper-metrics-config.yml
コンソールのデプロイメント環境変数を確認する
独自の Kafka クラスターを使用している場合は、コンソールのデプロイメント設定に必要な環境変数が含まれていることを確認してください。
次の接頭辞は環境変数値のスコープを決定します。
-
KAFKA
は、すべての Kafka クラスターの設定を表します。 -
CONSOLE_KAFKA_<UNIQUE_NAME_ID_FOR_CLUSTER>
は、特定のクラスターごとの設定を表します。
コンソールデプロイメント設定の例
apiVersion: apps/v1 kind: Deployment metadata: name: console spec: replicas: 1 # ... template: metadata: labels: app: console spec: # ... containers: - name: console-api # ... env: - name: KAFKA_SECURITY_PROTOCOL value: SASL_SSL - name: KAFKA_SASL_MECHANISM value: SCRAM-SHA-512 - name: CONSOLE_KAFKA_CLUSTER1 value: my-project/console-kafka - name: CONSOLE_KAFKA_CLUSTER1_BOOTSTRAP_SERVERS value: console-kafka-route1-bootstrap-my-project.router.com:443 - name: CONSOLE_KAFKA_CLUSTER1_SASL_JAAS_CONFIG valueFrom: secretKeyRef: name: console-kafka-user1 key: sasl.jaas.config - name: console-ui # ... env: - name: NEXTAUTH_SECRET valueFrom: secretKeyRef: name: console-ui-secrets key: NEXTAUTH_SECRET - name: SESSION_SECRET valueFrom: secretKeyRef: name: console-ui-secrets key: SESSION_SECRET - name: NEXTAUTH_URL value: 'https://console-ui-route-my-project.router.com' - name: BACKEND_URL value: 'http://127.0.0.1:8080' - name: CONSOLE_METRICS_PROMETHEUS_URL value: 'http://prometheus-operated.my-project.svc.cluster.local:9090'
apiVersion: apps/v1
kind: Deployment
metadata:
name: console
spec:
replicas: 1
# ...
template:
metadata:
labels:
app: console
spec:
# ...
containers:
- name: console-api
# ...
env:
- name: KAFKA_SECURITY_PROTOCOL
value: SASL_SSL
- name: KAFKA_SASL_MECHANISM
value: SCRAM-SHA-512
- name: CONSOLE_KAFKA_CLUSTER1
value: my-project/console-kafka
- name: CONSOLE_KAFKA_CLUSTER1_BOOTSTRAP_SERVERS
value: console-kafka-route1-bootstrap-my-project.router.com:443
- name: CONSOLE_KAFKA_CLUSTER1_SASL_JAAS_CONFIG
valueFrom:
secretKeyRef:
name: console-kafka-user1
key: sasl.jaas.config
- name: console-ui
# ...
env:
- name: NEXTAUTH_SECRET
valueFrom:
secretKeyRef:
name: console-ui-secrets
key: NEXTAUTH_SECRET
- name: SESSION_SECRET
valueFrom:
secretKeyRef:
name: console-ui-secrets
key: SESSION_SECRET
- name: NEXTAUTH_URL
value: 'https://console-ui-route-my-project.router.com'
- name: BACKEND_URL
value: 'http://127.0.0.1:8080'
- name: CONSOLE_METRICS_PROMETHEUS_URL
value: 'http://prometheus-operated.my-project.svc.cluster.local:9090'
- 1
- Kafka ブローカーとの通信に使用されるセキュリティープロトコル。
- 2
- Kafka ブローカーへのコンソール (クライアント) 認証用の SASL メカニズム。
- 3
Kafka
リソース設定でクラスターに指定された namespace および名前と一致するようにする必要があります。- 4
- Kafka クラスターのすべてのブローカーを検出し、接続するブートストラップブローカーアドレスのホストとポートのペア。この例では、ルートリスナーアドレスが使用されています。リスナーは
Kafka
リソースで設定されました。 - 5
Secret
としてマウントされたコンソールを表す Kafka ユーザーの認証情報。対応するユーザーが作成されると、console-kafka-user1
シークレットが自動的に作成されます。シークレット内のsasl.jaas.config
プロパティーには、SASL 認証用の JAAS 設定が含まれています。- 6
- コンソール内での認証用のシークレット。
- 7
- コンソール内のセッション管理のシークレット
- 8
- Streams for Apache Kafka ユーザーインターフェイスに接続し、ユーザーがコンソールにアクセスするための URL。
- 9
- コンソールユーザーインターフェイスがデータ取得のために通信するバックエンドサーバー。
- 10
Kafka
リソースの namespace (my-project
) を含む Prometheus インスタンスに接続するための URL。