0、目录


整体架构目录:ASP.NET Core分布式项目实战-目录

k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

此文阅读目录:

1、闲聊

2、部署流程介绍

3、部署Harbor仓库

4、jenkins-slave镜像搭建

5、部署jenkins

6、jenkins+gitlab挂钩

7、k8s部署asp.net core项目

一、闲聊


现在基本上是隔几天写一篇文章,还是不够勤奋,努力把自己打造成勤奋的人,把工作上面所用到的技术点分享给大家。为了研究k8s自动化部署aspnet core项目,足足花费了我一个礼拜的时间,过程是痛苦的,但结果是美好的。

如果以下内容有不足的地方,请指出,我会第一时间更正。谢谢大家。

二、部署流程介绍


 1、先上一下手绘导图,大致的流程图如下:(不喜勿喷呀)

大致的部署流程是这样的:开发人员把做好的asp.net core项目代码通过git推送到gitlab,然后Jenkins通过 gitlab webhook (前提是配置好),自动从拉取gitlab上面拉取代码下来,然后进行build,编译、生成镜像、然后把镜像推送到Harbor仓库;然后在部署的时候通过k8s拉取Harbor上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问。(ps:看着我讲这么简单,但心里有许多小鹿在心里乱撞,没关系,下面将会好好的分享给大家)

当然啦,上面只是粗略的,请看下图才更加形象。

2、先介绍一下我的服务器IP和在各个服务器上面所安装的内容

ps:由于我的电脑配置有限,运行太多的虚拟机会导致内存空间不够用,因此就弄了三台,已经是极限了。

如果大家对于k8s怎么部署,请看我之前的文章有介绍。前提是要安装好docker环境、gitlab等

IP 角色
192.168.161.151 master1、Harbor、Jenkins
192.168.161.152 node1
192.168.161.153 node2、Gitlab

三、部署Harbor仓库


第一步:下载harbor二进制文件:https://github.com/goharbor/harbor/releases

第二步:安装 docker compose

命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

然后把下载的docker-compose 设置可执行权限

命令:chmod +x /usr/local/bin/docker-compose

第三步:此处应该设置自签证书的,即访问的时候是采用HTTPS进行访问的。此处略去,不影响我们接下去的部署。(后期会出一篇关于自签证书的文章,仅供参考)

第四步:将下载好的Harbor二进制包上传到服务器上面,然后解压出来

解压的命令为: tar xzvf 包名

第五步:进入解压出来的文件夹harbor中,有如下文件。

配置文件,vi harbor.cfg

把其中的hostname修改为:master1 的IP地址。

然后 修改harbor的登录密码:为了方便起见,我修改为123456,大家可自行修改

第六步:在当前文件夹中开启harbor

执行命令:

./prepare

./install.sh  (运行此处的时候需要一定的时间,请等待吧)

第七步:启动成功,查看一下(完美的运行)

docker-compose ps

用浏览器查看一下(出现以下内容,代表成功,完美)

进入到里面后,我先在用户管理中创建了一个用户  louie 。大家自行创建,为了后期需要把一些依赖镜像先推送到harbor仓库中。然后在项目中创建项目,如下:

所创建的项目,并且,我在每个项目中都加入了我刚才所创建的用户,方便后期登录并推送镜像

                            

此处介绍一下我的项目,coresdk 主要用来存放  asp.net core 所需要的sdk;ops主要是用来存放的jenkins镜像和jenkins-slave镜像;projectdemo 主要存放我的asp.netcore 项目的镜像,供k8s拉取。

至此,harbor部署完成。

四、jenkins-slave镜像搭建


操作服务器:node1

说明:jenkins-slave 主要是为了分担jenkins-master的压力。如下图所示:(在多任务运行的时候可以采用)

1、为了创建jenkins-slave镜像,我这边准备了三个文件

Dockerfile:构建jenkins-slave镜像

jenkins-slave:shell脚本(需要加入可执行权限 chmod +x jenkins-slave),在镜像构建时需要用到。

slave.jar: 启动脚本


Dockerfile 文件内容如下(如需源文件可加入QQ群获取),如下图所示:可以看到 jenkins-slave需要依赖java的一些环境。

2、配置java的基础环境。

配置 JDK和maven,把下载的二进制包放到如下目录(由于文件太大,可移步到群中下载)

apache-maven-3.5.3-bin.tar.gz解压到的地址为 /usr/local/maven里面。
jdk-8u45-linux-x64.tar.gz解压到的地址为 /usr/local/jdk里面。

3、准备好环境后,刚才构建镜像,如下:

执行命令:

构建完成后把镜像推送到Harbor仓库中。

在推送的过程中需要先登录到harbor仓库

执行命令: docker login 192.168.161.151

执行后发现及时输入账号和密码也无法登录,由于在node1中没有添加harbor仓库的IP地址导致无法登录,因此

执行命令: vi /etc/docker/daemon.json

把下图的红色圈的部分加入,然后重启一下docker。

执行 docker info ,看一下IP地址是否生效,发现已加入。好了,在试一下登录,发现登录成功,然后开始推送把。

当然harbor 上也给出了 镜像推送的语句

开始推送:docker push 192.168.161.151/ops/jenkins-slave

至此,jenkins-slave 镜像已推送完毕。

五、部署jenkins


部署jenkins时,我把jenkins的数据卷采用pv/pvc、nfs 进行挂载。

1、需要准备文件有

jenkins-service-account.yml :jenkins的服务账号创建

jenkins.yml : 创建容器和service 服务得。进行可以访问。

Dockerfile :主要用来生成 jenkins 镜像的。

registry-pull-secret.yaml:主要是用来部署时可以直接登录harbor仓库来拉取镜像(在部署jenkins需要用到)

2、开始吧。

切换到node1服务器,把之前准备好的Dockerfile文件构建一下

命令:docker build -t 192.168.161.151/ops/jenkins:lts-alpine .

然后推送到Harbor仓库中,命令:docker push 192.168.161.150/ops/jenkins:lts-alpine

3、切换到master 服务器上

构建 jenkins-service-account.yml 和jenkins.yml  文件以及registry-pull-secret.yaml

特别注意registry-pull-secret.yaml 中的namespace,需要在k8s中创建,以及 data里面的64位认证信息(需要登录harbor仓库后生成的信息黏贴在这里)

生成方式为:可以在有登录的harbor 的node服务器上面执行以下命令生成认证信息
命令: cat ~/.docker/config.json |base64 -w0 即可生成信息

执行上上面的文件后,命令: kubectl create -f  文件名。

生成如下,发现jenkins已在运行,而且是运行在153节点上。那么开始用浏览器访问把

查看一下 service ,jenkins的外部访问端口为诶 30001.

4、输入访问地址:http://192.168.161.153:30001/

在第一次登陆的时候需要密码进行解锁jenkins,按照提示获取密码即可。

然后选择 “”插件来安装“”,如果需要特别的插件直接选择,否则直接安装即可。

5、要想把jenkins关联到k8s中需要安装几个插件

打开  “系统管理” =》“管理插件” 然后安装

Kubernetes Continuous Deploy、Kubernetes、Gitlab Hook 、GitLab、Build Authorization Token

6、安装完毕后就开始构建项目啦。

我新建一个项目,然后选择 流水线、然后点击确定。

7、创建完任务后先不进行配置,我们先要设置一下jenkins挂钩k8s的环境

点击 “系统管理”=》“系统设置”。一直往下滑动,点击“新增一个云”,选择k8s,如果这边没有出现k8s,则代表你的插件没有安装成功,请重新安装吧。

然后配置一下里面的内容,只要配置这两个地方就可以了。针对URL,我这边是采用kube-dns来做服务发现,不需要实际的ip地址进行输入。至此搞定。不过还得配置一下 “凭证”,即SSH密钥,方便可以从gitlab那边拉取代码,有玩过gitlab应该知道,拉取代码分为git和http。

此处如果发现测试不通过,请现在k8s中安装一下kube-dns.yaml,文件在群中k8s集群部署文件下面:直至在k8s中执行即可。

命令:kubectl create -f kube-dns.yaml

8、添加凭证

在这里我添加了两个凭证,一个是ssh,和k8s的凭证。这个可自行添加一下即可。这里要注意一下:凭证生成后,进入凭证里面会有一个自动生成的ID,此ID需要在asp.net core项目中的Jenkinsfile里面配置。

root中的密钥时私钥,并且在服务器上需要把公钥配置到gitlab上。

这下面是gitlab 上面配置ssh, ssh的私钥和公钥,直接在 node服务器上生成一下即可 ssh-keygen,  然后把里面的内容复制出来即可。

六、jenkins+gitlab挂钩


上面已经创建了一个任务。然后我们开始配置这个任务里面的内容并且与gitlab挂钩把

1、进入testproject里面配置。按照以下图配置完后即可。然后点击保存。这样就完成了任务配置,接下来就是要配置一下gitlab啦

2、配置gitlab

在gitlab中我创建了一个项目Testproject

然后进入到项目中,点击 “Settings”=》Integrations

把上面URL和Token复制到这边,然后点击保存即可。接下来就是测试一下这个配置是否可以用

将上面创建好的webhook 进行测试,gitlab会模拟代码推送事件,返回200就代表成功啦。

成功啦。

七、终于到了我们asp.net core项目啦


github地址:上面有完整的代码 https://github.com/LouieGuo/testproject,记得fork me哟。感谢感谢。

在这里我创建了一个asp.net core webapi 的项目,不做任何修改。然后在项目中加入了这几个部署文件。

deploy文件里面包含 Jenkinsfile 和deploy.yml(用来部署项目镜像的)

注:Jenkinsfile里面这两个地方需要配置为你们在Jenkins里面创建的两个授权的ID,ID内容可以进入到凭证里面看。切记,一定要改。

Dockerfile :中是用来构建项目镜像 的

dockerfile 内容,当然里面的sdk我已经打包好了,已经上传到我的harbor仓库中。


到目前为止 我们就可以开始上传代码到gitlab上,然后自动触发构建啦。

上传后再这边会出现构建进行,我们可以查看 控制台输出

输出、以及构建成功

在master上面查看

发现已经运行我的项目啦,用浏览器访问以下。

查看一下外部发布的端口

运行成功啦。这篇文章写了好久,可能中间有漏掉的步骤,欢迎大家留言,后期补充。


github:fork me

asp.net Core 交流群:787464275 欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!

作者:LouieGuo
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

微信公众号:欢迎关注                                                 QQ技术交流群: 欢迎加群

                

k8s+Jenkins+GitLab-自动化部署asp.net core项目的更多相关文章

  1. Web Server 在IIS上部署ASP.NET Core项目

    在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/ ...

  2. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程

    系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...

  3. Docker + Jenkins 持续部署 ASP.NET Core 项目

    Docker 是个好东西,特别是用它来部署 ASP.NET Core Web 项目的时候,但是仅仅的让程序运行起来远远不能满足我的需求,如果能够像 DaoCloud 提供的持续集成服务那样,检测 gi ...

  4. Centos下使用Docker部署asp.net core项目

    本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...

  5. linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库

    1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...

  6. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  7. Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

    1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...

  8. 在Linux CentOS上部署Asp.Net Core项目(Tengine、Asp.Net Core、Centos、MySql)

    一.前言 1.简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤. 2.简单比较一下Tengine 和Nginx 3.搭建Asp.net Core和部署 Web程序 4.总结 ...

  9. Jexus部署Asp.Net Core项目

    在之前的我的博客项目中,我将.net Core发布到Cent OS 上,使用的Nginx代理以及Supervisor进程守护,看过我的博客的童鞋,也会发现,这种方式比较麻烦,光命令行就看的头大,总共部 ...

随机推荐

  1. 在kubernetes集群中创建redis主从多实例

    分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...

  2. NodeJS 笔记 path模块

    path 模块,本模块包含一系列处理和转换文件路径的工具集. path.normalize(path)   normalize函数将不符合规范的路径经过格式化转换为标准路径,解析路径中的.与..外,还 ...

  3. 风控模型-美国FICO标准

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  4. Mogodb 学习一

    0.MongoDB和关系型数据的几个重要对象对比 MongoDB中的数据库.集合.文档 类似于关系型数据库中的数据库.表.行 MongoDB中的集合是没有模式的,所以可以存储各种各样的文档 1.启动M ...

  5. 20155338 2016-2017-2 《Java程序设计》第7周学习总结

    20155338 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 本周学习了第十二章和第十三章的内容,我重点学习了第十三章时间与日期的相关内容. 时间的度量: ...

  6. 广度优先搜索(BFS)----------------(TjuOj1140_Dungeon Master)

    这次整理了一下广度优先搜索的框架,以后可以拿来直接用了.TjuOj1140是一个三维的迷宫题,在BFS时我增加了一个控制数组,用来对队列的出队进行控制,确保每次出队的结点均为同一步长的结点,个人认为比 ...

  7. HTML+CSS写下拉菜单

    今天学习了使用HTML+CSS实现下拉菜单效果,在这个例子中,我学到了如下知识点: 设置背景图片(background-image.background-size) 如何让无序列表横向显示(float ...

  8. 在xampp与phpstorm环境下安装xdebug[转]

    XDebug是什么 很多PHP程序员调试使用echo.print_r().var_dump().printf()等,虽然对于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中 ...

  9. 论参数self

    此篇文章仅适用于py3.在py2中,a.fuc(x)中的参数x必须是 类a的实例对象,而py3则可以是任意对象.参考绑定方法和非绑定方法 当一个对象添加了一个方法,并且此方法的第一个参数为self,或 ...

  10. Bug Bounty Reference

    https://github.com/ngalongc/bug-bounty-reference/blob/master/README.md#remote-code-execution Bug Bou ...