K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境

一.部署流程介绍

开发人员通过Git上传asp.net core 项目到Gilab,并编写好.gitlab-ci.yml , GitLab-Runner 自动拉取代码,然后进行Build,编译,单元测试,生成镜像,并推送到Harbor仓库,docker 进行测试部署,最后部署部署到K8S.

二.集群组件介绍

节点 IP 组件
Deploy 192.168.0.201

Breeze

 Master01 192.168.0.202  Docker+loadbalancer+etc+K8S
Harbor 192.168.0.203 Harbor+DOcker
Work01 192.168.0.204 Docker+Gitlab
Work02 192.168.0.205 Docker+Gitlab-Runner

三.部署组件

1.先部署K8S 环境.

推荐两种部署方式:
1.https://github.com/wise2c-devops/breeze (可视化Kubernetes集群部署工具,注本篇的部署方式)
2.https://github.com/opsnull/follow-me-install-kubernetes-cluster (手动部署)

2.部署redis

3.部署Gitlab,使用docker-compose方式,创建docker-compose.yml文件

version: '3'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh'
container_name: gitlab
restart: unless-stopped
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.evan.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
#以下为启用邮件相关设置,我用的是QQ邮箱
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.qq.com'
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = '你的邮箱@qq.com'
gitlab_rails['smtp_password'] = '邮箱密码'
gitlab_rails['smtp_domain'] = 'smtp.qq.com'
gitlab_rails['smtp_authentication'] = 'plain'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '你的邮箱@qq.com'
user["git_user_email"] = '你的邮箱@qq.com'
#修改sidekiq的数量,减少内存占用,默认为15,也可以不填
sidekiq['concurrency'] = 10
#使用外部redis所需设置,根据刚刚生成的redis设置修改
gitlab_rails['redis_port'] = 6379
gitlab_rails['redis_host'] = '127.0.0.1'
gitlab_rails['redis_password'] = '123'
gitlab_rails['redis_database'] = '2'
#因为22端口被占用,修改映射的端口号时,同时修改在Gitlab项目中的ssh地址加上端口号
gitlab_rails['gitlab_shell_ssh_port'] = 10022
ports:
- '10080:80'
- '10443:443'
- '10022:22'
networks:
- net_db
volumes:
- ./config:/etc/gitlab
- gitlab-data:/var/opt/gitlab
- ./logs:/var/log/gitlab
volumes:
gitlab-data:
external: true
networks:
net_db:
external: true
docker network create net_db
docker volume create gitlab-data
docker-compose up -d
docker-compose logs -f (查看部署状态)
修改gitlab.rb文件
external_url 'http://你的gitlab地址:10080'
nginx['listen_port'] =80
docker-compose restart
部署成功后Git运行以下命令:

Git global setup(Git全局设置):
git config --global user.name "xxx"
git config --global user.email "xxx.com"

ssh-keygen -t rsa -C "xxx@qq.com" -b 4096

 cat ~/.ssh/id_rsa.pub
ssh -T -p 10022 git@localhost (修改成你的地址,测试是否连接成功)
打印: Welcome to GitLab, @xxx! 说明成功了


4.安装部署Gitlab-Runner(CentOS7)

如果官方的Runner下载不了下载下面的
链接: https://pan.baidu.com/s/1q7ErwW53osI0LRy8SO8Gaw 提取码: d9n7
Gitlab-Runner服务器上安装Git
yum install -y git
1.下载二进制文件
# Linux x86-64
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2.赋予它执行权限:
sudo chmod +x /usr/local/bin/gitlab-runner
3.创建GitLab CI用户:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
4.将gitlab ci用户添加到docker运行用户的组里面
sudo usermod -aG root gitlab-runner
sudo usermod -aG docker gitlab-runner
5.安装并作为服务运行:
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
6.注册Gitlab-Runner ,shell 方式
sudo gitlab-runner register
官网参考链接:https://docs.gitlab.com/runner/register/index.html
7.测试
sudo -u gitlab-runner -H docker info
8.给Gitlab-Runner 执行kubectl权限,拷贝 /root/.kube 文件夹 到 gitlab-runner 用户家目录下,且修改此文件夹属于 gitlab-runner用户和组
chown -R gitlab-runner.gitlab-runner .kube
sudo -u gitlab-runner kubectl get cs
 

5.安装.NET Core SDK (CentOS7)

在部署Gitlab-Runner的机器上安装SDK,因为Gitlab CI 要构建代码和运行ASP.NET Core单元测试.

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install dotnet-sdk-2.2

微软官方安装链接

6.下一章节:ASP.NET Core  DevOps

gitlab runner 填坑记

 

一、Gitlab Runner  CI/CD 错误:

Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
ERROR: Job failed: exit status 1

解决办法:

# 修改权限
$chmod +x /usr/local/bin/gitlab-runner # 添加gitlab-runner用户
$useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash # 将gitlab-runner用户添加到docker组 
$sudo usermod -aG docker gitlab-runner # 验证
$sudo -u gitlab-runner -H docker info 

如图

K8S+GitLab+.net core-自动化分布式部署-1的更多相关文章

  1. K8S+GitLab+.net core-自动化分布式部署-2

    K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Core DevOps K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Co ...

  2. K8S+GitLab+.net core-自动化分布式部署-3

    K8S+GitLab-自动化分布式部署ASP.NET Core(三) 更新镜像版本并部署到K8S上   一.介绍 前一篇,介绍了ASP.NET Core部署到K8S上,下面介绍我们在发布新一版本中怎么 ...

  3. .Net Core自动化部署系列(二):使用Jenkins打造镜像发布流水线

    一.简介 之前写过一篇关于Jenkins搭配GitLab实现.net core项目自动发布到IIS的博文,比较简单哈,只是个Demo.本篇我们将会使用Jenkins搭配GitLab实现镜像的自动打包和 ...

  4. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  5. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  6. .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心

    一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...

  7. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  8. 【G】开源的分布式部署解决方案(一) - 开篇

    做这个开源项目的意义是什么?(口水自问自答,不喜可略过) 从功能上来说,请参考 预告篇,因自知当时预告片没有任何含金量,所以并没有主动推送到首页,而是私下的给一些人发的. 从个人角度上来说,我希望.n ...

  9. 【G】开源的分布式部署解决方案 - 预告篇

    为什么想到要做分布式部署解决方案? 当项目越做越大以后,你会发现部署变成一件极其头疼的事情.当然头疼的绝不仅仅在部署一个环节,比如新服务器环境搭建当中就许多坑要踩.各种重复性的工作,包括但不仅限于增加 ...

随机推荐

  1. 鸡尾酒排序Cocktail Sort (双向冒泡排序)

    鸡尾酒排序 鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都 ...

  2. ES6函数的个人总结

    默认参数: 1. 在 ES5 语法中,为函数形参指定默认值的写法: 写法一: function foo (bar) { bar = bar || 'abc'; console.log(bar) } f ...

  3. [NPM + React] Prepare a Custom React Hook to be Published as an npm Package

    Before we publish our package, we want to make sure everything is set up correctly. We’ll cover vers ...

  4. learning java transient 自定义序例化

    public class Person implements java.io.Serializable { private String name; private transient int age ...

  5. WinDbg常用命令系列---显示数据类型dt/dtx

    dt (Display Type) dt命令显示有关局部变量.全局变量或数据类型的信息.这可以显示有关简单数据类型以及结构和联合的信息. 用户模式下: dt [-DisplayOpts] [-Sear ...

  6. 使用terraform v0.12 生成gitlab repo 创建部署tf 文件

      以前写过一个使用模版引擎+ rest 接口的模式,生成tf 文件,v0.12 直接提供了方便的json 处理函数 我们可以直接结合http 以及templatefile providers 方便的 ...

  7. Python 09 安装torch、torchvision

    这个也是弄了我很久,百度了好多文章,其实像下面那样挺简单的,没那么复杂 1.进入torch的官网的下载页面,选择一下参数信息 地址:https://pytorch.org/get-started/lo ...

  8. 洛谷 P1536 村村通

    目录 题目 思路 \(Code\) 题目 P1536 村村通 思路 并查集,一开始连通快的数量为\(n\),输入\(m\)条边时如果该边起点和终点不在同一联通块内就合并并让联通块数量减一,最后输出联通 ...

  9. win服务器 文件上传下载出现“未指定的错误” 解决方法汇总

    环境 WIN平台IIS服务器   经常出现于ASPX页面 汇总 1.权限问题 出现场景 : 基于ACCESS数据库   原因解析 : 1.首先需要排除自身问题,例如建表使用关键字,格式错误,插入数据与 ...

  10. javascript 之正则表达式匹配不包含特定字符串的字符

    如:有如下字符串,想查出不包含min.js的字符串  ['xx.min.js','xx.js','x.js','x.min.js'] 方法一: 使用逻辑非判断, !/min\.js/.test(str ...