2024广东省职业技能大赛云计算赛项实战——集群部署GitLab

news2024/12/26 13:25:56

集群部署GitLab

前言

题目是这样的:

在Kubernetes集群中新建命名空间gitlab-ci,将GitLab部署到该命名空间下,Deployment和Service名称均为gitlab,以NodePort方式将80端口对外暴露为30880,设置GitLab服务root用户的密码为admin@123,将项目包demo-2048.tar.gz导入到GitLab中并命名为demo-2048。

GitLab是一个功能强大且灵活的 DevOps 平台,为开发团队和企业提供了从代码管理到持续集成、交付和部署的一整套解决方案。无论是小型团队还是大型企业,都可以从中受益,提高开发效率和软件质量。

使用的环境是之前搭建的容器云平台:2024广东省职业技能大赛云计算赛项实战——容器云平台搭建-CSDN博客
不过我嫌麻烦搭了台allinone的,只有master节点,使用的IP是192.168.200.15/24

操作过程

环境准备

#解压需要用到的软件包
[root@k8s-master-node1 ~]# tar -zxf CICD-Runners-demo2048.tar.gz
[root@k8s-master-node1 ~]# ls 
anaconda-ks.cfg  chinaskills_cloud_paas_v2.0.2.iso  CICD-Runners-demo2048.tar.gz  gitlab-ci
#使用ctr命令将镜像导入到当前使用的容器运行时的镜像存储中
[root@k8s-master-node1 ~]# docker load -i gitlab-ci/images/images.tar 
#根据题目要求创建命名空间gitlab-ci
[root@k8s-master-node1 ~]# kubectl create ns gitlab-ci
namespace/gitlab-ci created
#切换到到gitlab-ci目录
[root@k8s-master-node1 ~]# cd gitlab-ci/
#编写部署gitlab的yaml文件
[root@k8s-master-node1 gitlab-ci]# vi gitlab-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab			#根据题目要求定义名称为gitlab
  namespace: gitlab-ci	#根据题目要求部署于gitlab-ci命名空间内
  labels:
    app: gitlab
spec:
  selector:
    matchLabels:
      app: gitlab
  template:
    metadata:
      name: gitlab
      labels:
        app: gitlab
    spec:
      containers:
      - name: gitlab
        image: gitlab/gitlab-ce:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: GITLAB_ROOT_PASSWORD
          value: "admin@123"	#根据题目要求,设置root用户密码为admin@123
        - name: GITLAB_ROOT_EMAIL
          value: "1234567890@qq.com"
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: gitlab-config
          mountPath: /etc/gitlab
        - name: gitlab-logs
          mountPath: /var/log/gitlab
        - name: gitlab-data
          mountPath: /var/opt/gitlab
      volumes:
      - name: gitlab-config
        hostPath:
          path: /home/gitlab/conf
      - name: gitlab-logs
        hostPath:
          path: /home/gitlab/logs
      - name: gitlab-data
        hostPath:
          path: /home/gitlab/data

部署GitLab

#部署gitlab
[root@k8s-master-node1 gitlab-ci]# kubectl apply -f gitlab-deploy.yaml 
deployment.apps/gitlab created
#创建一个NodePort类型的Service,根据题目要求,定义名称为gitlab,部署于gitlab-ci命名空间,且将80端口对外暴露为30880
[root@k8s-master-node1 gitlab-ci]# kubectl create svc nodeport gitlab --tcp=80 --node-port=30880 -n gitlab-ci
service/gitlab created
#查看Pod的名字和IP
[root@k8s-master-node1 gitlab-ci]# kubectl get pods -n gitlab-ci -owide
NAME                      READY   STATUS    RESTARTS   AGE     IP           NODE               NOMINATED NODE   READINESS GATES
gitlab-755b55bf96-2xffp   1/1     Running   0          5m54s   10.244.0.12  k8s-master-node1   <none>           <none>
#查看Service的信息,着重注意Endpoints得关联到pod的地址,否则我们无法访问GitLab的web界面
[root@k8s-master-node1 gitlab-cicd]# kubectl describe service gitlab -n gitlab-ci 
Name:                     gitlab
Namespace:                gitlab-ci
Labels:                   app=gitlab
Annotations:              <none>
Selector:                 app=gitlab
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.96.125.173
IPs:                      10.96.125.173
Port:                     80  80/TCP
TargetPort:               80/TCP
NodePort:                 80  30880/TCP
Endpoints:                10.244.0.12:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

配置环境

#进入CoreDNS的ConfigMap并添加以下段落
[root@k8s-master-node1 gitlab-ci]# kubectl edit configmap coredns -n kube-system
#添加一条静态的DNS解析规则,无法匹配时,再继续查询其他配置
...
        hosts {
            10.244.0.12 gitlab-755b55bf96-2xffp
            fallthrough
        }
        prometheus :9153
...
#重新启动集群中CoreDNS的部署,使得CoreDNS的Deployment重新加载配置
[root@k8s-master-node1 gitlab-ci]# kubectl -n kube-system rollout restart deploy coredns
deployment.apps/coredns restarted
#进入gitlab的shell中
[root@k8s-master-node1 gitlab-ci]# kubectl exec -ti -n gitlab-ci gitlab-755b55bf96-2xffp bash
#修改gitlab的外部访问URL
root@gitlab-755b55bf96-2xffp:/# vi /etc/gitlab/gitlab.rb 
external_url 'http://10.244.0.16:80'  
#重启让配置生效
root@gitlab-755b55bf96-2xffp:/# reboot
root@gitlab-755b55bf96-2xffp:/# exit

上传项目包

这题要求将项目包demo-2048.tar.gz导入到GitLab中并命名为demo-2048。但我在提供的软件包里并没有找到demo-2048.tar.gz,只有demo-2048的目录,应该是提前给我们解压好了,指的就是这个目录。

我们打开浏览器,输入192.168.200.15:30880访问gitlab的web界面,使用用户名/密码:root/admin@123进行登录
进入主页,点击Create blank project创建项目

在这里插入图片描述

根据题目要求,设置项目名称为demo-2048。位置放在/root目录,并将项目设为公开

这样就创建好了

回到宿主机进行操作

#切换至项目包目录
[root@k8s-master-node1 gitlab-ci]# cd demo-2048/
[root@k8s-master-node1 demo-2048]# ls
Dockerfile  pom.xml  README.md  src  template
#设置全局用户信息,待会我们提交代码的时候会使用这些信息
[root@k8s-master-node1 demo-2048]# git config --global user.name "administrator"
[root@k8s-master-node1 demo-2048]# git config --global user.email "admin@example.com"
#删除旧的远程仓库配置
[root@k8s-master-node1 demo-2048]# git remote remove origin
#添加新的远程仓库配置
[root@k8s-master-node1 demo-2048]# git remote add origin http://192.168.200.15:30880/root/demo-2048.git
#将当前目录下所有修改过的文件添加到Git的暂存区
[root@k8s-master-node1 demo-2048]# git add .
#将暂存区的文件提交到本地仓库,并附加提交信息
[root@k8s-master-node1 demo-2048]# git commit -m "initial commit"
#将本地仓库的代码推送给远程仓库的drone分支
[root@k8s-master-node1 demo-2048]# git push -u origin drone
Username for 'http://192.168.200.15:30880': root
Password for 'http://root@192.168.200.15:30880': #输入设置的密码admin@123
Counting objects: 585, done.
Delta compression using up to 6 threads.
Compressing objects: 100% (257/257), done.
Writing objects: 100% (585/585), 140.39 KiB | 0 bytes/s, done.
Total 585 (delta 303), reused 576 (delta 295)
remote: Resolving deltas: 100% (303/303), done.
remote: 
remote: To create a merge request for drone, visit:
remote:   http://10.244.0.12/root/demo-2048/-/merge_requests/new?merge_request%5Bsource_branch%5D=drone
remote: 
To http://192.168.200.15:30880/root/demo-2048.git
 * [new branch]      drone -> drone
分支 drone 设置为跟踪来自 origin 的远程分支 drone。

重新刷新一下页面,我们就可以看到上传成功了

在这里插入图片描述

后语

就这样,这道题的要求都满足了,算做完了。但它后面还有连着的几道题,包括部署GitLab-Runner、部署GitLab-Agent(实际上是连接k8s集群)还有编写流水线脚本构建2048。也就是说这道题不过是整个项目的一部分。后续的那些我也会继续写的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows系统修改克隆虚拟机的SID(报错:尝试将此计算机配置为域控制器时出错)

当我们用克隆虚拟机加入域的时候&#xff0c;可能会出现图下所示报错。这时我们可以用微软自带的工具sysprep来修改机器的SID来解决该问题 注意&#xff1a;用sysprep修改SID之后&#xff0c;系统会自动重启&#xff0c;之前配置好的网络、修改过的机器名会重置。所以&#xff…

机器学习之函数式自动微分

前言 神经网络的训练主要使用反向传播算法&#xff0c;通过损失函数计算模型预测值与正确标签的差异&#xff0c;并进行反向传播计算梯度&#xff0c;最终更新模型参数。自动微分能够计算可导函数在某点处的导数值&#xff0c;是反向传播算法的一般化&#xff0c;主要解决了复…

Python:浅谈迭代器、生成器与协程的演化路径

“人生苦短&#xff0c;我用Python”&#xff0c;虽然说大量数学和统计分析库是一个重要优势&#xff0c;但是归根结底&#xff0c;Python的最大优势就是三点&#xff1a; 但是通常一般来讲&#xff0c;当扯到并发的时候&#xff0c;无论是多服务器、多进程、多线程、还是协程&…

《黑神话悟空》电脑配置要求

《黑神话&#xff1a;悟空》这款国内优秀的3A游戏大作&#xff0c;拥有顶级的特效与故事剧情&#xff0c;自公布以来便备受玩家期待&#xff0c;其精美的画面与流畅的战斗体验&#xff0c;对玩家的电脑配置提出一定要求。那么这款优秀的游戏需要什么样的电脑配置&#xff0c;才…

boost asio异步服务器(4)处理粘包问题tlv

粘包的产生 当客户端发送多个数据包给服务器时&#xff0c;服务器底层的tcp接收缓冲区收到的数据为粘连在一起的。这种情况的产生通常是服务器端处理数据的速率不如客户端的发送速率的情况。比如&#xff1a;客户端1s内连续发送了两个hello world&#xff01;,服务器过了2s才接…

一份简单的海外问卷,改变经济现状

在许多人看来&#xff0c;赚钱似乎总是与资金和技术密切相关。然而&#xff0c;即使没有丰富的资金和高超的技术&#xff0c;仍然有机会赚取可观的收入。 首先&#xff0c;需要明确的是&#xff0c;赚钱并非完全依赖于物质资本和技术能力。在这个充满机遇的时代&#xff0c;选…

鸿蒙开发网络管理:【@ohos.net.webSocket (WebSocket连接)】

WebSocket连接 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 使用WebSocket建立服务器与客户端的双向连接&#xff0c;需要先通过[createWebSocket]方法创建[WebSocket]对象&#xff0c;然后通…

python基础篇(4):range语句

1 功能介绍 range语句的功能是获得一个数字序列&#xff08;可迭代类型的一种&#xff09; 2 语法 语法1&#xff1a; range(num) 获取一个从0开始&#xff0c;到num结束的数字序列&#xff08;不含num本身&#xff09; 如range(5)取得的数据是&#xff1a;[0, 1, 2, 3, 4…

springboot多数据源应用,A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库如何做?

上一节我们简单阐述了springboot多数据源如何配置。在实际的业务场景中我们常常遇到A服务依赖于B服务jar包&#xff0c;A服务和B服务业务数据分别入自己的库中。为何要这么做呢&#xff1f;比如B服务是日志SDK&#xff0c;A服务集成B服务来实现记录日志的功能&#xff0c;但是日…

安卓直装植物大战僵尸杂交版V2.1版完美运行

在移动游戏的世界里&#xff0c;植物大战僵尸无疑是一款深受玩家喜爱的经典游戏。如今&#xff0c;随着技术的发展和玩家需求的变化&#xff0c;植物大战僵尸杂交版V2.1版应运而生&#xff0c;为安卓用户带来了全新的游戏体验。 这一全新版本在原有游戏的基础上进行了多项创新…

TOP 5免费音频转换器,轻松搞定音频格式转换(白嫖党必备)

你是否正在寻找能提升音乐体验并满足各种需求的好用的免费音频转换器呢&#xff1f;如果是的话&#xff0c;那么请不用再找了&#xff01;在本篇文章中&#xff0c;我们汇总了顶级的音频格式转换软件&#xff0c;并且列出了其所兼容的操作系统及适合人群&#xff0c;从而满足你…

【PyTorch函数解析】einsum的用法示例

一、前言 einsum 是一个非常强大的函数&#xff0c;用于执行张量&#xff08;Tensor&#xff09;运算。它的名称来源于爱因斯坦求和约定&#xff08;Einstein summation convention&#xff09;&#xff0c;在PyTorch中&#xff0c;einsum 可以方便地进行多维数组的操作和计算…

PCL笔记二 之VS环境配置(不同版本Debug+Release编译)

PCL笔记二 之VS环境配置&#xff08;不同版本DebugRelease编译&#xff09; PCL官网&#xff1a;https://github.com/PointCloudLibrary/pcl/releases众所周知&#xff0c;PCL是一个用于点云处理并且依赖不少三方库的一个算法库&#xff0c;同时在编译配置环境时也很复杂&…

【ONLYOFFICE8.1桌面编辑器】强势来袭—— 一款全面的办公软件套件

在日常工作和学习中&#xff0c;我们经常需要处理各种文档、表格和演示文稿。一款功能强大、易于使用的办公软件成为我们提高工作效率、便捷沟通和展示想法的得力助手。 而ONLYOFFICE 8.1桌面编辑器正是一款全面、高效的办公软件&#xff0c;集合了Word、PPT、Excel的功能&…

如何设置windows计划任务

如何设置windows计划任务 前言&#xff1a;在工作过程中写了一个python脚本&#xff0c;用于调用jira接口查询bug单数量&#xff0c;想要在本地定时任务执行&#xff0c;每天发送到钉钉群提醒&#xff0c;写下操作步骤用于记录。 1. 准备 Python 脚本 确保你的 Python 脚本已…

暗影精灵8Pro声音没有了,这个方法可以解决,亲测有效!

这个OMEN by HP Gaming Laptop 16-k0xxx Windows 10 Sound Driver Mod &#xff0c;真的解决了我的大问题&#xff01; 如果你的暗影精灵8 Pro酷睿版突然变得哑巴了&#xff0c;扬声器和麦克风都发不出声音&#xff0c;那可能是声卡驱动出了问题。 别担心&#xff0c;我也是个…

Android简介

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月&#xff0c;Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…

8.12 矢量图层面要素单一符号使用七(随机标记填充)

文章目录 前言随机标记填充&#xff08;Random Marker Fill&#xff09;QGis设置面符号为随机标记填充&#xff08;Random Marker Fill&#xff09;二次开发代码实现随机标记填充&#xff08;Random Marker Fill&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中使用随…

手机照片压缩到20k以内免费,这几款心动软件快收好!

在数字化时代&#xff0c;手机拍照已成为我们记录生活的重要方式之一。然而&#xff0c;高清的照片也意味着占用着越来越多的手机存储空间。如果你正在为手机内存告急而烦恼&#xff0c;那么这几款手机照片压缩神器或许能成为你的救星&#xff01;它们不仅可以将照片轻松压缩至…

Three.js——第一篇:部署以及基础代码创建场景、GUI调整样式

three.js官网&#xff1a;three.js docs 中文技术文档1&#xff1a;| 麒跃科技 中文技术文档2&#xff1a;3. 开发和学习环境&#xff0c;引入threejs | Three.js中文网 很多教程一开始要大家自己部署three.js的中文本地部署&#xff0c;我就不弄了&#xff0c;我弄了半天也没…