【原创】中国联通公共创新大数据创新能力开放平台(DAS)容器化改造实践

贾捷(1992-)硕士,毕业于美国纽约大学,中国联通研究院工程师,主要从事容器平台研究、java开发工作。联系方式:jiaj12@chinaunicom.cn




1、DAS平台整体架构



DAS平台由统一访问界面(wodp)、数据处理组件(Darwin)、数据挖掘组件(mamp)、数据网关(gateway)、SSPS集成工具(Apache-Guacamole)、后台数据库(Mysql、Oracle)组成,通过CAS服务器实现了SSO单点登录服务,做到一次登录,统一访问,免去了分别登录验证的繁琐步骤。


访问方式:对于用户,DAS平台需要对外暴露四大组件的访问端口;SSO单点登录也需要通过组件的IP进行密钥的分发;组件在集群内部访问数据库,所以使用Kubernetes内部服务名进行服务发现。



2、单点登录原理介绍





访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

 

定向认证: SSO 客户端会重定向用户请求到 SSO 服务器。

 

用户认证:用户身份认证。

 

发放票据: SSO 服务器会产生一个随机的 Service Ticket 。

 

验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

 

传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

 

用户需要直接访问CAS Server以及Application Server,所有web服务都应该对外暴露端口

同时,SSO server鉴权过程需要IP地址,我们需要在镜像运行时通过yaml文件向镜像的host文件添加SSO server地址,实现访问互通。



3、前期准备



 3.1 中间件基础包制作


DAS平台由多个Web应用组成,需要Tomcat+jdk的运行环境。因为有SSO统一登录机制,所以需要分别制作服务端和客户端基础镜像,并进行互信证书配置。


● 3.1.1  服务端基础镜像制作


使用Dockefile制作镜像


1.  # Centos based container with Java and Tomcat  

2.  FROM centos:centos7  

3.  MAINTAINER kirillf  

4.    

5.  # Install prepare infrastructure  

6.  RUN yum -y update && \  

7.   yum -y install wget && \  

8.   yum -y install tar  

9.    

10.# Prepare environment   

11.ENV JAVA_HOME /opt/java  

12.ENV CATALINA_HOME /opt/tomcat   

13.ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/scripts  

14.  

15.# Install Oracle Java8  

16.ENV JAVA_VERSION 8u112  

17.ENV JAVA_BUILD 8u112-b15  

18.  

19.RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \  

20. http://download.oracle.com/otn-pub/java/jdk/${JAVA_BUILD}/jdk-${JAVA_VERSION}-linux-x64.tar.gz && \  

21. tar -xvf jdk-${JAVA_VERSION}-linux-x64.tar.gz && \  

22. rm jdk*.tar.gz && \  

23. mv jdk* ${JAVA_HOME}  

24.  

25.  

26.# Install Tomcat  

27.ENV TOMCAT_MAJOR 8  

28.ENV TOMCAT_VERSION 8.5.9  

29.  

30.RUN wget http://ftp.riken.jp/net/apache/tomcat/tomcat-${TOMCAT_MAJOR}/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && \  

31. tar -xvf apache-tomcat-${TOMCAT_VERSION}.tar.gz && \  

32. rm apache-tomcat*.tar.gz && \  

33. mv apache-tomcat* ${CATALINA_HOME}  

34.  

35.RUN chmod +x ${CATALINA_HOME}/bin/*sh  

36.  

37.# Create Tomcat admin user  

38.ADD create_admin_user.sh $CATALINA_HOME/scripts/create_admin_user.sh  

39.ADD tomcat.sh $CATALINA_HOME/scripts/tomcat.sh  

40.RUN chmod +x $CATALINA_HOME/scripts/*.sh  

41.  

42.# Create tomcat user  

43.RUN groupadd -r tomcat && \  

44. useradd -g tomcat -d ${CATALINA_HOME} -s /sbin/nologin  -c "Tomcat user" tomcat && \  

45. chown -R tomcat:tomcat ${CATALINA_HOME}  

46.  

47.WORKDIR /opt/tomcat  

48.  

49.EXPOSE 8080  

50.EXPOSE 8009  

51.  

52.USER root  

53.CMD ["tomcat.sh"]  

         


docker build -t ${DOCKER_REGISTRY}/tomcatoraclejdk:server .

docker push ${DOCKER_REGISTRY}/tomcatoraclejdk:server

docker build -t ${DOCKER_REGISTRY}/tomcatoraclejdk:client . 




启动镜像



生成密钥库:



1.  keytool -genkey -alias ${NAME} -keypass yourpassword -keyalg RSA -keystore server.keystore  


注意:红字为密钥的key,密钥文件保存为 server.keystore


目录下多出一个文件server.keystore  (第一个名字写localhost或是域名,不能写ip)


1.  keytool -export -alias ${NAME} -keypass yourpassword -file server.crt -keystore server.keystore  



导出数字证书

C:\Program Files\Java\jdk1.6.0_10\bin>keytool -export-alias ssotest -keypass yourpassword -file server.crt -keystore server.keystore


输入keystore密码:yourpassword


在tomcat的conf/server.xml中添加配置信息 


1.  <Connector SSLEnabled="true" acceptCount="100" clientAuth="false"    

2.      disableUploadTimeout="true" enableLookups="false" maxThreads="25"                                                                    

3.      port="8443" keystoreFile="/opt/tomcat/server.keystore" keystorePass="yourpassword"    

4.      protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"    

5.      secure="true" sslProtocol="TLS" />  



docker commit 9e68fcb28748 ${DOCKER_REGISTRY}/das/tomcat:server

docker push ${DOCKER_REGISTRY}/das/tomcat:server



● 3.1.2  客户端基础镜像


将sso服务器生成的server.crt拷贝到客户端,并将数字认证导入jre可信任区


1.  keytool -import -alias ${NAME}  -file server.crt -keypass yourpassword -keystore "/opt/java/jre/lib/security/cacerts"  


这里的jre地址和tomcat使用的jre必须一致


输入密码:yourpassword 


1.  keytool -delete -alias ${NAME}  -keystore "/opt/java/jre/lib/security/cacerts" -storepass yourpassword


docker commit 9e68fcb28748 ${DOCKER_REGISTRY}/das/tomcat:client

docker push ${DOCKER_REGISTRY}/das/tomcat:client




4、容器镜像制作


 4.1 Dockerfile示例


1.  FROM ktomcat/jdk/client:0831  

2.    

3.  ADD ROOT /opt/tomcat/webapps/ROOT  

4.    

5.  USER root  

6.  EXPOSE 8080  


 4.2 Mysql容器化


容器化Mysql是比较普遍也是比较简单的,本项目直接利用了Helm的mysql包来实现,可以从https://kubeapps.com/和https://github.com/kubernetes/charts网站查询和下载chart。由于本环境使用了私有Helm库,下载了chart包发现其中并没有做NodePort供外部用户维护时访问,所以要对其中文件进行改写。  


1.  1.  解压缩tgz格式的chart  

2.  cd /var/www/html  

3.  tar -zxvf mysql-0.2.6.tgz  

4.  2.  mysql/charts.yaml文件中修改namemysqlnpc  

5.  3.  修改mysql/templates/svc.yaml(红色为修改内容):  

6.  apiVersion: v1  

7.  kind: Service  

8.  metadata:  

9.    name: {{ template "fullname" . }}  

10.  labels:  

11.    app: {{ template "fullname" . }}  

12.    chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"  

13.    release: "{{ .Release.Name }}"  

14.    heritage: "{{ .Release.Service }}"  

15.spec:  

16.  type: NodePort  

17.  ports:  

18.  - name: mysql  

19.    port: 3306  

20.    targetPort: mysql  

21.    nodePort: {{ .Values.nodeport }}  

22.  selector:  

23.app: {{ template "fullname" . }}  

24.4.  修改mysql/values.yaml  

25.最后位置新增如下一行  

26.nodeport:   

27.5.  至此我们想要改的地方全改完了,重新打包  

28.tar -zcvf mysqlnpc-0.2.7.tgz mysql   

29.6.  生成新的indexupdate repo  

30.helm repo index .  

31.helm repo update  

32.7.  最终,可以查到新chart,并启动  

33.helm search myrepo/  

34.helm install --set persistence.enabled=false,nodeport=31028 myrepo/mysqlnpc  

35.8.  结果会启动nodeport31028mysql,如果不带nodeport=xxx参数就是启用随机端口的nodeport,可以从helm status helmname里面查到。  


 4.3 Oracle 容器化


● 4.3.1  镜像启动配置


1.  apiVersion: extensions/v1beta1  

2.  kind: Deployment  

3.  metadata:  

4.    name: oracle12c  

5.  spec:  

6.    replicas: 1  

7.    template:  

8.      metadata:  

9.        labels:  

10.        app: oracle12c  

11.    spec:  

12.      containers:  

13.      - name: oracle12c  

14.        image: ${DOCKER_REGISTRY}/oracle/database  

15.        resources:  

16.          requests:  

17.            cpu: 2000m  

18.            memory: 2000Mi  

19.        env:  

20.        - name: ORACLE_SID  

21.          value: CUPOC  

22.        - name: ORACLE_PWD  

23.          value: oracle123  

24.        ports:  

25.        - containerPort: 1521  

26.        - containerPort: 5500  

27.        volumeMounts:  

28.        - mountPath: /opt/oracle/oradata  

29.          name: oradata  

30.      volumes:  

31.      - name: oradata  

32.        emptyDir: {}  

33.  

34.---  

35.apiVersion: v1  

36.kind: Service  

37.metadata:  

38.  name: database  

39.  labels:  

40.    app: database  

41.spec:  

42.  type: NodePort  

43.  ports:  

44.  - name: p1  

45.    port: 1521  

46.    targetPort: 1521  

47.    nodePort: 31521  

48.  - name: p2  

49.    port: 5500  

50.    targetPort: 5500  

51.    nodePort: 30500  

52.  selector:  

53.app: oracle12c  


      1.  设置了resources.requests,目前设置为2000,没有试出或查到最小值是多少。但是如果不设置该资源值,建库过程到一半会卡住。

    

    2.  设置了环境变量ORACLE_SID和ORACLE_PWD,SID为实例名,PWD为system密码。可PWD设置后不成功密码还是随机的,可在log第一行查到随机密码,可通过kubectl 

    execoracle12c-2937006895-ndwhr ./setPassword.sh oraclepassword修改密码。另外还有其他变量可增加,在官方github可查到。

    

    3.  把/opt/oracle/oradata挂在到了emptyDir: {}。曾尝试挂载至本地目录,有目录权限问题,修改成oracle用户权限也没有成功,待解决。

    

    4.  启动会持续比较长的一段时间,通过log可以看到是建库过程,所以耗时较长。启动后https://nodeportip:30500/em/可访问。数据库通过31521端口进行维护。


● 4.3.2  Oracle 11g 数据导入 12c


Oracle 12c引入了cdb/pdb机制。简单理解的话cdb相当于之前的实例,pdb是在其之上的多个单独的可插拔数据库。所以,导入数据也有特殊要求,整体过程如下:


1.  1.使用oracle用户,利用exp工具从11g导出:略  

2.  2.进入oracle12c容器,在12c中转换环境到默认pdb  

3.  sqlplus / as sysdba   

4.  alter session set container=orclpdb1;  

5.  3.12c中新建表空间、用户,要求表空间和用户名与之前一样  

6.  create tablespace YIJI_TABLESPACE datafile '/opt/oracle/oradata/CUPOC/ORCLPDB1/ORCLPDB1_users02.dbf' size 1000M;  

7.  create user yijitest identified by yijitest default tablespace YIJI_TABLESPACE;   

8.  4.用户授权  

9.  grant connect to yijitest;   

10.grant resource to yijitest;   

11.GRANT UNLIMITED TABLESPACE TO yijitest;  

12.grant create view to yijitest;  

13.5.将导出的dmp文件cp至容器,再导入  

14.imp yijitest/yijitest@orclpdb1 file=wajue.dmp   

15.6.成功。注意:连接12c的应用的连接串如下:  

16.jdbc:oracle:thin:@//127.0.0.1:1521/orclpdb1  

17.11gjdbc:oracle:thin:@127.0.0.1:1521:CUPOC  



 4.4 CAS镜像制作


镜像制作


Kubernetes可以通过服务名实现内部访问,将原有mysql的ip+端口替换为服务名。Mysql5.7要求在url后指定&useSSL=false字段

1.  jdbc:mysql://das-mysql-mysqlnpc/ssoserver?characterEncoding=utf-8&useSSL=false  

2.  ${DOCKER_REGISTRY}/das/casCASPORTGATE:v1  


使用dockerbuild命令打包并上传镜像

docker build -t ${DOCKER_REGISTRY}/das/cas:v1 .

docker push ${DOCKER_REGISTRY}/das/cas:v1


yaml配置文件


1.  apiVersion: extensions/v1beta1  

2.  kind: Deployment  

3.  metadata:  

4.    name: das-cas-deployment  

5.  spec:  

6.    template:  

7.      metadata:  

8.        labels:  

9.          app: das-cas  

10.    spec:  

11.      containers:  

12.      - name: das-cas  

13.        image: ${DOCKER_REGISTRY}/das/cas:v2  

14.        command: ["/bin/sh","-c","echo \"${CLUSTER_NODE_IP} {sso.site.com}\">>/etc/hosts ;catalina.sh run"]  

15.  

16.        ports:  

17.        - name: cashome  

18.          containerPort: 8080  

19.        - name: casgate  

20.          containerPort: 8443  


1.  kind: Service  

2.  apiVersion: v1  

3.  metadata:  

4.    name: das-cas-service  

5.  spec:  

6.    type: NodePort  

7.    ports:  

8.      - port: 8080  

9.        name: cashome  

10.      targetPort: 8080  

11.      nodePort: CASPORT  

12.    - port: 8443  

13.      name: casgate  

14.      targetPort: 8443  

15.      nodePort: CASPORTGATE  

16.  selector:  

17.    app: das-cas  



 4.5 Darwin 镜像制作


镜像制作


需要修改以下三个配置文件


1.  /darwin/ROOT/WEB-INF/web.xml  

2.   

3.  <param-value>https://{sso.site.com}:CASPORTGATE/cas/logout</param-value>  

4.  <param-name>serverName</param-name>  

5.  <param-value>http://${CLUSTER_NODE_IP}:DARWINPORT</param-value>###后面没有文件夹名  

6.   

7.  /darwin/ROOT/WEB-INF/classes/c3p0.properties 

8.   

9.  druid.mysql.jdbcUrl=jdbc\:mysql\://das-mysql-mysqlnpc/darwin?useUnicode\=true&characterEncoding\=UTF8&zeroDateTimeBehavior\=convertToNull&useSSL=false  

10.druid.mysql.user=darwin  

11.druid.mysql.password=darwin  

12. 

13./darwin/ROOT/WEB-INF/classes/yiji.properties  

14.ip=http://${CLUSTER_NODE_IP}:DARWINPORT  

15.  


使用dockerbuild命令打包并上传镜像


docker build -t ${DOCKER_REGISTRY}/das/darwinDARWINPORT:v1 .

docker push ${DOCKER_REGISTRY}/das/darwinDARWINPORT:v1


yaml配置文件


1.  apiVersion: extensions/v1beta1  

2.  kind: Deployment  

3.  metadata:  

4.    name: das-darwin-deployment  

5.  spec:  

6.    template:  

7.      metadata:  

8.        labels:  

9.          app: das-darwin  

10.    spec:  

11.      containers:  

12.      - name: das-darwin  

13.        image: ${DOCKER_REGISTRY}/das/darwin:v4  

14.        #command: ["/bin/sh","-c","sed -i 's/10.1.131.12:28099/'$NODEPORT_IP'/' /opt/tomcat/webapps/ROOT/WEB-INF/web.xml;catalina.sh run"]  

15.        command: ["/bin/sh","-c","echo \"${CLUSTER_NODE_IP} {sso.site.com}\">>/etc/hosts ;catalina.sh run"]  

16.        env:  

17.        envFrom:  

18.          - configMapRef:  

19.              name: das-config  

20.        ports:  

21.        - name: darwinhome  

22.          containerPort: 8080  


1.  kind: Service  

2.  apiVersion: v1  

3.  metadata:  

4.    name: das-darwin-service  

5.  spec:  

6.    type: NodePort  

7.    ports:  

8.      - port: 8080  

9.        targetPort: 8080  

10.      nodePort: DARWINPORT  

11.  selector:  

12.    app: das-darwin  



 4.6 Guacamole 镜像制作


镜像制作



需要修改WEB-INF/web.xml配置文件,添加SSO服务器的跳转及鉴权URL,共三处


1.  guacamole/guacamole-0.9.9/WEB-INF/web.xml  

2.  <param-value>https://{sso.site.com}:CASPORTGATE/cas/logout</param-value>  

3.  <param-name>serverName</param-name>  

4.  <param-value>http://${CLUSTER_NODE_IP}:31015/guacamole</param-value>  

5.  ${DOCKER_REGISTRY}/das/guacamole:v1  


使用dockerbuild命令打包并上传镜像


docker build -t ${DOCKER_REGISTRY}/tomcatoraclejdk:server .

docker push ${DOCKER_REGISTRY}/tomcatoraclejdk:server


yaml配置文件


1.  apiVersion: extensions/v1beta1  

2.  kind: Deployment  

3.  metadata:  

4.    name: das-guacamole-deployment  

5.  spec:  

6.    template:  

7.      metadata:  

8.        labels:  

9.          app: das-guacamole  

10.    spec:  

11.  

12.      containers:  

13.      - name: das-guacamole  

14.        image: ${DOCKER_REGISTRY}/das/guacamole:v2  

15.        command: ["/bin/sh","-c","echo \"${CLUSTER_NODE_IP} {sso.site.com}\">>/etc/hosts ;catalina.sh run"]  

16.        ports:  

17.        - name: guacamolehome  

18.          containerPort: 8080  


1.  kind: Service  

2.  apiVersion: v1  

3.  metadata:  

4.    name: das-guacamole-service  

5.  spec:  

6.    type: NodePort  

7.    ports:  

8.      - port: 8080  

9.        name: guacamolehome  

10.      targetPort: 8080  

11.      nodePort: 31015  

12.  selector:  

13.    app: das-guacamole  



 4.7 mamp镜像制作


镜像制作


1.  /root/docker/mamp/mamp/WEB-INF/cfg.db.dev.properties   

2.  database.url=jdbc:oracle:thin:@//${CLUSTER_NODE_IP}:31521/orclpdb1  

3.  database.username=yijitest  

4.  database.password=yijitest  

5.  /root/docker/mamp/mamp/WEB-INF/web.xml  

6.  <!-- 该过滤器用于实现单点登出功能,可选配置。 -->  

7.  <filter>  

8.  <filter-name>CAS Single Sign Out Filter</filter-name>  

9.  <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  

10.<init-param>  

11.<param-name>casServerUrlPrefix</param-name>  

12.<param-value>>https://{sso.site.com}:CASPORTGATE/cas/logout</param-value>  

13.</init-param>  

14.<init-param>  

15.<param-name>serverName</param-name>  

16.<param-value>http://${CLUSTER_NODE_IP}:MAMP</param-value>  

17.</init-param>  

18.</filter>  

19./root/docker/mamp/mamp/WEB-INF/classes/yiji.properties  

20.host=http://${CLUSTER_NODE_IP}:MAMP  


使用dockerbuild命令打包并上传镜像


docker build -t ${DOCKER_REGISTRY}/tomcatoraclejdk:server .

docker push ${DOCKER_REGISTRY}/tomcatoraclejdk:server


yaml配置文件


1.  apiVersion: extensions/v1beta1  

2.  kind: Deployment  

3.  metadata:  

4.    name: das-mamp-deployment  

5.  spec:  

6.    template:  

7.      metadata:  

8.        labels:  

9.          app: das-mamp  

10.    spec:  

11.      containers:  

12.      - name: das-mamp  

13.        image: ${DOCKER_REGISTRY}/das/mamp:v4  

14.  

15.        command: ["/bin/sh","-c","echo \"${CLUSTER_NODE_IP} {sso.site.com}\">>/etc/hosts ;catalina.sh run"]  

16.        ports:  

17.        - name: mamphome  

18.          containerPort: 8080  


1.  kind: Service  

2.  apiVersion: v1  

3.  metadata:  

4.    name: das-mamp-service  

5.  spec:  

6.    type: NodePort  

7.    ports:  

8.      - port: 8080  

9.        name: mamphome  

10.      targetPort: 8080  

11.      nodePort: MAMP  

12.  selector:  

13.    app: das-mamp  



 4.8 wodp镜像制作


镜像制作


本工程为标准Maven项目,配置信息可以直接从pom.xml修改


1.  修改pom.xml文件  

2.  <profile>    

3.  <id>env-v1</id>    

4.  <properties>    

5.  <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>    

6.  <jdbc.url>jdbc:mysql://das-mysql-mysqlnpc/ssoserver?characterEncoding=utf8&useSSL=false</jdbc.url>    

7.  <jdbc.username>wodpUser</jdbc.username>    

8.  <jdbc.password>wodpUnicom:4104</jdbc.password>    

9.   <!—达尔文组件地址-->  

10.<drw.url>http://${CLUSTER_NODE_IP}:DARWINPORT</drw.url>    

11.  <!—数据挖掘组件mamp地址-->  

12.<mamp.url>http://${CLUSTER_NODE_IP}:MAMP/mamp</mamp.url>    

13.  <!—wodp组件地址-->  

14.<yiji.url>http://${CLUSTER_NODE_IP}:WODP/wodp</yiji.url>    

15.<yiji.filepath>/home/yiji/</yiji.filepath>    

16. 

17.<sso.casserverurl>https://{sso.site.com}:CASPORTGATE</sso.casserverurl>    

18.<sso.servername>http://${CLUSTER_NODE_IP}:WODP/wodp</sso.servername>    

19.<stdout></stdout>    

20.</properties>    

21.</profile>    



使用dockerbuild命令打包并上传项目


docker build -t ${DOCKER_REGISTRY}/tomcatoraclejdk:server .

docker push ${DOCKER_REGISTRY}/tomcatoraclejdk:server



yaml配置文件


1.  apiVersion: extensions/v1beta1  

2.  kind: Deployment  

3.  metadata:  

4.    name: das-wodp-deployment  

5.  spec:  

6.    template:  

7.      metadata:  

8.        labels:  

9.          app: das-wodp  

10.    spec:  

11.      containers:  

12.      - name: das-wodp  

13.        image:  ${DOCKER_REGISTRY}/das/wodp:v2  

14.        #command: ["/bin/sh","-c","sed -i 's/10.1.131.12:28099/'$NODEPORT_IP'/' /opt/tomcat/webapps/ROOT/WEB-INF/web.xml;catalina.sh run"]  

15.        command: ["/bin/sh","-c","echo \"${CLUSTER_NODE_IP} {sso.site.com}\">>/etc/hosts ;catalina.sh run"]  

16.        env:  

17.  

18.        envFrom:  

19.          - configMapRef:  

20.              name: das-config  

21.        ports:  

22.        - name: wodphome  

23.          containerPort: 8080  

24.kind: Service  

25.apiVersion: v1  

26.metadata:  

27.  name: das-wodp-service  

28.spec:  

29.  type: NodePort  

30.  ports:  

31.    - port: 8080  

32.      targetPort: 8080  

33.      nodePort: WODP  

34.  selector:  

35.    app: das-wodp  




5、基于Jekins的持续构建与发布



持续集成(Continuousintegration)简称CI,是一种软件开发的实践,可以让团队在持续集成的基础上收到反馈并加以改进,不必等到开发的后期才寻找和修复缺陷。当然要明白的是持续集成环境的搭建也不是一劳永逸的,随着软件项目复杂度的增加,持续集成的环境同样要加以维护以确保集成环境的可靠性。


我们的项目选择了Jenkins+Gitlab的持续集成方案。


Jenins是现在非常流行的持续集成CI服务器,Jenkins易于安装,不需要数据库的支持,直接通过Web界面进行配置,支持分布式构建,具有丰富的插件,这些都是Jenkins相比其他持续集成服务器的优势所在。


持续构建与发布流程方便开发人员部署、测试整个项目,节省了从代码到上线的时间。



6、成果改造



DAS平台容器化改造,将DAS平台及组件从虚拟机迁移到kubernetes容器平台上,同时实现了代码的持续构建与发布流程。


流量增加时,通过调整副本数,横向扩充容器的实例个数,使用负载均衡来进行流量的分导,保证平台的稳定运行。 



- END -



更多干货请关注


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值