ゴール
- strimziのcluster-operatorをインストール
- Kafkaクラスタの作成
をCLIでやっていきます。
環境
- Kubernetes 1.21(OCP 4.8)
- Strimzi Operator 0.26
作りたい環境構成はこのイメージです。
Strimziをインストールしていきますが、展開イメージはこちらにまとめています。
準備
- 便利ツールのインストール
これがあると、コンテキストと名前空間を切り替えが簡単に行えます。
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もコンテナとして上がりますよね、と言った感じです。
ここで作られるリソースはこれだけ。
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の強みの一つですね。