Strimzi Kafka Operator を試す — Part 1 セットアップ

suzukiry
9 min readDec 13, 2020

--

ゴール

  • strimziのcluster-operatorをインストール
  • Kafkaクラスタの作成

をCLIでやっていきます。

環境

  • Kubernetes 1.21(OCP 4.8)
  • Strimzi Operator 0.26

作りたい環境構成はこのイメージです。

Strimziをインストールしていきますが、展開イメージはこちらにまとめています。

準備

  1. 便利ツールのインストール

これがあると、コンテキストと名前空間を切り替えが簡単に行えます。

git clone https://github.com/ahmetb/kubectx.git
sudo install ./kubectx/kubectx /usr/local/bin/
sudo install ./kubectx/kubens /usr/local/bin/
kubectx -c
kubens -c

手順

strimziのcluster-operatorをインストール

  • リポジトリ取得
git clone -b release-0.26.x https://github.com/strimzi/strimzi-kafka-operator.git
  • namespaceの初期設定
kubectl create namespace kafka-operator  # Operator配置用kubectl create namespace my-kafka-project # Kafka Cluster配置用cd strimzi-kafka-operator/
  • cluster-operataor関連のyamlのnamespaceを更新
sed -i 's/namespace: .*/namespace: kafka-operator/' install/cluster-operator/*RoleBinding*.yaml

もし導入するStrimzi Operatorが管理する対象を、namespace環境で縛りたい場合はStrimzi Operatorを立ち上げる前に環境変数の`STRIMZI_NAMESPACE`で設定することができる。対象を縛る場合には次のオペレーションも実施。

全ての名前空間を利用したい場合は、 ̶そ̶の̶ま̶ま̶。

2022.01時点:以前はvalue: “*” がデフォルトだったのに今はわざわざ書かないといけなさそう。。。なので描きます。

vim install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml

これを、

# 修正前

env:
- name: STRIMZI_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace

こう変えます。

# 修正後

env:
- name: STRIMZI_NAMESPACE
value: "*"

そしてClusterRoleBindingsをOperatorに付与して、ClusterRoleを割り当てる。これで全部のnamespaceをモニターして、リソースの削除ができるようになります(太字がOperatorを作りたいnamespace)。

kubectl create clusterrolebinding strimzi-cluster-operator-namespaced --clusterrole=strimzi-cluster-operator-namespaced --serviceaccount kafka-operator:strimzi-cluster-operatorkubectl create clusterrolebinding strimzi-cluster-operator-entity-operator-delegation --clusterrole=strimzi-entity-operator --serviceaccount kafka-operator:strimzi-cluster-operator
  • (オプション:もしnamespace を縛りたい時) my-kafka-project namespaceだけを指定する
# 修正後

env:
- name: STRIMZI_NAMESPACE
value: my-kafka-project

このCluster Operator に my-kafka-project namespaceへの権限を割り当てないといけないので、これ。

kubectl create -f install/cluster-operator/020-RoleBinding-strimzi-cluster-operator.yaml -n my-kafka-projectkubectl create -f install/cluster-operator/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml -n my-kafka-project

参考はこちら

  • cluster-operatorの起動

やっと実行。

kubectl apply -f install/cluster-operator/ -n kafka-operatorkubectl get pods -w -n kafka-operator

この結果からも分かる通り、Deploymentとして、cluster-operatorは上がっている。Operatorもコンテナとして上がりますよね、と言った感じです。

ここで作られるリソースはこれだけ。

strimzi-cluster-operator

Kafkaクラスタの作成

  • Kafka クラスタの作成

別に作ったマニフェストから作ります。

git clone https://github.com/suzukiry/kafka-strimzi.git

kubectl コマンドで、Kafka[my-cluster]*のリソースを作成します。
*カスタムリソースKafkaのmy-clusterというmetadata.nameで作成することを略式的に指しています。

cd kafka-strimzi/01-kafka-cluster/
kubectl apply -f kafka-zk-jbod.yaml

作成後は、Podsの状態を見て、Kafka クラスタに必要なコンポーネントを確認します。ここでkubensの名前空間のスイッチが簡単にできる意味が出てきます。

kubens my-kafka-project

作成されたクラスタのPodsの一覧を見ます。

# kubectl get podsNAME                                          READY   STATUS    RESTARTS   AGE
my-cluster-entity-operator-579c7bd9cd-rmmns 3/3 Running 0 3m3s
my-cluster-kafka-0 1/1 Running 0 3m53s
my-cluster-kafka-1 1/1 Running 0 3m53s
my-cluster-kafka-2 1/1 Running 0 3m53s
my-cluster-zookeeper-0 1/1 Running 0 4m53s
my-cluster-zookeeper-1 1/1 Running 0 4m53s
my-cluster-zookeeper-2 1/1 Running 0 4m53s

Kafkaのクラスタは、Kafka BrokerとZookeeperだけでなく、Operatorの一派であるentitiy-operator(この中にTopic-operatorとUser-operator)も一緒に上がってきています。

以下は、OpenShiftのWebコンソールから見たときの画面を撮ってみました。

<Kafka Broker/ZooKeeperのStateful Sets>

<Kafka Broker/ZooKeeperのPods> *ZooKeeper撮り忘れた

<entity-operatorのDeployment>

ここで作られるリソースはこれだけ。

試しにPodを削除してちゃんと再起動するかを確認

$ kubectl delete pod my-cluster-kafka-0 pod "my-cluster-kafka-0" deleted

my-cluster-kafka-0のPodのステータスが変わりました。

参考URL

  • Strimzi Quick Start guide (Master)

感想

よくよく何を流しているのかを確認すると、Operatorが何者なのかが見えてくる。

yamlに欲しいクラスタのBroker数・ZK数を書いて、コマンド2つだけでクラスタできてしまうという、インストレーションの簡単さ。Operatorの強みの一つですね。

--

--