使用 StatefulSet 部署用状态应用

StatefulSet 这个对象是专门用来部署用状态应用的,可以为Pod提供稳定的身份标识,包括hostname、启动顺序、DNS名称等。

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

Dockerfile和配置文件见 zookeeperkafka

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

部署Zookeeper

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

  • zkGenConfig.sh:生成zookeeper配置文件

  • zkMetrics.sh:获取zookeeper的metrics

  • zkOk.sh:用来做ReadinessProb

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

zkGenConfig.sh

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

$ echo mntr | nc localhost $ZK_CLIENT_PORT >& 1
zk_version	3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency	0
zk_max_latency	5
zk_min_latency	0
zk_packets_received	427879
zk_packets_sent	427890
zk_num_alive_connections	3
zk_outstanding_requests	0
zk_server_state	leader
zk_znode_count	18
zk_watch_count	3
zk_ephemerals_count	4
zk_approximate_data_size	613
zk_open_file_descriptor_count	29
zk_max_file_descriptor_count	1048576
zk_followers	1
zk_synced_followers	1
zk_pending_syncs	0

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

zookeeper.yaml

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

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

部署kafka

Kafka的docker镜像制作跟zookeeper类似,都是从远程下载安装包后,解压安装。

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

我们来看下这个脚本。

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

Kafka.yaml

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

参考

最后更新于