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

这篇具有很好参考价值的文章主要介绍了微服务系列文章之 Springboot应用在k8s集群中配置的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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}

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

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

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

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

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

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

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

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

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

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

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

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模板部署项目,每次都需要跟研发人员去核对。
 文章来源地址https://www.toymoban.com/news/detail-571098.html

到了这里,关于微服务系列文章之 Springboot应用在k8s集群中配置的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用

    前面讲解了使用Helm部署mysql集群,这里来看看使用Ingress搭建负载均衡功能 功能类似 Nginx ,可以根据域名、路径把请求转发到不同的 Service , Ingress 为外部访问集群提供了一个 统一 入口, 避免 了 对外暴露集群端口 ,可以配置 https,http访问集群应用,接下来看看如何通过腾讯云来

    2024年01月22日
    浏览(58)
  • k8s整合istio配置gateway入口、配置集群内部服务调用管理

    curl -HHost:tomcat.shenshuxin.cn “http://node101:32318” 端口号是ingressgateway服务的nodeport 查看方式: kubectl get service -n istio-system | grep istio-ingressgateway 找到80端口对应的nodeport即可 注意部署的两个deployment需要指定一下版本标签 version: ?? 注意这里的hosts名称(demo-tomcat-for-istio-name)要和上面

    2024年02月12日
    浏览(37)
  • K8S 集群应用配置coredns实现访问内网域名 —— 筑梦之路

    问题: 在内网环境中,服务器不能连接互联网,某些服务直接使用ip访问又不方便,于是直接在hosts中配置域名解析,而K8S集群中的应用需要访问这些服务,pod容器内却不能解析,此时该怎么解决呢? 解决方法: 第一种方法:内网自建DNS服务,每台主机DNS都指向该dnsf服务器

    2024年02月15日
    浏览(39)
  • k8s系列文章一:安装指南

            当使用的Docker容器的数量变得越来越多时,对于端口、Docker容器的管理变得越来越麻烦,这时为方便管理容器,资源管理器随之出现,其中最出名的就是Kubernetes,简称K8s(因K与S间有8个字母),可以说k8s是docker的升级版,可用于docker集群配置管理微服务,同样的集群

    2024年02月05日
    浏览(42)
  • SpringBoot + K8S 中的滚动发布、优雅停机、弹性伸缩、应用监控、配置分离

    前言 配置 健康检查 滚动更新 弹性伸缩 Prometheus集成 配置分离 汇总配置 业务层面 运维层面 K8s + SpringBoot实现零宕机发布:健康检查+滚动更新+优雅停机+弹性伸缩+Prometheus监控+配置分离(镜像复用) 基于 Spring Boot + MyBatis Plus + Vue Element 实现的后台管理系统 + 用户小程序,支持

    2024年02月07日
    浏览(41)
  • K8S系列文章之 内外网如何互相访问

    K8S中网络这块主要考虑 如何访问外部网络以及外部如何访问内部网络  需求 k8s集群内的pod需要访问mysql,由于mysql的性质,不适合部署在k8s集群内,故k8s集群内的应用需要链接mysql时,需要配置链接外网的mysql,本次测试 k8s集群ip段为 192.168.23.xx 。以下提供两种方式, Endpoint 和

    2024年02月14日
    浏览(44)
  • K8S系列文章 之 容器存储基础 Volume

    Volume是容器数据卷。我们经常创建删除一些容器,但有时候需要保留容器中的一些数据,这时候就用到了Volume。它也是容器之间数据共享的技术,可以将容器中产生的数据同步到本地。实际就是把容器中的目录挂载到运行着容器的服务器或个人电脑上。 第一种挂载volume的方式

    2024年02月13日
    浏览(33)
  • K8S系列文章之 开源的堡垒机 jumpserver

    一、jumpserver作为一款开源的堡垒机,不管是企业还是个人,我觉得都是比较合适的,而且使用也比较简单。 二、这里记录一下安装和使用过程。 1、安装,直接docker不是就行 目前没有看到3版本的,3版本的功能更加强大,可以官网学习一下。 2、使用 资产添加不用细讲,主要

    2024年02月14日
    浏览(41)
  • K8S系列文章之 部署MySQL数据库

    1 编写 mysql.yaml文件 2 执行如下命令创建 3 通过如下命令查看创建结果 使用如下命令查看 如: [root@master ~]# kubectl get pod -n devops | grep mysql devops-mysql-59b68c47d4-ttbng               1/1     Running   0          23h [root@master ~]# 4 命令行进入Pod并登录mysql 至此,数据库已经安装完成,

    2024年02月11日
    浏览(50)
  • K8S系列文章之 Docker安装使用Kafka

    通过Docker拉取镜像的方式进行安装 照例先去DockerHub找一下镜像源,看下官方提供的基本操作(大部分时候官方教程比网上的要清晰一些,并且大部分教程可能也是翻译的官方的操作步骤,所以直接看官方的就行) 老实说Kafka的参数配置项太多了,比较繁琐。 如果是Linux环境下

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包