应用发布平台Service Catalog规划设计.docx
- 文档编号:26326
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:32
- 大小:1.85MB
应用发布平台Service Catalog规划设计.docx
《应用发布平台Service Catalog规划设计.docx》由会员分享,可在线阅读,更多相关《应用发布平台Service Catalog规划设计.docx(32页珍藏版)》请在冰豆网上搜索。
应用发布平台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会搜索名称与构建语言名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用发布平台Service Catalog规划设计 应用 发布 平台 Service Catalog 规划 设计