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

news2024/10/5 17:22:16

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的配置文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    
     server {
         listen 8080;
         charset utf-8;
         server_name  localhost; 
         
         location / {
             root   /usr/share/nginx/html;
             index  index.html index.htm;
         }
     
     }

使用inotify监控配置文件变化

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

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

#!/bin/bash
configfile='.conf$'

#监听文件夹修改,删除事件
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;
do
  #判断变化的文件是否是.conf结尾的文件 注意正则判断需要使用[[]]
  if [[ $file =~ $configfile ]]; then
     nginx -t
     # $?返回上一个命令的结束状态 0表示正常
     if [ $? == 0 ]; then
        nginx -s reload
     fi
  fi   	
done	

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

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

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

Dockerfile创建

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

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

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

在这里插入图片描述

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

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

在这里插入图片描述

创建deploy部署文件部署nginx

部署deploy.yaml 内容如下

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-auto-reload
  template:
    metadata:
      labels:
        app: nginx-auto-reload
    spec:
    # 容器配置       
      imagePullSecrets:
        - name: myaliyunsecret
      hostname: nginx-host
      subdomain: nginx-inner-domain
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/jimliu/nginx-auto-reload:latest
          name: nginx-containers
          # 挂载文件夹
          volumeMounts:
            - mountPath: "/etc/nginx/conf.d/"
              name: config-volume
      volumes:
        - name: config-volume
          configMap:
            name: nginx-config

            
            
---
# 外部访问的接口 
apiVersion: v1
kind: Service
metadata:  
  name: nginx-auto-reload-service  
spec:
  ports:
    - protocol: TCP
      port: 18080
      targetPort: 8080
      nodePort: 18080
      name: http8080
      #暴露两个接口用于测试 nginx重启
    - protocol: TCP
      port: 18081
      targetPort: 8081
      nodePort: 18081  
      name: http8081
  selector:  
    app: nginx-auto-reload

部署nginx并测试

创建configmap

在这里插入图片描述

部署nginx

kubectl apply -f n-deployment.yaml 

在这里插入图片描述

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

测试nginx

在这里插入图片描述

8080端口访问成功

在这里插入图片描述

8081端口还无法访问

在这里插入图片描述

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

在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETL 与 ELT的关键区别

ETL 和 ELT 之间的主要区别在于数据转换发生的时间和地点 — 这些变化可能看起来很小,但会产生很大的影响! ETL 和 ELT 是数据团队引入、转换并最终向利益干系人公开数据的两种主要方式。它们是与现代云数据仓库和 ETL 工具的开发并行发展的流程。 在任…

来自清华的AdaSP:基于自适应稀疏成对损失的目标重识别

文章目录摘要1、简介2、相关工作3、方法3.1、稀疏成对损失3.2、最小难度的正样本挖掘4、实验4.1、与其他成对损失的比较4.2、消融研究5、结论摘要 论文链接:https://arxiv.org/abs/2303.18247 物体重识别(ReID)旨在从大型图库中找到与给定探针具有相同身份的实例。…

【分布式版本控制系统Git】| 国内代码托管中心-Gitee、自建代码托管平台-GitLab

目录 一:国内代码托管中心-码云 1. 码云创建远程库 2. IDEA 集成码云 3. 码云复制 GitHub 项目 二:自建代码托管平台-GitLab 1. GitLab 安装 2. IDEA 集成 GitLab 一:国内代码托管中心-码云 众所周知,GitHub 服务器在国外&…

Kaggle 赛题解析 | AMP 帕金森进展预测

文章目录一、前言二、比赛说明1. Evaluation2. Timeline3. Prize4. Code Requirements三、数据说明四、总结🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 竞赛题目:AMP-Parkinson’s Disease Progression Prediction 竞赛地址…

漫画:什么是快速排序算法?

这篇文章,以对话的方式,详细着讲解了快速排序以及排序排序的一些优化。 一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理子问题。我弄个例子吧,好理解点。例如对于这个数组arr[] { 4&…

Python调用GPT3.5接口的最新方法

GPT3.5接口调用方法主要包括openai安装、api_requestor.py替换、接口调用、示例程序说明四个部分。 1 openai安装 Python openai库可直接通过pip install openai安装。如果已经安装openai,但是后续提示找不到ChatCompletion,那么请使用命令“pip instal…

07平衡负载:gRPC是如何进行负载均衡的?

负载均衡(Load Balance),其含义就是指将请求负载进行平衡、分摊到多个负载单元上进行运行,从而协同完成工作任务。 负载均衡的主要作用: 提升并发性能:负载均衡通过算法尽可能均匀的分配集群中各节点的工作量,以此提高集群的整体的吞吐量。 提供可伸缩性:可添加或减少服…

【react 全家桶】状态提升

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 08 【状态提升】 文章目录08 【状态提升】1.介绍…

【Python实战】Python采集二手车数据——超详细讲解

前言 今天&#xff0c;我们将采集某二手车数据&#xff0c;通过这个案例&#xff0c;加深我们对xpath的理解。通过爬取数据后数据分析能够直观的看到二手车市场中某一品牌的相对数据&#xff0c;能够了解到现在的二手车市场情况&#xff0c;通过分析数据看到二手车的走势&#…

C++初阶 -1- C++入门part2-引用

文章目录6.引用什么是引用&#xff1f;引用的使用引用的应用传值、传引用效率比较权限引用和指针的区别⭐7.内联函数8.auto关键字9.基于范围的for循环10.指针空值——nullptr6.引用 什么是引用&#xff1f; “别名” int a 0; int& b 0;&#x1f446;即 地址为0x00000…

Redis7搭建主从+集群三主三从主从关系由集群分配

目录文件不清晰的去Redis7搭建主从哨兵了解 别忘记关闭防火墙 hash算法一致性 1背景–主从关系由客户端构建分配 三台虚拟机&#xff0c;一台虚拟机搭建两个redis 且两个不同的端口 第一台ip和分配两个端口 6381 6382 --- 192.168.154.128 6381 6382 第二台ip和分配两个…

分析型数据库:分布式分析型数据库

分析型数据库的另外一个发展方向就是以分布式技术来代替MPP的并行计算&#xff0c;一方面分布式技术比MPP有更好的可扩展性&#xff0c;对底层的异构软硬件支持度更好&#xff0c;可以解决MPP数据库的几个关键架构问题。本文介绍分布式分析型数据库。 — 背景介绍— 目前在分布…

人工智能前沿——「全域全知全能」人类新宇宙ChatGPT

&#x1f680;&#x1f680;&#x1f680;OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸&#xff01;&#xff01;&#x1f525;&#x1f525;&#x1f525; 一、什么是ChatGPT?&#x1f340;&#x1f340; ChatGPT是生成型预训练变换模型&#xff08;Chat G…

springBoot --- mybatisPlus自动生成代码

mybatisPlus自动生成代码mybatisPlus自动生成代码pom.xmlapplication.yml自动生成代码测试主启动类生成目录结果使用插件 --- 版本要求&#xff1a;3.4.0 版本以上pom.xml更新mybatisplus插件版本mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.…

离散数学_九章:关系(2)

关系9.2 n元关系及其应用 1、n元关系&#xff0c;关系的域&#xff0c;关系的阶2、数据库和关系 1. 数据库 2. 主键 3. 复合主键 3、n元关系的运算 1. 选择运算 (Select) 2. 投影运算 (Project) 3. 连接运算 9.2 n元关系及其应用 n元关系&#xff1a;两个以上集合的元素间…

网络安全从业人员应该如何提升自身的web渗透能力?

前言 web 渗透这个东西学起来如果没有头绪和路线的话&#xff0c;是非常烧脑的。 理清 web 渗透学习思路&#xff0c;把自己的学习方案和需要学习的点全部整理&#xff0c;你会发现突然渗透思路就有点眉目了。 程序员之间流行一个词&#xff0c;叫 35 岁危机&#xff0c;&am…

Amazon SageMaker测评分享,效果超出预期

一、前言随着科技的进步和社会的发展&#xff0c;人工智能得到了愈加广泛的重视&#xff0c;特别是最近大火的Chatgpt&#xff0c;充分展现了研发通用人工智能助手广阔的研究和应用前景。让越来越多的组织和企业跟风加入到人工智能领域的研究中&#xff0c;但机器学习的实施是一…

项目---基于TCP的高并发聊天系统

目录 服务端 服务端视角下的流程图 一、数据库管理模块 1.1 数据库表的创建 1.2 .对于数据库的操作 1.2.1首先得连接数据库 1.2.2执行数据库语句 1.2.3 返回数据库中存放的所有用户的信息 1.2.4返回数据库中存放的所有用户的好友信息 二、用户管理模块 2.1、UserInfo类&…

深度学习和人工智能之间是什么样的关系?

深度学习与人工智能概念的潜在联系&#xff0c;我们依然借助维恩图来说明&#xff0c;如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊&#xff0c;同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…

学习系统编程No.10【文件描述符】

引言&#xff1a; 北京时间&#xff1a;2023/3/25&#xff0c;昨天摆烂一天&#xff0c;今天再次坐牢7小时&#xff0c;难受尽在不言中&#xff0c;并且对于笔试题&#xff0c;还是非常的困难&#xff0c;可能是我做题不够多&#xff0c;也可能是没有好好的总结之前做过的一些…