k8s部署zk集群

       参考官方例子制作zookeeper镜像(为了方便起见,下面用zk来统称zookeeper),由于业务的原因,需要替换掉基础镜像,并对官方的脚本作一定的简化。

FROM registry.agree.com.cn/agree/afa/centos-net-tools2 

ARG ZK_DIST=zookeeper-3.4.8

ENV LANG=en_US.utf8 \
    JAVA_HOME=/opt/jdk1.8.0_181 \
    PATH=$PATH:/opt/jdk1.8.0_181/bin \
    ZK_USER=zookeeper \
    ZK_DATA_DIR=/opt/zookeeper/runc/data \
    ZK_DATA_LOG_DIR=/opt/zookeeper/runc/data/log \
    ZK_LOG_DIR=/opt/zookeeper/runc/log \
    ZK_HOME=/opt/zookeeper \
    ZK_BIN=/opt/zookeeper/bin

##替换版本改这里
COPY ${ZK_DIST}/ ${ZK_HOME}/
COPY zkGenConfig.sh zkOk.sh zkMetrics.sh zkStartup.sh /opt/zookeeper/bin/


RUN set -x \
    && useradd $ZK_USER \
    && [ `id -u $ZK_USER` -eq 1000 ] \
    && [ `id -g $ZK_USER` -eq 1000 ] \
    && mkdir -p $ZK_DATA_DIR $ZK_DATA_LOG_DIR $ZK_LOG_DIR \
    && chown -R "$ZK_USER:$ZK_USER" $ZK_HOME $ZK_DATA_DIR $ZK_DATA_LOG_DIR $ZK_LOG_DIR \
    && chmod -R 777 $ZK_HOME $ZK_DATA_DIR $ZK_DATA_LOG_DIR $ZK_LOG_DIR \
    && ln -s /opt/zookeeper/bin/* /usr/bin

CMD ${ZK_BIN}/zkGenConfig.sh && ${ZK_BIN}/zkServer.sh start-foreground

         zk集群节点是有状态的,即zk集群每个节点的myid都是不一样的。使用statefulset启动zk节点后,可以看到pod的id会按照一定顺序排列,例如zk-0,zk-1,zk-2,… 所以可以通过podId,hostName,myid作一个映射。处理的主要逻辑集中在zkGenConfig.sh里下面的代码,如下所示,获取hostName的最后一位,比如zk-0获取到0作为myid。

if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then
        NAME=${BASH_REMATCH[1]}
        ORD=${BASH_REMATCH[2]}

         DNS的解释可以参考k8s官方文档(在参考中有相关链接)。制作好zk镜像之后,就可以通过zookeeper-pv.yaml来分配卷资源,使用statefulSet方式来启动zk。

        需要上述例子资料,或者学习交流,可以通过邮箱联系我,我的邮箱是[email protected],我看到邮件会尽快回复。

参考链接:

https://github.com/kubernetes-retired/contrib/tree/master/statefulsets/zookeeper

https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/#zookeeper-basics

你可能感兴趣的:(容器化)