开发者学堂课程【4天定制混合云应用交付流水线-1024程序员节创造营公益课:混合环境应用交付实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/893/detail/14269
混合环境应用交付实践
内容简介:
一、KubeVela 混合环境应用交付
二、示例
一、KubeVela 混合环境应用交付
1.什么是混合环境的应用交付
应用迭代开发流程
01.代码开发
需求文档
功能设计
迭代开发
格式规范
02.集成测试
单元测试
E2E测试
代码覆盖率
性能测试
03.部署预发环境
模拟生产环境
验证稳定性
验证功能正确性
04.上线生产环境
切换流量
分批分布
版本回滚
注意:
很多的开发者都会专注在代码的开发上,那这也是我们一般所说的 developer 的一个职责。
我们会可能会根据一些用户的需求,有一些需求文档。然后再根据这些文档的要求,做一些功能上的设计。
之后,在设计完这些功能以后,会做一些代码上的迭代开发。在开发之后,又会有一些格式上的代码规范的一个检查。
总之,在这些工作里面,它主要是由我们开发者这一侧或者说代码的开发者这一侧去完成的,它是一个最常见的一个开发流程。
开发流程结束之后,在应用发布流程,可能会有一个集成测试,也就是说我们所说的 integration test。集成测试可能会包含有各种各样的一个测试,比如说像比较简单的单元测试或者 E2E 测试,或者有一些针对于代码的覆盖率的一个检查。
还有一些对性能要求比较高的功能,可能会有一些专门的性能测试来检验代码在各种环境下的一个表现。
这些测试的目的其实也都很明确,就是需要为这个应用或者说这个功能的上限来做一些准备。我们不希望这个应用功能在上线以后出现一些问题,或者它的这个功能不符合我们的预期,所以也会有一系列的测试,去帮助排查各种各样的问题。
在预发环境和生产环境下,它们可能有一定的相似程度,但也有一定的不同程度。
但是对于应用的发布而言,比如把这个应用部署到预发环境里面,或者升级到预发环境里面,或者升级到生产环境里面,这一个操作上可能带来的差异性是有限的。
但是在实际的操作过程中,可能会因为它是两个不同的环境,所以我们需要分别在两个环境上做一些操作,这种其实会对整个的发布流程带来一定的复杂性。
KubeVela应用模型可以把应用的功能在不同环境中的发布的共性抽取出来,然后,同时对它的差异性的部分做专门的配置。
这样一个应用的一个发布的流程就可以覆盖到多种不同的环境,而且还可以通过在一个应用发布的过程内部定义一些节点,或者定义一个工作流,来控制它整个的发布的一个节奏,或者说一个时间节点。
混合环境:包括开发环境、测试环境、预发环境。
2. 添加多集群
01.创建 ACK 集群并安装 KubeVela
第一,准备三个 ACK 集群,一个用在管控,一个用作开发,一个用作生产环境。
第二,在管控集群中安装 KubeVela,并启用多集群功能。
第三,确认 KubeVela 及多集群安装成功。
02.将集群添加入 KubeVela 管控中
第一,使用 vela cluster rename 命令可以重命名已经加入的集群。
第二,使用 vela cluster detach 命令可以将子集群从 KubeVela 中移除。
二、示例
1.WordPress 基础应用发布实例
01.编写 KubeVela 多集群应用
编写基础应用模板
第一,MySQL 组件
components:
name:mysql
type:webservice
properties:
image:mysql:5.6
port:3306
volumeMounts:
name:mysql-storage
mountPath: /var/lib/mysql
traits:
type:env
properties:
env:
MYSQL_ROOT_PASSWORD:mypassword
一type:volumes
properties:
vo lumes:
- name:mysql-storage
type:emptyDir
—type:expose
properties:
port:
一3306
type:ClusterIP
第二,WordPress 组件
components:
- name:wordpress-server
type:webservice
properties:
image:wordpress:4.8-apache
port:80
vo lumeMounts:
- name:wordpress-storage
mountpath:/var/www/html
traits:
- type:scaler
properties:
replicas:1
- type:env
properties:
env:
WORDPRESS DB HOST:mysql
WORDPRESS_DB_PASSWORD:mypassword
- type:volumes
properties:
vo lumes:
- name:wordpress-storage
type:emptyDir
- type:expose
properties:
port:
一80
type:LoadBalancer
第三,开发环境配置
第四,生产环境配置
policies:
一name:multi-env-policy
type:env-binding
properties:
envs:
name:dev
placement:
clusterSelector:
name:cluster-dev
—name:production
placement:
clusterSelector:
name:cluster-production patch:
components:
name:wordpress-server type:webservice
traits:
type:scaler
properties:
Replicas:3
注意:
两个环境,一个叫 dev 环境,也就是我们所说的开发环境。另外一个环境叫production,就是生产环境。那可以看到 dev 环境下,它的目标是要把这个应用放到 cluster 里面。
第一位就是一开始加入的开发集群的位置上,另外生产的组件,它的目标是放在生产集群上。
第五,部署工作流配置
workflow:
steps:
name: deploy-dev
type:deploy2env
properties:
policy:multi-env-policy env:dev
name:manual-approval
type:suspend
name: deploy-productiontype:deploy2env
properties:
policy:mutti-env-policy env:production
2.从开发到生产多环境发布实践
appliedResources:
一apiVersion:core.oam.dev/v1alpha1creator:policy
kind:EnvBinding
name:multi-env-policy
namespace:default
- apiVersion:apps/v1
cluster:cluster-production
creator:workflow
kind:Deployment
name:mysql
namespace:default
一apiVersion:v1
cluster:cluster-production
creator:workflow
kind:Service
name:mysql
namespace:default
一apiVersion:apps/v1
cluster:cluster-production
creator:workflow
kind:Deployment
name:wordpress-server
namespace:default
一apiVersion:v1
cluster:cluster-production
creator:Worktlow
workflow:
appRevision:wordpress-v1:ee9baafaba9ea686contextBackend:
apiVersion:v1
kind:ConfigMap
name:workflow-wordpress-context
uid:656e47f5-0cf1-4c5a-ad19-ea2994c91521
mode:StepByStep
steps:
一id:odgjlxfx9b
name:deploy-dev
phase:succeeded
type:deploy2env
一id:jobz2d4rkw
name:manual-approval
phase:succeeded
type:suspend
一id:3whew2yf57
name:deploy-production
phase:succeeded
type:deploy2env
suspend:false