当前位置: 首页 > news >正文

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

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 ]]; thennginx -t# $?返回上一个命令的结束状态 0表示正常if [ $? == 0 ]; thennginx -s reloadfifi   	
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: 1selector:matchLabels:app: nginx-auto-reloadtemplate:metadata:labels:app: nginx-auto-reloadspec:# 容器配置       imagePullSecrets:- name: myaliyunsecrethostname: nginx-hostsubdomain: nginx-inner-domaincontainers:- image: registry.cn-hangzhou.aliyuncs.com/jimliu/nginx-auto-reload:latestname: nginx-containers# 挂载文件夹volumeMounts:- mountPath: "/etc/nginx/conf.d/"name: config-volumevolumes:- name: config-volumeconfigMap:name: nginx-config---
# 外部访问的接口 
apiVersion: v1
kind: Service
metadata:  name: nginx-auto-reload-service  
spec:ports:- protocol: TCPport: 18080targetPort: 8080nodePort: 18080name: http8080#暴露两个接口用于测试 nginx重启- protocol: TCPport: 18081targetPort: 8081nodePort: 18081  name: http8081selector:  app: nginx-auto-reload

部署nginx并测试

创建configmap

在这里插入图片描述

部署nginx

kubectl apply -f n-deployment.yaml 

在这里插入图片描述

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

测试nginx

在这里插入图片描述

8080端口访问成功

在这里插入图片描述

8081端口还无法访问

在这里插入图片描述

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

在这里插入图片描述

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

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

相关文章:

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

k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结 大纲 1 nginx镜像选择2 创建configmap保存nginx配置文件3 使用inotify监控配置文件变化4 Dockerfile创建5 调整镜像原地址使用阿里云6 创建deploy部署文件部署nginx7 测试使用nginx配置文件同步&…...

动态内存管理(上)——“C”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是动态内存管理噢,下面,让我们进入动态内存管理的世界吧 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 为什么存在动态内存分配 我们已…...

GPT-4发布,这类人才告急,大厂月薪10W+疯抢

ChatGPT最近彻底火出圈,各行各业都在争相报道,甚至连很多官媒都下场“跟风”。ChatGPT的瓜还没吃完,平地一声雷,GPT-4又重磅发布! 很多小伙伴瑟瑟发抖:“AI会不会跟自己抢饭碗啊?” 关于“如何…...

MySQL数据库实现主主同步

前言 MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库,让它们可以互相读写数据库,从数据库变成主数据库;主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程,只要对方数据改变,自己就…...

JavaScript传参的6种方式

JavaScript传参的方式1. 传递基本类型参数2. 传递对象类型参数3. 使用解构赋值传递参数4. 使用展开运算符传递参数5. 使用可选参数6. 使用剩余参数JavaScript是一门非常灵活的语言,其参数传递方式也同样灵活。在本篇文章中,会详细介绍JavaScript中的参数…...

蓝桥之统计子矩阵

样例说明 满足条件的子矩阵一共有 19 , 包含: 大小为 11 的有 10 个。 大小为 12 的有 3 个。 大小为13 的有 2 个。 大小为 14 的有 1 个。 大小为 21 的有 3 个。 前缀和二维数组 前缀和暴力搜索 import java.util.*; public class Main{private static int ans0;pub…...

Java的基础面试题

一.java基础1.JDK和JRE有什么区别?JDK是java开发工具包,JRE是java运行时环境(包括Java基础类库,java虚拟机)2.和equals的区别是什么?比较的是两者的地址值,equals比较的是两者的内容是否一样3.两…...

J1939故障码诊断说明

1:1939整体协议说明 这里主要说明1939不同的协议,对应不同的网络分层 注意了,这里只进行文档解析说明,具体查看去搜素协议的关键字进行理解 2:DMx和FMI 说明 想知道每个代号的具体含义,可以去 saeJ1939…...

XCPC第十三站,贪心问题

一.区间选点 我们采取这样的策略来选点:step(1)将区间按照右端点的大小从小到大排序;step(2)从前往后依次枚举每个区间,如果当前区间中已经包含点,直接pass,否则选当前区…...

一文让你吃透 Vue3中的组件间通讯 【一篇通】

文章目录前情回顾前言1. 父组件 > 子组件通讯传递2. 子组件 > 父组件通讯传递3. 爷孙组件,后代组件通讯数据总结前情回顾 在本专栏前一章节中,我为大家带来了 Vue3 新特性变化上手指南 的归纳梳理,主要介绍了 Vue3 的 Proxy 响应式原理…...

EVE遭遇大规模DDOS攻击,玩家和官方都傻眼了

如果你恰好是一名《星战前夜》(EVE)的国际服玩家(虽然这个几率很小),又恰好因为疫情一直待在家里,那你就真是倒霉透顶了。因为从1月底开始,EVE的服务器就一直受到大规模的DDOS攻击,而…...

【数据结构】二叉树及相关习题详解

新年新气象! 祝大家兔年 财源滚滚! 万事胜意! 文章目录前言1. 树的一些基础概念1.1 树的一些基本概念1.2 树的一些重要概念2. 二叉树的一些基本概念2.1 二叉树的结构2.2 两种特殊的二叉树3. 二叉树的性质4. 二叉树的存储5. 二叉树的基本操作5.1 构造一棵二叉树5.2 二叉树的遍历…...

锂电池充电的同时也能放电吗?

大家应该都有这样经历,我们的手机在充电的同时也能边使用,有的同学就会说了,这是因为手机电池在充电的同时也在放电。如果这样想我们可能就把锂电池类比了一个蓄水池,以为它在进水的同时也能出水,其实这个比喻是错误的…...

通信工程考研英语复试专有名词翻译

中文英文频分多址Frequency Division Multiple Access码分多址Code Division Multiple Access时分多址Time Division Multiple Access移动通信mobile communication人工智能artificial intelligence水声通信Middle-Range Uwa Communication正交频分复用Orthogonal frequency di…...

注意力机制(四):多头注意力

专栏:神经网络复现目录 注意力机制 注意力机制(Attention Mechanism)是一种人工智能技术,它可以让神经网络在处理序列数据时,专注于关键信息的部分,同时忽略不重要的部分。在自然语言处理、计算机视觉、语…...

【2023Unity游戏开发教程】零基础带你从小白到超神19——射线检测

文章目录 射线检测从某点发射一条射线从摄像机发射一条射线射线检测 游戏中的红外线,默认肉眼是看不到的,从某个初始点开始,沿着特定的方向发射一条不可见且无限长的射线,通过此射线检测是否有任何模型添加了Collider碰撞器组件。一旦检测到碰撞,停止射线继续发射。 碰撞检…...

内存泄漏和内存溢出的区别

参考答案 内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory。内存泄露(memory leak):指程序在申请内存后,无法释放已申请的内存空间,内存泄露堆积会导致内存被…...

文本三剑客之sed编辑器

文本三剑客:都是按行读取后处理。 grep 过滤行内容。awk 过滤字段。sed 过滤行内容;修改行内容。sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中…...

深度学习:GPT1、GPT2、GPT-3

深度学习:GPT1、GPT2、GPT3的原理与模型代码解读GPT-1IntroductionFramework自监督学习微调ExperimentGPT-2IntroductionApproachConclusionGPT-3GPT-1 Introduction GPT-1(Generative Pre-training Transformer-1)是由OpenAI于2018年发布的…...

使用Docker 一键部署SpringBoot和SpringCloud项目

使用Docker 一键部署SpringBoot和SpringCloud项目 1. 准备工作2. 创建Dockerfile3. 创建Docker Compose文件4. 构建和运行Docker镜像5. 验证部署6. 总结Docker是一个非常流行的容器化技术,可以方便地将应用程序和服务打包成容器并运行在不同的环境中。在本篇博客中,我将向您展…...

【数据结构】用栈实现队列

💯💯💯 本篇总结利用栈如何实现队列的相关操作,不难观察,栈和队列是可以相互转化的,需要好好总结它们的特性,构造出一个恰当的结构来实现即可,所以本篇难点不在代码思维,…...

[Netty源码] 服务端启动过程 (二)

文章目录1.ServerBootstrap2.服务端启动过程3.具体步骤分析3.1 创建服务端Channel3.2 初始化服务端Channel3.3 注册selector3.4 端口绑定1.ServerBootstrap ServerBootstrap引导服务端启动流程: //主EventLoopGroup NioEventLoopGroup master new NioEventLoopGroup(); //从E…...

Week 14

代码源每日一题Div2 106. 订单编号 原题链接:订单编号 思路:这题本来没啥思路,直到获得了某位佬的提示才会做( 我们可以用set来维护一些区间,这些区间为 pair 类型,表示没有使用过的编号,每次…...

【微信小程序】-- 使用 Git 管理项目(五十)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

leetcode每日一题:134. 加油站

系列:贪心算法 语言:java 题目来源:Leetcode134. 加油站 题目 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[…...

开放式基金实时排行 API 数据接口

开放式基金实时排行 API 数据接口 多维度参数返回,实时数据,类型参数筛选。 1. 产品功能 返回实时开放式基金排行数据可定义查询基金类型参数;多个基金属性值返回多维指标,一次查询毫秒级返回;数据持续更新与维护&am…...

Android开发中synchronized的实现原理

synchronized的三种使用方式 **1.修饰实例方法,**作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 没有问题的写法: public class AccountingSync implements Runnable{//共享资源(临界资源)static int i0;/*** synchronized 修饰实例方法*/p…...

【华为OD机试 2023最新 】 统一限载货物数最小值(C++)

题目描述 火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车(K辆干货中转车,K辆湿货中转车)。 货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依次装货到中转车,一个供货商的货只能装到一辆车上,不能拆装,但是…...

【生活工作经验 十】ChatGPT模型对话初探

最近探索了下全球大火的ChatGPT,想对此做个初步了解 一篇博客 当今社会,自然语言处理技术得到了迅速的发展,人工智能技术也越来越受到关注。其中,基于深度学习的大型语言模型,如GPT(Generative Pre-train…...

基于Spring Boot房产销售平台的设计与实现【源码+论文】分享

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 摘要 信息技术的发展…...

微信公众平台维护/重庆seo顾问

一、任务与目的1. 实验任务:(1) 掌握和完成设置不同vlan间通过路由器互通的方法;(2) 完成同vlan间计算机的测试。2. 实验目的:(1) 进一步熟悉交换机vlan间互通的配置方法;(2) 熟悉和掌握不同vlan间互通的测试方法。二、原理(条件)1.相关知识: (1) Vlan的工作原理; (2) 交换机与…...

网站建设 制作公司/郑州网站建设推广优化

展开全部DB2数据库获取当前2113系统时间的5261方法和操作步骤如下:41021、首先,使用1653sysdate函数获取当前时回间,并执行以下语句答:“select sysdate from dual”,如下图所示。2、其次,使用sysdate()获取…...

龙岗网站建设培训/营销推广软件

Laravel 数据库之:数据库请求构建器 简介 Laravel 的数据库查询构造器提供了一个方便的接口来创建及运行数据库查询语句。它能用来执行应用程序中的大部分数据库操作,且能在所有被支持的数据库系统中使用。 Laravel 的查询构造器使用 PDO 参数绑定来保护…...

旅游景区网站建设方案/百度快速收录网站

步骤: 1、在Activity布局文件中定义framelayout用于添加Fragment 2、创建两个Fragment用于切换 3、获取Fragment管理器,并开启事物FragmentTransaction 4、通FragmentTransaction.add(resource id, fragment)将fragment添加到布局上,提交事物…...

沧州公司做网站/培训计划和培训内容

下载及安装7z http://7-zip.org/download.html 常用命令 压缩 7z a -p密码 压缩路径及文件名 源路径及文件名 例如压缩./public/data/md5/目录下的所有文件到根目录,压缩包名称为po1.zip,密码为abcd 7z a -pabcd po1.zip ./public/data/md5/* 解压 7z x …...

个人做网站创业/新区快速seo排名

亲测可用,若有疑问请私信 1.插件安装的方式 插件安装方式一:直接安装 下载插件安装包后,把安装包解压到packages目录(菜单->首选项->浏览插件目录)中,完成安装 插件安装方法二:使用pac…...