strimzi实战之二:部署和消息功能初体验

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):github.com/zq2599/blog...

本篇概览

  • 本篇是《strimzi实战》系列的第二篇,前文完成了介绍和准备工作,是时候体验strimzi的核心功能了:发送和接受kafka消息,为了完成这个目标,本篇会按照如下步骤开始实战:
  1. 在kubernetes环境部署strimzi,这里面包含两个步骤:首先是将各类资源创建好,然后再启动strmzi
  2. 验证基本功能:发送和接受kafka消息,这里面有两种操作(注意,是两种里面二选一,不是两步):如果您的kubernetes环境有pv,就可以选择使用pv的操作步骤,如果您没有pv,就选择不用pv的操作步骤
  3. 删除操作
  • 接下来开始实战

部署

  • 创建namespace
shell 复制代码
kubectl create namespace kafka
  • 部署角色、权限、CRD等资源
shell 复制代码
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka

启动

  • 接下来的启动操作,根据您的实际情况,有两种可选
  1. 第一种:如果您的k8s环境已经准备好了pv,请执行以下命令完成部署,strimzi会通过pvc去申请使用pv,这样就算pod有问题被删除重建了,kafka消息的数据也不会丢失
shell 复制代码
kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
  1. 第二种,如果您的k8s环境还没有准备好pv,请执行以下命令完成部署,这样创建的kafka服务也能正常使用,只不过所有数据都存在pod中,一旦pod被删除,数据就找不回来了
shell 复制代码
kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-ephemeral-single.yaml -n kafka
  • 以上两种方式只要选择一种去执行即可,执行完命令后,需要等待镜像下载和服务创建,尤其是镜像下载,实测真的慢啊,我用腾讯云服务器大约等了七八分钟
shell 复制代码
[root@VM-12-12-centos ~]# kubectl get pod -n kafka
NAME                                        READY   STATUS              RESTARTS   AGE
strimzi-cluster-operator-566948f58c-h2t6g   0/1     ContainerCreating   0          16m
  • 等到operator的pod运行起来后,就该创建zookeeper的pod了,继续等镜像下载...
shell 复制代码
[root@VM-12-12-centos ~]# kubectl get pods -n kafka
NAME                                        READY   STATUS              RESTARTS   AGE
my-cluster-zookeeper-0                      0/1     ContainerCreating   0          7m59s
my-cluster-zookeeper-1                      0/1     ContainerCreating   0          7m59s
my-cluster-zookeeper-2                      0/1     ContainerCreating   0          7m59s
strimzi-cluster-operator-566948f58c-h2t6g   1/1     Running             0          24m
  • 如下图红色箭头所指,显示正在拉取zookeeper镜像
  • 等到zookeeper的pod创建完成后,终于轮到主角登场了:开始kafka的pod创建,最后,来个全家福,如下所示,一套具备基本功能的kafka环境
shell 复制代码
[root@VM-12-12-centos ~]# kubectl get pods -n kafka
NAME                                          READY   STATUS    RESTARTS   AGE
my-cluster-entity-operator-66598599fc-sskcx   3/3     Running   0          73s
my-cluster-kafka-0                            1/1     Running   0          96s
my-cluster-zookeeper-0                        1/1     Running   0          14m
my-cluster-zookeeper-1                        1/1     Running   0          14m
my-cluster-zookeeper-2                        1/1     Running   0          14m
strimzi-cluster-operator-566948f58c-h2t6g     1/1     Running   0          30m

基本操作:收发消息

  • strimzi部署已经OK,现在收发消息试试,看kafka基本功能是否正常
  • 接下来的操作需要两个控制台窗口,一个用于发消息,一个用于收消息
  • 在发消息的窗口输入以下命令,就会创建名为my-topic的topic,并且进入发送消息的模式
shell 复制代码
kubectl -n kafka \
run kafka-producer \
-ti \
--image=quay.io/strimzi/kafka:0.32.0-kafka-3.3.1 \
--rm=true \
--restart=Never \
-- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic
  • 在收消息的窗口输入以下命令,就会进入消费消息的模式,topic是my-topic
shell 复制代码
kubectl -n kafka \
run kafka-consumer \
-ti \
--image=quay.io/strimzi/kafka:0.32.0-kafka-3.3.1 \
--rm=true \
--restart=Never \
-- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
  • 然后,在发送消息的窗口输入一些文字后再回车,消息就会发送出去,如下图,左侧红框显示一共发送了四次消息,最后一次是空字符串,右侧黄框显示成功收到四条消息

  • 如果您的kubernetes环境是按照《快速搭建云原生开发环境(k8s+pv+prometheus+grafana)》的方法来部署的,现在就能通过grafana看到命名空间kafka下面的资源了,如下图

  • 另外,如果您使用了pv,还可以关注一下pv的使用情况,如下图,kafka的zookeeper的数据都改为外部存储了,数据不会因为pod问题而丢失

  • 不过由于我们还没有将strimzi的监控配置好,现在还看不到kafka业务相关的指标情况,只能从k8s维度去查看pod的基本指标,这些会在后面的章节补齐

删除操作

  • 如果需要把strimzi从kubernetes环境删除,执行以下操作即可:
  • 如果您使用了pv,就执行以下命令完成删除
shell 复制代码
kubectl delete -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka \
&& kubectl delete -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka \
&& kubectl delete namespace kafka
  • 如果您没有使用pv,就执行以下命令完成删除
shell 复制代码
kubectl delete -f https://strimzi.io/examples/latest/kafka/kafka-ephemeral-single.yaml -n kafka \
&& kubectl delete -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka \
&& kubectl delete namespace kafka
  • 再去检查所有pod,已看不到strimzi的痕迹
shell 复制代码
[root@VM-12-12-centos ~]# kubectl get pod -A
NAMESPACE            NAME                                          READY   STATUS    RESTARTS   AGE
calico-apiserver     calico-apiserver-67b7856948-bg2wh             1/1     Running   0          6d2h
calico-apiserver     calico-apiserver-67b7856948-fz64n             1/1     Running   0          6d2h
calico-system        calico-kube-controllers-78687bb75f-z2r7m      1/1     Running   0          6d2h
calico-system        calico-node-l6nmw                             1/1     Running   0          6d2h
calico-system        calico-typha-b46ff96f6-qqzxb                  1/1     Running   0          6d2h
calico-system        csi-node-driver-lv2g2                         2/2     Running   0          6d2h
kafka                my-cluster-entity-operator-66598599fc-fz7wx   3/3     Running   0          4m57s
kafka                my-cluster-kafka-0                            1/1     Running   0          5m22s
kafka                my-cluster-zookeeper-0                        1/1     Running   0          5m48s
kafka                strimzi-cluster-operator-566948f58c-pj45s     1/1     Running   0          6m15s
kube-system          coredns-78fcd69978-57r7x                      1/1     Running   0          6d2h
kube-system          coredns-78fcd69978-psjcs                      1/1     Running   0          6d2h
kube-system          etcd-vm-12-12-centos                          1/1     Running   0          6d2h
kube-system          kube-apiserver-vm-12-12-centos                1/1     Running   0          6d2h
kube-system          kube-controller-manager-vm-12-12-centos       1/1     Running   0          6d2h
kube-system          kube-proxy-x8nhg                              1/1     Running   0          6d2h
kube-system          kube-scheduler-vm-12-12-centos                1/1     Running   0          6d2h
local-path-storage   local-path-provisioner-55d894cf7f-mpd2n       1/1     Running   0          3d21h
monitoring           alertmanager-main-0                           2/2     Running   0          24h
monitoring           alertmanager-main-1                           2/2     Running   0          24h
monitoring           alertmanager-main-2                           2/2     Running   0          24h
monitoring           blackbox-exporter-6798fb5bb4-4hmf7            3/3     Running   0          24h
monitoring           grafana-d9c6954b-qts2s                        1/1     Running   0          24h
monitoring           kube-state-metrics-5fcb7d6fcb-szmh9           3/3     Running   0          24h
monitoring           node-exporter-4fhb6                           2/2     Running   0          24h
monitoring           prometheus-adapter-7dc46dd46d-245d7           1/1     Running   0          24h
monitoring           prometheus-adapter-7dc46dd46d-sxcn2           1/1     Running   0          24h
monitoring           prometheus-k8s-0                              2/2     Running   0          24h
monitoring           prometheus-k8s-1                              2/2     Running   0          24h
monitoring           prometheus-operator-7ddc6877d5-d76wk          2/2     Running   0          24h
tigera-operator      tigera-operator-6f669b6c4f-t8t9h              1/1     Running   0          6d2h
  • 不过,对于pv来说,由于使用的策略是Retain,因此还会继续存在
  • 至此,strimzi基本功能实战已经完成,咱们知道了如何快速部署strimzi和收发消息,感受到operator给我们带来的便利,接下来的文章,还会有更多简单的操作,更多精彩的功能等着咱们去尝试,欢迎您继续关注欣宸原创,咱们一起学习共同进步

欢迎关注掘金:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

相关推荐
yuanbenshidiaos1 小时前
c++---------数据类型
java·jvm·c++
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
Lojarro1 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
莫名其妙小饼干1 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
isolusion2 小时前
Springboot的创建方式
java·spring boot·后端
Karoku0662 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
zjw_rp2 小时前
Spring-AOP
java·后端·spring·spring-aop
Oneforlove_twoforjob2 小时前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
TodoCoder2 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
向宇it3 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎