kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载
2021-01-19 04:13
标签:参数 err folder sel 需要 连接 containe ubuntu 记录 前前后后学习kubernetes也有一个来月了,关于kubernetes的博客也写了有十多篇。但是技术如果无法落地到实际的应用场景终归是纸上谈兵,所以就有了这一出:通过结合 写完这篇后 注1:以下只是以Net Core项目为例,实际运用场景中,除了dockfile的编写有差别,剩下整个自动化部署链条中的技术也好,工具也好,都可以复用,与语言和语言框架本身无关。 以下场景需要用到的工具或者技术: 部署的应用本身 作为代码仓库 作为CI/CD的工具 注:以下所有的相关部署代码,都在下面这个仓库 https://github.com/lzw5399/TocGenerator 你需要一个 这一部分需要有helm相关的知识,说白了就是将你的如果熟悉k8s但不熟悉helm,可以参照: kubernetes系列(十六) - Helm安装和入门 自定义的chart包,位于以下路径 https://github.com/lzw5399/TocGenerator/tree/master/kubernetes 如上图可以看出是一个很经典的自定义chart包的文件目录,即: https://dev.azure.com 这里要创建一个service connections,用于之后pipeline访问k8s的master服务器 新建 部署脚本的位置 https://github.com/lzw5399/TocGenerator/blob/master/deploy.sh 几点说明 这里有两种办法, 显示构建成功之后就可以查看了! 均衡负载是kubernetes自带的基础功能之一,这里只是做了一个试验可以更加直观地感受到而已 如下 则如果有2个实例,且均衡负载成功的话,每次刷新这个界面,会随机显示这两个guid 最后均衡负载试验的地址,也是本次实例项目的线上地址 https://toc.codepie.fun/version kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载 标签:参数 err folder sel 需要 连接 containe ubuntu 记录 原文地址:https://www.cnblogs.com/baoshu/p/13338115.html
1. 前言
kubernetes
和azure devops
实现项目的CI/CD
以及均衡负载kubernetes
的相关学习也暂时告一段落了,有种终于闯关成功了啊的感觉,当然这是题外话了。
注2:本文演示的也只是其中一种简便的方式,具体的自动化流程中,由于自由度非常高,所以实际的流程可能会更加复杂,这里就不做赘述了
2. Net Core项目本身的准备
2.1 dockerfile
dockerfile
来构建一个docker image
, 如果是.Net Core
项目,vs提供了傻瓜式生成dockerfile
的功能,可以免去初学时编写dockerfile
的烦恼
2.2 创建kubernetes用于helm的chart包
2.2.1 说明
2.2.2 chart文件目录和文件组成
.
├── Chart.yaml 【chart的name和version等信息】
├── templates 【k8s的资源清单模板,可以引用values.yaml的变量】
| ├── deployment.yaml
| └── service.yaml
├── values.yaml 【定义变量,供template/下的yaml使用,实现动态替换yaml内容】
3. Azure Devops创建仓库的pipeline
3.1 前言
Azure DevOps
是微软出品的DevOps
平台,里面包含了Pipelines
工具链,对个人免费,可以用于项目的CI/CD
3.2 使用azure devops准备操作
azure devops
,这几步可以视情况跳过。
azure devops
注册账号organization
project
project
3.3 创建service connections
service connections
来创建一个连接,用于访问k8s的master服务器
3.4 新建pipeline流水线
pipeline
流水线用于自定义部署流程
pipelines
,然后点击create pipelines
,新建一条流水线来部署我们的应用
azure-pipelines.yml
文件,
deploy.sh
脚本,完成部署# 哪条分支会触发构建
trigger:
- master
resources:
- repo: self
# 定义变量
variables:
- name: appName
value: tocgenerator
- name: tag
value: $(Build.BuildNumber)
- name: imageNameWithoutTag
value: $(dockerid)/$(appName)
- name: imageNameWithTag
value: $(imageNameWithoutTag):$(tag)
- name: serverChartLocation
value: /root/helm-chart-folder/toc
stages:
- stage: Build
jobs:
- job: Build
pool:
vmImage: ‘ubuntu-latest‘
# 这下面是每个我们要具体执行的任务
steps:
# build docker images并且push到仓库
- task: Docker@2
displayName: docker build and push
inputs:
containerRegistry: ‘my_docker_hub‘
repository: ‘$(imageNameWithoutTag)‘
command: ‘buildAndPush‘
Dockerfile: ‘**/Dockerfile‘
buildContext: ‘.‘
tags: $(tag)
addPipelineData: false
# 将kubernetes文件夹,即chart包拷贝到k8s的master服务器
- task: CopyFilesOverSSH@0
displayName: copy helm chart to server
inputs:
# 这个endpoint就是我们刚刚创建的service connection的名字
sshEndpoint: ‘my_server‘
sourceFolder: ‘kubernetes‘
contents: ‘**‘
targetFolder: $(serverChartLocation)
readyTimeout: ‘20000‘
# 在k8s的master服务器上运行我们github仓库的根目录的deploy.sh,进行部署操作
- task: SSH@0
displayName: run deploy shell on server
inputs:
# 这个endpoint就是我们刚刚创建的service connection的名字
sshEndpoint: ‘my_server‘
runOptions: ‘script‘
scriptPath: ‘deploy.sh‘
args: ‘$(tag) $(serverChartLocation)‘
readyTimeout: ‘20000‘
3.5 创建部署shell脚本
#!/bin/bash
# 出现错误退出脚本执行
set -o errexit
# $1 and $2 代表外部传入的参数
# $1是image的tag,$2是k8s的master服务器上我们自定义的chart的目录
buildNumber=$1
serverChartLocation=$2
cd $serverChartLocation
# 安装或者升级我们的helm release
# 即如果查询到了有release存在就upgrade,没有则install
if test -z "$(helm ls | grep toc-release)"; then
helm install -f values.yaml --set env.buildnumber=$buildNumber --set image.tag=$buildNumber toc-release .
else
helm upgrade -f values.yaml --set env.buildnumber=$buildNumber --set image.tag=$buildNumber toc-release .
fi
# 移除没有tag的悬挂docker image(可选)
danglings=$(sudo docker images -f "dangling=true" -q)
if test -n "$danglings"; then
sudo docker rmi $(sudo docker images -f "dangling=true" -q) >>/dev/null 2>&1
if [[ $? != 0 ]]; then
exit $?
fi
fi
exit 0
4. 触发pipeline部署流水线
我们设置的master
)触发构建5. 关于均衡负载
文章标题:kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载
文章链接:http://soscw.com/index.php/essay/43935.html