微服务系列文章之 Springboot应用在k8s集群中配置的使用

news2024/11/25 13:40:22

Docker部署其实也可以再docker run或者dockerfile里面,将配置文件目录映射到宿主机,然后通过宿主机配置文件修改参数。

FROM docker.io/python:3.6MAINTAINER tianye
# 设置容器时间
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENV LANG C.UTF-8         # 设置编码
ENV PATH=$PATH:/usr/local/lib/python3.6/    
ENV PYTHONPATH $PATH     # 配置环境变量

ENV PARAMS=""      # 给我们要传的参数一个初始值
ARG VERSION=1.20

#代码添加到code文件夹
ADD ./tttt/ /test/code/tttt/
#设置code文件夹为工作目录
WORKDIR /test/code/tttt/
CMD python3 ttt.py $PARAMS

很多时候Dockerfile文件中需要定义变量,减少对Dockerfile文件的修改,在编译的时候从外部传入参数,这种情况可使用 ARG参数,然后通过--build-arg进行赋值。

例如:Dockerfile 如下 参数变量VERSION从外部传递进去,在构建镜像时,使用--build-arg VERSION=版本号,进行传递

docker build -f  dockerfile/server_dockerfile.v5.0.1 -t server:v5.0.1 zcbus_server --build-arg VERSION=v5.0.1 -e PARAMS="我是参数"

 我们这里实现传参是通过环境变量实现的,这里的  -e PARAMS="我是参数" ,PARAMS是在Dockerfile中指定的。

那个k8s呢?集群内随机创建pod对象,文件存储基本也不会使用本地卷,都是用分布式文件系统(FastDFS)或者对象存储(MinIO),好像没有地方放配置文件了啊。那么是不是我上线前就必须把线上配置丢到程序里的配置文件中去呢?

答案那肯定是不用啦。

其实同时做过运维和开发的技术可能会知道,其实springboot的yml文件,其实是支持操作系统环境变量加载的。

例如:

redis:
    port: 16379
    host: 36.134.204.163

上面是一个常见的redis的配置,其实他还可以成下面这样:

redis:
    port: ${REDIS_PORT:16379}
    host: ${REDIS_HOST:36.134.204.163}

本机运行的时候,其实没有任何影响。

那么第二种写法是什么意思呢?

这里就要说道系统环境变量了。还记得JavaHome怎么配置吗?那其实就是环境变量。

环境变量是系统中配置的全局参数变量,任何程序都可以直接通过系统接口读取到环境变量的值。

上面的写法就是,如果系统中存在REDIS_PORT环境变量参数设置,那么就使用这个设置,如果没有,那么使用16379作为默认值。host也是一个道理。

系统中存在REDIS_HOST环境变量参数设置

 去掉外部的系统中REDIS_HOST环境变量参数

1. 将服务中所有需要解耦的配置项全部配置成环境变量+默认值的方式。

2. 将环境变量的列表提供给k8s运维人员,由他按照列表,配置k8s部署的yml文件,通过spec下env增加对应环境变量设置,改为k8s环境下设置。

k8s会把env配置下的参数,输出到容器的环境变量中,服务直接读取就会生效。从而实现解耦。

其实这个办法是比较推荐的,可以开发组内通过规范的形式,把mysql、redis、mq、nacos等信息都统一处理上。基本不会影响开发人员本地开发测试工作。同时也不会增加k8s运维人员过多负担。

    spec:
      containers:
      - args: []
        env:
        - name: RUNTIME_ENV
          value: 'prd'
        - name: DATASOURCE_IP
          value: '192.168.0.60'
        - name: DATASOURCE_PORT
          value: '3306'
        - name: DATASOURCE_USERNAME
          value: 'root'
        - name: DATASOURCE_PASSWORD    #数据库密码

其实还有一个办法,经测试,deploy的env的配置,会复写springboot中yml对应key的值。

于是乎我们其实可以直接写成这样:

      env:
        - name: spring.redis.host
          value: '192.168.216.219' 
        - name: spring.redis.port
          value: '6379'
        - name: spring.redis.password
          value: '123456'

 于是k8s下启动容器的java服务中,生效的是k8s配置的192.168.216.219。

jar包中原先的配置就被覆盖掉了。

这种方式感觉上其实比方案一要简单,但其实存在些问题。比方说不同项目中yml的层级不同,可能配置项目的名称也不一样,k8s管理员那里,不太好通过统一的yaml模板部署项目,每次都需要跟研发人员去核对。
 

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

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

相关文章

Windows安装Oh-My-Posh美化Powershell

Windows Terminal:https://www.microsoft.com/store/productId/9N0DX20HK701 最新Powershell下载:https://github.com/PowerShell/PowerShell/releases Oh-My-Posh官网:https://ohmyposh.dev/ Nerd字体下载:https://www.nerdfonts…

Git源代码管理方案

背景 现阶段的Git源代码管理上有一些漏洞,导致在每次上线发布的时间长、出问题,对整体产品的进度有一定的影响。 作用 新的Git源代码管理方案有以下作用: 多功能并行开发时,测试人员可以根据需求任务分配测试自己的功能&#…

MyBatis-Plus条件查询问题解决

问题描述 系统中有用户注册的功能,但是会出现重复注册的现象,代码中有做过重复校验,但是没有生效。 问题解决 首先排查数据生成时间点不同,相差时间有长有短,不是用户同时多次点击的原因,应该是用户这边…

js判断两个数组是增加还是删除

JS判断两个数组的数据&#xff0c;增加的数据以及删除的数据。 // 第一个参数是新数组&#xff0c;第二个参数是旧数 const compareArrays function(arr1, arr2 ) {let remove []let add []// 旧数据循环for (let i 0; i < arr2.length; i) {let item arr2[i];if (arr…

EvilBox---One靶机复盘

EvilBox—One靶机复盘 这个靶场学会了原来id_rsa的私钥可以直接爆破&#xff0c;利用ssh2john工具提取私钥&#xff0c;然后john直接爆破就可以了。 靶场下载地址&#xff1a;https://download.vulnhub.com/evilbox/EvilBox—One.ova 这个靶场是直接给ip地址的我们就不用扫描…

Spring Boot使用httpcomponents实现http请求

基于org.apache.httpcomponents的httpclient实现&#xff0c;其它的实现方式都行。 1. pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/…

快速实现主从表编辑,实现多个不定长从表

目录 1 前言 2 不定长表、定长表的定义 3 根据已有的电子表格制作数据库表并导入数据 3.1 订单 3.2 订单明细 3.3 客户 4 配置主从关联关系 5 继续增加一个主从关联关系 6 测试一下运行结果 7 一段代码用于实现在panel中画出字段列表面板 1 前言 实际工作中&#xff…

扑克牌检测Y8S

采用YOLOV8训练&#xff0c;得到PT模型&#xff0c;然后直接转ONNX&#xff0c;使用OPENCV的DNN&#xff0c;不需要其他依赖&#xff0c;支持C/PYTHON 扑克牌检测Y8S

数据结构(王道)——线性表的存储结构之顺序表

线性表和顺序表的关系&#xff1a; 两种实现方式&#xff1a;静态分配、动态分配 总结&#xff1a;

Win7如何合并C盘与D盘?

电脑C盘不够用&#xff0c;需要把D盘的卷删除并合并到C盘中。 整体步骤&#xff1a; 1.右击此电脑-管理-磁盘管理。 2.假如要把D盘容量合并到C盘&#xff0c;右击D盘&#xff0c;选择删除卷&#xff0c;点击“是”。此时D盘数据会被清空&#xff0c;建议先备份数据。 3.删除…

消息队列MQ入门理解

功能特性: 物联网应用 物联网设备通过微消息队列(LMQ)连接云端,双向通信,数据传输;设备数据通过消息队列(MQ)连接计算引擎,分析数据或者源数据实时高效写入到 HiTSDB / HiStore / ODPS 等。 大规模缓存同步 在商业大促活动中,如“双11”大促,各个分会场会有琳琅…

基于输出调节的一致性编队控制

参考博客&#xff1a; https://blog.csdn.net/weixin_44346182/article/details/131747082 在输出调节的基础上&#xff0c;实现了输出一致性&#xff0c;而编队控制就是没有偏移量的状态一致性&#xff0c;恰好本题的C矩阵就是系统的第一阶的状态&#xff08;位置&#xff0…

spring boot security自定义权限检查

前言 鉴权主要分为身份认证和权限控制两部分&#xff1a; 身份认证&#xff1a;检查当前用户是否合法&#xff08;比如已登录&#xff09; 权限控制&#xff1a;检查当前用户是否有访问该资源的权限 本文主要给出一个示例&#xff0c;说明如何自定义权限控制。 因为一个完整的…

增长能力模型:最大限度地发挥增长团队的潜力

作为增长领导者&#xff0c;准确评估你的组织和团队成员是一项非常重要且耗时的工作。但是如果我们计划为未来的增长领导者创造一条职业道路&#xff0c;我们就需要一个流程来为整个团队提供客观的反馈&#xff0c;这就是增长能力模型的用武之地。 增长能力模型提供了一个框架&…

argc,argv

文章目录 argc 是argument count的缩写表示传入main函数中的参数个数&#xff0c;包括这个程序本身 argv 是 argument vector的缩写表示传入main函数中的参数列表&#xff0c;其中argv[0]:程序的名字(.exe) int main(int argc, char** argv) {std::cout << "argc:…

1、环境搭建

下载visual studio,社区版基本够用了,其他版本是收费的。 下载之后安装即可。 安装完成之后要求我们选择要使用的模块。这里我们勾选如图中圈起来的模块,并选择安装。因为我这边已经安装过,所以按钮变成了“关闭” 安装完毕后,重启。 重启完成之后,打开Visual studio。…

配置JDK_IDEA

配置JDK_IDEA 1.安装JDK配置环境变量1.1.安装JDK1.2.配置JDK环境变量 2.IDEA 1.安装JDK配置环境变量 1.1.安装JDK 链接: 下载JDK 1.2.配置JDK环境变量 2.IDEA 链接: IDEA官网 自行激活

分布式运用——ELK 企业级日志分析系统

分布式运用——ELK 企业级日志分析系统 一、ELK 简介1.ELK的主要组件2.可以添加的其它组件3.为什么要使用 ELK4.完整日志系统基本特征5.ELK 的工作原理&#xff1a; 二、ELK集群部署三、ELK Elasticsearch 集群部署&#xff08;在Node1、Node2节点上操作&#xff09;1&#xff…

扩散模型学习笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言 &#xff08;注&#xff1a;高斯分布前加乘以项改变其方差&#xff09; 深入浅出扩散模型系列&#xff1a;DDPM架构图解&#xff08;模型架构篇&#x…

【C/C++】类成员进阶——类中静态成员static

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…