K8s部署单节点Zookeeper并进行监控

Posted 星空流年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s部署单节点Zookeeper并进行监控相关的知识,希望对你有一定的参考价值。

0、写在前面

  1> K8s监控Zookeeper,这里并没有使用zookeeper-exporter的方式进行监控,主要是由于zookeeper-exporter提供的相关指标不太全,zookeeper官网提供的监控指标信息可参看如下地址:https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerMetrics.java,同时参看zookeeper官网发现,在zookeeper 3.6版本之后,官网也给出了相对应的监控方式(zookeeper官网地址:https://zookeeper.apache.org/doc/r3.6.4/zookeeperMonitor.html,zookeeper监控相关文档地址:https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/zookeeperMonitor.md),所以本文采用部署serviceMonitor方式监控zookeeper。

  2> zookeeper部署文件由于zookeeper官方镜像对于zookeeper部署时创建的用户名和用户组为zookeeper,但是博主所部属的K8s环境对应的用户名、用户组均为root,所以如果挂载zookeeper配置文件覆盖原有配置文件时,会报只读文件没有操作权限的提示信息,因此这部分在部署时,需要指定zookeeper所使用的用户名、用户组信息,对于zookeeper所使用的用户名、用户组信息,可以在先不指定用户名、用户组部署成功之后,进入shell控制台,通过使用id zookeeper命令查看

  3> prometheus监控zookeeper时,需要开放7000端口,prometheus通过暴露出来的端口获取到对应的指标数据

  4> zookeeper部署以及serviceMonitor配置,都是在Kuboard中执行,如果使用命令行或者其他可视化操作平台请自行按照相关操作执行

1、K8s部署单节点Zookeeper配置文件

1.1、部署Deployment

---
kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: zk-deployment
  name: zookeeper
  namespace: k8s-middleware
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zk
  template:
    metadata:
      name: zk
      labels:
        app: zk
    spec:
    # 由于zookeeper部署时定义了用户组为zookeeper,此处使用zookeeper的用户组覆盖当前的用户组
      securityContext:
        fsGroup: 1000
        runAsGroup: 1000
        runAsUser: 1000
      volumes:
      - name: localtime
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
      - configMap:
          defaultMode: 493
          name: zookeeper-configmap
        name: zkconf
      containers:
      - name: zookeeper
        image: zookeeper:3.6.2
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: localtime
          mountPath: /etc/localtime
          readOnly: true
        - mountPath: /conf/zoo.cfg
          name: zkconf
          subPath: zoo.cfg

1.2、部署Service

---
kind: Service
apiVersion: v1
metadata:
  name: zookeeper
  namespace: k8s-middleware
  labels:
    app: zk
spec:
  ports:
  - port: 2181
    name: client
    protocol: TCP
    targetPort: 2181
  - name: metrics
    port: 7000
    protocol: TCP
    targetPort: 7000
  clusterIP: None
  selector:
    app: zk

1.3、挂载配置文件configMap

---
apiVersion: v1
data:
  zoo.cfg: >-
    dataDir=/data

    dataLogDir=/datalog

    clientPort=2181

    tickTime=2000

    initLimit=10

    syncLimit=5

    autopurge.snapRetainCount=10

    autopurge.purgeInterval=24

    maxClientCnxns=600

    standaloneEnabled=true

    admin.enableServer=true

    server.1=localhost:2888:3888

    ## Metrics Providers

    # https://prometheus.io Metrics Exporter

    metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider

    metricsProvider.httpPort=7000

    metricsProvider.exportJvmInfo=true
kind: ConfigMap
metadata:
  name: zookeeper-configmap
  namespace: k8s-middleware

2、K8s配置ServiceMonitor监控Zookeeper

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: zookeeper-prometheus
  namespace: k8s-middleware
spec:
  endpoints:
    - interval: 1m
      port: metrics
  namespaceSelector:
    matchNames:
      - k8s-middleware
  selector:
    matchLabels:
      app: zk

3、配置Grafana监控大盘

关于Grafana监控大盘,这里使用的大盘ID是10465,相关介绍可参看如下地址:https://grafana.com/grafana/dashboards/10465-zookeeper-by-prometheus/

使用此大盘时,注意修改变量中数据源信息。

zookeeper单节点部署,手把手从零到一

zookeeper单节点部署及注意事项

kafka戳这里:kafka单节点部署,手把手从零到一

事前准备:

1、一台Linux服务器或者是一台虚拟机

2、准备好JDK环境

3、安装好wget(当然也可以不用这个,只是用于下载安装包的一个工具,所以能下载好包就是没问题的)

4、需要了解vim的一些基础操作,不懂得可自行百度

1、Zookeeper的单节点部署

1.1、下载

这里用的zookeeper版本为3.6.4

运行命令:

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz

运行命令,进行压缩包下载,下载路径根据个人习惯定。这个命令必须要借助wget,如果没有的自行搜索安装。

1.2、解压缩

运行命令:

tar -zxvf apache-zookeeper-3.6.4-bin.tar.gz -C /opt/service/

如果是直接解压到当前目录下的话,命令的gz后面都不用加,我这边是解压到指定目录“/opt/service”

1.3、目录分析

切换到文件目录

cd /opt/service/apache-zookeeper-3.6.4-bin

# 顺便将这个改个名字,名字太长了不好操作
mv apache-zookeeper-3.6.4-bin/ zookeeper-3.6.4

然后ll展开目录

结构介绍如下:

  1. bin:放置运行脚本和工具脚本,如果是Linux环境还会有有zookeeper的运行日志zookeeper.out
  2. conf:zookeeper默认读取配置的目录,里面会有默认的配置文件
  3. docs:zookeeper相关的文档
  4. lib:zookeeper核心的jar

这里我们主要关注的是conf这个文件

1.4、启动

进入conf,运行命令:

cp zoo_sample.cfg zoo.cfg

复制zoo_sample.cfg并更名为zoo.cfg,后续操作这个文件即可

使用vim命令打开zoo.cfg文件,运行命令:

vim zoo.cfg

会发现这个配置文件中,所以看着很多,但是很多都已经被注释掉了,实际上的配置只有五行。

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
#tickTime:心跳时间,默认2000ms即2s,所有zookeeper的时间都以tickTime的倍数表示,客户端与服务器或服务器与服务器之间维持心跳,每隔1个tickTime时间就会发送一次心跳
#initLimit:初始连接时,从服务器同步到主服务器的最大心跳数,数值为tickTime的倍数
#syncLimit:主从服务器之间请求/应答的最大心跳数,数值为tickTime的倍数
#dataDir:必配,存储数据的目录
#dataLogDir:可配可不配,不配的话默认和dataDir目录一致,表示存储日志的目录
#clientPort:zookeeper服务器端口

这里最好修改一下dataDir这个参数的值,便于我们查找存储数据,比如在zookeeper目录下新增一个data目录存储数据,其他参数保持默认就可以。(非必要,看个人)

启动zookeeper

进入zookeeper的bin目录下,运行命令:

./zkServer.sh start

查看状态,运行命令:

./zkServer.sh status

启动成功

如果想要停止服务的话,运行命令:

./zkServer.sh stop

问题记录

Zookeeper安装时,运行start后查看状态发现并不在运行,如图

解决思路:

进入zookeeper目录下的logs目录,打开out文件

发现错误,这里端口被占用了,需要解决占用

经过搜索得知这是Zookeeper AdminServer,默认使用8080端口,所以需要更改默认端口,在zoo.cfg文件中添加一行admin.serverPort=2180,保存并重新启动。再次查看状态

启动成功,问题解决!

以上是关于K8s部署单节点Zookeeper并进行监控的主要内容,如果未能解决你的问题,请参考以下文章

二进制部署K8S单节点

二进制部署K8S单节点

二进制部署K8S单节点

Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作

Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作

Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作