Spring Boot微服务,Docker和Kubernetes研讨会–第3部分

在之前的文章中,我们为使用Docker和Spring Boot的订单管理系统构建了一些微服务(订单服务,产品服务,客户服务)。 我们使用Netflix库来管理,发现和平衡微服务。

管理这些微服务及其多个容器可能会有些棘手; 特别是在可伸缩性,可观察性,安全性,监视和管理资源方面。 因此,我们将使用Kubernetes进行容器编排。 单击此处以了解有关Kubernetes的更多信息。

为了入门,我们可以在笔记本电脑中使用本地Kube集群,也可以使用AWS / Azure / GCP之类的云提供商。

本地Kube集群:
我们可以使用Minikube或Docker for Desktop来设置本地kube集群。 请按照它们各自的文档将它们安装在笔记本电脑/计算机上。 在本教程中,我们将在Mac上使用Docker for Desktop,因此,如果使用的是Docker,请遵循此文档进行设置。

使用Amazon Elastic Kubernetes服务(EKS)
您还可以在EKS上设置集群以部署应用程序,因为您将需要在AWS上使用一个帐户( https://aws.amazon.com/ )。
登录到AWS后,转到EKS并创建一个集群。 阅读此文档以设置集群。

Kubectl:
KubeCtl是一个命令行界面,用于针对Kubernetes集群运行命令。 如果您使用的是Docker for Desktop,则已经包含并配置了Docker以连接到本地Kubernetes服务器,否则请使用此文档在笔记本电脑上设置KubeCtl。

为了让kubectl找到并访问Kubernetes集群,它需要一个kubeconfig文件。 默认情况下,kubectl配置位于:

 ~/.kube /config . 

通过获取集群状态来检查kubectl是否已正确配置:

 kubectl cluster-info 

要在EKS中管理集群,请使用此文档来设置kubeconfig。

在Kube集群中部署应用程序:

现在,我们已经成功创建了一个kube集群,并配置了kubectl来管理和部署到该集群中,我们准备将应用程序部署到该集群中。

在之前的博客中,我们创建了3个在Docker容器中运行的微服务。 我们可以使用任何这些微服务的映像来部署到kube集群中。 如果我们使用本地kube集群(用于桌面的Docker或MiniKube),则可以使用本地docker映像部署到集群。
(要使本地映像正常工作,我们需要在我们的部署定义中将一个名为“ imagePullPolicy”的属性设置为“ Never”。)

对于EKS,我们需要将映像保存在注册表中,我们现在可以使用docker hub public repo,因此我们不必担心通过注册表进行身份验证。 如果必须使用ECR(Amazon Elastic Container Registry),则需要为运行集群中节点的实例授予ECR拉权限,为简单起见,我们暂时不介绍该部分。

建立本地形象

为了在本地kube集群中部署应用程序,我们将在笔记本电脑中创建其docker映像。

因此,如果您拥有先前博客中使用的任何服务的源代码,我们将使用它们。
–转到productService的根文件夹,然后运行docker build命令:

 docker build -t productservice . 

这将创建带有标签“ productservice”的本地图像。 通过运行该图像来测试该图像是否工作正常。

 docker run -p 8001:8001 productservice:latest 

此服务需要访问本地Postgres数据库服务器,因此无法启动。 为简单起见,让我们快速更改应用程序并使用内存数据库(H2)。
build.gradle进行以下更改:(用H2替换postgres depenendcy)

 dependencies { implementation( 'org.springframework.boot:spring-boot-starter-data-jpa' ) implementation( 'org.springframework.boot:spring-boot-starter-web' ) implementation( 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' ) runtime( "com.h2database:h2:1.3.176" ) compileOnly 'org.projectlombok:lombok:1.18.4' testImplementation( 'org.springframework.boot:spring-boot-starter-test' )  } 

并替换spring数据源以在application.properties中使用H2:

 spring.datasource.url=jdbc:h2:mem:testdb  spring.datasource.driverClassName=org.h2.Driver  spring.datasource.username=sa  spring.datasource.password=  spring.h2.console.enabled= false 

完成这两项更改后,该应用程序将可以很好地启动和运行。 这次重建图像(确保您清除了旧标签)并运行它。 使用以前的博客来测试端点。 (创建和获取产品@ / products)

创建deployment.yaml
要将映像部署到kube,我们需要一个部署定义(如果只想安装Pod,则需要一个Pod定义)。

 apiVersion: apps /v1  kind: Deployment  metadata: name: product-service-deployment  spec: selector: matchLabels: app: product-service replicas: 1 template: metadata: labels: app: product-service spec: containers: - name: product-app image: productservice:latest imagePullPolicy: Never ports: - containerPort: 8001 

确保使用在“名称”中创建的本地图像的标签。

将以上文件另存为product-service-deployment.yaml,并从保存文件的位置运行以下命令。

 kubectl apply -f product-service-deployment.yaml 

这将在运行容器内的应用程序的集群中创建一个Pod。 现在,此应用程序正在kube集群中的pod内运行,并已分配了IP地址,该IP地址只能从集群内部访问。 我们可以使用此IP地址从群集内部访问此容器,但是由于容器是易变的(可以按比例放大和缩小,重新创建和销毁),我们将需要一个接口或服务来通过“服务名称”进行访问重新创建广告连播时,该设置不会更改。 该“服务”还将充当负载平衡器,用于将请求分发到Pod。

创建一个Kubernetes服务:
现在,我们将在Kubernetes中创建一个可用于访问Pod的服务。 在此处阅读有关Kubernetes服务的更多信息。 对于此博客,我们将创建“ ClusterIP”类型的服务,该服务可从群集访问。
在名称为product-service.yaml的同一根文件夹中创建一个文件,其内容如下:

 apiVersion: v1  kind: Service  metadata: name: product-service  spec: selector: app: product-service ports: - port: 8001 targetPort: 8001 

要创建此服务,请运行以下命令:

 kubectl apply -f product-service.yaml 

运行kubectl get services命令以查看服务是否成功创建:

 kubectl get svc 

您应该在其中看到带有分配的ClusterIP的服务“ product-service”。

从笔记本电脑访问该服务。
要从我们的笔记本电脑访问此服务,我们将使用称为“ kube端口转发”的命令,运行以下命令:

 kubectl port-forward svc /product-service 8001:8001 

现在,我们可以使用http:// localhost:8001 / products访问该服务。

您可以通过创建一些产品并检索它们来测试产品服务,如上一个博客所述。

因此,现在我们的应用程序在本地kube集群中运行。
在下一系列博客中,我们将使用外部数据库将更多的应用程序部署到集群中,并具有功能齐全的微服务应用程序。 我们还将学习内部服务如何相互通信以及如何使用Ingress Controller将其暴露给外部世界。

翻译自: https://www.javacodegeeks.com/2019/11/spring-boot-microservices-docker-and-kubernetes-workshop-part3.html

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

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

相关文章

2021年茂名市高考成绩查询,2021年茂名高考最高分多少分,历年茂名高考状元

2021年茂名高考成绩公布时,茂名高考成绩最高分受到很多网友关注,具体2021年茂名高考最高分多少分,考生可以在聚志愿网站查询具体位次排名,报考茂名高考一分一段表位次排名、同分数人数、位次查询等相关数据。本期文章小编主要为大…

客制化键盘键位修改_可以用很漂亮形容的一把键盘,差一步就完美

内置钢板是轴体固定需要也是机械键盘的标志,钢板除了可以带来极其稳定的固定效果也成就了机械键盘扎实的手感,同时是机械键盘分量感的主要来源,给人一种结实感,这是薄膜键帽所不具备的。▲外置钢板在悬浮式结构的键盘上比较常见&a…

用于字符串和数组的5种简单有效的Java技术

Java通常会排在前五种最受欢迎​​的编程语言之内,这可以理解。 它是一种通用语言,非常容易学习,因为它是一种高级语言,并且可以满足许多用例。 由于这些原因,Java是一门伟大的语言,可以用来学习您是否有经…

基于html人事管理报告,基于C++builder的课程设计报告 (人事管理系统)

内容介绍原文档由会员 bshhty 发布Cbuilder课程设计( 人事信息管理系统 )12页 7000余字资料包含:完整课程设计报告,源代码等相关设计资料。本课程设计为RAR个文件。目录一、设计任务与要求………………………………………………31.设计内容……………………

adb 切换默认桌面_公告 | 武林外传手游官方服务器全面开放桌面版体验

为了更好的优化玩家游戏体验,应广大客官要求,《武林外传手游》全新桌面版今日上线,iOS及安卓服务器均可在电脑上畅玩《武林外传手游》啦!大屏画面更加细腻绚丽,预设键位助你畅游江湖,欢迎广大玩家下载体验&…

计算机网络作业答案吴,中国大学《2020春季课程-计算机网络应用吴迪》答案全部2020高校邦《羽毛球》作业题库答案...

参考答案如下中国处理肌肉拉伤的第一步是()。大学迪答天下观念的核心问题是如何构建和谐社会。春季天下观念的核心是什么?天下有始,课程库答以为天下母。既得其母,课程库答以知其子;既知其子,复守其母,没身…

java获取word书签表格数据_Python读取word文档里面的表格数据

更多精彩,请点击上方蓝字关注我们!我们常见的办公数据通常可以分为结构化数据与非结构化数据,比如常见的word, ppt, excel。前两者存储的是非结构化数据,excel存储的是结构化数据。从事数据统计或分析的工作或多或少都会从excel获…

函数指针使用场景和选择_在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体...

函数指针使用场景和选择N 1问题是使用ORM解决方案时的常见问题。 当您将某些OneToMany关系的fetchType设置为lazy时,就会发生这种情况,以便仅在访问Set / List时才加载子实体。 假设我们有一个具有两个关系的Customer实体:每个客户的一组订单…

东师计算机应用基础在线作业,东师《计算机应用基础》15春在线作业1答案

《计算机应用基础》15 春在线作业 1 单选题 多选题 判断题一、单选题(共 25 道试题,共 62.5 分。 )1. 21、 1946 年 2 月,在美国诞生了世界上第一台计算机,它的名字叫:A. EDVACB. EDSACC. ENIACD. UNIVAC-1----------------选择:C…

abb智能控制系统_ABB助力国网冀北电力打造虚拟电厂

近日,ABB为国网冀北电力有限公司定制了智能配电计量与协调控制解决方案,对其虚拟电厂进行远程电能管理,实现高峰调节和负载转移,提高电力系统效率,保持供电稳定性。虚拟电厂是通过分布式电力管理系统将电网中发电端(尤…

通过通用数据访问扩展AWS生态系统

Amazon Web Services(AWS)可帮助组织托管和管理其数据流程,例如构建数据可视化和执行ETL任务。 在CData,我们可以轻松地将AWS Services与异构业务应用程序和分布式数据存储连接起来,以最终帮助企业对其数据进行更全面的…

android官方文档中文版_Now in Android:01 - 如何掌握最新的 Android 技术?

每隔几天我都会通过 Android Developers 的油管官方频道,来了解一下最近 Android 发布了哪些有趣的新技术,最近发现官方推出了一个新的系列视频叫做:Now in Android,目前更新了 4 期,我觉得这个系列蛮有趣的&#xff0…

mvc路由 html,asp.net-mvc – ASP.NET MVC路由从html页面开始

我正在使用IIS 6.我想我的问题是我不知道如何使用routes.MapRoute路由到一个非控制器.我有一个url,如example.com,我希望它为index.htm页面提供服务,而不是使用MVC.我该如何设定?在IIS中,我将index.htm作为我的起始文档,我的global.asax具有标准的“默认”路由,其中…

c++ 反射_固体火箭发动机黏接壳体超声C扫描检测系统研制与应用

某固体火箭发动机燃烧室采用壳体/绝热层/包覆层/推进剂的多界面结构形式,其中绝热层采用玻璃纤维缠绕成型后与钢质旋压壳体胶接而成。在胶接过程中,若存在壳体内部多余物清理不干净、绝热层与壳体配合不严、胶层内部气体未排净等情况,黏接层易…

java scala_经过几天的Scala回归Java的10个最烦人的事情

java scala因此,我正在尝试使用Scala,因为我想编写一个解析器,而Scala Parsers API似乎非常合适。 毕竟,我可以在Scala中实现解析器并将其包装在Java接口后面,因此除了附加的运行时依赖关系之外,应该不存在…

常用计算机网络技术缩写词和术语,网络技术缩写词和术语

常用计算机网络技术缩写词和术语LAN:Local Area Network 局域网WAN: Wide Area Network 广域网MAN: Metropolitan Area Network 城域网FM: Frequency Modulation 频率调制AM: Amplitude Modulation 振幅调制PM: Phase Modulation 相位调制FSK: Frequency-shift Keyi…

python区域找图命令_python读取图片任意范围区域

使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用。 下面使用两种方法进行处理: convert 函数 from PIL import Image import numpy as np import matplotlib.pyplot as plt …

通用计算机系统的工作方式,通用计算机操作系统典型体系结构综述

摘要:随着操作系统应用领域的扩大,以及操作系统硬件平台的多样化,操作系统的体系结构和开发方式都在不断更新,目前通用机上常见操作系统的体系结构有如下几种:模块组合结构、层次结构、虚拟机结构和微内核结构。本文引用地址:http…

[MEGA DEAL] Ultimate SQL Bootcamp认证捆绑包(98%)

像Pro一样管理任务和数据库,提供有关SQL Lite,Microsoft SQL,MySQL,PostgreSQL,Rest API和Oracle SQL的6门课程 嘿,怪胎, 本周,在我们的JCG Deals商店 ,我们提供了另一…

jersey spring_教程–带有Jersey和Spring的Java REST API设计和实现

jersey spring想要在Java中使用REST? 然后您来对地方了,因为在博客文章中,我将向您介绍如何“美丽”地设计REST API,以及如何使用Jersey框架在Java中实现它。 本教程中开发的RESTful API将演示针对存储在MySql数据库中的播客资源的…