0


k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结

k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结

大纲

  • 1 nginx镜像选择
  • 2 创建configmap保存nginx配置文件
  • 3 使用inotify监控配置文件变化
  • 4 Dockerfile创建
  • 5 调整镜像原地址使用阿里云
  • 6 创建deploy部署文件部署nginx
  • 7 测试使用nginx配置文件同步&nginx自动重启

直接使用https://hub.docker.com/_/nginx nginx镜像有几个问题

  • 1 集群环境下需要手动的配置多个nginx.conf文件
  • 2 集群环境下配置文件修改后需要 kubectl exec -it 到多个pod重启nginx

使用k8s configmap统一配置集群下所有nginx的配置,并使用inotify监听配置文件变化后自动重启

nginx镜像选择

nginx镜像地址 https://hub.docker.com/_/nginx 使用 nginx:1.23.3 作为基础镜像

此镜像的配置文件为 /etc/nginx/nginx.conf 可以看到配置文件会include /etc/nginx/conf.d 文件夹下的配置
在这里插入图片描述

只需把此文件夹与configmap挂载就可以使用自己的配置信息了

创建configmap

创建一个configmap 用来保存nginx的配置文件

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: nginx-config
  5. data:
  6. nginx.conf: |
  7. server {
  8. listen 8080;
  9. charset utf-8;
  10. server_name localhost;
  11. location / {
  12. root /usr/share/nginx/html;
  13. index index.html index.htm;
  14. }
  15. }

使用inotify监控配置文件变化

可以使用inotify 实现对配置文件夹的监控,当文件夹内有.conf文件创建,修改,删除后重新启动nginx

可以创建一个脚本,此脚本监控 /etc/nginx/conf.d 下文件的变化

  1. #!/bin/bash
  2. configfile='.conf$'
  3. #监听文件夹修改,删除事件
  4. inotifywait -e modify,delete -mr --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' /etc/nginx/conf.d | while read day time folder file event;
  5. do
  6. #判断变化的文件是否是.conf结尾的文件 注意正则判断需要使用[[]]
  7. if [[ $file =~ $configfile ]]; then
  8. nginx -t
  9. # $?返回上一个命令的结束状态 0表示正常
  10. if [ $? == 0 ]; then
  11. nginx -s reload
  12. fi
  13. fi
  14. done

再准备一个启动start.sh脚本用于启动nginx以及inotify监控

  1. echo "start nginx"
  2. # 启动nginx
  3. nginx
  4. # 启动监控 需要保持一个前台运行的程序 否则容器运行后就退出
  5. ./auto_reload.sh

inotify的使用可以参考 《linux-inotify工具监控文件状态变化总结》

Dockerfile创建

Dockerfile 内容如下,可以调整linux镜像源使用阿里云的镜像源

  1. FROM nginx:1.23.3
  2. VOLUME ["/data/service/logs","/docker/tmp","/data/service/store"]
  3. WORKDIR "/data/service"
  4. LABEL base.name="nginx-auto-reload"
  5. LABEL base.desc="nginx-auto-reload"
  6. #修改操作系统源地址 使用阿里云 可以不修改,但是由于网络原因会比较满
  7. #注意 nginx:1.23.3 镜像使用的是debian 11.x (bullseye)
  8. #需要使用对应的阿里云 镜像源 https://developer.aliyun.com/mirror/debian?spm=a2c6h.13651102.0.0.3e221b11W40Fzd
  9. RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >/etc/apt/sources.list
  10. RUN echo "deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >>/etc/apt/sources.list
  11. RUN echo "deb https://mirrors.aliyun.com/debian-security/ bullseye-security main" >>/etc/apt/sources.list
  12. RUN echo "deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main" >>/etc/apt/sources.list
  13. RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >>/etc/apt/sources.list
  14. RUN echo "deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >>/etc/apt/sources.list
  15. RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >>/etc/apt/sources.list
  16. RUN echo "deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >>/etc/apt/sources.list
  17. RUN apt-get update
  18. RUN apt-get install inotify-tools -y
  19. ADD auto_reload.sh auto_reload.sh
  20. RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
  21. COPY ["auto_reload.sh","start.sh","./"]
  22. RUN chmod 711 auto_reload.sh && chmod 711 start.sh
  23. CMD ["./start.sh"]

需要使用对应的阿里云 镜像源 https://developer.aliyun.com/mirror/debian?spm=a2c6h.13651102.0.0.3e221b11W40Fzd

在这里插入图片描述

创建镜像后推送到阿里云私库,用于后续的使用

  1. docker build -t nginx-auto-reload .
  2. docker tag nginx-auto-reload registry.cn-hangzhou.aliyuncs.com/jimliu/nginx-auto-reload
  3. docker push registry.cn-hangzhou.aliyuncs.com/jimliu/nginx-auto-reload

在这里插入图片描述

创建deploy部署文件部署nginx

部署deploy.yaml 内容如下

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. replicas: 1
  7. selector:
  8. matchLabels:
  9. app: nginx-auto-reload
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx-auto-reload
  14. spec:
  15. # 容器配置
  16. imagePullSecrets:
  17. - name: myaliyunsecret
  18. hostname: nginx-host
  19. subdomain: nginx-inner-domain
  20. containers:
  21. - image: registry.cn-hangzhou.aliyuncs.com/jimliu/nginx-auto-reload:latest
  22. name: nginx-containers
  23. # 挂载文件夹
  24. volumeMounts:
  25. - mountPath: "/etc/nginx/conf.d/"
  26. name: config-volume
  27. volumes:
  28. - name: config-volume
  29. configMap:
  30. name: nginx-config
  31. ---
  32. # 外部访问的接口
  33. apiVersion: v1
  34. kind: Service
  35. metadata:
  36. name: nginx-auto-reload-service
  37. spec:
  38. ports:
  39. - protocol: TCP
  40. port: 18080
  41. targetPort: 8080
  42. nodePort: 18080
  43. name: http8080
  44. #暴露两个接口用于测试 nginx重启
  45. - protocol: TCP
  46. port: 18081
  47. targetPort: 8081
  48. nodePort: 18081
  49. name: http8081
  50. selector:
  51. app: nginx-auto-reload

部署nginx并测试

创建configmap

在这里插入图片描述

部署nginx

  1. kubectl apply -f n-deployment.yaml

在这里插入图片描述

此步 nginx部署完成 service创建成功

测试nginx

在这里插入图片描述

8080端口访问成功

在这里插入图片描述

8081端口还无法访问

在这里插入图片描述

修改configmap中nginx配置文件 开放8081端口

在这里插入图片描述

等待configmap同步更新nginx pod中的配置文件

在这里插入图片描述
在这里插入图片描述

标签: nginx kubernetes 运维

本文转载自: https://blog.csdn.net/liuyij3430448/article/details/129670677
版权归原作者 寂寞的4角钱 所有, 如有侵权,请联系我们删除。

“k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结”的评论:

还没有评论