应用发布平台Service Catalog规划设计.docx

上传人:b****1 文档编号:26326 上传时间:2022-10-01 格式:DOCX 页数:32 大小:1.85MB
下载 相关 举报
应用发布平台Service Catalog规划设计.docx_第1页
第1页 / 共32页
应用发布平台Service Catalog规划设计.docx_第2页
第2页 / 共32页
应用发布平台Service Catalog规划设计.docx_第3页
第3页 / 共32页
应用发布平台Service Catalog规划设计.docx_第4页
第4页 / 共32页
应用发布平台Service Catalog规划设计.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

应用发布平台Service Catalog规划设计.docx

《应用发布平台Service Catalog规划设计.docx》由会员分享,可在线阅读,更多相关《应用发布平台Service Catalog规划设计.docx(32页珍藏版)》请在冰豆网上搜索。

应用发布平台Service Catalog规划设计.docx

应用发布平台ServiceCatalog规划设计

 

应用发布平台(ServiceCatalog)规划设计

 

1.容器云平台提供的应用部署方式

我们谈到应用容器化部署时,实际上包含应用的容器化和容器化应用部署两个范畴。

举例而言,我们要部署容器化的tomcat应用,实际上是将应用war包和tomcat一起打包生成docker镜像,然后编写DeploymentConfig/Deployment编排文件即可方便地基于K8S进行部署。

基于K8S的容器云平台,常见的应用容器化方式有:

◎基于dockerfile方式:

可以实现应用的容器化

◎基于OpenShiftS2I:

可以实现应用的容器化和部署。

S2I为OpenShift首创,后被开源社区所采纳。

现在S2I不依赖OpenShift平台,可以直接在K8S上使用。

基于K8S的容器云平台,常见的应用容器化部署方式有:

◎基于模板部署:

模板部署方式很灵活,既可以部署现有的应用容器镜像,也可以调用S2I将应用容器化和部署一起完成。

◎基于Operator部署:

主要对有状态容器化应用进行生命周期管理。

1.1基于Dockerfile方式进行应用容器化和部署

FROMfabric8/java-jboss-openjdk8-jdk:

1.5.2ENVJAVA_APP_DIR=/deployments

ENVJAEGER_SERVICE_NAME=customer\

JAEGER_ENDPOINT=http:

//jaeger-collector.istio-system.svc:

14268/api/traces\JAEGER_PROPAGATION=b3\

JAEGER_SAMPLER_TYPE=const\JAEGER_SAMPLER_PARAM=1EXPOSE808087789779

COPYtarget/customer.jar/deployments/

我们举例说明,通过编写用Dockerfile生成镜像,这个容器镜像以openjdk8为基础镜像,将customer.jar应用打包制作成镜像。

Dockerfile内容如下:

从Dockerfile中我们可以看出:

◎基础镜像是openjdk8。

◎Dockeriamge与后面Istio中的JAEGER将会建立关联。

 

◎打包的应用将会被拷贝到openjdk的部署目录(/deployments)中,这样容器启动时,将会运行这个应用。

#dockerbuild-texample/customer.

SendingbuildcontexttoDockerdaemon9.552MB

Step1/4:

FROMfabric8/java-jboss-openjdk8-jdk:

1.5.2

--->2d81027cb149

Step2/4:

ENVJAVA_APP_DIR/deployments

--->Usingcache

--->0ef12d1600ce

Step3/4:

EXPOSE808087789779

--->Usingcache

--->5fe6df5243e3

Step4/4:

COPYtarget/recommendation.jar/deployments/

--->5ac68beef43d

Removingintermediatecontainer717a10b5c427

构建容器镜像可以使用podmanbuild或dockerbuild,此处以后者为例:

生成的DockerImage如下:

#dockerimages|grepcustomer

example/customerlatest610077a1bf7f7hoursago463MB

apiVersion:

extensions/v1beta1kind:

Deployment

metadata:

labels:

app:

customerversion:

v1

name:

customer①spec:

replicas:

1selector:

matchLabels:

app:

customerversion:

v1

template:

metadata:

labels:

我们将生成的容器镜像部署到OpenShift集群中,需要编写Deployment文件,内容如下:

 

app:

customerversion:

v1annotations:

.io/scrape:

"true"prometheus.io/port:

"8080"②prometheus.io/scheme:

"http"

spec:

containers:

-env:

-name:

JAVA_OPTIONS

value:

-Xms128m-Xmx256m-D.preferIPv4Stack=true-Djava.security.egd=file:

///dev/./urandom④image:

example/customer:

latest③

imagePullPolicy:

IfNotPresentlivenessProbe:

exec:

command:

-curl

-localhost:

8080/healthinitialDelaySeconds:

20

periodSeconds:

5

timeoutSeconds:

1name:

customerports:

-containerPort:

8080name:

http

protocol:

TCP

-containerPort:

8778name:

jolokiaprotocol:

TCP

-containerPort:

9779name:

Prometheusprotocol:

TCPreadinessProbe:

⑤exec:

command:

-curl

-localhost:

8080/healthinitialDelaySeconds:

10

periodSeconds:

5

 

timeoutSeconds:

1securityContext:

privileged:

false

在Deployment中,定义了以下配置:

①定义了customer应用的pod名称。

②定义了应用与后续Istio中Prometheus的对接。

③定义了部署时使用的容器镜像。

④定义了Java运行时的参数。

⑤定义了Pod的就绪性健康检查标准。

apiVersion:

v1kind:

Servicemetadata:

name:

customer①labels:

app:

customerspec:

ports:

-name:

httpport:

8080②selector:

app:

customer③

此外,我们还需要定义Service,内容如下:

在Service中,定义了如下配置:

①定义了Service的名称。

②定义了Service的端口。

③定义了Service后面访问的Pod(Selector)。

接下来,应用deployment和service配置文件。

 

#ocapply-fDeployment.yml-ntutorialdeployment.extensions/customercreated

#occreate-f../../kubernetes/Service.yml-ntutorialservice/customercreated

查看Pod,已经部署成功:

在OpenShift中配置customer微服务的路由:

#ocexposeservicecustomer-ntutorialroute.route.openshift.io/customerexposed

查看生成的路由:

到此为止,名为customer的容器化应用就部署完成了。

1.2基于S2I构建和部署应用

Source-to-Image是红帽OpenShift开发的一个功能组件。

目前可以独立于OpenShift运行。

在社区里,被称为是JavaS2I,Github的地址:

ter/README.md。

JavaS2I容器镜像使开发人员能够通过指定应用程序源代码或已编译的Java二进制文件的位置,在OpenShift容器平台中按需自动构建、部署和运行Java应用程序。

此外,S2I还支持此SpringBoot,EclipseVert.x和WildFlySwarm。

使用S2I的优势在于:

◎简单而灵活:

JavaS2I镜像可以处理复杂的构建结构,但默认情况下,它会假定在成功构建后,

/target目录中将运行要运行的JAR。

我们也可以使用环境变量ARTIFACT_DIR指定。

此外,如果构建生成多个JAR文件,则可以使用环境变量JAVA_APP_JAR指定要运行的JAR文件。

但是,在大多数情况下,我们所要做的就是直接指向源存储库,JavaS2I容器镜像将自动完成配置。

◎自动JVM内存配置:

在OpenShift中,通过Qouta做资源限制。

如果存在此类限制,JavaS2I镜像将自动采用JVM内存设置,避免JVM过量使用内存。

◎控制镜像大小:

为了使镜像保持最小化,可以在构建最终容器镜像之前在S2I脚本中删除Maven本

 

地仓库的数据。

将环境变量MAVEN_CLEAR_REPO设置为true,则会在构建过程中删除Maven本地仓库。

OpenShift可以直接基于Git存储库中存储的源代码来创建应用。

使用命令(ocnew-app)指定Git的URL后,OpenShift会自动检测应用所用的编程语言,并选择合适的BuilderImage。

当然,我们也可以手工指定BuilderImage。

那么,S2I如何识别Git上的内容来自动检测编程语言呢?

它会检测Git上的特征文件,然后按照下表的方式,选择构建方式,如下表所示:

例如,如果Git上有pom.xml文件,S2I将会因为需要使用jee的构建语言,然后查找jee的ImageStream。

OpenShift会采用多步算法来确定URL是否指向源代码存储库,如果是,则还会采用该算法来确定应由哪个BuilderImage来执行构建。

以下是该算法的大致执行过程:

◎如果S2I能够成功访问指定源码地址的URL,则需S2I开始进行下一步。

◎OpenShift检索Git存储库搜索名为Dockerfile的文件。

如果找到了,则会触发dockerbuild。

如果没找到Dockerfile,则进行第三步。

◎OpenShift按照上表的方式判断源码的类型匹配构建语言,自动查找ImageStream。

搜索到的第一个匹配的ImageStream会成为S2IBuilderImage。

◎如果没有匹配的构建语言,OpenShift会搜索名称与构建语言名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1