k8s中部署zookeeper和kafka
环境:单节点的k8s环境,版本v1.21.5
部署zookeeper
zookeeper-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: zookeeper
name: zookeeper
spec:
selector:
matchLabels:
app: zookeeper
replicas: 1
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- image: wurstmeister/zookeeper
imagePullPolicy: IfNotPresent
name: zookeeper
ports:
- containerPort: 2181
zookeeper-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: zookeeper-service
name: zookeeper-service
spec:
type: NodePort
ports:
- name: zookeeper-port
port: 2181
nodePort: 30181
targetPort: 2181
selector:
app: zookeeper
$ kubectl create ns kafka
$ kubectl create -f zookeeper-service.yaml,zookeeper-deployment.yaml -n kafka
部署kafka
kafka-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: kafka
name: kafka
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- env:
- name: KAFKA_ADVERTISED_HOST_NAME
value: "10.0.4.9" #指定为自己的IP地址
- name: KAFKA_ADVERTISED_PORT
value: "30092"
- name: KAFKA_BROKER_ID
value: "1"
- name: KAFKA_ZOOKEEPER_CONNECT
value: 10.0.4.9:30181 #指定为自己的IP地址
- name: KAFKA_CREATE_TOPICS
value: "test:1:1"
image: wurstmeister/kafka
imagePullPolicy: IfNotPresent
name: kafka
ports:
- containerPort: 9092
kafka-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: kafka-service
name: kafka-service
spec:
type: NodePort
ports:
- name: kafka-port
port: 9092
nodePort: 30092
targetPort: 9092
selector:
app: kafka
$ kubectl create -f kafka-deploy.yaml,kafka-service.yaml -n kafka
查看所创建的资源:
[root@master ~]# kubectl get svc -n kafka
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka-service NodePort 10.233.24.121 9092:30092/TCP 4m38s
zookeeper-service NodePort 10.233.6.121 2181:30181/TCP 12m
[root@master ~]# kubectl get pods -n kafka
NAME READY STATUS RESTARTS AGE
kafka-755d75d8f7-k7lbt 1/1 Running 0 96s
zookeeper-75fd7fdb96-h9t2z 1/1 Running 0 12m
[root@master ~]#
发送和消费消息
#进入到容器内部
[root@master ~]# kubectl exec -it kafka-755d75d8f7-k7lbt -n kafka -- sh
#查看kafka的topic数量
/opt/kafka_2.13-2.8.1/bin # ./kafka-topics.sh --zookeeper 10.0.4.9:30181 --list
test
/opt/kafka_2.13-2.8.1/bin #
#也可也使用zookeeper的svc的地址和端口
/opt/kafka_2.13-2.8.1/bin # ./kafka-topics.sh --zookeeper 10.233.6.121:2181 --list
test
/opt/kafka_2.13-2.8.1/bin #
#或者使用域名zookeeper-service.kafka,来访问zookeeper
/opt/kafka_2.13-2.8.1/bin # ./kafka-topics.sh --zookeeper zookeeper-service.kafka:2181 --list
test
/opt/kafka_2.13-2.8.1/bin
#创建topic
$ /opt/kafka_2.13-2.8.1/bin # ./kafka-topics.sh --zookeeper 10.0.4.9:30181 --create --replication-factor 1 --partitions 1 --topic web_log
#查看topic详情:
$ /opt/kafka_2.13-2.8.1/bin # ./kafka-topics.sh --zookeeper 10.0.4.9:30181 --describe --topic web_log
Topic: web_log TopicId: V_c_OFkHRI-z5MyO_Za_nA PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: web_log Partition: 0 Leader: 1 Replicas: 1 Isr: 1
#发送消息
$ ./opt/kafka_2.13-2.8.1/bin # ./kafka-console-producer.sh --broker-list 10.0.4.9:30092 --topic web_log
#消费消息
$ ./kafka-console-consumer.sh --bootstrap-server 10.0.4.9:30092 --from-beginning --topic web_log
关于容器内时间和宿主机时间不一致的问题
在yaml文件里面增加环境变量或者挂载宿主机时间
- env: #在env下添加TZ
- name: TZ
value: Asia/Shanghai
修改容器的配置文件,增加env的tz配置
kafka : kubectl edit deploy kafka -n kafka
zookeeper: kubectl edit deploy/zookeeper -n kafka
更多解决方法见:k8s集群下pod时间、虚拟机时间不一致的解决办法
参考链接:
添加 Kafka 作为日志接收者