灰度发布
灰度发布(又名金丝雀发布)是一种平滑过渡的部署方式,让一部分主机优先使用新的镜像部署(即运行新的程序),测试没有问题后再全面发布,可以保证整体系统的稳定。
灰度发布属于URLOS企业版功能。
本章节将使用实例来介绍URLOS灰度发布功能:首先,在URLOS集群中添加2台主机,使用Dockerfile构建一个版本号为v1的镜像,用该镜像制作一个URLOS云应用,然后用该云应用部署一个网站服务,接下来再将v1镜像更新为为v2镜像,最后通过灰度发布功能将v2部署至其中1台主机,这样就是实现了一台主机运行旧的程序,而另一台主机运行新的程序。
构建镜像
创建Dockerfile文件,内容如下:
FROM alpine:3.8
ENV TIME_ZONE Asiz/Shanghai
RUN sed -i 's~dl-cdn.alpinelinux.org~mirrors.aliyun.com~' /etc/apk/repositories \
&& apk update \
&& apk add nginx \
&& mkdir -p /run/nginx \
&& mkdir -p /var/www/html/ \
&& echo "这是版本1" > /var/www/html/index.html
WORKDIR /var/www/html/
CMD ["more" ,"index.html"]
使用docker build
命令构建镜像:
docker build -t registry.cn-shanghai.aliyuncs.com/urlos-test001/alpine-nginx-1.14.2:v1 .
注:这里的
urlos-test001
为命名空间,registry.cn-shanghai.aliyuncs.com
为阿里仓库线路的域名,请根据自己实际的替换!
将构建好的镜像registry.cn-shanghai.aliyuncs.com/urlos-test001/alpine-nginx-1.14.2:v1
上传至阿里云,具体方法参考《阿里云容器镜像服务》。
制作云应用
将URLOS的模式更改为开发模式(dev模式),编辑/data/urlos/master-config/config.jsonc
文件:
将
"envType": "pro",
改为
"envType": "dev",
登录URLOS,在 应用管理 中点击右上角的【镜像管理】:
然后点击【添加】:
然后将镜像地址填入即可,使用阿里云的话,仓库线路域名可不填:
返回应用管理列表,找一个官方云应用作为模板,比如,点更多按钮,选择【复制应用】:
请按需修改相关项目,镜像选择之前添加的urlos-test001/alpine-nginx-1.14.2:v1
只保留nginx这一个启动脚本
提交!
返回应用列表后,找到刚才新建的应用,点击【更多】,选择“管理模板”
删除php相关模板,修改nginx网站配置模板(nginx:vhost.conf):
将网站根目录修改为/var/www/html/
set $websiteRoot /var/www/html/;
然后提交即可。
部署云应用
返回应用管理列表,选择制作好的应用,在【更多】选项中点击“创建服务”,在【容器个数】中添加“0”,其他按需填写,网站部署完成后,在浏览器中打开得到如下结果:
更新镜像版本
在开发应用程序时,一般都会不停迭代版本,也需要不停测试,URLOS适时的提供了灰度测试功能。下面我们开始进入灰度测试阶段吧。首先,我们需要更新镜像,编辑Dockerfile,将其内容修改为:
FROM alpine:3.8
ENV TIME_ZONE Asiz/Shanghai
RUN sed -i 's~dl-cdn.alpinelinux.org~mirrors.aliyun.com~' /etc/apk/repositories \
&& apk update \
&& apk add nginx \
&& mkdir -p /run/nginx \
&& mkdir -p /var/www/html/ \
&& echo "这是版本2" > /var/www/html/index.html
WORKDIR /var/www/html/
CMD ["more" ,"index.html"]
我们把首页index.html文件内容修改成了“这是版本2”。
并重新构建一个名为registry.cn-shanghai.aliyuncs.com/urlos-test001/alpine-nginx-1.14.2:v2
的镜像。
也将它上传至阿里云仓库,上传后可以在阿里云后台查看到两个镜像版本:
接下来,我们将使用v2的镜像地址进行灰度发布,在本演示里,我们在集群中添加了2个主机,灰度发布时,把灰度值设置为50%或以下,需要达到的预期效果是:仅在其中1台主机上更新到v2。
找到之前部署的网站,点更多菜单,选择“灰度发布”:
镜像地址填写urlos-test001/alpine-nginx-1.14.2:v2
,灰度值填写45
,然后提交即可。
当出现以下提示,表明灰度发布完成:
现在,如何验证id为1的主机是否更新到了新版v2,而另一个还是使用旧版本v1呢?
很简单,登录到容器里面查看一下index.html内容就好了,或者直接浏览器访问,多刷新几次。