本节我们会学到如何以及为什么要实现外部化微服务应用配置。 具体来说,你将学习如何使用 Kubernetes ConfigMaps 和 Secrets 设置环境变量, 然后在 MicroProfile config 中使用它们。

目标

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

一、实现外部化应用配置

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

1.1、创建 Kubernetes ConfigMaps 和 Secrets

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

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

1.2、外部化配置

外部化应用配置之所以有用处,是因为配置常常根据环境的不同而变化。 为了实现此功能,我们用到了 Java 上下文和依赖注入(Contexts and Dependency Injection, CDI)、MicroProfile 配置。 MicroProfile config 是 MicroProfile 的功能特性, 是一组开放 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"}

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

2.2、进入项目目录

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

$ cd sample-kubernetes-config/start/

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

2.3、Maven构建应用

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

$ mvn package -pl system

这里将会输出很多的信息,我只截取部分,以作演示:

$ mvn package -pl inventory

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

2.4、部署到Kubernetes

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

$ kubectl apply -f kubernetes.yaml

如何优雅的配置 Java 微服务相关推荐

  1. Java微服务(四)【idea配置本地maven】【中文idea版本】(手把手编写,超级详细)

    Java微服务(三)中,我们已经有了本地环境: 1.为了不占用C盘的环境,咱们将[maven]中[conf]下的[settings.xml]文件默认的存储库位置更换一下. [<localRepo ...

  2. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  3. 带有Spring Cloud Config和JHipster的Java微服务

    朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 如今,使用Java和Spring ...

  4. Java微服务开发指南-Java环境下的微服务

    本文涉及的内容,能让你学到什么? 本书适用于开发微服务的Java开发人员和架构师.我们在开始介绍微服务架构前,先讲述一些抽象的基本概念.不幸的是,使用新技术并不能神奇地解决分布式系统问题.但是我们通过 ...

  5. Java微服务开发指南 -- Java环境下的微服务

    Java环境下的微服务 本文涉及的内容,能让你学到什么? 本书适用于开发微服务的Java开发人员和架构师.我们在开始介绍微服务架构前,先讲述一些抽象的基本概念.不幸的是,使用新技术并不能神奇地解决分布 ...

  6. 如何通过 Serverless 提高 Java 微服务治理效率?

    作者 | 王科怀(行松) 来源 | 阿里巴巴云原生公众号 微服务治理面临的挑战 在业务初期,因人手有限,想要快速开发并上线产品,很多团队使用单体的架构来开发.但是随着公司的发展,会不断往系统里面添加新 ...

  7. 带有Spring Boot和Spring Cloud的Java微服务

    朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. Java是开发微服务架构时使用的 ...

  8. Java微服务:蛋糕是骗人的,但您不能忽略它

    构建微服务实际上意味着什么? 通过微服务框架的眼光回答 忽略微服务的趋势已变得不可能. 有些人会说这只是另一个难以忍受的流行语,而另一些人会背诵打破巨石的优势或采取逆势方法并关注负面因素. 在本文中, ...

  9. guns 最新开源框架企业版下载_国内比较火的5款Java微服务开源项目

    本文介绍国内比较火的5款Java微服务开源项目,pig是基于Spring Cloud.OAuth2.0.Vue的前后端分离的系统. 通用RBAC权限设计及其数据权限和分库分表 支持服务限流.动态路由. ...

最新文章

  1. ASA LAB-ASA NAT配置大全
  2. 【学时总结】 ◆学时 · I◆ A*算法
  3. Ubuntu 9.0 下之HBase 0.90.4 的安装和使用
  4. iphone屏蔽系统更新_iPhone手机经常提示更新系统,教你一招关闭方法,学到了
  5. TensorFlow学习笔记(二十) tensorflow实现简单三层网络
  6. python找出在原图中的位置_Python 通过截图匹配原图中的位置(opencv)实例
  7. ASP.NET MVC 中解决Session,Cookie等依赖的方式
  8. 如何让你的员工有闭环思维?
  9. luaprofiler探索
  10. java 打牌游戏_java代码-----实现4个人打牌游戏的相关代码。线程
  11. 如何批量将 Excel 文档转为 Xps 格式
  12. Unity和UE4两大游戏引擎,你该如何选择?
  13. 用户登录,前后端如何交互判断是否登录超时!
  14. Docker与虚拟化技术浅析第一弹之docker与Kubernetes
  15. 考研前夕 — 成人的世界里没有那么多童话
  16. qt做标定软件_有什么很好的软件是用 Qt 编写的?
  17. VPS8701 电源管理(PMIC) VPS8701
  18. MPEG2还是H264?
  19. int型变量占多少个字节?
  20. 推荐一款不错的嵌入式GUI(玲珑GUI)及在嵌入式linux上的移植

热门文章

  1. 美团-数据仓库高级工程师面试
  2. 编程是将c语言编写的源程序,C语言程序设计基础教程习题答案20120319.doc
  3. 水利类计算机就业情况,2020年水利水电工程专业就业前景分析 _ 一堂课
  4. PSP游戏破解分析 – opnssmp.binmesg_led_0X.prx
  5. 疫情结束后,存活才是远程办公软件必须答好的考题
  6. 行列式的计算方法总结:
  7. 从AP微积分看美国的微积分教育
  8. 如何解决安装ESXI 5.5出现紫屏或者红屏
  9. php免费虚拟商城系统,MCmore商城系统是免费的php网店系统
  10. JS 基础知识之菜鸟教程(2016-09-30)