利用VSTS跟Kubernetes进行CI/CD
为什么VSTS要搭配Kubernetes?
通常我们在开发管理软件项目的时候都会碰到一个很头痛的问题,就是开发、测试、生产环境不一致,导致开发人员和测试人员甚至和运维吵架。

因为常见的物理环境甚至云环境中,这些部署环境都是由运维人员提前准备好的。每次更新代码版本,都要很小心的在几个环境之前修改不同的参数配置,一不小心就将生产环境的数据库连接到了测试库,或者日志文件的地址写到了一个不存在的盘符里等等各种异常情况,有了Kubernetes这样微服务编排框架,我们可以通过代码的形式描述服务的架构,描述服务之间的依赖关系,做到了 Infrastructure As Code。这样可以大大减少了开发运维之间在做环境切换时带来的额外成本。
将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/
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即可。


利用VSTS跟Kubernetes进行CI/CD的更多相关文章
- 容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD
什么是CI/CD 持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每 ...
- jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(三)
从最基础镜像到业务容器 构建 [为gitlab项目部署做铺垫] 业务镜像设计规划 目录结构 # pwd /data/k8s/app/myapp # tree . . ├── dockerfile │ ...
- jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)
注:这部分的学习还是要靠自己多点点 多尝试尝试 这部分19年3月份我是玩的很溜的,一年没用,基本忘光光了. 学习要温故而知新! 流程拓扑图 前提准备 部署应用服务 部署kubernetes 集群:ht ...
- jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(四)
前景提要 jenkins与gitlab结合,实现代码自动拉取:https://www.cnblogs.com/zisefeizhu/p/12548662.html jenkins与kubernetes ...
- jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(二)
一张网图 因为我们使用了Docker in Docker技术,就是把jenkins部署在k8s里.jenkins master会动态创建slave pod,使用slave pod运行代码克隆,项目构建 ...
- kubernetes的CI/CD
部署流程:把编码上传到gitlab上,使用webhook链接jenkins自动去编译docker镜像,然后上传到harbor本地docker镜像库中,再自动下载docker镜像,使用k8s控制dock ...
- VSTS跟Kubernetes整合进行CI/CD
利用VSTS跟Kubernetes整合进行CI/CD 为什么VSTS要搭配Kubernetes? 通常我们在开发管理软件项目的时候都会碰到一个很头痛的问题,就是开发.测试.生产环境不一致,导致开发 ...
- 实例演示:如何在Kubernetes上大规模运行CI/CD
本周四晚上8:30,第二期k3s在线培训如约开播!本期课程将介绍k3s的核心架构,如高可用架构以及containerd.一起来进阶探索k3s吧! 报名及观看链接:http://z-mz.cn/PmwZ ...
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
随机推荐
- web离线应用--applicationCache
applicationCache是html5新增的一个离线应用功能 离线浏览: 用户可以在离线状态下浏览网站内容. 更快的速度: 因为数据被存储在本地,所以速度会更快. 减轻服务器的负载: 浏览器只会 ...
- JAVA基础5——与String相关的系列(2)
差异点比较 String使用+直接拼接 这种情况需要分两种情况来讨论: 1. 都是确定的字符串常量之间进行的+号拼接的时候,由于在编译器就可以确定其具体值了,所以编译器在编译期的时候就会把这些常量拼接 ...
- Vue使用Echarts以及Echarts配置分享
一.本篇文章将给大家分享如何在vue中使用echart以及echart各项配置,这些配置都是工作中比较常见以及常用到的,所以给大家分享下,希望对大家有用. 二.vue中使用echart. 1.首先下载 ...
- C语言之赋值
#include<stdio.h>/*void change(int m,int n){ int t; t=m; m=n; n=t;}*/int main(){//交换两杯水,需要一个空杯 ...
- Service 之间如何通信?- 每天5分钟玩转 Docker 容器技术(101)
微服务架构的应用由若干 service 组成.比如有运行 httpd 的 web 前端,有提供缓存的 memcached,有存放数据的 mysql,每一层都是 swarm 的一个 service,每个 ...
- JavaScript实现动画效果
说到JavaScript实现动画效果,不得不想到两个函数,setTimeout和setInterval. setTimeout的常用的使用方法为 setTimeout(callback, delay) ...
- Nomad入门
Nomad 简介 Nomad是一个管理机器集群并在集群上运行应用程序的工具. Nomad的特点: 支持docker,Nomad的job可以使用docker驱动将应用部署到集群中. Nomad安装在li ...
- C#开发Windows窗体应用程序的步骤
使用C#开发应用程序时,一般包括创建项目.界面设计.设置属性.编写程序代码.保存项目.程序运行等6个步骤. 1.创建项目 在Visual Studio2017开发环境中选择“文件”→“新建”→“项目” ...
- PHP 面试时常考的文件操作函数
前两天面试的时候,笔试要求写一些文件操作类函数,什么遍历目录获取文件扩展名之类的,回来后大致总结了一下PHP中一些常见的文件操作函数分享一下. 1.使用递归删除目录及目录下所有文件的方法. funct ...
- 制造测试数据的程序及对拍程序概述(Like CyaRon)
作为一名OIer,比赛时,对拍是必须的 不对拍,有时可以悔恨终身 首先,对拍的程序 一个是要交的程序 另一个可以是暴力.搜索等,可以比较慢,但是必须正确 下面是C++版对拍程序(C++ & c ...
