美文网首页杨蓉
k8s-nginx配置的热加载

k8s-nginx配置的热加载

作者: ron_yang | 来源:发表于2018-11-20 10:25 被阅读0次

    我们的k8s集群已经将nginx的配置使用configmap挂载到nginx镜像中,实现了配置的外部注入;
    nginx本身支持nginx -s reload重新加载配置文件,但是在k8s集群中不适合进入pod命令行执行这个命令。
    这里,我们参考一下如下代码,使用inotify-tools监控配置文件的变化后自动执行reload命令

    #!/bin/sh
    oldcksum=`cksum /etc/nginx/conf.d/default.conf`
    
    inotifywait -e modify,move,create,delete -mr --timefmt '%d/%m/%y %H:%M' --format '%T' \
    /etc/nginx/conf.d/ | while read date time; do
    
        newcksum=`cksum /etc/nginx/conf.d/default.conf`
        if [ "$newcksum" != "$oldcksum" ]; then
            echo "At ${time} on ${date}, config file update detected."
            oldcksum=$newcksum
            nginx -s reload
        fi
    
    done
    

    将上述脚本生成auto-reload.sh 文件

    我的场景是使用openresty代替nginx,基本的使用是一样的,我们需要基于dockerhub中的openresty镜像在定制自己的镜像

    开始之前,我们需要准备几个文件:

    1. inotify-tools-3.14-8.el7.x86_64.rpm,我的镜像是基于centos构建的,inotifywait 命令需要安装inotify-tools
    2. auto-reload.sh读取配置文件变化并自动执行nginx -s reload命令
    3. start.sh,openresty镜像中nginx启动命令是前台运行的,增加一个reload脚本,需要让nginx启动命令后台执行,所以写一个启动脚本来实现,内容如下:
    #!/bin/bash
    /usr/bin/openresty -g "daemon off;" &
    /auto-reload.sh
    

    最后,镜像的Dokcerfile如下

    FROM openresty/openresty:1.13.6.2-1-centos
    ADD auto-reload.sh auto-reload.sh
    ADD inotify-tools-3.14-8.el7.x86_64.rpm inotify-tools-3.14-8.el7.x86_64.rpm
    RUN rpm -ivh inotify-tools-3.14-8.el7.x86_64.rpm && rm -rf inotify-tools-3.14-8.el7.x86_64.rpm \
         && chmod +x auto-reload.sh
    CMD ["./start.sh"]
    

    请注意,这个例子中,我是使用configmap将default.conf挂载到/etc/nginx/conf.d目录下
    k8s集群中部署上述镜像后,修改configmap中default.conf的内容,大概需要等待10秒到1分钟的时间,就能看到日志显示配置重新加载完毕

    image.png

    相关文章

      网友评论

        本文标题:k8s-nginx配置的热加载

        本文链接:https://www.haomeiwen.com/subject/lxdtqqtx.html