分布式版本控制系统(一)
- 分布式版本控制系统(一)
- 1、Git、Github、Gitlab 的区别
- 2、Git 与 SVN 区别
- 3、Git工作流程
- 4、Git基本概念
- 5、Git 客户端安装使用
- 5.1 git-server安装配置
- 5.2 git-client配置免密登录git服务器
- 5.3 文本编辑器
- 5.4 差异分析工具
- 5.5 查看配置信息
- 5.6 常用的 git 命令
- 5.7 本地项目与远程服务器项目之间的交互
- 5.7.1 如果你没有最新的代码,希望从头开始
- 5.7.2 如果你已经有一个新版代码,希望直接把本地的代码替换到远程服务器
- 5.8 分支管理
- 5.8.1 创建分支
- 5.8.2 分支切换
- 5.8.3 分支删除
- 5.8.4 分支提交
- 5.8.5 合并分支
- 5.8.6 解决冲突
- 5.8.7 fetch拷贝分支内容
- 5.9 版本回退
- 6、Github 远程仓库
- 6.1 登录github官方网站注册账户
- 6.2 github 上创建仓库
- 6.3 本地服务器生成 ssh 公钥
- 6.4 github 添加 ssh 公钥
- 6.5 测试连接
- 6.6 连接远程仓库(创建一个测试存储库)
- 7、Gitlab Server 部署
- 7.1 环境配置
- 7.1.1 关闭防火墙
- 7.1.2 关闭 SELinux
- 7.1.3 开启邮件服务
- 7.2 部署 Gitlab
- 7.2.1 安装 gitlab 依赖包
- 7.2.2 添加官方源
- 7.2.3 安装 Gitlab
- 7.2.4 配置 Gitlab
- 7.2.4.1 查看Gitlab版本
- 7.2.4.2 修改 Gitlab 配置
- 7.2.4.3 手动配置ssl证书
- 7.2.4.4 GitLab中文社区版补丁包安装
- 7.2.4.5 初始化 Gitlab
- 7.2.4.6 启动 Gitlab 服务
- 7.2.4.7 Gitlab 发送邮件测试
- 7.2.4.8 Gitlab服务管理
- 7.3 Gitlab 的使用
- 7.3.1 浏览器登录Gitlab
- 7.3.2 创建项目组 group
- 7.3.3 去掉用户的自动注册功能(安全)
- 7.1 环境配置
- 8、Gitlab 开发代码提交处理流程
- 8.1 公司代码提交合并流程
- 8.2 创建项目管理用户 laoli
- 8.3 将 laoli 用户添加到组中,指定T为本组的 owner
- 8.4 同样的方法将用户xiaozhao、xiaosun 添加到组中,并指定为 Developer
- 8.5 使用 laoli 用户的身份与密码登录到 gitlab 界面中,并创建项目 Project
- 8.6 指定项目的存储路径和项目名称
- 8.7 在 client 上添加 laoli 的用户
- 8.8 将 laoli 的公钥复制到 gitlab 中
- 8.9 为 laoli 用户配置 git
- 8.10 创建新文件,添加内容,并提交到 master 分支
- 8.11 使用 xiaozhao 用户登录,并 clone 项目
- 8.12 同样需要使用Eric用户登录gitlab web 界面,并添加相应的ssh-key。然后设置git ,并clone项目
- 8.13 创建并切换到dev分支,修改文件内容,并将新 code 提交到 dev分支 (Developer角色默认并没有提交master的权限)
- 8.14 使用 xiaozhao 用户登录gitlab web,在界面中 创建一个合并请求
- 8.15 使用 laoli 用户登录 gitlab web ,找到“合并请求” ,然后将dev分支合并到master分支
- 9、Gitlab 备份与恢复
- 9.1 查看系统版本和软件版本
- 9.2 数据备份
- 9.2.1 创建备份目录
- 9.2.2 查看备份相关的配置项
- 9.2.3 执行备份命令进行备份
- 9.2.4 添加到 crontab 中定时执行
- 9.2.5 设置备份保留时长
- 9.3 数据恢复
- 9.3.1 安装部署 gitlab server
- 9.3.2 恢复 gitlab
- 9.3.2.1 查看备份相关的配置项
- 9.3.2.2 恢复前需要先停掉数据连接服务
- 9.3.2.3 同步备份文件到新服务器
- 9.3.2.4 执行命令进行恢复
- 9.3.2.5 恢复完成启动服务
- 10、利用Gitlab管理k8s集群
- 10.1 获取k8s集群API地址
- 10.2 权限设置
- 10.3 获取k8s集群默认CA证书
- 10.4 设置rbac
- 10.5 获取gitlab-admin的token
- 10.6 添加k8s集群
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 的工作流程示意图:
4、Git基本概念
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫stage, 或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
工作区、版本库中的暂存区和版本库之间的关系的示意图:
- 图中左侧为工作区,右侧为版本库。在版本库中标记为 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-server | 192.168.200.19 |
git-client | 192.168.200.20 |
# 安装git
[root@git-server ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@git-server ~]# yum -y install git git-all git-core gitweb
# 创建git用户
[root@git-server ~]# useradd git
[root@git-server ~]# echo "123.123" | passwd --stdin git# 创建git仓库目录
[root@git-server ~]# mkdir /git-root
[root@git-server ~]# cd /git-root/# 创建一个裸仓库
[root@git-server git-root]# git init --bare shell.git
初始化空的 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仓库的原因
# 仓库目录授权
[root@git-server git-root]# chown -R git:git shell.git
5.2 git-client配置免密登录git服务器
# 创建密匙
[root@git-client ~]# ssh-keygen# 分发密匙到git-server机器
[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
中的同名变量。
# 配置git使用邮箱
[root@git-client ~]# git config --global user.email "git@163.com"
# 配置git使用用户
[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 命令:
[root@git-client ~]# git config --list
user.email=git@163.com
user.name=git
core.editor=emacs
merge.tool=vimdiff
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如/etc/gitconfig
和~/.gitconfig
),不过最终 Git 实际采用的是最后一个。
这些配置我们也可以在 ~/.gitconfig
或 /etc/gitconfig
看到,如下所示:
[root@git-client ~]# cat ~/.gitconfig
[user]email = git@163.comname = git
[core]editor = emacs
[merge]tool = vimdiff
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:
[root@git-client ~]# git config user.name
git
5.6 常用的 git 命令
git init # 初始化
git add main.cpp # 将某一个文件添加到暂存区
git add . # 将文件夹下的所有的文件添加到暂存区
git commit -m ‘note‘ # 将暂存区中的文件保存成为某一个版本
git log # 查看所有的版本日志
git status # 查看现在暂存区的状况
git diff # 查看现在文件与上一个提交-commit版本的区别
git reset --hard HEAD^ # 回到上一个版本
git reset --hard XXXXX # XXX为版本编号,回到某一个版本
git pull origin master # 从主分支pull到本地
git push -u origin master # 从本地push到主分支
git pull # pull默认主分支
git push # push默认主分支 ...
5.7 本地项目与远程服务器项目之间的交互
5.7.1 如果你没有最新的代码,希望从头开始
# 这里是项目的地址(可从项目主页复制),将远程服务器的内容完全复制过来
[root@git-client ~]# git clone git@192.168.200.19:/git-root/shell.git# clone 之后进入该项目的文件夹
[root@git-client ~]# cd shell/
# 新建一个文件
[root@git-client shell]# echo "ceshi" > 1.txt# 将新的文件添加到git的暂存区
[root@git-client shell]# git add 1.txt
# 将暂存区的文件提交到某一个版本保存下来,并加上注释
[root@git-client shell]# git commit -m '首次测试提交文件'
# 将本地的更改提交到远程服务器
[root@git-client shell]# git push -u origin master
5.7.2 如果你已经有一个新版代码,希望直接把本地的代码替换到远程服务器
# 新的代码
[root@git-client shell]# echo "git" > 1.txt
[root@git-client shell]# cat 1.txt
git# 进入代码存在的文件夹,或者直接在该文件夹打开
# 重新初始化
[root@git-client shell]# git init# 添加该文件夹中所有的文件到git的暂存区
[root@git-client shell02]# git add .
# 提交所有代码到本机的版本库
[root@git-client shell]# git commit -m '第二次测试提交文件'
# 将本地的更改提交到远程服务器
[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 创建分支
# 创建 test 分支
[root@git-client shell]# git branch test
# 命令会列出所有分支,当前分支前面会标一个*号
[root@git-client shell]# git branch
* mastertest
5.8.2 分支切换
[root@git-client shell]# git checkout test
切换到分支 'test'
[root@git-client shell]# git branchmaster
* test# 创建dev分支并切换到dev分支
[root@git-client shell]# git checkout -b dev
切换到一个新分支 'dev'
[root@git-client shell]# git branch
* devmastertest
5.8.3 分支删除
# 删除 test 分支
[root@git-client shell]# git branch -d test
已删除分支 test(曾为 fc18276)。
[root@git-client shell]# git branch
* devmaster
5.8.4 分支提交
# 修改代码
[root@git-client shell]# echo "123" >> 1.txt
[root@git-client shell]# cat 1.txt
git
123# 添加该文件夹中所有的文件到git的暂存区
[root@git-client shell02]# git add .
# 在dev分支上正常提交
[root@git-client shell]# git commit -m '第三次测试提交文件'
# 将本地的更改提交到远程服务器
[root@git-client shell]# git push -u origin dev# 查看文件,刚才添加的内容不见了,因为那个提交是在dev分支上,而master分支此刻的提交点并没有变
[root@git-client shell]# git checkout master
切换到分支 'master'
[root@git-client shell]# cat 1.txt
git
5.8.5 合并分支
# 把dev分支的工作成果合并到master分支上
[root@git-client shell]# git merge dev
更新 fc18276..7298181
Fast-forward1.txt | 1 +1 file changed, 1 insertion(+)# 合并后,再查看文件内容,就可以看到和dev分支的最新提交是完全一样的
[root@git-client shell]# cat 1.txt
git
123
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。
5.8.6 解决冲突
# 创建新的feature1分支
[root@git-client shell]# git checkout -b feature
切换到一个新分支 'feature'
[root@git-client shell]# git branchdev
* featuremaster# 修改文件内容
[root@git-client shell]# echo "feature" >> 1.txt
[root@git-client shell]# cat 1.txt
git
123
feature# 添加该文件夹中所有的文件到git的暂存区
[root@git-client shell02]# git add .
# 在feature分支上提交
[root@git-client shell]# git commit -m '第四次测试提交文件'
#切换到master分支
[root@git-client shell]# git checkout master
切换到分支 'master'
您的分支领先 'origin/master' 共 1 个提交。(使用 "git push" 来发布您的本地提交)# Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。# 在master分支上把文件改为:
[root@git-client shell]# echo "feature" >> 1.txt
[root@git-client shell]# cat 1.txt
git
123
feature# 添加该文件夹中所有的文件到git的暂存区
[root@git-client shell02]# git add .
# 在master分支上提交
[root@git-client shell]# git commit -m '第五次测试提交文件'
# 现在,master分支和feature分支各自都分别有新的提交。这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
[root@git-client shell]# git merge feature
fatal: 您尚未结束您的合并(存在 MERGE_HEAD)。
请在合并前先提交您的修改。
# 文件存在冲突,必须手动解决冲突后再提交。
# git status 可以显示冲突的文件;
[root@git-client shell]# git status
# 位于分支 master
# 您的分支领先 'origin/master' 共 2 个提交。
# (使用 "git push" 来发布您的本地提交)
#
# 所有冲突已解决但您仍处于合并中。
# (使用 "git commit" 结束合并)
#
无文件要提交,干净的工作区# 添加该文件夹中所有的文件到git的暂存区
[root@git-client shell02]# git add .
# 在master分支上提交
[root@git-client shell]# git commit -m '第六次测试提交文件'
# 将本地的更改提交到远程服务器
[root@git-client shell]# git push -u origin master
5.8.7 fetch拷贝分支内容
实验如下:
# 远程Git服务器代码内容如下:
[root@git-client shell]# cat 1.txt
ceshi# 本地代码内容如下:
[root@git-client shell]# echo "hello" >> 1.txt
[root@git-client shell]# cat 1.txt
ceshi
hello
# 本地机器做fetch操作:
[root@git-client shell]# git fetch origin master:test
来自 192.168.200.19:/git-root/shell* [新分支] master -> test# 新分支
[root@git-client shell]# git branchdevfeature
* mastertest
fetch
是把远程代码作为本地的一个其他分支下载到本地,并不更新本地分支,这里的命令是把远程的master
分支下载到本地作为一个新的分支test
存在
# 查看本地文件并没有发生变化
[root@git-client shell]# ls
1.txt
[root@git-client shell]# cat 1.txt
ceshi
hello# 添加该文件夹中所有的文件到git的暂存区
[root@git-client shell02]# git add .
# 提交所有代码到本机的版本库
[root@git-client shell]# git commit -m '第七次测试提交文件'
# 用diff查看本地master分支和fetch下来的test分支有什么区别:
[root@git-client shell]# git diff master test
diff --git a/1.txt b/1.txt
index 6b96083..9c0df78 100644
--- a/1.txt
+++ b/1.txt
@@ -1,2 +1,3 @@
-ceshi
-hello
+git
+123
+feature
5.9 版本回退
# 用 git log 命令查看
[root@git-client shell]# git log
......
commit 64df6707db0ed6fd675fd00cadd975601e505502
Merge: 24a7faa b137dad
Author: git <git@163.com>
Date: Fri Jun 9 15:01:47 2023 +0800第六次测试提交文件commit 24a7faa8528aa3ec22f4db7e0ecabc7a6ad0d102
Author: git <git@163.com>
Date: Fri Jun 9 14:57:53 2023 +0800第五次测试提交文件commit b137dadbc8bb922e3ec39871b4490177ee9df3b3
Author: git <git@163.com>
Date: Fri Jun 9 14:55:00 2023 +0800
......
# 查看当前文件内容
[root@git-client shell]# cat 1.txt
git
123
feature# 使用 git reset 命令退到上一个版本
[root@git-client shell]# git reset --hard HEAD^
HEAD 现在位于 eeacd84 第三次测试提交文件# 查看现在文件内容
[root@git-client shell]# cat 1.txt
git
123
# 查看命令历史,以便确定要回到哪个版本
[root@git-client shell]# git reflog
7298181 HEAD@{0}: reset: moving to HEAD^
.....
fc18276 HEAD@{17}: commit: 第二次测试提交文件
2439382 HEAD@{18}: commit (initial): 首次测试提交文件# 回滚哪个版本
[root@git-client shell]# git reset --hard 2439382
HEAD 现在位于 2439382 首次测试提交文件# 查看现在文件内容
[root@git-client shell]# cat 1.txt
ceshi
6、Github 远程仓库
6.1 登录github官方网站注册账户
6.2 github 上创建仓库
6.3 本地服务器生成 ssh 公钥
# 邮箱要与github上注册的相同
[root@git-client ~]# ssh-keygen -t rsa -C 'git@163.com'[root@git-client ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrKk6mx30blyeRetvc2PwnKv5bRY3ifXkZLD5Z5GUBfy5GiRX7T6suNiFzmi5Oscn/vofkAVbf1rfrGa+C76O+1ohYlKc9mlgOYKvO0WrW0lJL47P7MSy9zeuMfDxTM0KlKdpQ9AXGzpNFloEwRRFEZf36cquAdv6mkyzpkIalRJjtoZZt4Ps43bSvhJCMSfiIo0n7HowwDBQWpqON6VrU/R75RC5AbK9plyR5MUZ2Scf33skfmkPfn/5C7wmbL/E24Ngtg8KtWcLV05uvSh3amDIHC5zCimXdT0heDIEbZV2JrbHtD3tUk+xmjKzdM3EqVsMt1cGJKfOJh17YqJ2f git@163.com
6.4 github 添加 ssh 公钥
6.5 测试连接
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
ECDSA key fingerprint is MD5:7b:99:81:1e:4c:91:a5:0d:5a:2e:2e:80:13:3f:24:ca.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Hi ywb971108! You've successfully authenticated, but GitHub does not provide shell access.
6.6 连接远程仓库(创建一个测试存储库)
# 在 github 网站新建一个仓库,命名为fib
[root@git-client ~]# mkdir fib
[root@git-client ~]# cd fib/# git 初始化,然后做第一个基本的git操作(需要在github上创建存储库)
[root@git-client fib]# git init
[root@git-client fib]# echo "ceshi" > README.md
[root@git-client fib]# cat README.md
ceshi[root@git-client fib]# git add README.md
[root@git-client fib]# git commit -m "首次提交"
[root@git-client fib]# git remote add origin git@github.com:ywb971108/fib.git# 执行push到远端
[root@git-client fib]# git push -u origin master# 注意设置存储库链接
[root@git-client linux]# git remote set-url origin git@github.com:ywb971108/fib.git
7、Gitlab Server 部署
7.1 环境配置
7.1.1 关闭防火墙
[root@git-server ~]# systemctl stop firewalld
[root@git-server ~]# systemctl disable firewalld
7.1.2 关闭 SELinux
[root@git-server ~]# setenforce 0
[root@git-server ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
7.1.3 开启邮件服务
[root@git-server ~]# systemctl start postfix
[root@git-server ~]# systemctl enable postfix
7.2 部署 Gitlab
7.2.1 安装 gitlab 依赖包
# gitlab-ce 10.x.x以后的版本需要依赖policycoreutils-python
[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
# 安装指定版本Gitlab
[root@git-server ~]# yum -y install gitlab-ce-12.3.5
7.2.4 配置 Gitlab
7.2.4.1 查看Gitlab版本
[root@git-server ~]# head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 12.3.5
7.2.4.2 修改 Gitlab 配置
[root@git-server ~]# vim /etc/gitlab/gitlab.rb
[root@git-server ~]# egrep -v "^#|^$" /etc/gitlab/gitlab.rb
# 绑定监听的域名或IP。没有域名,可以设置为本机IP地址
# GitLab默认的监听端口为80,但是在企业中这个端口经常被别的服务占用,所以我们还需要更换端口号
external_url 'http://192.168.200.19:8088'
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '2659911387@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = '2659911387@qq.com'
gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
gitlab_rails['gitlab_email_smime_enabled'] = true
# ssl证书
gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/git-server.key'
gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/git-server.crt'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "2659911387@qq.com"
# 这是我的qq邮箱授权码
gitlab_rails['smtp_password'] = "gpmkavaafgtwdice"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
7.2.4.3 手动配置ssl证书
1、创建私有密钥
[root@git-server ~]# mkdir -p /etc/gitlab/ssl
[root@git-server ~]# openssl genrsa -out "/etc/gitlab/ssl/git-server.key" 2048
2、创建私有证书
[root@git-server ~]# openssl req -new -key "/etc/gitlab/ssl/git-server.key" -out "/etc/gitlab/ssl/git-server.csr"
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN # 国家
State or Province Name (full name) []:BeiJing # 省份
Locality Name (eg, city) [Default City]:BeiJing # 城市
Organization Name (eg, company) [Default Company Ltd]: # 空格
Organizational Unit Name (eg, section) []: # 空格
Common Name (eg, your name or your server's hostname) []:git-server # 名字
Email Address []:2659911387@qq.com # 邮箱地址Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456 # 密码
An optional company name []: # 空格
3、利用ssl密钥和证书创建签署证书
[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"
Signature ok
subject=/C=CN/ST=BeiJing/L=BeiJing/O=Default Company Ltd/CN=git-server/emailAddress=2659911387@qq.com
Getting Private key
[root@git-server ~]# ll /etc/gitlab/ssl/
总用量 12
-rw-r--r-- 1 root root 1289 6月 14 11:54 git-server.crt
-rw-r--r-- 1 root root 1078 6月 14 11:51 git-server.csr
-rw-r--r-- 1 root root 1679 6月 14 11:50 git-server.key
7.2.4.4 GitLab中文社区版补丁包安装
GitLab中文社区:https://gitlab.com/xhang/gitlab/tree/12-3-stable-zh
# 下载GitLab中文版补丁包
[root@git-server ~]# wget https://gitlab.com/xhang/gitlab/-/archive/12-3-stable-zh/gitlab-12-3-stable-zh.tar.gz#解压GitLab中文版补丁包
[root@git-server ~]# tar xf gitlab-12-3-stable-zh.tar.gz#备份英文版GitLab
[root@git-server ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.bak}#将中文补丁包的内容覆盖英文版
[root@git-server ~]# rm -rf gitlab-12-3-stable-zh/{tmp,log}
[root@git-server ~]# /bin/cp -rf gitlab-12-3-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
7.2.4.5 初始化 Gitlab
# 初始化GitLab,配置时间较长
[root@git-server ~]# gitlab-ctl reconfigure
......
7.2.4.6 启动 Gitlab 服务
[root@git-server ~]# gitlab-ctl start
ok: run: alertmanager: (pid 11147) 304s
ok: run: gitaly: (pid 10157) 473s
ok: run: gitlab-exporter: (pid 11110) 306s
ok: run: gitlab-workhorse: (pid 11089) 307s
ok: run: grafana: (pid 11176) 298s
ok: run: logrotate: (pid 10786) 348s
ok: run: nginx: (pid 10754) 354s
ok: run: node-exporter: (pid 11100) 306s
ok: run: postgres-exporter: (pid 11162) 304s
ok: run: postgresql: (pid 10006) 494s
ok: run: prometheus: (pid 11126) 305s
ok: run: redis: (pid 9845) 502s
ok: run: redis-exporter: (pid 11117) 305s
ok: run: sidekiq: (pid 10714) 361s
ok: run: unicorn: (pid 10687) 362s[root@git-server ~]# lsof -i:8088
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 10754 root 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
nginx 10760 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
nginx 10761 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
nginx 10762 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
nginx 10763 gitlab-www 7u IPv4 37593 0t0 TCP *:radan-http (LISTEN)
7.2.4.7 Gitlab 发送邮件测试
[root@git-server ~]# gitlab-rails console
--------------------------------------------------------------------------------GitLab: 12.3.5 (2417d5becc7)GitLab Shell: 10.0.0PostgreSQL: 10.9
--------------------------------------------------------------------------------
Loading production environment (Rails 5.2.3)
irb(main):001:0> Notify.test_email('2659911387@qq.com', 'Message Subject', 'hi 杨哥!').deliver_now # 输入测试命令,回车......=> #<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界面查看是否收到邮件
7.2.4.8 Gitlab服务管理
gitlab-ctl start # 启动所有 gitlab 组件;
gitlab-ctl stop # 停止所有 gitlab 组件;
gitlab-ctl restart # 重启所有 gitlab 组件;
gitlab-ctl status # 查看服务状态;
gitlab-ctl reconfigure # 初始化服务;
vim /etc/gitlab/gitlab.rb # 修改默认的配置文件;
gitlab-ctl tail # 查看日志;
7.3 Gitlab 的使用
7.3.1 浏览器登录Gitlab
7.3.2 创建项目组 group
7.3.3 去掉用户的自动注册功能(安全)
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
同样的方法,再创建 xiaozhao
、xiaosun
用户。用户添加完毕后,gitlab 会给用户发一封修改密码的邮件,各用户需要登录自己的邮箱,并点击相关的链接,设置新密码。
8.3 将 laoli 用户添加到组中,指定T为本组的 owner
8.4 同样的方法将用户xiaozhao、xiaosun 添加到组中,并指定为 Developer
8.5 使用 laoli 用户的身份与密码登录到 gitlab 界面中,并创建项目 Project
8.6 指定项目的存储路径和项目名称
把客户端的公钥添加到这里之后才会出现下图的内容
8.7 在 client 上添加 laoli 的用户
[root@git-client ~]# useradd laoli
[root@git-client ~]# useradd xiaozhao
[root@git-client ~]# useradd xiaosun[root@git-client ~]# su - laoli
[laoli@git-client ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/laoli/.ssh/id_rsa):
Created directory '/home/laoli/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/laoli/.ssh/id_rsa.
Your public key has been saved in /home/laoli/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:E5n9PvKd1ZLTmISeyxodzvlU4snmvIc99G245jjmKE0 laoli@git-client
The key's randomart image is:
+---[RSA 2048]----+
| |
| + |
| + . |
| . . . |
| S + o .|
| .E* B X.|
| oo X &+*|
| . .*o@+**|
| .o+*+X=.|
+----[SHA256]-----+[laoli@git-client ~]$ cat .ssh/id_rsa.pub
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
8.9 为 laoli 用户配置 git
[laoli@git-client ~]$ git config --global user.email "2@qq.com"
[laoli@git-client ~]$ git config --global user.name "laoli"[laoli@git-client ~]$ git clone git@192.168.200.19:ceshi/project.git
8.10 创建新文件,添加内容,并提交到 master 分支
[laoli@git-client ~]$ cd project/
[laoli@git-client project]$ echo "gitlab test" > test.txt
[laoli@git-client project]$ cat test.txt
gitlab test[laoli@git-client project]$ git add .
[laoli@git-client project]$ git commit -m "首次提交"
[laoli@git-client project]$ git push -u origin master
8.11 使用 xiaozhao 用户登录,并 clone 项目
[root@git-client ~]# su - xiaozhao
[xiaozhao@git-client ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xiaozhao/.ssh/id_rsa):
Created directory '/home/xiaozhao/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xiaozhao/.ssh/id_rsa.
Your public key has been saved in /home/xiaozhao/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Wf0g3H5vqScOD9VeE3X1g3X5/Z6D0hRa/7/Px6lk89o xiaozhao@git-client
The key's randomart image is:
+---[RSA 2048]----+
| .B|
| . o o.=|
| + +. o+|
| o o =. =|
| S +.=oo|
| ..o.o=|
| oo+.=*|
| .*+=B=|
| o*=EX|
+----[SHA256]-----+[xiaozhao@git-client ~]$ cat .ssh/id_rsa.pub
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项目
[xiaozhao@git-client ~]$ git config --global user.email "3@qq.com"
[xiaozhao@git-client ~]$ git config --global user.name "xiaozhao"
[xiaozhao@git-client ~]$ git clone git@192.168.200.19:ceshi/project.git
8.13 创建并切换到dev分支,修改文件内容,并将新 code 提交到 dev分支 (Developer角色默认并没有提交master的权限)
[xiaozhao@git-client ~]$ cd project/
[xiaozhao@git-client project]$ git checkout -b dev
切换到一个新分支 'dev'
[xiaozhao@git-client project]$ git branch
* devmaster[xiaozhao@git-client project]$ echo "xiaozhao test" > xiaozhao.txt
[xiaozhao@git-client project]$ ls
test.txt xiaozhao.txt
[xiaozhao@git-client project]$ cat xiaozhao.txt
xiaozhao test[xiaozhao@git-client project]$ git add .
[xiaozhao@git-client project]$ git commit -m '第二次提交'
[xiaozhao@git-client project]$ git push -u origin dev
8.14 使用 xiaozhao 用户登录gitlab web,在界面中 创建一个合并请求
提交合并请求:
8.15 使用 laoli 用户登录 gitlab web ,找到“合并请求” ,然后将dev分支合并到master分支
9、Gitlab 备份与恢复
9.1 查看系统版本和软件版本
[root@git-server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)[root@git-server ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.3.5
9.2 数据备份
9.2.1 创建备份目录
[root@git-server ~]# mkdir -p /data/gitlab/backups
9.2.2 查看备份相关的配置项
[root@git-server ~]# vim /etc/gitlab/gitlab.rb
[root@git-server ~]# sed -n "368,369p" /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/gitlab/backups"
该项定义了默认备份出文件的路径,可以通过修改该配置,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。
# 重启服务
[root@git-server ~]# gitlab-ctl restart
9.2.3 执行备份命令进行备份
[root@git-server ~]# /opt/gitlab/bin/gitlab-rake gitlab:backup:create
9.2.4 添加到 crontab 中定时执行
[root@git-server ~]# crontab -l
0 2 * * * bash /opt/gitlab/bin/gitlab-rake gitlab:backup:create
可以到/data/gitlab/backups
找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。
9.2.5 设置备份保留时长
防止每天执行备份,有目录被爆满的风险,打开/etc/gitlab/gitlab.rb配置文件,找到如下配置:
[root@git-server ~]# vim /etc/gitlab/gitlab.rb
[root@git-server ~]# sed -n "377p" /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800# 重启服务
[root@git-server ~]# gitlab-ctl restart
设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart 重启服务生效。
备份完成,会在备份目录中生成一个当天日期的tar包。
[root@git-server ~]# ll /data/gitlab/backups/
总用量 140
-rw------- 1 git git 143360 8月 11 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 查看备份相关的配置项
# 创建备份目录
[root@git-client ~]# mkdir -p /data/gitlab/backups[root@git-client ~]# vim /etc/gitlab/gitlab.rb
[root@git-client ~]# sed -n "369p" /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/data/gitlab/backups"
修改该配置,定义了默认备份出文件的路径,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。
9.3.2.2 恢复前需要先停掉数据连接服务
[root@git-client ~]# gitlab-ctl stop unicorn
[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,生产环境建议修改属主属组
[root@git-client ~]# cd /data/gitlab/backups[root@git-client backups]# chown -R git:git 1691767153_2023_08_11_12.3.5_gitlab_backup.tar
[root@git-client backups]# chmod -R 777 1691767153_2023_08_11_12.3.5_gitlab_backup.tar [root@git-client backups]# ll
总用量 140
-rwxrwxrwx 1 git git 143360 8月 11 23:19 1691767153_2023_08_11_12.3.5_gitlab_backup.tar
9.3.2.4 执行命令进行恢复
# 注意:backups 目录下保留一个备份文件可直接执行
[root@git-client backups]# /opt/gitlab/bin/gitlab-rake gitlab:backup:restore BACKUP=1691767153_2023_08_11_12.3.5# 后面再输入两次 yes 就完成恢复了
9.3.2.5 恢复完成启动服务
恢复完成后,启动刚刚的两个服务,或者重启所有服务,再打开浏览器进行访问,发现数据和之前的一致:
[root@git-client backups]# gitlab-ctl start unicorn
[root@git-client backups]# gitlab-ctl start sidekiq或gitlab-ctl restart
注意:通过备份文件恢复gitlab必须保证两台主机的gitlab版本一致,否则会提示版本不匹配
10、利用Gitlab管理k8s集群
10.1 获取k8s集群API地址
[root@k8s-master ~]# kubectl cluster-info | grep 'Kubernetes' | awk '/http/ {print $NF}'
https://192.168.200.21:6443
10.2 权限设置
10.3 获取k8s集群默认CA证书
[root@k8s-master ~]# kubectl get secrets
NAME TYPE DATA AGE
default-token-74zwn kubernetes.io/service-account-token 3 20m
default-token-74zwn
为上面获取到的secrets的名称,用以下命令查看证书
[root@k8s-master ~]# kubectl get secret default-token-74zwn -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
-----BEGIN CERTIFICATE-----
MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
cm5ldGVzMB4XDTIzMDgxNDE0MTk1MFoXDTMzMDgxMTE0MTk1MFowFTETMBEGA1UE
AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPdL
VEhCPY0nhSqZinVG4rc7dFLil+GdYgNZMzZMr4hIueszKqyMemWnS1RK/H7CBGfY
Us6t9/jVfDUymz6UmTjj2QBVYgUfxH11xyfOBeHZHAmyRZjmE+7tlq+85sbIDrXU
uiLqcNdAIWGS5w8AYLoUhEMPrir3L+dE4Hug2c+543UTw+GP94Fxfh+VYbZx5Yke
U9Ji/Hea8+cq4/o6nARlFxVpI5pirl6KH7BhkkhvKVdb/8LwKAFTdp0SQ6INVbC3
lxUFcBsxc1C9KydwnZkQVZHAIQZJVv53ImfTeY6sWrOMeihjQtEypjGQuFIfiE6X
TnBGgpx1v4WmgQeR4OMCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB
/wQFMAMBAf8wHQYDVR0OBBYEFBv7Foo8bPpEYzi5XUPONTZHpF6JMA0GCSqGSIb3
DQEBCwUAA4IBAQDkjegr5TOvdPaMndFbE03wy73eheK+nNZt8c0v6CvC5heM+Hul
IrVt1uR7g60zjEx8qVQ3Vn1zNlY+U6GpCMpH2RiY9S9c5Yj6LJUbRYZ9pmSptz+j
UCaayR6hswLOZ08R+OsN8skfFS53QXEC0b4bmP1DymXKcpMD/NNnt4PFOF6oATwy
JSkjKoTd1Iq5pp/nT+apBFwjokGBitrg6yrPqel2bgnaq3MFsLCCjUKfDKXxbMC5
qG+XbrNg5M98KWdxLh9RCIvXFy3YuIoXfReF2ZmVvRA4oiRaTH2crSx6R4v0IEcZ
ADHsavHxImP46bfranoOCSOVrizJz8ibO+2C
-----END CERTIFICATE-----
10.4 设置rbac
[root@k8s-master ~]# cat > gitlab-admin-service-account.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:name: gitlab-adminnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: gitlab-admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: gitlab-adminnamespace: kube-system
EOF[root@k8s-master ~]# kubectl apply -f gitlab-admin-service-account.yaml
10.5 获取gitlab-admin的token
[root@k8s-master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
Name: gitlab-admin-token-lp9fm
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: gitlab-adminkubernetes.io/service-account.uid: 50623e31-0189-4f75-9267-acf1691eb1faType: kubernetes.io/service-account-tokenData
====
ca.crt: 1066 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlZacFNqNWctTENwa0UwVS15VHJHMmFscF9aR0wzYloxQ09kV096bjFxUm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJnaXRsYWItYWRtaW4tdG9rZW4tbHA5Zm0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZ2l0bGFiLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTA2MjNlMzEtMDE4OS00Zjc1LTkyNjctYWNmMTY5MWViMWZhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmdpdGxhYi1hZG1pbiJ9.GBkb434h84KLtDoQDEbLZFX_BDjMnX7imuS-6GspXA0FKTm2h9kK-SbJHs0kw5WdM2wBkiW1oFoyWnvuaTtaYj5fqN6-8YBdyo-gXI9C5x11XTWp2Lb0k_v5zJX8xypfDwmVgy0arLR8LX5owWYJDgWjnFYwVzaLkEJR7IaN5fHo57xuIicylCJlkqmZOD3FoNw7L1Qo3EvQIoNsvdNnm8QjLZZKh9xkX4TMX_qsnqVDOoBU_B9NPpsyhADnbZpGBOmxaS6q8oUr_MIg0d-flWUTr2X5z8LNIezMRwlHEPsYO9v_XAAmQXnfTYgA0TT_sPJazz3TRDc55_I_3QHb6g