使用StatefulSet部署有状态应用

    下面以在kubernetes1.6版本中部署zookeeper和kafka为例讲解StatefulSet的使用,其中kafka依赖于zookeeper。

    Dockerfile和配置文件见 zookeeper 和 。

    注:所有的镜像基于CentOS系统的JDK制作,为我的私人镜像,外部无法访问,yaml中没有配置持久化存储。

    Dockerfile中从远程获取zookeeper的安装文件,然后在定义了三个脚本:

    • zkGenConfig.sh:生成zookeeper配置文件
    • zkMetrics.sh:获取zookeeper的metrics

    我们在来看下这三个脚本的执行结果:

    zkMetrics.sh脚本实际上执行的是下面的命令:

    zkOk.sh脚本实际上执行的是下面的命令:

    zookeeper.yaml

    下面是启动三个zookeeper实例的yaml配置文件:

    我们再主要下上面那三个脚本的用途。

    与zookeeper不同的是,只要一个脚本,但是又依赖于我们上一步安装的zookeeper,kafkaGenConfig.sh用来生成kafka的配置文件。

    我们来看下这个脚本。

    该脚本根据statefulset生成的pod的hostname的后半截数字部分作为broker ID,同时再替换zookeeper的地址。

    Kafka.yaml

    下面是创建3个kafka实例的yaml配置。