Kubernetes 系列优雅的配置 Java 微服务
目标
- 创建 Kubernetes ConfigMap 和 Secret
- 使用 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 微服务,也学习了在创建系统,库存等微服务的相关命令行。当然,在文中关于ConfigMap API的详细,我将在下一篇带领大家一起学习。关于Kubernetes清单的信息,我们可以查看之前的文章,【Kubernetes 系列】 一文带你吃透 K8S 中Pod 的生命周期
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfckaff
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01