commit 31685204165f48201414f44345fcdb06b94408a6 Author: Artem Darius Weber Date: Sat Jun 1 17:36:36 2024 +0300 init diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..d3d4d97 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1717252261210 + + + + + + \ No newline at end of file diff --git a/00-namespace.yaml b/00-namespace.yaml new file mode 100644 index 0000000..f905370 --- /dev/null +++ b/00-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: "kafka" + labels: + name: "kafka" \ No newline at end of file diff --git a/01-zookeeper.yaml b/01-zookeeper.yaml new file mode 100644 index 0000000..0f5ade5 --- /dev/null +++ b/01-zookeeper.yaml @@ -0,0 +1,40 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: zookeeper-service + name: zookeeper-service + namespace: kafka +spec: + type: NodePort + ports: + - name: zookeeper-port + port: 2181 + nodePort: 30181 + targetPort: 2181 + selector: + app: zookeeper +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: zookeeper + name: zookeeper + namespace: kafka +spec: + replicas: 1 + selector: + matchLabels: + app: zookeeper + template: + metadata: + labels: + app: zookeeper + spec: + containers: + - image: wurstmeister/zookeeper + imagePullPolicy: IfNotPresent + name: zookeeper + ports: + - containerPort: 2181 \ No newline at end of file diff --git a/02-kafka.yaml b/02-kafka.yaml new file mode 100644 index 0000000..2aa017c --- /dev/null +++ b/02-kafka.yaml @@ -0,0 +1,46 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: kafka-broker + name: kafka-service + namespace: kafka +spec: + ports: + - port: 9092 + selector: + app: kafka-broker +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: kafka-broker + name: kafka-broker + namespace: kafka +spec: + replicas: 1 + selector: + matchLabels: + app: kafka-broker + template: + metadata: + labels: + app: kafka-broker + spec: + hostname: kafka-broker + containers: + - env: + - name: KAFKA_BROKER_ID + value: "1" + - name: KAFKA_ZOOKEEPER_CONNECT + value: 10.108.142.36:2181 + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092 + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka-broker:9092 + image: wurstmeister/kafka + imagePullPolicy: IfNotPresent + name: kafka-broker + ports: + - containerPort: 9092 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c584ef2 --- /dev/null +++ b/README.md @@ -0,0 +1,155 @@ +# k8s Kafka Template + +Kafka — ключевое решение для организаций, которые заинтересованы во внедрении событийно-управляемых архитектур и систем реального времени. + +00-namespace.yaml + +```bash +apiVersion: v1 +kind: Namespace +metadata: + name: "kafka" + labels: + name: "kafka" +``` + +```bash +kubectl apply -f 00-namespace.yaml +``` + +01-zookeeper.yaml + +```bash +apiVersion: v1 +kind: Service +metadata: + labels: + app: zookeeper-service + name: zookeeper-service + namespace: kafka +spec: + type: NodePort + ports: + - name: zookeeper-port + port: 2181 + nodePort: 30181 + targetPort: 2181 + selector: + app: zookeeper +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: zookeeper + name: zookeeper + namespace: kafka +spec: + replicas: 1 + selector: + matchLabels: + app: zookeeper + template: + metadata: + labels: + app: zookeeper + spec: + containers: + - image: wurstmeister/zookeeper + imagePullPolicy: IfNotPresent + name: zookeeper + ports: + - containerPort: 2181 +``` + +```bash +kubectl apply -f 01-zookeeper.yaml +``` + +```bash +kubectl get services -n kafka +``` + +Мы видим внутренний IP-адрес Zookeeper, который нам понадобится сообщить брокеру, где его прослушивать. + +Последний шаг — развертывание брокера Kafka. Мы создаем`02-kafka.yaml`файл со следующим содержимым, заменяем его``на`CLUSTER-IP`предыдущий шаг для Zookeeper. Если не выполнить этот шаг, брокер не сможет выполнить развертывание. + +02-kafka.yaml + +```bash +apiVersion: v1 +kind: Service +metadata: + labels: + app: kafka-broker + name: kafka-service + namespace: kafka +spec: + ports: + - port: 9092 + selector: + app: kafka-broker +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: kafka-broker + name: kafka-broker + namespace: kafka +spec: + replicas: 1 + selector: + matchLabels: + app: kafka-broker + template: + metadata: + labels: + app: kafka-broker + spec: + hostname: kafka-broker + containers: + - env: + - name: KAFKA_BROKER_ID + value: "1" + - name: KAFKA_ZOOKEEPER_CONNECT + value: :2181 + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092 + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka-broker:9092 + image: wurstmeister/kafka + imagePullPolicy: IfNotPresent + name: kafka-broker + ports: + - containerPort: 9092 +``` + +```bash +kubectl apply -f 02-kafka.yaml +``` + +Просмотреть запущенные сервисы + +```bash +kubectl get pods -n kafka +``` + +(pythonProject) PS J:\MTC-aquarium\k8s> kubectl get pods -n kafka +NAME READY STATUS RESTARTS AGE +kafka-broker-75d58df49b-tt69x 1/1 Running 0 4m18s +zookeeper-74d96f84bd-cnjj2 1/1 Running 0 16m + +Чтобы проверить, можем ли мы отправлять и получать сообщения из темы в Kafka, нам нужно будет открыть порт для Kafka, чтобы сделать его доступным с локального хоста. Мы запускаем следующую команду, чтобы открыть порт: + +```bash +kubectl port-forward kafka-broker-75d58df49b-tt69x 9092 -n kafka +``` + +Эта команда делает порт`9092`этого модуля доступным за пределами кластера Minikube k8s по адресу`localhost:9092`. + +Чтобы легко отправлять и получать сообщения из Kafka, мы будем использовать инструмент командной строки[KCat](https://github.com/edenhill/kcat)(ранее Kafkacat). Чтобы создать сообщение и тему с именем`test`, мы запускаем следующую команду: + +```bash +echo "hello world!" | kafkacat -P -b localhost:9092 -t test +``` \ No newline at end of file