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

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

目录
  • 分布式版本控制系统(一)
    • 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 去掉用户的自动注册功能(安全)
    • 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 的工作流程示意图:

图片.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
# 安装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 命令

图片.png-2444.7kB

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官方网站注册账户

图片.png-103.9kB

6.2 github 上创建仓库

图片.png-121.3kB

图片.png-105.3kB

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 公钥

图片.png-53.1kB

图片.png-108.2kB

图片.png-92kB

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

图片.png-92.6kB

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界面查看是否收到邮件

图片.png-48.8kB

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

图片.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 的用户

[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

图片.png-139.8kB

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,在界面中 创建一个合并请求

图片.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 查看系统版本和软件版本

[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版本一致,否则会提示版本不匹配

图片.png-134.9kB

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 权限设置

图片.png-172.5kB

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

10.6 添加k8s集群

图片.png-103.2kB

图片.png-155.4kB

图片.png-92.3kB

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用文本探测(text-detection)手写一个文本区域mask的生成

今天遇到这样一个需求&#xff1a;需要针对用户输入的图片生成对应文本区域的mask&#xff0c;按理说这应该是一个很容易实现的问题。 初步设想 要生成对应区域的mask&#xff0c;首先要找到文本所在的位置&#xff0c;针对不同的图片&#xff0c;文本位置自然是不同的&#xf…

002-Spring boot 自动配置相关分析

目录 自动配置 EnableAutoConfiguration开启自动配置读取配置提前过滤自动配置配置包 AutoConfigurationPackage 自动配置 EnableAutoConfiguration 开启自动配置 在Spring 启动类上的 SpringBootApplication 中有 EnableAutoConfiguration 读取配置 Import(AutoConfigurat…

SpringBoot集成Solr(二)搜索数据

SpringBoot集成Solr&#xff08;二&#xff09;搜索数据 1.1 构建查询条件 //创建 solr查询参数对象 SolrQuery query new SolrQuery(); StringBuilder params new StringBuilder(); params.append(" subject_s:*").append(text).append("*"); params.a…

Python爬虫的requests(学习于b站尚硅谷)

目录 一、requests  1. requests的基本使用  &#xff08;1&#xff09;文档  &#xff08;2&#xff09;安装  &#xff08;3&#xff09;响应response的属性以及类型  &#xff08;4&#xff09;代码演示 2.requests之get请求  3. requests之post请求  &#x…

2023国赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

UE4/UE5 照明构建失败 “Lightmass crashed”解决“数组索引越界”

在构建全局光照时,经常会出现“Lightmass crashed”的错误,导致光照构建失败。本文将分析这一问题的原因,并给出解决建议。 UE4 版本4.26 报错如下&#xff1a; <None> Lightmass crashed: Assertion failed: (Index > 0) & (Index < ArrayNum) [File:d:\bu…

边缘计算:下一代计算模式的突破

章节一&#xff1a;引言 随着物联网、人工智能和大数据等技术的不断发展&#xff0c;计算需求变得越来越复杂&#xff0c;传统的云计算模式已经难以满足快速增长的数据处理需求。在这样的背景下&#xff0c;边缘计算作为一种全新的计算模式崭露头角&#xff0c;为我们带来了更加…

干翻Dubbo系列第十一篇:Dubbo常见协议与通信效率对比

文章目录 文章说明 一&#xff1a;协议 1&#xff1a;什么是协议 2&#xff1a;协议和序列化关系 3&#xff1a;协议组成 &#xff08;一&#xff09;&#xff1a;头信息 &#xff08;二&#xff09;&#xff1a;体信息 4&#xff1a;Dubbo3中常见的协议 5&#xff1a;…

Linux系统管理:虚拟机ESXi安装

目录 一、理论 1.VMware Workstation 2.VMware vSphere Client 3.ESXi 二、实验 1.ESXi 7安装 一、理论 1.VMware Workstation 它是一款专业的虚拟机软件&#xff0c;可以在一台物理机上运行多个操作系统&#xff0c;支持Windows、Linux等操作系统&#xff0c;可以模拟…

Prometheus流程图(自绘)-核心组件-流程详解

阿丹手绘流程图&#xff1a;图片可能有点小查看的时候放大看看哈&#xff01; prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分&#xff0c;负责实现对监控数据的获取&#xff0c;存储以及查询。Prometheus Server可以通过静态配置管理…

tauri-vue:快速开发跨平台软件的架子,支持自定义头部UI拖拽移动和窗口阴影效果

Tauri Vue Typescript 一个使用 taurivuets 开发跨平台软件的模板&#xff0c;支持窗口头部自定义 UI 和拖拽和窗口阴影&#xff0c;不用再自己做适配了&#xff0c;拿来即用&#xff0c;非常 nice。而且已经封装好了 tauri 的 http 请求工具&#xff0c;省去很多弯路。开源…

并发编程系列-Semaphore

Semaphore&#xff0c;如今通常被翻译为"信号量"&#xff0c;过去也曾被翻译为"信号灯"&#xff0c;因为类似于现实生活中的红绿灯&#xff0c;车辆是否能通行取决于是否是绿灯。同样&#xff0c;在编程世界中&#xff0c;线程是否能执行取决于信号量是否允…

基于php驾校驾驶理论考试模拟系统

驾校驾驶理论考试模拟系统&#xff0c;是基于php编程语言&#xff0c;mysql数据库进行开发&#xff0c;本系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;查看考试规则&#xff0c;进行驾照考试&#xff0c;查看考试得分&#xff0c;考试错题&a…

网络

mcq Java 传输层&#xff1a;拆分和组装&#xff0c;完成端到端的消息传递&#xff0c;流量控制&#xff0c;差错控制等 网络层&#xff1a; 寻址、路由&#xff0c;复用&#xff0c;拥塞控制&#xff0c;完成源到宿的传递。 显然A选项是错误的&#xff0c;有流量控制的是传输层…

力扣:61. 旋转链表(Python3)

题目&#xff1a; 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 示例&…

力扣221.最大正方形(动态规划)

思路&#xff1a; 思路&#xff1a;从[0,0]元素开始&#xff0c;计算每个元素对应其与[0,0]之间矩阵块中最大正方形边长情况&#xff1a;1&#xff09;matrix [ i , j ] ‘0’ --> 元素对应的最大正方形为0。情况&#xff1a;2&#xff09;matrix [ i , j ] ‘1’ -->…

当速度很重要时:使用 Hazelcast 和 Redpanda 进行实时流处理

在本教程中&#xff0c;了解如何构建安全、可扩展、高性能的应用程序&#xff0c;以释放实时数据的全部潜力。 在本教程中&#xff0c;我们将探索 Hazelcast 和 Redpanda 的强大组合&#xff0c;以构建对实时数据做出反应的高性能、可扩展和容错的应用程序。 Redpanda 是一个流…

openCV使用c#操作摄像头

效果如下&#xff1a; 1.创建一个winform的窗体项目&#xff08;框架.NET Framework 4.7.2&#xff09; 2.Nuget引入opencv的c#程序包&#xff08;版本最好和我一致&#xff09; 3.后台代码 using System; using System.Collections.Generic; using System.ComponentModel;…

LeetCode算法心得——限制条件下元素之间的最小绝对差(TreeSet)

大家好&#xff0c;我是晴天学长&#xff0c;今天用到了Java一个非常实用的类TreeSet&#xff0c;能解决一些看起来棘手的问题。 1 &#xff09;限制条件下元素之间的最小绝对差 2) .算法思路 初始化变量&#xff1a;n为列表nums的大小。 min为整型最大值&#xff0c;用于记录…

讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?

同时向讯飞星火、文心一言和通义千问三个国产AI模型提个相同的问题&#xff1a; “python 写一个贪吃蛇的游戏代码” 看哪一家AI写的程序直接能用&#xff0c;谁就胜出&#xff01; 讯飞星火 讯飞星火给出的代码&#xff1a; import pygame import sys import random# 初…