为何VSTS要搭配Kubernetes?node
一般咱们在开发管理软件项目的时候都会碰到一个很头痛的问题,就是开发、测试、生产环境不一致,致使开发人员和测试人员甚至和运维吵架。linux
由于常见的物理环境甚至云环境中,这些部署环境都是由运维人员提早准备好的。每次更新代码版本,都要很当心的在几个环境以前修改不一样的参数配置,一不当心就将生产环境的数据库链接到了测试库,或者日志文件的地址写到了一个不存在的盘符里等等各类异常状况,有了Kubernetes这样微服务编排框架,咱们能够经过代码的形式描述服务的架构,描述服务之间的依赖关系,作到了 Infrastructure As Code。这样能够大大减小了开发运维之间在作环境切换时带来的额外成本。git
将VSTS的持续集成能力和持续发布能力整合Kubernetes,可让项目团队更容易发现和改进代码(这时候的Infrastructure也已是代码了)的问题,真正将精力放在改进用户体验和改进产品品质上。数据库
准备VSTS管理环境服务器
首先咱们须要到www.visualstudio.com下申请好的VSTS帐号,而后在帐号下建立一个用Git做为代码管理的项目架构
建立好项目后咱们就能够利用git clone将代码库同步到本地开发服务器上面来,构建开发人员的workspace框架
准备Docker Registry和Kubernetes环境运维
2.准备一个私有的Docker Registry.由于咱们须要将Build 好的代码放进一个Docker的Images上面而后推送到一个私有的Registry上。Azure Container Registry无疑是一个很是好的选择,由于等一下咱们的代码须要部署到Azure的Kubernetes群集里,Image所在的地方离部署的地方越近,部署速度固然也就越快了。并且Azure Container Registry还支持全球同步,若是你的代码打算全球多站点发布的话,Azure Container Registry服务无疑是最好的选择。建立Azure Docker Registry能够参考官方文档:https://docs.microsoft.com/zh-cn/azure/container-registry/ ssh
3.准备Kubernetes群集,Azure上支持提供了AKS服务,让咱们能够快速搭建出来Kubernetes的群集环境,减小了运维人员管理群集的压力,搭建方法参考官方文档:https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough-portal 微服务
搭建的过程当中注意几个地方
1.准备好Service Principle服务主体APP
2.准备好linux ssh登陆的Key
安装好群集后经过 Azure CLI 2.0命令:az aks install-cli 这样咱们就能够自动在你的linux上装上Kubernetes的kubectl命令行工具了.
要管理Kubernetes的话,须要运行下面的命令,在本地生成K8S的管理配置信息
az aks get-credentials --resource-group=myResourceGroup --name=myK8sCluster
获取到的配置内容会放在/home/<youraccount>/.kube/config文件里面,这文件里面的内容很是重要,等一下VSTS须要这个信息来跟K8S群集进行连接的。
咱们能够经过kubectl get nodes命令看看群集的情况
开始配置VSTS的自动化构建和自动化发布
咱们再VSTS的项目站点里找到Build and Release的菜单项,点击New的按钮
选择NodeJS with Gulp的模板
建立好后,咱们先裁剪掉暂时不须要的Task,而后添加上Docker build Image和push Image的Task
配置Build an image Task:
在这里咱们能够将一开始准备好的Azure Container Registry环境用上了
配置Push an image Task,Image Name使用BuildId做为镜像的Tag,这样后面部署到Kubernetes的时候就能够指定这个Tag对Image进行更新了。
Build的定义不算太复杂,定义完以后咱们就能够直接触发一次Build来检验一下配置是否成功了。
下图就是Build成功以后的日志,我图中咱们能够看到Docker push命令将image push到了咱们以前创建的Azure注册Repository里面了
自动化构建成功以后,咱们能够作自动化的部署了,
建立一个新的发布定义
在Environment里点击一下蓝色字体部分,编辑部署任务
在配置部署任务时,选择Deploy to Kubernetes的任务类型,而且在Manage这个蓝色连接这里配置Kubernetes的连接信息。
在Kubernetes的命令里使用set命令,经过设置image的更新地址来通知Kubernetes更新部署版本。
命令的格式是:kubectl set image deployment/<deploymentname> <imagename>=<image url>
在VSTS里面,只须要argument里面把后面的部分填上就好
配置Kubernetes的 Service Endpoints信息:
配置好部署任务后,咱们能够尝试一下手动将前面成功的Build部署到Kubernetes环境中
至此咱们已经能够成功将一份代码部署到了Kubernetes里面去了
部署成功后,能够经过kubectl get pods -w命令监控一下Kubernetes对容器进行更新替换的过程,从下图中能够看到Kubernetes建立了一个新的pod,而后将旧版本的pod进行了Terminate.
若是咱们须要将Release跟Build自动连接起来,能够经过编辑Release定义,选择图上的闪电按钮,将Continuous deployment trigger的按钮设置为Enabled便可。