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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章