相关链接
网上关于kafka-eagle的部署文档大多是利用安装包直接部署,利用docker甚至k8s部署的文档几乎没找到,所以这里先记录下k8s 部署过程中的坑
1. docker image
利用上面的docker hub 中的docker file 进行了自己的改进。
- 自己修正了 启动脚本,将ke.sh 增加了下自己的代码,以便容器可以运行
- 涉及到的 tarball 需要到官方网站下载,并且下载时最好要科学上网一下,否则很慢
FROM java:8-alpine
ENV KE_HOME=/opt/kafka-eagle
ENV EAGLE_VERSION=1.3.5
COPY kafka-eagle-bin-${EAGLE_VERSION}.tar.gz /
RUN apk --update add wget gettext tar bash sqlite
#get and unpack kafka eagle
RUN mkdir -pv /opt/kafka-eagle/conf;mv kafka-eagle-bin-${EAGLE_VERSION}.tar.gz /opt;cd /opt && \
tar zxvf kafka-eagle-bin-${EAGLE_VERSION}.tar.gz -C kafka-eagle --strip-components 1 && \
cd kafka-eagle;tar zxvf kafka-eagle-web-${EAGLE_VERSION}-bin.tar.gz --strip-components 1 && \
chmod +x /opt/kafka-eagle/bin/ke.sh && \
mkdir -p /hadoop/kafka-eagle/db
EXPOSE 8048 8080
COPY ke_1.sh /opt/kafka-eagle/bin
ENTRYPOINT ["/opt/kafka-eagle/bin/ke_1.sh","start"] ###这里的 ke_1.sh 是自己处理过的,因为官方的脚本 运行完毕后会退出,这样docker启动的话容器就会退出。所以我在官方的ke.sh 启动代码段增加了一行命令: read test 使容器不退出
WORKDIR /opt/kafka-eagle
2. configmap配置文件配置
kubectl create configmap kafka-eagle-config -n kafka --from-file=kafka_client_jaas.conf \
--from-file=log4j.properties \
--from-file=system-config.properties
## 这三个文件是服务需要的配置文件,可以自己修改配置后以configmap存储在k8s以便容器启动时使用
配置文件内容(里面并未配置报警等,只是调研启动服务用)
######################################
# multi zookeeper&kafka cluster list
######################################
kafka.eagle.zk.cluster.alias=cluster1
cluster1.zk.list=kafka-zookeeper:2181
######################################
# zk client thread limit
######################################
kafka.zk.limit.size=25
######################################
# kafka eagle webui port
######################################
kafka.eagle.webui.port=8048
######################################
# kafka offset storage
######################################
cluster1.kafka.eagle.offset.storage=kafka
######################################
# enable kafka metrics
######################################
kafka.eagle.metrics.charts=true
kafka.eagle.sql.fix.error=true
######################################
# kafka sql topic records max
######################################
kafka.eagle.sql.topic.records.max=5000
######################################
# alarm email configure
######################################
kafka.eagle.mail.enable=false
kafka.eagle.mail.sa=alert_sa@163.com
kafka.eagle.mail.username=alert_sa@163.com
kafka.eagle.mail.password=mqslimczkdqabbbh
kafka.eagle.mail.server.host=smtp.163.com
kafka.eagle.mail.server.port=25
######################################
# alarm im configure
######################################
#kafka.eagle.im.dingding.enable=true
#kafka.eagle.im.dingding.url=https://oapi.dingtalk.com/robot/send?access_token=
#kafka.eagle.im.wechat.enable=true
#kafka.eagle.im.wechat.token=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=xxx&corpsecret=xxx
#kafka.eagle.im.wechat.url=https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=
#kafka.eagle.im.wechat.touser=
#kafka.eagle.im.wechat.toparty=
#kafka.eagle.im.wechat.totag=
#kafka.eagle.im.wechat.agentid=
######################################
# delete kafka topic token
######################################
kafka.eagle.topic.token=keadmin
######################################
# kafka sasl authenticate
######################################
cluster1.kafka.eagle.sasl.enable=false
cluster1.kafka.eagle.sasl.protocol=SASL_PLAINTEXT
cluster1.kafka.eagle.sasl.mechanism=PLAIN
kafka.eagle.sasl.client=/root/kafka-eagle/kafka-eagle/kafka-eagle-web-1.3.4/conf/kafka_client_jaas.conf
######################################
# kafka jdbc driver address
######################################
#kafka.eagle.driver=org.sqlite.JDBC
#kafka.eagle.url=jdbc:sqlite:/hadoop/kafka-eagle/db/ke.db
#kafka.eagle.username=root
#kafka.eagle.password=www.kafka-eagle.org
# user mysql databases
### 注意点: mysql 我用最新版是服务启动有问题,改用5.6 版后正常
### 数据库要提前创建好相关的库和用户
### mysql:3306 我这里是在k8s环境的配置,所以host只是mysql service 名字。
kafka.eagle.driver=com.mysql.jdbc.Driver
kafka.eagle.url=jdbc:mysql://mysql:3306/kafkaeagle?useUnicode=true&characterEncoding=UTF8
kafka.eagle.username=kafkaeagle
kafka.eagle.password=sdfsf@2019
k8s deployment yaml文件
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: kafka-eagle
namespace: kafka
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
workload.user.cattle.io/workloadselector: deployment-kafka-kafka-eagle
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
spec:
containers:
- image: registry.xxxxx.com/kafka-eagle:v1.3.5_2
imagePullPolicy: Always
name: kafka-eagle
ports:
- containerPort: 8048
name: 8048tcp01
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: false
privileged: false
procMount: Default
readOnlyRootFilesystem: false
runAsNonRoot: false
stdin: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
volumeMounts:
- mountPath: /opt/kafka-eagle/conf
name: conf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 256
name: kafka-eagle-config
optional: false
name: conf
3. 我遇见的坑
- 服务启动后,登录界面可以看见,但是用账号密码登录后 返回405 ,并且日志里显示 post方法不接受
问题原因: 由于数据库初始化过程中某些问题,数据库无法初始化完成,所以登录不成功。之前用sqlite时,一直发现指定的数据库目录为空,所以后来我改用mysql进行启动
- 容器启动后即退出
问题原因: 官方的启动脚本 ke.sh 运行完后即exit ,所以用原始命令进行启动的容器运行一段时间后退出。 解决方法是我在start()代码段最后增加了一条卡住shell脚本不退出的命令 read test
- MySQL版本问题,我改用5.6 的就好了
DruidDataSource.Druid-ConnectionPool-Create-2037200746 - ERROR - create connection error, url: jdbc:mysql://mysql:3306/kafkaeagle?useUnicode=true&characterEncoding=UTF8, errorCode 0, state 08001
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
网友评论