首页 > 编程语言 >【Kubernetes 系列】如何优雅的配置 Java 微服务

【Kubernetes 系列】如何优雅的配置 Java 微服务

时间:2024-04-15 10:48:43浏览次数:37  
标签:ConfigMaps 服务 Kubernetes 配置 优雅 Java MicroProfile

【Kubernetes 系列】如何优雅的配置 Java 微服务

 


目标

  • 创建 Kubernetes ConfigMap 和 Secret
  • 使用 MicroProfile Config 注入微服务配置

一、实现外部化应用配置

在 Kubernetes 中,为 docker 容器设置环境变量有几种不同的方式,比如: Dockerfile、kubernetes.yml、Kubernetes ConfigMaps、和 Kubernetes Secrets。本节课程主要讲解怎么用后两个方式去设置你的环境变量,而环境变量的值将注入到你的微服务里。 使用 ConfigMapsSecrets 的一个好处是他们能在多个容器间复用, 比如赋值给不同的容器中的不同环境变量。

1.1、创建 Kubernetes ConfigMaps 和 Secrets

ConfigMaps 是存储非机密键值对的 API 对象。 ConfigMap API 本节不做过多的解释,现在你只需要认识它,知道它能够做什么就可以了,我们将在下节文章里面,会做一个详细的解释,本节我们会学习如何用 ConfigMap 来保存应用名字。

Secrets 尽管也用来存储键值对,但区别于 ConfigMaps 的是:它针对机密/敏感数据,且存储格式为 Base64 编码。 secrets 的这种特性使得它适合于存储证书、密钥、令牌。

1.2、外部化配置

外部化应用配置之所以有用处,是因为配置常常根据环境的不同而变化。 为了实现此功能,我们用到了 Java 上下文和依赖注入(Contexts and Dependency Injection, CDI)、MicroProfile 配置。 MicroProfile configMicroProfile 的功能特性, 是一组开放 Java 技术,用于开发、部署云原生微服务

CDI 提供一套标准的依赖注入能力,使得应用程序可以由相互协作的、松耦合的 beans 组装而成。 MicroProfile Config 为 app 和微服务提供从各种来源,比如应用、运行时、环境,获取配置参数的标准方法。 基于来源定义的优先级,属性可以自动的合并到单独一组应用可以通过 API 访问到的属性。 CDI & MicroProfile 都会被用在互动教程中, 用来从 Kubernetes ConfigMaps 和 Secrets 获得外部提供的属性,并注入应用程序代码中。

二、Java 微服务实战部署

本章节我们会部署两个Java微服务到Kubernetes,并使用MicroProfile Config、Kubernetes ConfigMaps和Secrets更改它们的配置。

首先,确保我们的Kubernetes环境已经设置好。一旦终端完成消息输出并准备好输入,就应该开始设置了。

2.1、验证kubectl

执行kubectl version命令确认已准备就绪:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.4", GitCommit:"e87da0bd6e03ec3fea7933c4b5263d151aafd07c", GitTreeState:"clean", BuildDate:"2021-02-18T16:12:00Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
 
 
  • 1
  • 2
  • 3

现在应该看到kubectl 虚拟端和服务器的版本。如果是这样,环境就已经设置好了。如果没有看到Kubernetes服务器的版本,请稍等片刻,然后重复前面的命令,直到显示出来。

2.2、进入项目目录

执行cd sample-kubernetes-config/start/ 命令进入项目目录。它包含MicroProfile微服务的实现、MicroProfile运行时的配置和Kubernetes配置。

$ cd sample-kubernetes-config/start/
 
 
  • 1

你会看到一个 finish 目录,我们将部署的两个微服务被称为“system”和“inventory”。系统微服务返回运行它的容器的JVM属性。目录微服务将来自系统微服务的属性添加到目录中。这里说明了如何在Kubernetes集群中独立的两个微服务之间实现通信。

2.3、Maven构建应用

要用Maven构建应用程序,依次运行以下命令:

$ mvn package -pl system
 
 
  • 1

这里将会输出很多的信息,我只截取部分,以作演示:
在这里插入图片描述

$ mvn package -pl inventory
 
 
  • 1

在这里插入图片描述

如图所示,现在我们分别构建了系统,库存两个微服务。

2.4、部署到Kubernetes

现在,我们需要将它们部署到Kubernetes。执行 kubectl apply -f kubernetes.yaml 命令,完成部署:

$ kubectl apply -f kubernetes.yaml
 
 
  • 1

在这里插入图片描述

总结

 

标签:ConfigMaps,服务,Kubernetes,配置,优雅,Java,MicroProfile
From: https://www.cnblogs.com/vue1168/p/18135379

相关文章

  • Java微服务框架一览
    Java微服务框架一览微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大、更复杂的应用程序,而这些应用程序作为微小服务的组合能够更好地得以开发和管理。这些微小的服务可以组合在一起工作,并实现更大、应用更广泛的功能。现在出现了很多的工具来满足使用逐段法而不......
  • java实现的微服务架构_详解Java 微服务架构
    java实现的微服务架构_详解Java微服务架构一、传统的整体式架构传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用。如图所示:系统的水平扩展如果要对系统......
  • day01-02_我的Java学习笔记 (IDEA的安装、配置及使用、IDEA常用快捷键、IEDA创建空工
    1.IDEA的安装及配置1.1IDEA的安装具体操作,详见《04、IDEA安装详解.pdf》1.2IDEA主题配置、字体配置1.3IDEA常用快捷键1.4IDEA修改快捷键在IDEA工具中,Ctrl+空格的快捷键,可以帮助我们补全代码,但是这个快捷键和Windows中的输入法切换快捷键冲突,需要修改IDEA中......
  • day01-03_我的Java学习笔记(Java基础语法--注释、字面量、变量、二进制、ASCII编码、
    1.Java基础语法1.1注释1.2字面量(Python中叫数据类型)1.3变量1.3.1变量的定义及使用1.3.2变量使用注意事项1.4数据的存储形式:二进制字节、字、bit、byte的关系:字word字节byte位bit,来自英文bit,音译为“比特”,表示二进制位。字长是指字的......
  • 物联网浏览器(IoTBrowser)-Java快速对接施耐德网络IO网关
     前一段时间有个Java技术栈的朋友联系到我,需要快速对接现有的无人值守称重系统,这里的对接是指替代现有系统,而非软件层面的对接,也就是利用现有的硬件开发一套替代现有软件的自动化系统。主要设备包括地磅秤、道闸、红外对射传感器、摄像头、小票打印、LED显示屏等等,全程使用LED......
  • 如何增强Java Excel API 的导入和导出性能
    前言GrapeCityDocumentsforExcel(以下简称GcExcel)是葡萄城公司的一款服务端表格组件,它提供了一组全面的API以编程方式生成Excel(XLSX)电子表格文档的功能,支持为多个平台创建、操作、转换和共享与MicrosoftExcel兼容的电子表格;从而使其成为解决所有电子表格挑战的完......
  • JAVA - 模块
    目录模块的概念对模块命名模块化的"Hello,World"程序模块的概念在面向对象编程中,基础的构建要素就是类。类提供了封装,私有特性只能被具有明确访问权限的代码访问,即,只能被其所属类中的方法访问,这使得对访问情况的推断称为可能。如果某个私有变量发生了变化,那么我们就会发现一系......
  • JDK 源码阅读:java.lang.Object 类
    记录下自己阅读过程的笔记,如有错误,欢迎指正!源码参考:https://github.com/kangjianwei/LearningJDK/tree/master1.基本介绍在Java中,Object类是类层次结构的根类几乎每个Java类都直接或间接继承自Object类,意味着每个类都继承了Object的方法类结构:2.源码分析2.......
  • Java调用第三方接口获取数据并存储,思路加代码
    思路:1.根据第三方接口返回的字段来创建实体类,用来接收数据2.建立连接,提供两种方式。来获取数据3.实体类转换并存储方法一:URL建立连接进行接收数据依赖<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifa......
  • 上海携程java高级面试题(一)
    一、JVM加载Class文件的原理机制?在面试java工程师的时候,这道题经常被问到,故需特别注意。Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式......