DevOps - GitLab 仓库管理

# DevOps

https://iothub.org.cn/docs/devops/
https://iothub.org.cn/docs/devops/git/gitlab/

一、概述

1.GitLab 简介

​ GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。

​ GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。 GitLab 被 IBM, Sony, JülichResearchCenter, NASA, Alibaba,Invincea, O’ReillyMedia, Leibniz-Rechenzentrum(LRZ), CERN, SpaceX 等组织使用。

官网: https://about.gitlab.com/

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。

2.GitLab 官网地址

# 官网地址

https://about.gitlab.com/
https://about.gitlab.com/install/
https://about.gitlab.com/install/#centos-7

二、基础

1.Gitlab服务管理

[root@qfedu.com ~]# gitlab-ctl start                        # 启动所有 gitlab 组件;
[root@qfedu.com ~]# gitlab-ctl stop                         # 停止所有 gitlab 组件;
[root@qfedu.com ~]# gitlab-ctl restart                      # 重启所有 gitlab 组件;
[root@qfedu.com ~]# gitlab-ctl status                       # 查看服务状态;
[root@qfedu.com ~]# gitlab-ctl reconfigure                  # 初始化服务;
[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb               # 修改默认的配置文件;
[root@qfedu.com ~]# gitlab-ctl tail                         # 查看日志;

2.配置GitLab

2.1.去掉自动注册功能

admin are -> settings -> Sign-up Restrictions 去掉钩钩,然后拉到最下面保存,重新登录
在这里插入图片描述
在这里插入图片描述

3.Gitlab 备份与恢复

3.1.查看系统版本和软件版本
[root@qfedu.com gitlab]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

[root@qfedu.com gitlab]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
8.15.4
3.2数据备份

1.查看备份相关的配置项

[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"

该项定义了默认备份出文件的路径,可以通过修改该配置,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。

2.执行备份命令进行备份

[root@qfedu.com ~]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create 

3.添加到 crontab 中定时执行

[root@qfedu.com ~]# crontab -e
0 2 * * * bash /opt/gitlab/bin/gitlab-rake gitlab:backup:create

可以到/data/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。

4.设置备份保留时长

防止每天执行备份,有目录被爆满的风险,打开/etc/gitlab/gitlab.rb配置文件,找到如下配置:

[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800

设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart 重启服务生效。

备份完成,会在备份目录中生成一个当天日期的tar包。

3.3.数据恢复

1.安装部署 gitlab server

具体步骤参见上面:gitlab server 搭建过程

2.恢复 gitlab

1、查看备份相关的配置项

[root@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/data/gitlab/backups"

修改该配置,定义了默认备份出文件的路径,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。

2、恢复前需要先停掉数据连接服务

[root@qfedu.com ~]# gitlab-ctl stop unicorn
[root@qfedu.com ~]# gitlab-ctl stop sidekiq
  • 如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。

3、同步备份文件到新服务器

将老服务器/data/gitlab/backups目录下的备份文件拷贝到新服务器上的/data/gitlab/backups

[root@qfedu.com gitlab]# rsync -avz 1530773117_2019_03_05_gitlab_backup.tar 192.168.95.135:/data/gitlab/backups/ 
  • 注意权限:600权限是无权恢复的。 实验环境可改成了777,生产环境建议修改属主属组
[root@qfedu.com backups]# pwd
/data/gitlab/backups
[root@qfedu.com backups]# chown -R git.git 1530773117_2019_03_05_gitlab_backup.tar 
[root@qfedu.com backups]# ll
total 17328900
-rwxrwxrwx 1 git git 17744793600 Jul  5 14:47 1530773117_2018_07_05_gitlab_backup.tar

4、执行命令进行恢复

后面再输入两次 yes 就完成恢复了。

[root@qfedu.com ~]# gitlab-rake gitlab:backup:restore BACKUP=1530773117_2018_07_05_gitlab_backup.tar
注意:backups 目录下保留一个备份文件可直接执行

5、恢复完成启动服务

恢复完成后,启动刚刚的两个服务,或者重启所有服务,再打开浏览器进行访问,发现数据和之前的一致:

[root@qfedu.com ~]# gitlab-ctl start unicorn
[root@qfedu.com ~]# gitlab-ctl start sidekiq[root@qfedu.com ~]# gitlab-ctl restart

注意:通过备份文件恢复gitlab必须保证两台主机的gitlab版本一致,否则会提示版本不匹配

4.Gitlab 发送邮件

开启邮件服务

[root@qfedu.com ~]# systemctl start  postfix
[root@qfedu.com ~]# systemctl enable postfix
4.1.Gitlab 添加smtp邮件功能
[git@qfedu.com ~]# vim /etc/gitlab/gitlab.rb
postfix 并非必须的;根据具体情况配置,以 SMTP 的为例配置邮件服务器来实现通知;参考配置如下: 
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '276267003@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = '276267003@qq.com'
gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "276267003@qq.com"
gitlab_rails['smtp_password'] = "kktohrvdryglbjjh" #这是我的qq邮箱授权码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

#修改配置后需要初始化配置,先关掉服务再重新初始化
[git@qfedu.com ~]# gitlab-ctl stop
ok: down: gitaly: 0s, normally up
ok: down: gitlab-monitor: 1s, normally up
ok: down: gitlab-workhorse: 0s, normally up
ok: down: logrotate: 1s, normally up
ok: down: nginx: 0s, normally up
ok: down: node-exporter: 1s, normally up
ok: down: postgres-exporter: 0s, normally up
ok: down: postgresql: 0s, normally up
ok: down: prometheus: 0s, normally up
ok: down: redis: 0s, normally up
ok: down: redis-exporter: 1s, normally up
ok: down: sidekiq: 0s, normally up
ok: down: unicorn: 1s, normally up

[git@qfedu.com ~]# gitlab-ctl reconfigure  
......

[git@qfedu.com ~]# gitlab-ctl start
ok: run: gitaly: (pid 37603) 0s
ok: run: gitlab-monitor: (pid 37613) 0s
ok: run: gitlab-workhorse: (pid 37625) 0s
ok: run: logrotate: (pid 37631) 0s
ok: run: nginx: (pid 37639) 1s
ok: run: node-exporter: (pid 37644) 0s
ok: run: postgres-exporter: (pid 37648) 1s
ok: run: postgresql: (pid 37652) 0s
ok: run: prometheus: (pid 37660) 1s
ok: run: redis: (pid 37668) 0s
ok: run: redis-exporter: (pid 37746) 0s
ok: run: sidekiq: (pid 37750) 1s
ok: run: unicorn: (pid 37757) 0s
4.2.Gitlab 发送邮件测试
[git@qfedu.com ~]# gitlab-rails console 
[root@wing ~]# gitlab-rails console
---------------------------------------------------------------------
 GitLab:       12.10.1 (e658772bd63) FOSS
 GitLab Shell: 12.2.0
 PostgreSQL:   11.7
---------------------------------------------------------------------
Loading production environment (Rails 6.0.2)
irb(main):003:0> 
irb(main):004:0> Notify.test_email('276267003@qq.com', 'Message Subject', 'Message Body').deliver_now  //输入测试命令,回车

Notify#test_email: processed outbound mail in 5.2ms
Delivered mail 5eafceaa250a_1d063fb777add9a08601a@wing.mail (1430.1ms)
Date: Mon, 04 May 2020 16:13:30 +0800
From: gitlab <276267003@qq.com>
Reply-To: gitlab <276267003@qq.com>
To: 276267003@qq.com
Message-ID: <5eafceaa250a_1d063fb777add9a08601a@wing.mail>
Subject: Message Subject
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Message Body</p></body></html>

=> #<Mail::Message:70056859616080, Multipart: false, Headers: <Date: Mon, 04 May 2020 16:13:30 +0800>, <From: gitlab <276267003@qq.com>>, <Reply-To: gitlab <276267003@qq.com>>, <To: 276267003@qq.com>, <Message-ID: <5eafceaa250a_1d063fb777add9a08601a@wing.mail>>, <Subject: Message Subject>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
irb(main):005:0> 

去qq邮箱web界面查看是否收到邮件
在这里插入图片描述

三、实践

1.创建组

使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限, 不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理

创建组 hs-group
在这里插入图片描述
在这里插入图片描述

  • a. 项目名称,项目名称可以为字母、数字、空格、下划线、中划线和英文点号组成,且必须以字母或数字开头,不能使用中文

  • b. 项目描述

  • c.可见性(库类别)

    • 私有库:只有被赋予权限的用户可见

    • 内部库:登录用户可以下载

    • 公开库:所有人可以下载
      在这里插入图片描述

2.创建用户

创建用户的时候,可以选择Regular或Admin类型。

  • 普通用户:只能访问属于他的组和项目
  • 管理员:可以访问所有组和项目

创建用户张三
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建完用户后,立即修改密码 zhangshan123
在这里插入图片描述
在这里插入图片描述

3.用户添加到组

选择某个用户组,进行Members管理组的成员
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Gitlab用户在组里面有5种不同权限:

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
  • Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个
  • 权限 Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限

在这里插入图片描述

4.创建项目

在用户组中创建项目

以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目

新用户第一次登陆要重置密码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Git global setup
git config --global user.name "zhangsan"
git config --global user.email "zhangsan@126.com"


Create a new repository
git clone http://172.17.243.237:18080/hs-group/git-demo.git
cd git-demo
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master


Push an existing folder
cd existing_folder
git init
git remote add origin http://172.17.243.237:18080/hs-group/git-demo.git
git add .
git commit -m "Initial commit"
git push -u origin master


Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin http://172.17.243.237:18080/hs-group/git-demo.git
git push -u origin --all
git push -u origin --tags

5.SSH免密登录

1.查看你生成的公钥:

vim id_rsa.pub

就可以查看到你的公钥

2.登陆GitLab账号,点击用户图像,然后 Settings -> 左栏点击 SSH keys
在这里插入图片描述

3.复制公钥内容,粘贴进“Key”文本区域内,取名字

4.点击Add Key
在这里插入图片描述
在这里插入图片描述

6.分支管理

1.创建分支
在这里插入图片描述
在这里插入图片描述

2.标签管理
在这里插入图片描述
在这里插入图片描述

# DevOps

https://iothub.org.cn/docs/devops/
https://iothub.org.cn/docs/devops/git/gitlab/
kubernetes GitLab + Ingressroot@k8s-m001:~/devops/test-devops/gitlab# ll total 44 drwxr-xr-x 3 root root 4096 Jun 15 18:25 ./ drwxr-xr-x 7 root root 4096 Jun 15 18:21 ../ -rw-r--r-- 1 root root 1337 Jun 15 18:21 gitlab-deployment.yaml -rw-r--r-- 1 root root 520 Jun 15 18:22 gitlab-ingress.yaml -rw-r--r-- 1 root root 723 Jun 15 17:51 gitlab-nfs-pvc-pro.yaml -rw-r--r-- 1 root root 58 Jun 14 21:55 gitlab-ns.yaml -rw-r--r-- 1 root root 293 Jun 15 18:25 gitlab-services.yaml drwxrwxrwx 2 root root 4096 Jun 15 16:31 gitlab.wh02.com_nginx/ -rw-r--r-- 1 root root 9078 Jun 15 16:28 gitlab.wh02.com_nginx.zip root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: gitlab namespace: gitlab spec: selector: matchLabels: app: gitlab replicas: 1 template: metadata: labels: app: gitlab spec: securityContext: fsGroup: 1000 containers: - name: gitlab image: harbor.wh02.com/cicd/gitlab/gitlab-ce:17.11.0-ce.0 imagePullPolicy: Always ports: - containerPort: 80 - containerPort: 22 env: - name: GITLAB_OMNIBUS_CONFIG value: | external_url 'https://gitlab.wh02.com' gitlab_rails['initial_root_password'] = "Aa123123" gitlab_rails['gitlab_default_locale'] = 'zh_CN' gitlab_rails['gitlab_default_locale_in_system'] = true volumeMounts: - name: gitlab-storage mountPath: /var/opt/gitlab subPath: data - name: gitlab-storage mountPath: /var/log/gitlab subPath: logs - name: gitlab-storage mountPath: /etc/gitlab subPath: config resources: requests: cpu: "2" memory: "5Gi" limits: cpu: "2" memory: "6Gi" volumes: - name: gitlab-storage persistentVolumeClaim: claimName: gitlab-pvc root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gitlab-ingress namespace: gitlab annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: ingressClassName: nginx tls: - hosts: - gitlab.wh02.com secretName: gitlab-tls rules: - host: gitlab.wh02.com http: paths: - path: / pathType: Prefix backend: service: name: gitlab-service port: number: 80 root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-nfs-pvc-pro.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-gitlab-static provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolume metadata: name: gitlab-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteMany nfs: server: 192.168.3.101 path: /data/k8sdata/gitlab_data storageClassName: nfs-gitlab-static persistentVolumeReclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gitlab-pvc namespace: gitlab spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: nfs-gitlab-static volumeName: gitlab-pv root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-ns.yaml apiVersion: v1 kind: Namespace metadata: name: gitlab root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-services.yaml apiVersion: v1 kind: Service metadata: name: gitlab-service namespace: gitlab spec: selector: app: gitlab type: NodePort ports: - name: http port: 80 targetPort: 80 # nodePort: 30030 - name: ssh port: 22 targetPort: 22 # nodePort: 30022 root@k8s-m001:~/devops/test-devops/gitlab# kubectl get secrets -n gitlab No resources found in gitlab namespace. root@k8s-m001:~/devops/test-devops/gitlab# kubectl get secrets -A NAMESPACE NAME TYPE DATA AGE ingress-nginx ingress-nginx-admission Opaque 3 97m jenkins harbor-pull-secret kubernetes.io/dockerconfigjson 1 7h41m kube-system calico-etcd-secrets Opaque 3 40h kubernetes-dashboard dashboard-admin-user kubernetes.io/service-account-token 3 65d kubernetes-dashboard kubernetes-dashboard-certs Opaque 0 65d kubernetes-dashboard kubernetes-dashboard-csrf Opaque 1 65d kubernetes-dashboard kubernetes-dashboard-key-holder Opaque 2 65d kuboard kuboard-admin-token kubernetes.io/service-account-token 3 40h kuboard kuboard-viewer-token kubernetes.io/service-account-token 3 40h root@k8s-m001:~/devops/test-devops/gitlab# kubectl get pv,pvc -n gitlab NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE persistentvolume/gitlab-pv 50Gi RWX Retain Bound gitlab/gitlab-pvc nfs-gitlab-static <unset> 44m persistentvolume/jenkins-pv 10Gi RWX Retain Released jenkins/jenkins-pvc <unset> 26h persistentvolume/pvc-1464be8d-5bc8-4ba1-8d91-c282167ea4cf 50Gi RWX Delete Bound jenkins/jenkins-pvc nfs-dynamic <unset> 7h41m persistentvolume/pvc-49a9790f-7ebf-43a6-8454-b90cf50d2f3d 50Gi RWX Retain Released jenkins/jenkins-pvc nfs-dynamic <unset> 7h54m persistentvolume/pvc-4ddd9d5b-a734-4889-af64-0c96f340ce11 50Gi RWX Retain Released jenkins/jenkins-pvc nfs-dynamic <unset> 8h NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE persistentvolumeclaim/gitlab-pvc Bound gitlab-pv 50Gi RWX nfs-gitlab-static <unset> 44m
06-17
<think>我们正在配置GitLab在Kubernetes中的部署,需要以下资源:1.Deployment:定义GitLab的Pod模板和副本数等。2.Service:暴露GitLab服务以便内部或外部访问。3.Ingress:提供外部访问的路由规则。4.存储相关:由于GitLab需要持久化数据,我们需要StorageClass、PersistentVolume(PV)和PersistentVolumeClaim(PVC)。但注意,如果使用动态供应,我们只需创建StorageClass和PVC,PV会由存储系统自动创建;如果使用静态供应,则需要预先创建PV。根据引用内容,我们看到了静态PV和PVC的配置示例(引用[2]和引用[3]),以及动态PV的提及(引用[2])。同时,引用[5]提供了一个Deployment的示例,其中使用了PVC和亲和性设置。考虑到GitLab对存储的需求较大(包括仓库数据、数据库等),我们通常使用持久化存储。这里我们选择使用NFS作为后端存储(如引用[2]和引用[3]所示),并采用静态PV的方式,因为动态PV需要配置StorageClass和Provisioner,而静态PV更直接。步骤概述:1.创建PV:为GitLab的数据目录提供持久化存储。2.创建PVC:供Deployment中的Pod挂载。3.创建Deployment:定义GitLab容器,挂载PVC到相应路径。4.创建Service:为GitLab的HTTP和SSH服务(如果需要)暴露端口。5.创建Ingress:配置访问GitLab的域名和路径。注意:GitLab通常需要多个存储卷(例如,仓库数据、上传文件、数据库等),但为了简化,我们这里只创建一个PV/PVC用于数据存储。实际生产可能需要多个PVC。以下为具体资源配置文件:###1.创建PersistentVolume(PV)假设我们使用NFS服务器,IP为192.168.30.150,共享目录为/data/gitlab。创建PV:```yamlapiVersion:v1kind:PersistentVolumemetadata:name:gitlab-pvspec:capacity:storage:20Gi#根据实际需求调整accessModes:-ReadWriteManypersistentVolumeReclaimPolicy:Retain#GitLab数据重要,建议Retain,避免误删storageClassName:nfsnfs:path:/data/gitlabserver:192.168.30.150```###2.创建PersistentVolumeClaim(PVC)在同一个命名空间(例如gitlab)中创建PVC,绑定到上面的PV:```yamlapiVersion:v1kind:PersistentVolumeClaimmetadata:name:gitlab-pvcnamespace:gitlabspec:accessModes:-ReadWriteManyresources:requests:storage:20GistorageClassName:nfs```###3.创建DeploymentGitLab官方提供了Docker镜像,我们可以使用它。注意:GitLab需要配置多个环境变量,这里仅展示基本配置。同时,我们挂载PVC到GitLab的工作目录(通常是/var/opt/gitlab)。```yamlapiVersion:apps/v1kind:Deploymentmetadata:name:gitlabnamespace:gitlabspec:replicas:1#GitLab通常单实例,高可用需要复杂配置selector:matchLabels:app:gitlabtemplate:metadata:labels:app:gitlabspec:containers:-name:gitlabimage:gitlab/gitlab-ce:latestports:-containerPort:80#HTTP-containerPort:443#HTTPS-containerPort:22#SSHvolumeMounts:-name:gitlab-datamountPath:/var/opt/gitlabvolumes:-name:gitlab-datapersistentVolumeClaim:claimName:gitlab-pvc```注意:实际中,GitLab还需要配置数据库(PostgreSQL)和Redis,但为了简化,我们使用单容器镜像(包含所有组件)。生产环境建议拆分成多个微服务部署。###4.创建Service创建一个Service来暴露GitLab的端口:```yamlapiVersion:v1kind:Servicemetadata:name:gitlab-servicenamespace:gitlabspec:selector:app:gitlabports:-name:httpport:80targetPort:80-name:httpsport:443targetPort:443-name:sshport:22targetPort:22```###5.创建Ingress假设我们使用一个域名(例如gitlab.example.com)来访问GitLab。Ingress需要配置规则:```yamlapiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:gitlab-ingressnamespace:gitlabannotations:nginx.ingress.kubernetes.io/rewrite-target:/spec:rules:-host:gitlab.example.comhttp:paths:-path:/pathType:Prefixbackend:service:name:gitlab-serviceport:number:80```注意:如果需要HTTPS,还需要配置TLS证书。###部署步骤1.创建命名空间:`kubectlcreatenamespacegitlab`2.依次应用上述PV、PVC、Deployment、Service和Ingress配置文件。###注意事项-存储:确保NFS服务器已正确设置,并且Kubernetes节点可以访问。-资源:GitLab对内存和CPU要求较高,可以在Deployment中设置资源限制。-初始化:GitLab容器首次启动需要较长时间(几分钟)进行初始化配置。-访问:部署完成后,通过Ingress的域名访问GitLab,初始用户名是root,初始密码在容器内的/etc/gitlab/initial_root_password文件中(注意:该文件24小时后会被删除)。以上配置是一个基础版本,实际生产环境可能需要更复杂的配置,例如配置数据库、Redis、SMTP等。§§相关问题§§1.如何为GitLabIngress配置HTTPS证书?2.如何扩展GitLab以实现高可用性?3.在Kubernetes中部署GitLab时如何配置外部数据库和Redis?</think>### 在 Kubernetes 中部署 GitLab 的完整配置方案 以下是 GitLab 在 Kubernetes 中的核心资源配置,包括 Deployment、Ingress、存储和服务。配置基于 NFS 持久化存储(参考引用[2][3])和 Ingress 路由(参考引用[5])。 #### 1. StorageClass 与持久化存储 (PV/PVC) ```yaml # StorageClass (动态供应) apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-gitlab provisioner: k8s-sigs.io/nfs-subdir-external-provisioner parameters: archiveOnDelete: "false" --- # PersistentVolumeClaim (动态绑定) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gitlab-data-pvc namespace: gitlab spec: storageClassName: nfs-gitlab accessModes: - ReadWriteMany resources: requests: storage: 50Gi # 根据数据量调整 ``` > **说明**: > 动态存储方案简化了 PV 管理(引用[2])。若需静态 PV,参考引用[3]创建 PV 后绑定 PVC,需指定 `nfs.path` 和 `nfs.server`。 #### 2. Deployment 配置 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: gitlab namespace: gitlab spec: replicas: 1 # 生产环境建议 ≥2 selector: matchLabels: app: gitlab template: metadata: labels: app: gitlab spec: containers: - name: gitlab image: gitlab/gitlab-ce:latest ports: - containerPort: 80 # HTTP - containerPort: 443 # HTTPS - containerPort: 22 # SSH env: - name: GITLAB_OMNIBUS_CONFIG value: | external_url 'http://gitlab.example.com' gitlab_rails['initial_root_password'] = "your_secure_password" volumeMounts: - name: gitlab-storage mountPath: /var/opt/gitlab volumes: - name: gitlab-storage persistentVolumeClaim: claimName: gitlab-data-pvc ``` > **关键参数**: > - `external_url`: GitLab 访问地址(需与 Ingress host 匹配) > - 挂载点 `/var/opt/gitlab` 存储所有核心数据 > - 多副本时需配置共享存储(如 NFS)和 Redis/PostgreSQL 集群 #### 3. Service 配置 ```yaml apiVersion: v1 kind: Service metadata: name: gitlab-service namespace: gitlab spec: selector: app: gitlab ports: - name: http port: 80 targetPort: 80 - name: ssh port: 22 targetPort: 22 type: ClusterIP # Ingress 代理 HTTP,SSH 需 NodePort/LoadBalancer ``` #### 4. Ingress 配置 (HTTP/HTTPS) ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gitlab-ingress namespace: gitlab annotations: nginx.ingress.kubernetes.io/proxy-body-size: "0" # 允许大文件上传 cert-manager.io/cluster-issuer: "letsencrypt-prod" # 自动 TLS spec: tls: - hosts: - gitlab.example.com secretName: gitlab-tls rules: - host: gitlab.example.com http: paths: - path: / pathType: Prefix backend: service: name: gitlab-service port: number: 80 ``` > **HTTPS 说明**: > 需提前安装 [cert-manager](https://cert-manager.io/) 自动签发证书,或手动添加 TLS 证书到 Secret。 --- ### 部署步骤 1. **创建命名空间** ```bash kubectl create namespace gitlab ``` 2. **部署存储** ```bash kubectl apply -f storageclass.yaml -f pvc.yaml ``` 3. **部署 GitLab** ```bash kubectl apply -f deployment.yaml -f service.yaml ``` 4. **配置 Ingress** ```bash kubectl apply -f ingress.yaml ``` 5. **验证访问** - 将域名 `gitlab.example.com` 解析到 Ingress 控制器 IP - 访问 `http://gitlab.example.com` 或 `https://gitlab.example.com` --- ### 常见问题解决 1. **SSH 访问问题** - 方案 1:Service 改为 `NodePort`,通过节点 IP+端口访问 - 方案 2:部署 LoadBalancer 类型的 Service(云环境) 2. **存储性能优化** - 使用高性能存储(如 Ceph 或云盘) - 分离数据目录(如单独 PVC 挂载 `/var/opt/gitlab/git-data`) 3. **初始化配置** 首次启动后,通过 Pod 执行配置更新: ```bash kubectl exec -it gitlab-pod -n gitlab -- gitlab-ctl reconfigure ``` > **安全建议**: > - 定期备份 PVC 数据(引用[3]) > - 启用 HPA 自动扩缩容 > - 配置资源限制(CPU/Memory)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IoTHub - 物联网开源技术社区

支持开源技术! 传播开源文化!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值