当前位置:   article > 正文

分布式版本控制系统(一)

zkdpp

分布式版本控制系统(一)

目录

1、Git、Github、Gitlab 的区别

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。git是一套软件,可以做本地私有仓库。
  • Github是在线的基于Git的代码托管服务。 GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。公有和私有仓库(收费),不能做本地私有仓库。
  • Gitlab本身也是一个代码托管的网站,功能上和github没有区别,公有和私有仓库(免费),可以部署本地私有仓库。

2、Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别:

  • Git是分布式的,svn不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  • GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  • GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  • GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  • GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
  • GIT是分布式的版本控制器,没有客户端和服务器端的概念。SVN它是C/S结构的版本控制器,有客户端和服务器端 服务器如果宕机而且代码没有备份的情况下完整代码就会丢失。

3、Git工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

Git 的工作流程示意图:

图片.png-52.1kB

4、Git基本概念

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

工作区、版本库中的暂存区和版本库之间的关系的示意图:

图片.png-153.3kB

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 index 的区域是暂存区(stage, index),标记为 master 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时HEAD实际是指向 master 分支的一个游标。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的objects标识的区域为 Git 的对象库,实际位于.git/objects目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作git commit时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行git reset HEAD命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行git rm --cached <file>命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行git checkout .或者git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
  • 当执行git checkout HEAD .或者git checkout HEAD <file>命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

5、Git 客户端安装使用

5.1 git-server安装配置

名称物理IP
git-server192.168.200.19
git-client192.168.200.20
  1. # 安装git
  2. [root@git-server ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
  3. [root@git-server ~]# yum -y install git git-all git-core gitweb
  1. # 创建git用户
  2. [root@git-server ~]# useradd git
  3. [root@git-server ~]# echo "123.123" | passwd --stdin git
  4. # 创建git仓库目录
  5. [root@git-server ~]# mkdir /git-root
  6. [root@git-server ~]# cd /git-root/
  7. # 创建一个裸仓库
  8. [root@git-server git-root]# git init --bare shell.git
  9. 初始化空的 Git 版本库于 /git-root/shell.git/

git init 和 git init --bare 的区别:

  • 使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.
  • git init初始化的版本库用户也可以在该目录下执行所有git方面的操作,但别的用户在将更新push上来的时候容易出现冲突。
  • 使用git init --bare方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(This operation must be run in a work tree)这个就是最好把远端仓库初始化成bare仓库的原因
  1. # 仓库目录授权
  2. [root@git-server git-root]# chown -R git:git shell.git

5.2 git-client配置免密登录git服务器

  1. # 创建密匙
  2. [root@git-client ~]# ssh-keygen
  3. # 分发密匙到git-server机器
  4. [root@git-client ~]# ssh-copy-id git@192.168.200.19

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
  1. # 配置git使用邮箱
  2. [root@git-client ~]# git config --global user.email "git@163.com"
  3. # 配置git使用用户
  4. [root@git-client ~]# git config --global user.name "git"

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

5.3 文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置

[root@git-client ~]# git config --global core.editor emacs

5.4 差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

[root@git-client ~]# git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

5.5 查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

  1. [root@git-client ~]# git config --list
  2. user.email=git@163.com
  3. user.name=git
  4. core.editor=emacs
  5. merge.tool=vimdiff

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如/etc/gitconfig~/.gitconfig),不过最终 Git 实际采用的是最后一个。

这些配置我们也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

  1. [root@git-client ~]# cat ~/.gitconfig
  2. [user]
  3. email = git@163.com
  4. name = git
  5. [core]
  6. editor = emacs
  7. [merge]
  8. tool = vimdiff

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

  1. [root@git-client ~]# git config user.name
  2. git

5.6 常用的 git 命令

图片.png-2444.7kB

  1. git init # 初始化
  2. git add main.cpp # 将某一个文件添加到暂存区
  3. git add . # 将文件夹下的所有的文件添加到暂存区
  4. git commit -m ‘note‘ # 将暂存区中的文件保存成为某一个版本
  5. git log # 查看所有的版本日志
  6. git status # 查看现在暂存区的状况
  7. git diff # 查看现在文件与上一个提交-commit版本的区别
  8. git reset --hard HEAD^ # 回到上一个版本
  9. git reset --hard XXXXX # XXX为版本编号,回到某一个版本
  10. git pull origin master # 从主分支pull到本地
  11. git push -u origin master # 从本地push到主分支
  12. git pull # pull默认主分支
  13. git push # push默认主分支 ...

5.7 本地项目与远程服务器项目之间的交互

5.7.1 如果你没有最新的代码,希望从头开始
  1. # 这里是项目的地址(可从项目主页复制),将远程服务器的内容完全复制过来
  2. [root@git-client ~]# git clone git@192.168.200.19:/git-root/shell.git
  3. # clone 之后进入该项目的文件夹
  4. [root@git-client ~]# cd shell/
  5. # 新建一个文件
  6. [root@git-client shell]# echo "ceshi" > 1.txt
  7. # 将新的文件添加到git的暂存区
  8. [root@git-client shell]# git add 1.txt
  9. # 将暂存区的文件提交到某一个版本保存下来,并加上注释
  10. [root@git-client shell]# git commit -m '首次测试提交文件'
  11. # 将本地的更改提交到远程服务器
  12. [root@git-client shell]# git push -u origin master
5.7.2 如果你已经有一个新版代码,希望直接把本地的代码替换到远程服务器
  1. # 新的代码
  2. [root@git-client shell]# echo "git" > 1.txt
  3. [root@git-client shell]# cat 1.txt
  4. git
  5. # 进入代码存在的文件夹,或者直接在该文件夹打开
  6. # 重新初始化
  7. [root@git-client shell]# git init
  8. # 添加该文件夹中所有的文件到git的暂存区
  9. [root@git-client shell02]# git add .
  10. # 提交所有代码到本机的版本库
  11. [root@git-client shell]# git commit -m '第二次测试提交文件'
  12. # 将本地的更改提交到远程服务器
  13. [root@git-client shell]# git push -u origin master
  • git 中 clone 过来的时候,git 不会对比本地和服务器的文件,也就不会有冲突,
  • 建议确定完全覆盖本地的时候用 clone,不确定会不会有冲突的时候用 git pull,将远程服务器的代码download下来
  • git pull=git fetch+git merge

5.8 分支管理

5.8.1 创建分支
  1. # 创建 test 分支
  2. [root@git-client shell]# git branch test
  3. # 命令会列出所有分支,当前分支前面会标一个*号
  4. [root@git-client shell]# git branch
  5. * master
  6. test
5.8.2 分支切换
  1. [root@git-client shell]# git checkout test
  2. 切换到分支 'test'
  3. [root@git-client shell]# git branch
  4. master
  5. * test
  6. # 创建dev分支并切换到dev分支
  7. [root@git-client shell]# git checkout -b dev
  8. 切换到一个新分支 'dev'
  9. [root@git-client shell]# git branch
  10. * dev
  11. master
  12. test
5.8.3 分支删除
  1. # 删除 test 分支
  2. [root@git-client shell]# git branch -d test
  3. 已删除分支 test(曾为 fc18276)。
  4. [root@git-client shell]# git branch
  5. * dev
  6. master
5.8.4 分支提交
  1. # 修改代码
  2. [root@git-client shell]# echo "123" >> 1.txt
  3. [root@git-client shell]# cat 1.txt
  4. git
  5. 123
  6. # 添加该文件夹中所有的文件到git的暂存区
  7. [root@git-client shell02]# git add .
  8. # 在dev分支上正常提交
  9. [root@git-client shell]# git commit -m '第三次测试提交文件'
  10. # 将本地的更改提交到远程服务器
  11. [root@git-client shell]# git push -u origin dev
  12. # 查看文件,刚才添加的内容不见了,因为那个提交是在dev分支上,而master分支此刻的提交点并没有变
  13. [root@git-client shell]# git checkout master
  14. 切换到分支 'master'
  15. [root@git-client shell]# cat 1.txt
  16. git
5.8.5 合并分支
  1. # 把dev分支的工作成果合并到master分支上
  2. [root@git-client shell]# git merge dev
  3. 更新 fc18276..7298181
  4. Fast-forward
  5. 1.txt | 1 +
  6. 1 file changed, 1 insertion(+)
  7. # 合并后,再查看文件内容,就可以看到和dev分支的最新提交是完全一样的
  8. [root@git-client shell]# cat 1.txt
  9. git
  10. 123

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

5.8.6 解决冲突
  1. # 创建新的feature1分支
  2. [root@git-client shell]# git checkout -b feature
  3. 切换到一个新分支 'feature'
  4. [root@git-client shell]# git branch
  5. dev
  6. * feature
  7. master
  8. # 修改文件内容
  9. [root@git-client shell]# echo "feature" >> 1.txt
  10. [root@git-client shell]# cat 1.txt
  11. git
  12. 123
  13. feature
  14. # 添加该文件夹中所有的文件到git的暂存区
  15. [root@git-client shell02]# git add .
  16. # 在feature分支上提交
  17. [root@git-client shell]# git commit -m '第四次测试提交文件'
  1. #切换到master分支
  2. [root@git-client shell]# git checkout master
  3. 切换到分支 'master'
  4. 您的分支领先 'origin/master'1 个提交。
  5. (使用 "git push" 来发布您的本地提交)
  6. # Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。
  7. # 在master分支上把文件改为:
  8. [root@git-client shell]# echo "feature" >> 1.txt
  9. [root@git-client shell]# cat 1.txt
  10. git
  11. 123
  12. feature
  13. # 添加该文件夹中所有的文件到git的暂存区
  14. [root@git-client shell02]# git add .
  15. # 在master分支上提交
  16. [root@git-client shell]# git commit -m '第五次测试提交文件'
  1. # 现在,master分支和feature分支各自都分别有新的提交。这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
  2. [root@git-client shell]# git merge feature
  3. fatal: 您尚未结束您的合并(存在 MERGE_HEAD)。
  4. 请在合并前先提交您的修改。
  1. # 文件存在冲突,必须手动解决冲突后再提交。
  2. # git status 可以显示冲突的文件;
  3. [root@git-client shell]# git status
  4. # 位于分支 master
  5. # 您的分支领先 'origin/master' 共 2 个提交。
  6. # (使用 "git push" 来发布您的本地提交)
  7. #
  8. # 所有冲突已解决但您仍处于合并中。
  9. # (使用 "git commit" 结束合并)
  10. #
  11. 无文件要提交,干净的工作区
  12. # 添加该文件夹中所有的文件到git的暂存区
  13. [root@git-client shell02]# git add .
  14. # 在master分支上提交
  15. [root@git-client shell]# git commit -m '第六次测试提交文件'
  16. # 将本地的更改提交到远程服务器
  17. [root@git-client shell]# git push -u origin master
5.8.7 fetch拷贝分支内容

实验如下:

  1. # 远程Git服务器代码内容如下:
  2. [root@git-client shell]# cat 1.txt
  3. ceshi
  4. # 本地代码内容如下:
  5. [root@git-client shell]# echo "hello" >> 1.txt
  6. [root@git-client shell]# cat 1.txt
  7. ceshi
  8. hello
  1. # 本地机器做fetch操作:
  2. [root@git-client shell]# git fetch origin master:test
  3. 来自 192.168.200.19:/git-root/shell
  4. * [新分支] master -> test
  5. # 新分支
  6. [root@git-client shell]# git branch
  7. dev
  8. feature
  9. * master
  10. test

fetch是把远程代码作为本地的一个其他分支下载到本地,并不更新本地分支,这里的命令是把远程的master分支下载到本地作为一个新的分支test存在

  1. # 查看本地文件并没有发生变化
  2. [root@git-client shell]# ls
  3. 1.txt
  4. [root@git-client shell]# cat 1.txt
  5. ceshi
  6. hello
  7. # 添加该文件夹中所有的文件到git的暂存区
  8. [root@git-client shell02]# git add .
  9. # 提交所有代码到本机的版本库
  10. [root@git-client shell]# git commit -m '第七次测试提交文件'
  1. # 用diff查看本地master分支和fetch下来的test分支有什么区别:
  2. [root@git-client shell]# git diff master test
  3. diff --git a/1.txt b/1.txt
  4. index 6b96083..9c0df78 100644
  5. --- a/1.txt
  6. +++ b/1.txt
  7. @@ -1,2 +1,3 @@
  8. -ceshi
  9. -hello
  10. +git
  11. +123
  12. +feature

5.9 版本回退

  1. # 用 git log 命令查看
  2. [root@git-client shell]# git log
  3. ......
  4. commit 64df6707db0ed6fd675fd00cadd975601e505502
  5. Merge: 24a7faa b137dad
  6. Author: git <git@163.com>
  7. Date: Fri Jun 9 15:01:47 2023 +0800
  8. 第六次测试提交文件
  9. commit 24a7faa8528aa3ec22f4db7e0ecabc7a6ad0d102
  10. Author: git <git@163.com>
  11. Date: Fri Jun 9 14:57:53 2023 +0800
  12. 第五次测试提交文件
  13. commit b137dadbc8bb922e3ec39871b4490177ee9df3b3
  14. Author: git <git@163.com>
  15. Date: Fri Jun 9 14:55:00 2023 +0800
  16. ......
  1. # 查看当前文件内容
  2. [root@git-client shell]# cat 1.txt
  3. git
  4. 123
  5. feature
  6. # 使用 git reset 命令退到上一个版本
  7. [root@git-client shell]# git reset --hard HEAD^
  8. HEAD 现在位于 eeacd84 第三次测试提交文件
  9. # 查看现在文件内容
  10. [root@git-client shell]# cat 1.txt
  11. git
  12. 123
  1. # 查看命令历史,以便确定要回到哪个版本
  2. [root@git-client shell]# git reflog
  3. 7298181 HEAD@{0}: reset: moving to HEAD^
  4. .....
  5. fc18276 HEAD@{17}: commit: 第二次测试提交文件
  6. 2439382 HEAD@{18}: commit (initial): 首次测试提交文件
  7. # 回滚哪个版本
  8. [root@git-client shell]# git reset --hard 2439382
  9. HEAD 现在位于 2439382 首次测试提交文件
  10. # 查看现在文件内容
  11. [root@git-client shell]# cat 1.txt
  12. ceshi

6、Github 远程仓库

6.1 登录github官方网站注册账户

图片.png-103.9kB

6.2 github 上创建仓库

图片.png-121.3kB

图片.png-105.3kB

6.3 本地服务器生成 ssh 公钥

  1. # 邮箱要与github上注册的相同
  2. [root@git-client ~]# ssh-keygen -t rsa -C 'git@163.com'
  3. [root@git-client ~]# cat .ssh/id_rsa.pub
  4. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrKk6mx30blyeRetvc2PwnKv5bRY3ifXkZLD5Z5GUBfy5GiRX7T6suNiFzmi5Oscn/vofkAVbf1rfrGa+C76O+1ohYlKc9mlgOYKvO0WrW0lJL47P7MSy9zeuMfDxTM0KlKdpQ9AXGzpNFloEwRRFEZf36cquAdv6mkyzpkIalRJjtoZZt4Ps43bSvhJCMSfiIo0n7HowwDBQWpqON6VrU/R75RC5AbK9plyR5MUZ2Scf33skfmkPfn/5C7wmbL/E24Ngtg8KtWcLV05uvSh3amDIHC5zCimXdT0heDIEbZV2JrbHtD3tUk+xmjKzdM3EqVsMt1cGJKfOJh17YqJ2f git@163.com

6.4 github 添加 ssh 公钥

图片.png-53.1kB

图片.png-108.2kB

图片.png-92kB

6.5 测试连接

  1. The authenticity of host 'github.com (20.205.243.166)' can't be established.
  2. ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
  3. ECDSA key fingerprint is MD5:7b:99:81:1e:4c:91:a5:0d:5a:2e:2e:80:13:3f:24:ca.
  4. Are you sure you want to continue connecting (yes/no)? yes
  5. Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
  6. Hi ywb971108! You've successfully authenticated, but GitHub does not provide shell access.

6.6 连接远程仓库(创建一个测试存储库)

  1. # 在 github 网站新建一个仓库,命名为fib
  2. [root@git-client ~]# mkdir fib
  3. [root@git-client ~]# cd fib/
  4. # git 初始化,然后做第一个基本的git操作(需要在github上创建存储库)
  5. [root@git-client fib]# git init
  6. [root@git-client fib]# echo "ceshi" > README.md
  7. [root@git-client fib]# cat README.md
  8. ceshi
  9. [root@git-client fib]# git add README.md
  10. [root@git-client fib]# git commit -m "首次提交"
  11. [root@git-client fib]# git remote add origin git@github.com:ywb971108/fib.git
  12. # 执行push到远端
  13. [root@git-client fib]# git push -u origin master
  14. # 注意设置存储库链接
  15. [root@git-client linux]# git remote set-url origin git@github.com:ywb971108/fib.git

图片.png-92.6kB

7、Gitlab Server 部署

7.1 环境配置

7.1.1 关闭防火墙
  1. [root@git-server ~]# systemctl stop firewalld
  2. [root@git-server ~]# systemctl disable firewalld
7.1.2 关闭 SELinux
  1. [root@git-server ~]# setenforce 0
  2. [root@git-server ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
7.1.3 开启邮件服务
  1. [root@git-server ~]# systemctl start postfix
  2. [root@git-server ~]# systemctl enable postfix

7.2 部署 Gitlab

7.2.1 安装 gitlab 依赖包
  1. # gitlab-ce 10.x.x以后的版本需要依赖policycoreutils-python
  2. [root@git-server ~]# yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
7.2.2 添加官方源
[root@git-server ~]# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash
7.2.3 安装 Gitlab
  1. # 安装指定版本Gitlab
  2. [root@git-server ~]# yum -y install gitlab-ce-12.3.5
7.2.4 配置 Gitlab
7.2.4.1 查看Gitlab版本
  1. [root@git-server ~]# head -1 /opt/gitlab/version-manifest.txt
  2. gitlab-ce 12.3.5
7.2.4.2 修改 Gitlab 配置
  1. [root@git-server ~]# vim /etc/gitlab/gitlab.rb
  2. [root@git-server ~]# egrep -v "^#|^$" /etc/gitlab/gitlab.rb
  3. # 绑定监听的域名或IP。没有域名,可以设置为本机IP地址
  4. # GitLab默认的监听端口为80,但是在企业中这个端口经常被别的服务占用,所以我们还需要更换端口号
  5. external_url 'http://192.168.200.19:8088'
  6. gitlab_rails['gitlab_email_enabled'] = true
  7. gitlab_rails['gitlab_email_from'] = '2659911387@qq.com'
  8. gitlab_rails['gitlab_email_display_name'] = 'gitlab'
  9. gitlab_rails['gitlab_email_reply_to'] = '2659911387@qq.com'
  10. gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
  11. gitlab_rails['gitlab_email_smime_enabled'] = true
  12. # ssl证书
  13. gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/git-server.key'
  14. gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/git-server.crt'
  15. gitlab_rails['smtp_enable'] = true
  16. gitlab_rails['smtp_address'] = "smtp.qq.com"
  17. gitlab_rails['smtp_port'] = 465
  18. gitlab_rails['smtp_user_name'] = "2659911387@qq.com"
  19. # 这是我的qq邮箱授权码
  20. gitlab_rails['smtp_password'] = "gpmkavaafgtwdice"
  21. gitlab_rails['smtp_domain'] = "smtp.qq.com"
  22. gitlab_rails['smtp_authentication'] = "login"
  23. gitlab_rails['smtp_enable_starttls_auto'] = true
  24. gitlab_rails['smtp_tls'] = false
7.2.4.3 手动配置ssl证书

1、创建私有密钥

  1. [root@git-server ~]# mkdir -p /etc/gitlab/ssl
  2. [root@git-server ~]# openssl genrsa -out "/etc/gitlab/ssl/git-server.key" 2048

2、创建私有证书

  1. [root@git-server ~]# openssl req -new -key "/etc/gitlab/ssl/git-server.key" -out "/etc/gitlab/ssl/git-server.csr"
  2. You are about to be asked to enter information that will be incorporated
  3. into your certificate request.
  4. What you are about to enter is what is called a Distinguished Name or a DN.
  5. There are quite a few fields but you can leave some blank
  6. For some fields there will be a default value,
  7. If you enter '.', the field will be left blank.
  8. -----
  9. Country Name (2 letter code) [XX]:CN # 国家
  10. State or Province Name (full name) []:BeiJing # 省份
  11. Locality Name (eg, city) [Default City]:BeiJing # 城市
  12. Organization Name (eg, company) [Default Company Ltd]: # 空格
  13. Organizational Unit Name (eg, section) []: # 空格
  14. Common Name (eg, your name or your server's hostname) []:git-server # 名字
  15. Email Address []:2659911387@qq.com # 邮箱地址
  16. Please enter the following 'extra' attributes
  17. to be sent with your certificate request
  18. A challenge password []:123456 # 密码
  19. An optional company name []: # 空格

3、利用ssl密钥和证书创建签署证书

  1. [root@git-server ~]# openssl x509 -req -days 365 -in "/etc/gitlab/ssl/git-server.csr" -signkey "/etc/gitlab/ssl/git-server.key" -out "/etc/gitlab/ssl/git-server.crt"
  2. Signature ok
  3. subject=/C=CN/ST=BeiJing/L=BeiJing/O=Default Company Ltd/CN=git-server/emailAddress=2659911387@qq.com
  4. Getting Private key
  1. [root@git-server ~]# ll /etc/gitlab/ssl/
  2. 总用量 12
  3. -rw-r--r-- 1 root root 1289 614 11:54 git-server.crt
  4. -rw-r--r-- 1 root root 1078 614 11:51 git-server.csr
  5. -rw-r--r-- 1 root root 1679 614 11:50 git-server.key
7.2.4.4 GitLab中文社区版补丁包安装

GitLab中文社区:https://gitlab.com/xhang/gitlab/tree/12-3-stable-zh

  1. # 下载GitLab中文版补丁包
  2. [root@git-server ~]# wget https://gitlab.com/xhang/gitlab/-/archive/12-3-stable-zh/gitlab-12-3-stable-zh.tar.gz
  3. #解压GitLab中文版补丁包
  4. [root@git-server ~]# tar xf gitlab-12-3-stable-zh.tar.gz
  5. #备份英文版GitLab
  6. [root@git-server ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.bak}
  7. #将中文补丁包的内容覆盖英文版
  8. [root@git-server ~]# rm -rf gitlab-12-3-stable-zh/{tmp,log}
  9. [root@git-server ~]# /bin/cp -rf gitlab-12-3-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
7.2.4.5 初始化 Gitlab
  1. # 初始化GitLab,配置时间较长
  2. [root@git-server ~]# gitlab-ctl reconfigure
  3. ......
7.2.4.6 启动 Gitlab 服务
  1. [root@git-server ~]# gitlab-ctl start
  2. ok: run: alertmanager: (pid 11147) 304s
  3. ok: run: gitaly: (pid 10157) 473s
  4. ok: run: gitlab-exporter: (pid 11110) 306s
  5. ok: run: gitlab-workhorse: (pid 11089) 307s
  6. ok: run: grafana: (pid 11176) 298s
  7. ok: run: logrotate: (pid 10786) 348s
  8. ok: run: nginx: (pid 10754) 354s
  9. ok: run: node-exporter: (pid 11100) 306s
  10. ok: run: postgres-exporter: (pid 11162) 304s
  11. ok: run: postgresql: (pid 10006) 494s
  12. ok: run: prometheus: (pid 11126) 305s
  13. ok: run: redis: (pid 9845) 502s
  14. ok: run: redis-exporter: (pid 11117) 305s
  15. ok: run: sidekiq: (pid 10714) 361s
  16. ok: run: unicorn: (pid 10687) 362s
  17. [root@git-server ~]# lsof -i:8088
  18. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  19. nginx 10754 root 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
  20. nginx 10760 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
  21. nginx 10761 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
  22. nginx 10762 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
  23. nginx 10763 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
7.2.4.7 Gitlab 发送邮件测试
  1. [root@git-server ~]# gitlab-rails console
  2. --------------------------------------------------------------------------------
  3. GitLab: 12.3.5 (2417d5becc7)
  4. GitLab Shell: 10.0.0
  5. PostgreSQL: 10.9
  6. --------------------------------------------------------------------------------
  7. Loading production environment (Rails 5.2.3)
  8. irb(main):001:0> Notify.test_email('2659911387@qq.com', 'Message Subject', 'hi 杨哥!').deliver_now # 输入测试命令,回车
  9. ......
  10. => #<Mail::Message:70088952551520, Multipart: true, Headers: <Date: Wed, 14 Jun 2023 12:07:34 +0800>, <From: gitlab <2659911387@qq.com>>, <Reply-To: gitlab <2659911387@qq.com>>, <To: 2659911387@qq.com>, <Message-ID: <64893d0631374_2f053fbef17cf9a823477@git-server.mail>>, <Subject: Message Subject>, <Mime-Version: 1.0>, <Content-Type: multipart/signed; boundary=----4C560D25FC43B1D07A1CF6F8B4FC1BF9; micalg=sha-256; protocol="application/x-pkcs7-signature">, <Content-Transfer-Encoding: 7bit>, <Content-Disposition: >, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>

去qq邮箱web界面查看是否收到邮件

图片.png-48.8kB

7.2.4.8 Gitlab服务管理
  1. gitlab-ctl start # 启动所有 gitlab 组件;
  2. gitlab-ctl stop # 停止所有 gitlab 组件;
  3. gitlab-ctl restart # 重启所有 gitlab 组件;
  4. gitlab-ctl status # 查看服务状态;
  5. gitlab-ctl reconfigure # 初始化服务;
  6. vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
  7. gitlab-ctl tail # 查看日志;

7.3 Gitlab 的使用

7.3.1 浏览器登录Gitlab

图片.png-72.8kB

图片.png-60.7kB

7.3.2 创建项目组 group

图片.png-109.4kB

图片.png-76.2kB

图片.png-63.3kB

7.3.3 去掉用户的自动注册功能(安全)

图片.png-180.2kB

8、Gitlab 开发代码提交处理流程

8.1 公司代码提交合并流程

  • PM(项目主管/项目经理)在gitlab创建任务,分配给开发人员
  • 开发人员领取任务后,在本地使用git clone拉取代码库
  • 开发人员创建开发分支(git checkout -b dev),并进行开发
  • 开发人员完成之后,提交到本地仓库(git commit )
  • 开发人员在gitlab界面上申请分支合并请求(Merge request)
  • PM在gitlab上查看提交和代码修改情况,确认无误后,确认将开发人员的分支合并到主分支(master)
  • 开发人员在gitlab上Mark done确认开发完成,并关闭issue。这一步在提交合并请求时可以通过描述中填写"close #1"等字样,可以直接关闭issue

8.2 创建项目管理用户 laoli

图片.png-107kB

图片.png-140.2kB

图片.png-108kB
同样的方法,再创建 xiaozhaoxiaosun用户。用户添加完毕后,gitlab 会给用户发一封修改密码的邮件,各用户需要登录自己的邮箱,并点击相关的链接,设置新密码。图片.png-41.9kB

8.3 将 laoli 用户添加到组中,指定T为本组的 owner

图片.png-73kB

图片.png-61.9kB

图片.png-60.9kB

8.4 同样的方法将用户xiaozhao、xiaosun 添加到组中,并指定为 Developer

图片.png-74kB

8.5 使用 laoli 用户的身份与密码登录到 gitlab 界面中,并创建项目 Project

图片.png-57.5kB

8.6 指定项目的存储路径和项目名称

图片.png-80.6kB

把客户端的公钥添加到这里之后才会出现下图的内容

图片.png-89.9kB

8.7 在 client 上添加 laoli 的用户

  1. [root@git-client ~]# useradd laoli
  2. [root@git-client ~]# useradd xiaozhao
  3. [root@git-client ~]# useradd xiaosun
  4. [root@git-client ~]# su - laoli
  5. [laoli@git-client ~]$ ssh-keygen
  6. Generating public/private rsa key pair.
  7. Enter file in which to save the key (/home/laoli/.ssh/id_rsa):
  8. Created directory '/home/laoli/.ssh'.
  9. Enter passphrase (empty for no passphrase):
  10. Enter same passphrase again:
  11. Your identification has been saved in /home/laoli/.ssh/id_rsa.
  12. Your public key has been saved in /home/laoli/.ssh/id_rsa.pub.
  13. The key fingerprint is:
  14. SHA256:E5n9PvKd1ZLTmISeyxodzvlU4snmvIc99G245jjmKE0 laoli@git-client
  15. The key's randomart image is:
  16. +---[RSA 2048]----+
  17. | |
  18. | + |
  19. | + . |
  20. | . . . |
  21. | S + o .|
  22. | .E* B X.|
  23. | oo X &+*|
  24. | . .*o@+**|
  25. | .o+*+X=.|
  26. +----[SHA256]-----+
  27. [laoli@git-client ~]$ cat .ssh/id_rsa.pub
  28. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVRpUTP6OdsODg2qmICQsYGHhI3ThGnYD3Xw104VudQShpdPEzgQE5Fr47xdTSojCsyExiA2HovJKKZDjjHavzDepIhRH4jC4aDGWSpPOJDDRJRD64O0CmNfzvedzE+HUq8j3UxPLCS6N0Kf8CQBlGB+jqj/yFeUL39rOCORxOYk1nqgo8hU4BQ20RtmwpRMBzOBqlkz/Z5ksDeRSFqppq1K7h7MZnrkfS2JVVZywFs3LqoWes+wm7zpROSWU/m9+Ftlm7wZMKYDlqu3bZeh6RFGZ8IwTYR+Dnhyy2jRAc5kSCqfYaADiMUCVRpqbuf8Q92pe//ZTkkOBpc/YVifKF laoli@git-client

8.8 将 laoli 的公钥复制到 gitlab 中

使用 laoli 用户的身份与密码登录到 gitlab界面中,然后在 ssh-key 中添加相关的key

图片.png-139.8kB

8.9 为 laoli 用户配置 git

  1. [laoli@git-client ~]$ git config --global user.email "2@qq.com"
  2. [laoli@git-client ~]$ git config --global user.name "laoli"
  3. [laoli@git-client ~]$ git clone git@192.168.200.19:ceshi/project.git

8.10 创建新文件,添加内容,并提交到 master 分支

  1. [laoli@git-client ~]$ cd project/
  2. [laoli@git-client project]$ echo "gitlab test" > test.txt
  3. [laoli@git-client project]$ cat test.txt
  4. gitlab test
  5. [laoli@git-client project]$ git add .
  6. [laoli@git-client project]$ git commit -m "首次提交"
  7. [laoli@git-client project]$ git push -u origin master

8.11 使用 xiaozhao 用户登录,并 clone 项目

  1. [root@git-client ~]# su - xiaozhao
  2. [xiaozhao@git-client ~]$ ssh-keygen
  3. Generating public/private rsa key pair.
  4. Enter file in which to save the key (/home/xiaozhao/.ssh/id_rsa):
  5. Created directory '/home/xiaozhao/.ssh'.
  6. Enter passphrase (empty for no passphrase):
  7. Enter same passphrase again:
  8. Your identification has been saved in /home/xiaozhao/.ssh/id_rsa.
  9. Your public key has been saved in /home/xiaozhao/.ssh/id_rsa.pub.
  10. The key fingerprint is:
  11. SHA256:Wf0g3H5vqScOD9VeE3X1g3X5/Z6D0hRa/7/Px6lk89o xiaozhao@git-client
  12. The key's randomart image is:
  13. +---[RSA 2048]----+
  14. | .B|
  15. | . o o.=|
  16. | + +. o+|
  17. | o o =. =|
  18. | S +.=oo|
  19. | ..o.o=|
  20. | oo+.=*|
  21. | .*+=B=|
  22. | o*=EX|
  23. +----[SHA256]-----+
  24. [xiaozhao@git-client ~]$ cat .ssh/id_rsa.pub
  25. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTzKqeDVDiD/FzelTDuWV21k9r162lTLRGwK3v+kIikzY0QoncI4ebmxR2CicnzjvGjs9ooKAHTAzXxqDct/mJ0/y4D05eOu8zbvEqCDYpSDLx+UQxs9GLfLhFqnJm5Pd6fJU/gSVwU88P1WVNrUkzjH77rqxAmmnol9zwx7TblqKwtC8hrko//hovXdAmxXhI+CwDMbEUtrxDbRuAyeH/eNaFiumPhXOdeN+O2MsiLYMEAujbS+baEuuPwfm9ZJMRuTHCXT9zERcz+pMnmJg+Tngm8dPPJF/ZinZuV0g2fifxlTBu72prlpKA23ZVRmAqCcpP6MoKnN/Culo/qbdJ xiaozhao@git-client

8.12 同样需要使用Eric用户登录gitlab web 界面,并添加相应的ssh-key。然后设置git ,并clone项目

  1. [xiaozhao@git-client ~]$ git config --global user.email "3@qq.com"
  2. [xiaozhao@git-client ~]$ git config --global user.name "xiaozhao"
  3. [xiaozhao@git-client ~]$ git clone git@192.168.200.19:ceshi/project.git

8.13 创建并切换到dev分支,修改文件内容,并将新 code 提交到 dev分支 (Developer角色默认并没有提交master的权限)

  1. [xiaozhao@git-client ~]$ cd project/
  2. [xiaozhao@git-client project]$ git checkout -b dev
  3. 切换到一个新分支 'dev'
  4. [xiaozhao@git-client project]$ git branch
  5. * dev
  6. master
  7. [xiaozhao@git-client project]$ echo "xiaozhao test" > xiaozhao.txt
  8. [xiaozhao@git-client project]$ ls
  9. test.txt xiaozhao.txt
  10. [xiaozhao@git-client project]$ cat xiaozhao.txt
  11. xiaozhao test
  12. [xiaozhao@git-client project]$ git add .
  13. [xiaozhao@git-client project]$ git commit -m '第二次提交'
  14. [xiaozhao@git-client project]$ git push -u origin dev

8.14 使用 xiaozhao 用户登录gitlab web,在界面中 创建一个合并请求

图片.png-47.5kB

提交合并请求:

图片.png-88.5kB

图片.png-62.4kB

8.15 使用 laoli 用户登录 gitlab web ,找到“合并请求” ,然后将dev分支合并到master分支

图片.png-58.6kB

图片.png-74.6kB

9、Gitlab 备份与恢复

9.1 查看系统版本和软件版本

  1. [root@git-server ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.9.2009 (Core)
  3. [root@git-server ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
  4. 12.3.5

9.2 数据备份

9.2.1 创建备份目录
[root@git-server ~]# mkdir -p /data/gitlab/backups
9.2.2 查看备份相关的配置项
  1. [root@git-server ~]# vim /etc/gitlab/gitlab.rb
  2. [root@git-server ~]# sed -n "368,369p" /etc/gitlab/gitlab.rb
  3. gitlab_rails['manage_backup_path'] = true
  4. gitlab_rails['backup_path'] = "/data/gitlab/backups"

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

  1. # 重启服务
  2. [root@git-server ~]# gitlab-ctl restart
9.2.3 执行备份命令进行备份
[root@git-server ~]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create
9.2.4 添加到 crontab 中定时执行
  1. [root@git-server ~]# crontab -l
  2. 0 2 * * * bash /opt/gitlab/bin/gitlab-rake gitlab:backup:create

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

9.2.5 设置备份保留时长

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

  1. [root@git-server ~]# vim /etc/gitlab/gitlab.rb
  2. [root@git-server ~]# sed -n "377p" /etc/gitlab/gitlab.rb
  3. gitlab_rails['backup_keep_time'] = 604800
  4. # 重启服务
  5. [root@git-server ~]# gitlab-ctl restart

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

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

  1. [root@git-server ~]# ll /data/gitlab/backups/
  2. 总用量 140
  3. -rw------- 1 git git 143360 811 23:19 1691767153_2023_08_11_12.3.5_gitlab_backup.tar

9.3 数据恢复

9.3.1 安装部署 gitlab server

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

9.3.2 恢复 gitlab
9.3.2.1 查看备份相关的配置项
  1. # 创建备份目录
  2. [root@git-client ~]# mkdir -p /data/gitlab/backups
  3. [root@git-client ~]# vim /etc/gitlab/gitlab.rb
  4. [root@git-client ~]# sed -n "369p" /etc/gitlab/gitlab.rb
  5. gitlab_rails['backup_path'] = "/data/gitlab/backups"

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

9.3.2.2 恢复前需要先停掉数据连接服务
  1. [root@git-client ~]# gitlab-ctl stop unicorn
  2. [root@git-client ~]# gitlab-ctl stop sidekiq
  • 如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。
9.3.2.3 同步备份文件到新服务器

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

[root@git-server ~]# rsync -avz /data/gitlab/backups/1691767153_2023_08_11_12.3.5_gitlab_backup.tar root@192.168.200.20:/data/gitlab/backups/
  • 注意权限:600权限是无权恢复的。 实验环境可改成了777,生产环境建议修改属主属组
  1. [root@git-client ~]# cd /data/gitlab/backups
  2. [root@git-client backups]# chown -R git:git 1691767153_2023_08_11_12.3.5_gitlab_backup.tar
  3. [root@git-client backups]# chmod -R 777 1691767153_2023_08_11_12.3.5_gitlab_backup.tar
  4. [root@git-client backups]# ll
  5. 总用量 140
  6. -rwxrwxrwx 1 git git 143360 811 23:19 1691767153_2023_08_11_12.3.5_gitlab_backup.tar
9.3.2.4 执行命令进行恢复
  1. # 注意:backups 目录下保留一个备份文件可直接执行
  2. [root@git-client backups]# /opt/gitlab/bin/gitlab-rake gitlab:backup:restore BACKUP=1691767153_2023_08_11_12.3.5
  3. # 后面再输入两次 yes 就完成恢复了
9.3.2.5 恢复完成启动服务

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

  1. [root@git-client backups]# gitlab-ctl start unicorn
  2. [root@git-client backups]# gitlab-ctl start sidekiq
  3. gitlab-ctl restart

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

图片.png-134.9kB

10、利用Gitlab管理k8s集群

10.1 获取k8s集群API地址

  1. [root@k8s-master ~]# kubectl cluster-info | grep 'Kubernetes' | awk '/http/ {print $NF}'
  2. https://192.168.200.21:6443

10.2 权限设置

图片.png-172.5kB

10.3 获取k8s集群默认CA证书

  1. [root@k8s-master ~]# kubectl get secrets
  2. NAME TYPE DATA AGE
  3. default-token-74zwn kubernetes.io/service-account-token 3 20m

default-token-74zwn为上面获取到的secrets的名称,用以下命令查看证书

  1. [root@k8s-master ~]# kubectl get secret default-token-74zwn -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
  2. -----BEGIN CERTIFICATE-----
  3. MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
  4. cm5ldGVzMB4XDTIzMDgxNDE0MTk1MFoXDTMzMDgxMTE0MTk1MFowFTETMBEGA1UE
  5. AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPdL
  6. VEhCPY0nhSqZinVG4rc7dFLil+GdYgNZMzZMr4hIueszKqyMemWnS1RK/H7CBGfY
  7. Us6t9/jVfDUymz6UmTjj2QBVYgUfxH11xyfOBeHZHAmyRZjmE+7tlq+85sbIDrXU
  8. uiLqcNdAIWGS5w8AYLoUhEMPrir3L+dE4Hug2c+543UTw+GP94Fxfh+VYbZx5Yke
  9. U9Ji/Hea8+cq4/o6nARlFxVpI5pirl6KH7BhkkhvKVdb/8LwKAFTdp0SQ6INVbC3
  10. lxUFcBsxc1C9KydwnZkQVZHAIQZJVv53ImfTeY6sWrOMeihjQtEypjGQuFIfiE6X
  11. TnBGgpx1v4WmgQeR4OMCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB
  12. /wQFMAMBAf8wHQYDVR0OBBYEFBv7Foo8bPpEYzi5XUPONTZHpF6JMA0GCSqGSIb3
  13. DQEBCwUAA4IBAQDkjegr5TOvdPaMndFbE03wy73eheK+nNZt8c0v6CvC5heM+Hul
  14. IrVt1uR7g60zjEx8qVQ3Vn1zNlY+U6GpCMpH2RiY9S9c5Yj6LJUbRYZ9pmSptz+j
  15. UCaayR6hswLOZ08R+OsN8skfFS53QXEC0b4bmP1DymXKcpMD/NNnt4PFOF6oATwy
  16. JSkjKoTd1Iq5pp/nT+apBFwjokGBitrg6yrPqel2bgnaq3MFsLCCjUKfDKXxbMC5
  17. qG+XbrNg5M98KWdxLh9RCIvXFy3YuIoXfReF2ZmVvRA4oiRaTH2crSx6R4v0IEcZ
  18. ADHsavHxImP46bfranoOCSOVrizJz8ibO+2C
  19. -----END CERTIFICATE-----

10.4 设置rbac

  1. [root@k8s-master ~]# cat > gitlab-admin-service-account.yaml << EOF
  2. apiVersion: v1
  3. kind: ServiceAccount
  4. metadata:
  5. name: gitlab-admin
  6. namespace: kube-system
  7. ---
  8. apiVersion: rbac.authorization.k8s.io/v1beta1
  9. kind: ClusterRoleBinding
  10. metadata:
  11. name: gitlab-admin
  12. roleRef:
  13. apiGroup: rbac.authorization.k8s.io
  14. kind: ClusterRole
  15. name: cluster-admin
  16. subjects:
  17. - kind: ServiceAccount
  18. name: gitlab-admin
  19. namespace: kube-system
  20. EOF
  21. [root@k8s-master ~]# kubectl apply -f gitlab-admin-service-account.yaml

10.5 获取gitlab-admin的token

  1. [root@k8s-master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
  2. Name: gitlab-admin-token-lp9fm
  3. Namespace: kube-system
  4. Labels: <none>
  5. Annotations: kubernetes.io/service-account.name: gitlab-admin
  6. kubernetes.io/service-account.uid: 50623e31-0189-4f75-9267-acf1691eb1fa
  7. Type: kubernetes.io/service-account-token
  8. Data
  9. ====
  10. ca.crt: 1066 bytes
  11. namespace: 11 bytes
  12. token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlZacFNqNWctTENwa0UwVS15VHJHMmFscF9aR0wzYloxQ09kV096bjFxUm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJnaXRsYWItYWRtaW4tdG9rZW4tbHA5Zm0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZ2l0bGFiLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTA2MjNlMzEtMDE4OS00Zjc1LTkyNjctYWNmMTY5MWViMWZhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmdpdGxhYi1hZG1pbiJ9.GBkb434h84KLtDoQDEbLZFX_BDjMnX7imuS-6GspXA0FKTm2h9kK-SbJHs0kw5WdM2wBkiW1oFoyWnvuaTtaYj5fqN6-8YBdyo-gXI9C5x11XTWp2Lb0k_v5zJX8xypfDwmVgy0arLR8LX5owWYJDgWjnFYwVzaLkEJR7IaN5fHo57xuIicylCJlkqmZOD3FoNw7L1Qo3EvQIoNsvdNnm8QjLZZKh9xkX4TMX_qsnqVDOoBU_B9NPpsyhADnbZpGBOmxaS6q8oUr_MIg0d-flWUTr2X5z8LNIezMRwlHEPsYO9v_XAAmQXnfTYgA0TT_sPJazz3TRDc55_I_3QHb6g

10.6 添加k8s集群

图片.png-103.2kB

图片.png-155.4kB

图片.png-92.3kB

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/201515
推荐阅读
相关标签
  

闽ICP备14008679号