docker部署kafka,k8s(helm)部署kafka
全栈工程师开发手册 (作者:栾鹏)
架构系列文章
我们在k8s上部署kafka,接收kafka生产者的数据,并将信息分发到消费者
kafka的基础知识参考:https://blog.csdn.net/luanpeng825485697/article/details/81036028
docker部署kafka
同之前一样,我们现在docker部署一遍试试坑
拉取镜像zookeeper和kafka的镜像
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
启动镜像,在启动中设置端口好,挂载,名称,环境变量,kafka要绑定使用哪个zk,因为各种应用,例如hbase也是使用zk,所以k8s上可能有多个zk。
docker run -d --name kafka-zookeeper -p 2181:2181 --volume /etc/localtime:/etc/localtime wurstmeister/zookeeper:latest 启动zookeeper,注意端口号,因为以后还有有其他的zookeeper docker run -d --name kafka -p 9092:9092 --link kafka-zookeeper --env KAFKA_ZOOKEEPER_CONNECT=kafka-zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest 后台启动kafka
测试发送消息
执行docker ps,找到kafka的CONTAINER ID,进入容器内部:
docker exec -it <CONTAINER ID> /bin/bash
进入kafka默认目录
cd opt/kafka_2.11-2.0.0/
创建一个主题:主题是由zk保管的
bin/kafka-topics.sh --create --zookeeper kafka-zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka
运行一个消息生产者,指定topic为刚刚创建的主题
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka
运行生产者以后,命令行便可以一直输入数据。
另起一个端口进入容器,启动消费者
cd opt/kafka_2.11-2.0.0/
查看所有的topic列表
bin/kafka-topics.sh --list --zookeeper kafka-zookeeper:2181
运行一个消费者,指定同样的主题
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mykafka --from-beginning
这时在生产者输入测试消息,在消费者就可以接收消息了
通过helm在k8s部署kafka
通过helm方法安装
k8s上安装kafka,可以使用helm,将kafka作为一个应用安装。当然这首先要你的k8s支持使用helm安装。
关于helm的介绍和k8s对helm的支持,可以参考https://yq.aliyun.com/articles/159601
注意:本地控制服务器的k8s需要将服务器上kubectl的config文件,拷贝到本地,替换~/.kube/config文件
helm安装应用也是根据这个config文件识别在那个k8s上来进行操作。
在添加helm仓库时需要翻墙,并且helm仓库为境外仓库,所以我们需要先将helm下载下来,然后修改仓库为国内仓库,通过国内仓库拉取镜像(国内镜像不一定和国外镜像完全同步),当然也可以直接在helm添加国内仓库,如阿里云仓库。
helm仓库地址https://github.com/helm/charts
通过helm官方仓库安装kafka
参考:https://github.com/helm/charts/tree/master/incubator/kafka
$ helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
$ kubectl create ns mynamespaces
$ helm install --name my-kafka --namespace mynamespaces incubator/kafka
helm包含的这个kafka应用,已经包含了一个zookeeper,可以通过requirement.yaml来配置。配置方法具体参考github。
通过阿里仓库安装kafka
只安装客户端
helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/
安装客户端和服务器端
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
服务器端需要等一会才能安装成功
helm version 查看helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm repo update
helm search kafka
kubectl create ns mynamespaces
helm install --name my-kafka --namespace mynamespaces incubator/kafka
如果安装出错了可以删除charts
helm delete --purge cloud-kafka
注:阿里云Kubernetes服务已经内置提供了Helm/Chart支持,可以直接使用
https://help.aliyun.com/document_detail/58587.html
修改helm的charts文件,自定义安装
如果上面两种你发现都无法拉取镜像,可以使用自定义修改配置文件实现。
关于kafka的helm应用从哪里来,有几种方式。
helm search kafka或者直接在github的helm官网incubator文件夹下载kafka
通过搜索发现阿里的仓库存在incubator/kafka 0.2.1
先尝试使用阿里的helm应用
helm install --name cloud-kafka --namespace cloudai-2 incubator/kafka
kubectl get pod -n cloudai-2
发现pod创建时挂载失败,所以需要先设置pv,
helm delete --purge cloud-kafka
helm fetch incubator/kafka 把阿里仓库中helm应用kafka-0.2.1.tgz下载下来
修改values.yaml中zookeeper存储为2G
修改kafka的templates/statefulset.yaml中最下面的接入模式,改为accessModes: [ “ReadWriteMany” ]
修改charts/zookeeper/templates/statefulset.yaml文件最下面的接入模式,改为accessModes: [ “ReadWriteMany” ]
将zookeeper的镜像地址改为registry.cn-hangzhou.aliyuncs.com/appstore/k8szk:v2
在服务器k8s上创建pv,(这首先要保证你的k8s已经设置了pv功能)
先在k8s服务器上创建存储数据的文件夹,
例如pv根目录为/mnt/cephfs/目录下
创建/mnt/cephfs/kafka/zookeeper/
和/mnt/cephfs/kafka/kafka/目录
注意每个pod都要有自己的持久存储,因为我们创建3个zookeeper个3个kafka,所以需要创建6个持久卷。现在把pod改成1个,这样我们也先只使用一个文件夹。
创建目录后,要设置chown 777权限,这样k8s挂载到此处的时候,能在里面创建目录。
分别用于存储kafka的zk和kakfa数据
yaml文件中path直接写/kafka/zookeeper和/kafka/kafka
创建secret,secret同于链接pv,
kubectl create -f create_secret.yaml
创建pv,
kubectl create -f create_kafka_pv.yaml
helm安装本地kafka文件夹应用。在下面的安装前要保证,pv是available状态,没有被占用,并且已经创建,pvc的访问模式和pv的访问模式相同,容量相同。镜像地址是可以拉取的。如果不能拉取可以去阿里云替换可以拉取的地址。如果安全失败,记得把安装失败的全部删除,把pv也全部删除重新设置。
helm delete --purge cloud-kafka # 先删除之前的应用
helm install --name cloud-kafka --namespace cloudai-2 kafka
安装中两个容器会启动,但是启动中会初始化很多东西,但是由于kafka要关联zookeeper,所以在zookeeper没有成功初始化以后,kafka会不停的启动失败,知道zookeeper启动完成。kafka才能初始化完成。
可以在k8s中的deshboard中刷新查看结果。当第二次安装的时候会比较顺利。
要想外网访问,修改服务的yaml文件,设置type为NodePort为30946
还要在安全组中开放这个端口
可以先在pod里面测试
进入kafka的pod
创建主题
bin/kafka-topics.sh --create --zookeeper 10.233.61.237:2181 --replication-factor 1 --partitions 1 --topic device 这里面使用的是集群ip,容器间访问
创建消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic device --from-beginning
创建生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic device 使用本地ip
bin/kafka-console-producer.sh --broker-list 10.233.9.150:9092 --topic device 使用集群id
bin/kafka-console-producer.sh --broker-list 192.168.2.177:30946 --topic device 使用服务器内网ip和nodeport
现在pod内部可以访问了,现在尝试在外部创建生产者。
实验发现,在k8s上部署服务来访问k8s上的kafka,依然没有问题。
下面我们尝试直接在本地pc访问服务器k8s中的kafka。
在本地电脑上cd到kafka的目录
cd /home/lp/soft/kafka_2.11-1.1.0
bin/kafka-console-producer.sh --broker-list 192.168.2.177:30946 --topic device
发现访问不了。
进入pod
在pod重启kafka。
bin/kafka-server-stop.sh 关闭
进入pod,执行
bin/zookeeper-shell.sh 10.233.61.237:2181 <<< "get /brokers/ids/0" 使用的是zookeeper的集群ip
发现了 PLAINTEXT 里面注册的域名很诡异。发现这个是docker容器的id!!
于是在宿主机把这个id加了个host对应127.0.0.1 问题就解决了。
然后就可以通过服务器ip地址访问了192.168.2.177:30946
docker部署kafka,k8s(helm)部署kafka相关推荐
- HA RabbitMQ on K8s helm部署实战
RabbitMQ on K8s helm部署实战 获取helm chart 修改必要参数 外部如何访问? 安装rabbitmq 登录管理界面 导入mq metadata 优化 helm chart 生 ...
- JIRA on K8s helm部署实战
JIRA on K8s helm部署实战 jira on k8s实战 waht? 架构 如何选择chart 官方的chart mox 的chart [1]mox chart 安装脚本 [2]生产环境的 ...
- k8s ubuntu cni_K8S环境快速部署Kafka(K8S外部可访问)-WEB资讯专栏-DMOZ中文网站分类目录...
欢迎访问我的GitHub内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS等:如何快速部署借助Helm,只需少量操作 欢迎访问我的GitHub 内容: ...
- K8S环境快速部署Kafka(K8S外部可访问)
如何快速部署 借助Helm,只需少量操作即可部署kafka: kafka和zookeeper对存储都有需求,若提前准备了StorageClass,存储一事则变得十分简单 参考文章 本次实战涉及到的K8 ...
- k8s 中部署kafka集群
由于开发过程中使用到了kafka,又不想自己部署kafka,索性采用k8s 部署kafka集群,以求做到随时插拔. 创建命名空间 apiVersion: v1 kind: Namespace meta ...
- helm部署kafka完整记录
搜索及拉取 helm search repo kafka helm pull bitnami/kafka 安装及卸载 helm install kafka kafka -n dmgeo-lib hel ...
- Hyperledger Fabric 1.4 Kafka集群部署教程
Hyperledger Fabric 1.4 Kafka集群部署教程 作者:区块链教程 时间:2019/12/08 10:36 标签:Docker ComposeDockerYMLHyperledge ...
- ASP.NET Core 借助 Helm 部署应用至 K8S
前言 玩K8S也有一段时间了,借助云服务提供商的K8S控制台,已经可以很方便的快速部署应用至K8S.通过简单的点击,可以一次性帮忙创建K8S 对象:Deployment.Service.Ingress ...
- helm部署jenkins到k8s并创建pipeline构建项目
安装部署nfs 1. nfs服务器创建目录 [yeqiang@harbor ~]$ sudo mkdir /home/nfs/jenkins -p 2. 设置其他用户可以写入该目录 [yeqiang@ ...
- Kubernetes K8S之通过helm部署metrics-server与HPA详解
Kubernetes K8S之通过helm部署metrics-server与 Horizontal Pod Autoscaling (HPA)详解 主机配置规划 服务器名称(hostname) 系统版 ...
最新文章
- LeetCode简单题之赎金信
- matlab练习程序(图像区域分裂)
- (转)Objective-C Autorelease Pools(自动释放池)详解
- 征信逾期花钱就能修复?小心跳进骗子的坑里面去
- mysql 各个版本驱动jar包
- java中finally和return的执行顺序
- HDOJ---1267 下沙的沙子2[DP或卡特兰数]
- 【实战高保真】电商saas全套原型、店铺管理、店铺装修、商品管理、会员管理、维权管理、会员管理、营销管理、财务管理、渠道管理、saas系统、Axure高保真后台管理原型、rp源文件、axure原型
- sql 计算单行数据字段空值比例_如何利用工具,迅猛定位低效SQL? | 1分钟系列...
- mac iterm2 安装 lrzsz rz sz命令
- mybatis使用和分析
- nc系统java不能用_用友NC管理系统使用过程中常见问题和解决方法!
- Excel如何计算两列数据的乘积之和(相乘之后相加)
- php $stmt,PHP在stmt准备和执行语句后获取结果
- 金仓数据库KingbaseES服务启动失败原因
- e430c参数 thinkpad_联想ThinkPad E430c(33651E1)
- line划线计算机图像学,《计算机图形学基础》OpenGL中点画线法画直线(同时支持k1和k1的情况)...
- 信息安全技术——(十五)物联网关键技术
- 使用modelsim仿真时出现“vopt returned success but vsim could not find a design to simulate!”错误
- 红杉资本合伙人Maguire:Crypto将是未来30年最大趋势
热门文章
- 简析语音识别技术的工作原理
- php如何控制用户数,PHP统计当前在线用户数实例讲解
- java request 封装对象_java request请求参数直接封装model对象
- 【王道计组笔记】高速缓存器:局部性原理及性能分析
- mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
- python非法变量名_python – DatabaseError:ORA-01036:非法变量名称/编号
- 解决 GitHub 拉取代码网速慢的问题
- 【基础】二分算法学习笔记
- 【NOIP2003】【Luogu1044】栈
- html导航怎么跟着往下滚动,javascript,html_导航要跟着鼠标滚动向下滚动,用了jquery插件但是报错,请问大牛是什么原因?,javascript,html - phpStudy...