You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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`файл со следующим содержимым, заменяем его`<ZOOKEEPER-INTERNAL-IP>`на`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: <ZOOKEEPER-INTERNAL-IP>: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
```