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…

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

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

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

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

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…

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

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

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

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

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

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

[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数据库中的播客资源的…

html5 css svg,6款基于SVG的HTML5CSS3应用和动画

1、CSS3/SVG质感背景小图标 镂空效果图标按钮今天我们来分享一款用CSS3和SVG实现的质感背景小图标,鼠标滑过图标时出现镂空的效果,并且有质感背景的描边,效果非常不错。2、HTML5 SVG Tab滑块菜单 非常酷的Tab菜单之前我们分享过很多HTML5/CSS…

python 矩阵合并_numpy 的矩阵合并与分割

aiblog4.jpg 这次分享下numpy中矩阵的合并与分割,希望能帮助到大家。 在此附上视频链接 一、引入numpy第三方库 首先我们引入numpy这个第三方库,如果有同学没安装numpy可在命令行中pip install numpy进行安装(Mac用户 sudo pip3 install numpy) import numpy as np …

rto净化效率计算公式_你了解废气处理设备RTO蓄热式热氧化炉的工作原理么?

RTO蓄热式热氧化炉的净化效果以及稳定性都是相当不错的,但是由于其一次性投入成本高,许多企业都选择了放弃。但是科盈小编想要说的是从其99%的净化效果、换热系统、新型蜂窝技术以及日后的运行成本费用来看,这个费用就显得很可观了…

Selenium 4相对定位器如何改变您的测试方式?

网页可以包含许多Web元素或GUI元素,例如单选按钮,文本框,下拉菜单,输入等。Selenium自动化测试中的Web定位器用于对页面的Web元素执行不同的操作。 毫不奇怪,作为新的Selenium用户,我们要学习的第一件事是S…

电商 php 颜色数据怎么敲?_来客说电商|电商系统开发注意事项

来客B2B2C多用户电商系统打造支持自营招商入驻经营模式的电商平台(类似京东、天猫的经营模式),创新模块化设计整合运营商,供货商,批发商,入驻商,分销商,门店于一体,各个模…

朗读评价语言集锦_英语老师批改作业时的精彩评语集锦,超实用!

01你的作业评语,学生看得懂吗?评语是写给学生看的,所以一方面评语要使用学生能看得懂的英语来写,所使用的词汇和语法不能过高或过低于学生的现有水平,要切合学生的实际情况,符合学生的个性心理发展需要&…

u盘安装linux 提示no such device_Linux 网络基础设计

误删网卡配置文件解决思路本回复案例仅在Centos 7如试验成功其它系统无从考究,仅供参考请在root用户模式下配置获得设备名称DEVICE常见使用ifconfig,如果尚未安装请先安装如果只能找到Io和virbrN(Nnumber),请使用ifconfig -a复制名字(红线处,要以你机器的为准!)创建配置文件tou…

中兴c600olt数据配置_中兴天机Axon 10 Pro再掀波澜,4G版3199元起,5G版还有悬念?...

自MWC 2019大会多家手机厂商纷纷亮出自家的5G手机后,5G时代就已经从想象变为现实。不仅仅是手机终端,关于5G技术、基站建设也早就提上日程。技术的车轮永远比我们的想象快一步,当大家还在议论5G应用场景时,中兴天机Axon 10 Pro 4G…