.NET DevOps 接入指南 | 1. GitLab 安装

引言

容器、DevOps和微服务被称为驱动云原生快速发展的三架马车。而DevOps是其中非常重要的一环,DevOps 是由Developers(Dev)和Operations(Ops)两个单词简称组成,中文直译就是“开发运维一体化”。 

DevOps 作为一种复杂的软件工程方法,推行实施并不可一蹴而就。因此采用好的平台工具,方能事半功倍,Gitlab作为一款成熟开源的一体化DevOps平台,其覆盖了DevOps全流程,提供了端到端的解决方案,诸如看敏捷开发、源代码托管、CI/CD、包管理、监控、K8S集成等。

接下来我会在最近的系列本章中来阐述.NET如何借助Gitlab来落地DevOps。

安装前准备

学习新技术的基础路径就是一定要上手实操,因此先介绍如何使用Helm安装一套GitLab环境,以便后续内容的展开。在安装前,首先确保拥有以下资源:

  1. 拥有自己的域名,可以自行到域名提供商注册申请

  2. 一个Kubernetes集群,需8核CPU,1内存以上

  3. 本地已安装kubectlHelm3

  4. 本地已安装Kubernetes IDE:Lens,具体可访文https://k8slens.dev进行下载。

其中,第2、3步在Kubernetes章节已有介绍,这里不在赘述。

开始安装

1. 添加GitLab Helm 仓库

为了使用Helm安装GitLab,首先就需要添加官方gitlab chart,参考以下命令进行添加:打开命令行,执行helm repo add gitlab https://charts.gitlab.io

shengjie@Thinkpad:~$ kubectl config get-contexts # 确保本地kubectl连接到正确集群
CURRENT   NAME             CLUSTER          AUTHINFO                             NAMESPACE
          cloud-native     cloud-native     clusterUser_aks-group_cloud-native
*         docker-desktop   docker-desktop   docker-desktop
shengjie@Thinkpad:~$ helm version # 查看本地helm版本
version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9
shengjie@Thinkpad:~$ helm repo add gitlab https://charts.gitlab.io # 添加gitlab helm 仓库
"gitlab" has been added to your repositories
shengjie@Thinkpad:~$ helm repo list # 查看本地已添加的Helm仓库
NAME    URL
gitlab  https://charts.gitlab.io
shengjie@Thinkpad:~$ helm search repo gitlab/gitlab # 搜索gitlab Chart
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
gitlab/gitlab                   5.3.3           14.3.3          Web-based Git-repository manager with wiki and ...

2. 下载GitLab Helm Chart

为了方便根据需要配置Helm Chart,可以先将GitLab Helm Chart 下载至本地进行修改,下载命令仅需执行以下命令:

shengjie@Thinkpad:~$ mkdir cloud-native # 创建目录
shengjie@Thinkpad:~$ cd cloud-native 
shengjie@Thinkpad:~/cloud-native$ helm pull gitlab/gitlab --version 5.3.3 --untar # 下载指定版本的gitlab chart
shengjie@Thinkpad:~/cloud-native$ ls gitlab/
CHANGELOG.md     Chart.yaml  README.md  charts    requirements.lock  support    values.yaml
CONTRIBUTING.md  LICENSE.md  Rakefile   deps.yml  requirements.yaml  templates

3. 安装GitLab Helm Chart

接下来就可以在本地进行安装,执行以下命令:

shengjie@Thinkpad:~/cloud-native/gitlab$ kubectl create namespace gitlab # 创建gitlab命名空间
shengjie@Thinkpad:~/cloud-native/gitlab$ helm install gitlab . -n gitlab \ # 指定在gitlab 命名空间安装
> --set global.hosts.domain={你的域名} \ # 设置域名,这里为后续讲解方便,{你的域名}替换为shengjie.dev
> --set certmanager-issuer.email={你的邮箱} # 设置证书邮件
NAME: gitlab
LAST DEPLOYED: Sat Sep 25 04:29:39 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
NOTICE: The minimum required version of PostgreSQL is now 12. See https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/doc/installation/upgrade.md for more details.

NOTICE: You've installed GitLab Runner without the ability to use 'docker in docker'.
The GitLab Runner chart (gitlab/gitlab-runner) is deployed without the `privileged` flag by default for security purposes. This can be changed by setting `gitlab-runner.runners.privileged` to `true`. Before doing so, please read the GitLab Runner chart's documentation on why we
chose not to enable this by default. See https://docs.gitlab.com/runner/install/kubernetes.html#running-docker-in-docker-containers-with-gitlab-runners

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=helm&release=14-3

安装成功后,可以通过执行以下命令来确认gitlab是否成功安装,带所有pod 处于Running状态就说明安装成功了。

shengjie@Thinkpad:~$ helm list -n gitlab # 查看gitlab命名空间安装的Chart状态
NAME NAMESPACE REVISION STATUS  CHART   APP VERSION
gitlab  gitlab      1           deployed    gitlab-5.3.2    14.3.2
shengjie@Thinkpad:~$ kubectl get deploy -n gitlab # 查看gitlab命名空间下的deploy是否都为可用状态
NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
gitlab-certmanager                     1/1     1            1           8d
gitlab-certmanager-cainjector          1/1     1            1           8d
gitlab-certmanager-webhook             1/1     1            1           8d
gitlab-gitlab-exporter                 1/1     1            1           8d
gitlab-gitlab-runner                   1/1     1            1           8d
gitlab-gitlab-shell                    2/2     2            2           8d
gitlab-minio                           1/1     1            1           8d
gitlab-nginx-ingress-controller        2/2     2            2           8d
gitlab-nginx-ingress-default-backend   1/1     1            1           8d
gitlab-prometheus-server               1/1     1            1           8d
gitlab-registry                        2/2     2            2           8d
gitlab-sidekiq-all-in-1-v1             1/1     1            1           8d
gitlab-task-runner                     1/1     1            1           8d
gitlab-webservice-default              2/2     2            2           8d
shengjie@Thinkpad:~$ kubectl get statefulset -n gitlab # 查看已安装的有状态服务
NAME                  READY   AGE
gitlab-gitaly         1/1     8d
gitlab-postgresql     1/1     8d
gitlab-redis-master   1/1     8d

从安装的Pod来看,GitLab chart默认安装了以下组件和服务:

  • NGINX Ingress Controller:用于部署Nginx 作为Ingress 控制器,控制集群入口网关。

  • Registry:提供镜像仓库服务,用于存储镜像。

  • GitLab/Gitaly:GitLab的RPC组件,用于内部通信。

  • GitLab/GitLab Exporter:收集GitLab运行指标,用于GitLab服务监控。

  • GitLab/GitLab Grafana:用于提供仪表盘 。

  • GitLab/GitLab Pages:用于为GitLab项目生成静态网站。

  • GitLab/GitLab Shell:用于配置SSH以便访问GitLab的SSH服务器。

  • GitLab/Mailroom:电子邮件服务。

  • GitLab/GitLab Runner:用于执行CI/CD流水线任务。

  • GitLab/Sidekiq:后台任务执行组件

  • GitLab/Task Runner:用于在 GitLab 应用程序中执行定期管理任务。这些任务包括备份、Sidekiq 维护和 Rake 任务。

  • GitLab/Webservice:GitLab Web 站点。

  • PostgreSQL:关系型数据库,用于存储GitLab配置。

  • Redis:非关系数据库,用于缓存。

  • MinIO:对象存储服务器。

  • Cert-Mangager:用于自动通过Let's Encrypt申请SSL证书。

  • Prometheus:用于指标收集提供监控

  • Grafana:提供可视化的仪表盘用于指标展示

4. 域名绑定

接下来就是进行域名绑定了,首先执行kubectl get ingress -n gitlab来查看所有的ingress。命令如下:

shengjie@Thinkpad:~$ kubectl get ingress -n gitlab
NAME                        CLASS    HOSTS                   ADDRESS         PORTS     AGE
gitlab-minio                <none>   minio.shengjie.dev      20.205.104.95   80, 443   7d22h 
gitlab-registry             <none>   registry.shengjie.dev   20.205.104.95   80, 443   7d22h
gitlab-webservice-default   <none>   gitlab.shengjie.dev     20.205.104.95   80, 443   7d22h

其中minio.shengjie.dev为minio对象存储站点,registry.shengjie.dev为镜像仓库站点,gitlab.shengjie.dev 为gitlab主站点。接下来前往自己的域名提供商的管理站点,添加A记录进行域名映射。举例如下:bdceb9a53850c1befcd09cd354c17889.png做好域名绑定后,Cert-Manager组件负责申请的SSL证书就会下发成功,具体状态可以通过命令 kubectl get certificate -n gitlab查看Certificate资源确认,也可使用Lens工具通过以下步骤进行验证,当Ready状态为True时说明下方成功,即可通过域名正常访问。61fe8de62f306ce483524ec078140f30.png

5. 访问验证

由于在安装时未指定root用户密码,因此需要从命名为gitlab-gitlab-initial-root-password的Secret中获取,这里建议直接通过Lens快速查看,步骤如下图所示:9cbfc018e6bb9260feb8103d6c620d75.png打开gitlab站点,用户名输入root,密码输入上图中Base64解码的密码即可成功登录,登录成功后,如下图所示:5e88dc9f5ec52474bb5c9086da1f212e.png由于默认界面为英文展示,可以根据需要通过上图中Go to preferences前往偏好设置页面,进行语言修改。步骤如下图所示:b7c2b4b3758438e006adf7285f7d1f21.pngGitLab在安装时同时也安装了MinIO,MinIO 是一款高性能、分布式的开源对象存储系统。MinIO 为云原生而设计,对Kubernetes支持友化,其简单轻量易用,实现了对象存储所需的全部功能,与传统对象存储相比,MinIo在同等硬件配置下有更高的吞吐量和更低的延迟,目前已成为主流的对象存储系统。可以通过查看ingress发现默认绑定到域名minio.shengjie.dev。此时可以通过从命名为gitlab-minio-secret的Secret中找到用于登录的accesskeysecretkey,如下图所示:833212b8d83294f70d0b742c2b07febf.png

MinIO站点登录成功后,可以发现其预置了一些bucket(桶),其中有以下比较常用的桶:

  1. gitlab-artifacts:用于存储持续构建环节中产生的中间产物,用于在同一流水线的不同Stage中共享。

  2. gitlab-packages:用于存储如NPM 包、NutGet 包。

  3. gitlab-pages:用于存储gitlab 静态页面文件资源。

  4. registry:用于作为镜像仓库,如存储docker镜像。

  5. runner-cache:用来存储依赖项,比如从互联网上下载的软件包。

在后续的流水线配置中,将使用MinIO存储镜像文件和缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/285989.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年12月Scratch等级考试(四级)真题试卷

2023年12月Scratch等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;24 总分数&#xff1a;100 选择题 第 1 题 单选题 Scratch运行下列程序&#xff0c;输入“abcdef”&#xff0c;程序结束后&#xff0c;变量“字符串”是&#xff1f;&#xff0…

外贸人应该顺应趋势做外贸

2024年&#xff0c;有人疑惑外贸将如何发展&#xff1f;我想紧跟趋势是不会出错的&#xff0c;多年前网络没有如今那么发达&#xff0c;客户到中国参展或者来访就能确认订单。如今到处都是各种推广平台&#xff0c;客户足不出户就能在线上订购产品&#xff0c;如果你还是想靠之…

基于Java SSM框架实现智能仓储管理系统项目【项目源码+论文说明】

基于java的SSM框架实现仓库管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;智能仓储系统当然也不能排除在外。智能仓储系统是以实际运用为开发背景&#xf…

易用、高效、可靠!高精度组合定位系统P-Box测试解决方案

简介 TCU&#xff08;Telematics Control Unit&#xff09;是车载网联通讯终端&#xff0c;用于实现车辆远程通讯和远程服务。随着自动驾驶技术的不断发展&#xff0c;准确获取车辆定位信息变得越来越重要。P-Box将GNSS定位与惯性导航定位相结合&#xff0c;能够为车辆提供精准…

C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

前言 本人一直从事C上位软件开发工作较多&#xff0c;在之前的项目中通过C访问西门子PLC S7-200/S7-1200/S7-1500并进行数据交互的应用中一直使用的是ModbusTCP/ModbusRTU协议进行。Modbus上位开源库采用的LibModbus。经过实际应用发现Modbus开源库单次发送和接受的数据不能超过…

R306指纹识别模块功能实现示例

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…

【深度学习下载大型数据集】快速下载谷歌云盘数据集

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 跑深度学习的时候,一些数据集比较大,比如60多个G,而且只是训练集. 然后这些数据是由某些实验室组采集的,并不像一些大公司搞的,一般都直接方法一些网盘中. 如果是谷歌网盘,本身通过代理也不麻烦,但是发现即使通过代…

Java中常见的进制转换

进制是一种表示数字的方法&#xff0c;用于计算机科学、数学和电子工程等领域。常见的进制包括十进制、二进制、八进制和十六进制。 十进制是我们最常用的数字表示方法&#xff0c;使用10个数字(0-9)来表示所有数字。 二进制是计算机最基本的进制&#xff0c;使用2个数字(0和1)…

vue3 实现el-date-picker日期筛选过程

一、图例 二、需求&#xff1a; 有2个查询条件&#xff0c;startTime 和 endTime 选中时间1&#xff0c;禁止选中时间2&#xff0c;当前值传递给 startTime 选中时间2&#xff0c;禁止选中时间1&#xff0c;当前值传递给 startTime 和 endTime 三、完整代码 <div class…

java中使用redis

1、redis数据类型 1.1、5种数据类型 redis存储的是key-value结构的数据&#xff0c;其中key是字符串类型&#xff0c;value有5种常用的数据类型&#xff1a;字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。 字符串(string)&#xff1a;普通字符…

揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘

引言 在我们前面的讲解中&#xff0c;我们详细了解了计算机系统的核心组件&#xff0c;包括CPU、内存和磁盘。然而&#xff0c;总线在这个体系中同样至关重要。总线是计算机内部各部件间通信的桥梁&#xff0c;涉及数据、地址和控制信号的传输。在接下来的内容中&#xff0c;我…

【C++】浅拷贝 / 深拷贝 / 写时拷贝

文章目录 1. 经典的string类问题2. 浅拷贝3. 深拷贝3.1 传统写法的String类3.2 现代写法的String类 4. 写时拷贝 1. 经典的string类问题 上一篇博客已经对string类进行了简单的介绍&#xff0c;大家只要能够正常使用即可。 链接&#xff1a;【C】string 在面试中&#xff0c;面…

用Redis实现实现全局唯一ID

全局唯一ID 如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受表数据量的限制 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 唯一性高可用递增性安全性高性能 为了增加ID的安全性…

PMP如何续证?

PMP证书的有效期是3年&#xff0c;那过了有效期如何续证呢&#xff1f;对此你需要完成两个步骤&#xff1a; 1.在三年之内向PMI申报完成60个PDU&#xff1b; 2.向PMI申请下一个三年续证的有效期并缴费。 流程看着挺简单&#xff0c;但是对于首次操作的朋友可能会感到有些陌生…

深入解析云原生与Kubernetes:现代化应用开发的未来

云原生是一种创新的软件开发和部署方法论&#xff0c;旨在使应用程序能够更好地适应云环境的特性和需求。而Kubernetes作为云原生的核心技术&#xff0c;提供了强大的容器编排和管理能力&#xff0c;改变了应用部署和运行的方式。本文将深入探讨云原生和Kubernetes的概念、原理…

【VTK三维重建-体绘制】第四期 VTK中GPU加速

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 上期内容讲到VTK的体绘制技术vtkGPUVolumeRayCastMapper&#xff0c;本文分享VTK中GPU加速的相关内容&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会…

WPF Blend for visual studio使用

Blend for visual studio介绍 VS自带Blend for visual studio是专门用来做WPF、Metro等的界面设计的可视化工具&#xff0c;其功能和PS类似。其目的让做界面和后台的程序分开&#xff0c;能快速绘制形状和路径、修改对象样式、动态显示对象(动画)、显示数据等高级操作。VS与Ble…

性能优化-OpenMP基础教程(一)

本文主要介绍OpenMP并行编程技术&#xff0c;编程模型、指令和函数的介绍、以及OpenMP实战的几个例子。希望给OpenMP并行编程者提供指导。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&am…

每日一练:LeeCode-LCR 123. 图书整理 I (反转链表)(简)【栈、头插法(虚拟头结点)、双指针、递归】

本文是力扣LeeCode-LCR 123. 图书整理 I &#xff08;简&#xff09; 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 书店店员有一张链表形式的书单&#xff0c;每个节点代表一本书&#xff0c;节点中的值表示书的编号。为…

漏洞扫描工具scan4all(15000+PoC)

scan4all拥有15000PoC漏洞扫描&#xff0c;23种应用弱口令爆破&#xff0c;7000Web指纹&#xff0c;146种协议&#xff0c;90000规则Port扫描。集成 vscan、nuclei、ksubdomain、subfinder等&#xff0c;充分自动化进行扫描。是一款Fuzz、HW打点、BugBounty神器等工具。 项目地…