天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 一、概述
  • 二、持久化存储安装
  • 1. 安装ebs
  • 2. 查看ebs集群服务
  • 3. 设置ebs为默认
  • 4. 使用ebs
  • 三、创建命名空间
  • 四、账号密码
  • 五、创建文件夹
  • 六、Postgresql部署
  • 1. 持久化配置
  • 1.1 文件创建
  • 1.2 部署命令
  • 1.3 查看服务
  • 2. 部署配置
  • 2.1 文件创建
  • 2.2 部署命令
  • 2.3查看服务
  • 3. 服务配置
  • 3.1 文件创建
  • 3.2 部署命令
  • 3.3 查看服务
  • 七、Redis部署
  • 1. 持久化配置
  • 1.1 文件创建
  • 1.2 部署命令
  • 1.3 查看服务
  • 2. 部署配置
  • 2.1 文件创建
  • 2.2 部署命令
  • 2.3 查看服务
  • 3. 服务配置
  • 3.1 文件创建
  • 3.2 部署命令
  • 3.3 查看服务
  • 八、GitLab部署
  • 1. 持久化配置
  • 1.1 文件创建
  • 1.2 部署命令
  • 1.3 查看服务
  • 2. 部署配置
  • 2.1 文件创建
  • 2.2 部署命令
  • 2.3 查看服务
  • 3. 服务配置
  • 3.1 文件创建
  • 3.2 部署命令
  • 3.3 查看服务
  • 九、命令总结
  • 1. 部署pvc
  • 2. 查看pvc
  • 3. 删除指定pvc
  • 4. 部署pod
  • 5. 查看pod
  • 6. 删除pod
  • 7. 部署svc
  • 8. 查看svc
  • 9. 删除指定svc
  • 十、访问GitLab
  • 1. 访问地址
  • 2. 访问gitlab
  • 3. 修改地址参数(这一步好像有点多余,做了好像没啥反应,仅供参考吧)
  • 4. 创建项目
  • 5. SSH KEY配置
  • 6. 克隆项目到本地
  • 7. 本地项目推送到gitlab仓库中
  • 7.1 本地项目创建
  • 7.2 远程项目创建
  • 7.3 远程仓库克隆地址
  • 7.4 初始化本地仓库
  • 7.5 绑定远程与本地git仓库连接
  • 7.6 远程拉取到本地
  • 7.7 提交本地所有文件到仓库
  • 7.8 提交并注释信息
  • 7.9 推送到远程仓库
  • 7.11 查看远程仓库
  • 7.10 命令参考
  • 8. 密码修改
  • 9. 修改默认主分支


一、概述

在k8s中部署gitlab,然后使用gitlab来实现代码打包到打镜像再到使用镜像自动生成容器服务的过程 用到了reids、postgresql、gitlab,将三个应用配置好之后启动即可安装gitlab


二、持久化存储安装

安装持久化存储工具,可以使用nfs或ebs

以ebs为例(使用起来好像简单些)

1. 安装ebs

kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml

k8s gitlab 解决方案 k8s和gitlab_git

2. 查看ebs集群服务

查看集群的StorageClass

kubectl get sc

k8s gitlab 解决方案 k8s和gitlab_git_02

3. 设置ebs为默认

设置openobs-hostpath为default

kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

k8s gitlab 解决方案 k8s和gitlab_kubernetes_03

4. 使用ebs

在配置持久化时可根据安装的持久化工具将storageClassName参数的值填充: 先查看sc的名称

kubectl get sc

然后将其名称作为storageClassName参数对应的值 如ebs名称为openebs-hostpath 则在pvc中配置参数为 storageClassName: openebs-hostpath


三、创建命名空间

在部署之前先创建一个namespace用于分类管理服务 创建一个名为gitlab-dev的命名空间

kubectl create namespace gitlab-dev

四、账号密码

分别创建存储账号和密码的文件 账号文件username,用于存储账号信息

echo -n "gitlab-admin" > ./username

密码文件password,用于存储密码信息

echo -n "gitlab.123" > ./password

查看文件

ls

查看文件内容

cat ./username
cat ./password

k8s gitlab 解决方案 k8s和gitlab_kubernetes_04

secret对象生成

kubectl create secret generic git-user-pass --from-file=./username --from-file=./password -n gitlab-dev

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_05

查看secret

kubectl -n gitlab-dev get secret git-user-pass -o yaml

k8s gitlab 解决方案 k8s和gitlab_git_06

拓展:

如果创建错误或者想重新创建secret,则需先删除

kubectl delete secret git-user-pass -n gitlab-dev

五、创建文件夹

创建gitlab-yaml文件夹用于存储gitlab相关的yaml部署文件

mkdir -p gitlab-yaml

k8s gitlab 解决方案 k8s和gitlab_容器_07


六、Postgresql部署

为了方便管理以及后续修改更新文件,本篇对每个结构部分都创建一个yaml文件,且创建的文件都放在当前目录下的gitlab-yaml文件夹下,后续redis和gitlab的部分与此相同

参数: pgs:Postgresql dplm:Deployment pvc:PersistentVolumeClaim svc:Service

1. 持久化配置

pgs-pvc.yaml

1.1 文件创建

创建文件pgs-pvc.yaml

vim ./gitlab-yaml/pgs-pvc.yaml

将以下内容复制粘贴到文件中,其中name可自定义,namespace前面创建了gitlab-dev

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pgs-pvc
  namespace: gitlab-dev
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-hostpath
  resources:
    requests:
      storage: 1Gi

查看文件内容

cat ./gitlab-yaml/pgs-pvc.yaml

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_08

1.2 部署命令

根据文件来部署服务

kubectl apply -f ./gitlab-yaml/pgs-pvc.yaml

k8s gitlab 解决方案 k8s和gitlab_kubernetes_09

1.3 查看服务

查看创建的服务

kubectl get pvc -n gitlab-dev pgs-pvc

k8s gitlab 解决方案 k8s和gitlab_kubernetes_10

注:如需删除创建的服务请参考:kubectl操作命令集合

2. 部署配置

pgs-dplm.yaml

2.1 文件创建

创建文件pgs-dplm.yaml

vim ./gitlab-yaml/pgs-dplm.yaml

将以下内容复制粘贴到文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: gitlab-dev
  labels:
    name: postgresql
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgresql
  template:
    metadata:
      name: postgresql
      labels:
        name: postgresql
    spec:
      #nodeSelector:
        #key: gitlab-dev
      containers:
        - name: postgresql
          image: sameersbn/postgresql
          imagePullPolicy: IfNotPresent
          env:
            - name: DB_USER
              value: gitlab
            - name: DB_PASS
              value: passw0rd
            - name: DB_NAME
              value: gitlab_production
            - name: DB_EXTENSION
              value: pg_trgm
          ports:
            - name: postgres
              containerPort: 5432
          volumeMounts:
            - mountPath: /var/lib/postgresql
              name: data
          livenessProbe:
            exec:
              command:
                - pg_isready
                - -h
                - localhost
                - -U
                - postgres
            initialDelaySeconds: 30
            timeoutSeconds: 5
          readinessProbe:
            exec:
              command:
                - pg_isready
                - -h
                - localhost
                - -U
                - postgres
            initialDelaySeconds: 5
            timeoutSeconds: 1
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: pgs-pvc

注:nodeSelector的key的值就是namespace,最后的claimName的值是持久化配置文件的名称pgs-pvc 查看文件内容

cat ./gitlab-yaml/pgs-dplm.yaml

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_11

2.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/pgs-dplm.yaml

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_12

2.3查看服务

查看已创建的服务

kubectl get pod -n gitlab-dev

k8s gitlab 解决方案 k8s和gitlab_git_13

注:pod启动需要一点时间,开始状态为ContainerCreating,过一会才会显示Running

3. 服务配置

pgs-svc.yaml

3.1 文件创建

创建文件pgs-svc.yaml

vim ./gitlab-yaml/pgs-svc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: gitlab-dev
  labels:
    name: postgresql
spec:
  ports:
    - name: postgres
      port: 5432
      targetPort: postgres
  selector:
    name: postgresql

查看文件内容

cat ./gitlab-yaml/pgs-svc.yaml

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_14

3.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/pgs-svc.yaml

k8s gitlab 解决方案 k8s和gitlab_容器_15

3.3 查看服务

查看已部署的服务

kubectl get svc -n gitlab-dev

k8s gitlab 解决方案 k8s和gitlab_git_16

七、Redis部署

数据缓存redis

1. 持久化配置

redis-pvc.yaml

1.1 文件创建

创建文件redis-pvc.yaml

vim ./gitlab-yaml/redis-pvc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pvc
  namespace: gitlab-dev
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-hostpath
  resources:
    requests:
      storage: 1Gi

查看文件内容

cat ./gitlab-yaml/redis-pvc.yaml

k8s gitlab 解决方案 k8s和gitlab_git_17

1.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/redis-pvc.yaml

k8s gitlab 解决方案 k8s和gitlab_kubernetes_18

1.3 查看服务

查看已部署的服务

kubectl get pvc -n gitlab-dev redis-pvc

k8s gitlab 解决方案 k8s和gitlab_gitlab_19

2. 部署配置

redis-dplm.yaml

2.1 文件创建

创建redis-dplm.yaml文件

vim ./gitlab-yaml/redis-dplm.yaml

将以下内容复制粘贴到文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: gitlab-dev
  labels:
    name: redis
spec:
  replicas: 2
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      name: redis
      labels:
        name: redis
    spec:
      #nodeSelector:
        #key: gitlab-dev
      containers:
        - name: redis
          image: sameersbn/redis
          imagePullPolicy: IfNotPresent
          ports:
            - name: redis
              containerPort: 6379
          volumeMounts:
            - mountPath: /var/lib/redis
              name: data
          livenessProbe:
            exec:
              command:
                - redis-cli
                - ping
            initialDelaySeconds: 30
            timeoutSeconds: 5
          readinessProbe:
            exec:
              command:
                - redis-cli
                - ping
            initialDelaySeconds: 5
            timeoutSeconds: 1
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: redis-pvc

查看文件内容

cat ./gitlab-yaml/redis-dplm.yaml

k8s gitlab 解决方案 k8s和gitlab_gitlab_20

2.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/redis-dplm.yaml

k8s gitlab 解决方案 k8s和gitlab_git_21

2.3 查看服务

查看已部署的服务

kubectl get pod -n gitlab-dev

k8s gitlab 解决方案 k8s和gitlab_kubernetes_22

因为文件中配置的副本数为2,故生成了两个redis的pod

3. 服务配置

redis-svc.yaml

3.1 文件创建

创建文件redis-svc.yaml

vim ./gitlab-yaml/redis-svc.yaml

讲一下内容复制粘贴进文件中

apiVersion: v1
kind: Service
metadata:
  name: redis-svc
  namespace: gitlab-dev
  labels:
    name: redis-svc
spec:
  ports:
    - name: redis
      port: 6379
      targetPort: redis
  selector:
    name: redis

查看文件内容

cat ./gitlab-yaml/redis-svc.yaml

k8s gitlab 解决方案 k8s和gitlab_kubernetes_23

3.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/redis-svc.yaml

k8s gitlab 解决方案 k8s和gitlab_gitlab_24

3.3 查看服务

查看已部署的服务

kubectl get svc -n gitlab-dev redis-svc

k8s gitlab 解决方案 k8s和gitlab_容器_25

八、GitLab部署

gitlab

1. 持久化配置

gitlab-pvc.yaml

1.1 文件创建

创建文件gitlab-pvc.yaml

vim ./gitlab-yaml/gitlab-pvc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gitlab-pvc
  namespace: gitlab-dev
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-hostpath
  resources:
    requests:
      storage: 5Gi

查看文件内容

cat ./gitlab-yaml/gitlab-pvc.yaml

k8s gitlab 解决方案 k8s和gitlab_kubernetes_26

1.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/gitlab-pvc.yaml

k8s gitlab 解决方案 k8s和gitlab_容器_27

1.3 查看服务

查看已部署的服务

kubectl get pvc -n gitlab-dev gitlab-pvc

k8s gitlab 解决方案 k8s和gitlab_git_28

2. 部署配置

gitlab-dplm.yaml 本篇以gitlab-ce-15.6.0-ce.0为例

版本多次尝试结果如下:

可用版本(成功启动pod并成功访问)
gitlab-ce-14.0.0-ce.0
gitlab-ce-15.6.0-ce.0
不可用版本(不一定准确,只是自己跑了一遍未成功启动,也可能时间太久了懒得等,可自行尝试以辨真伪)
gitlab-ce-15.7.0-ce.0
gitlab-ce-15.8.0-ce.0
gitlab-ce-15.9.0-ce.0
gitlab-ce-16.0.0-ce.0
gitlab-ce-16.1.6-ce.0
gitlab-ce-16.2.0-ce.0
gitlab-ce-16.3.0-ce.0
gitlab-ce-16.4.0-ce.0
gitlab-ce-16.5.0-ce.0
gitlab-ce-16.6.0-ce.0
gitlab-ce-16.7.0-ce.0
gitlab-ce-16.8.0-ce.0

2.1 文件创建

创建文件gitlab-dplm.yaml

vim ./gitlab-yaml/gitlab-dplm.yaml

讲一下内容复制粘贴到文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: gitlab-dev
  labels:
    name: gitlab
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gitlab
  template:
    metadata:
      name: gitlab
      labels:
        name: gitlab
    spec:
      #nodeSelector:
        #key: gitlab-dev
      containers:
        - name: gitlab
          # image: sameersbn/gitlab:12.1.6
          image: gitlab/gitlab-ce:15.6.0-ce.0
          # command: ["/bin/bash","-ce","tail -f /dev/null"]
          imagePullPolicy: IfNotPresent
          env:
            - name: TZ
              value: Asia/Shanghai
            - name: GITLAB_TIMEZONE
              value: Beijing
            - name: GITLAB_SECRETS_DB_KEY_BASE
              value: long-and-random-alpha-numeric-string
            - name: GITLAB_SECRETS_SECRET_KEY_BASE
              value: long-and-random-alpha-numeric-string
            - name: GITLAB_SECRETS_OTP_KEY_BASE
              value: long-and-random-alpha-numeric-string
            - name: GITLAB_ROOT_PASSWORD
              #value: admin321
              valueFrom:
                secretKeyRef:
                  name: git-user-pass
                  key: password
            - name: GITLAB_ROOT_EMAIL
              value: hslb@163.com
            - name: GITLAB_HOST
              value: gitlab.hslb.com
            - name: GITLAB_PORT
              value: "30021"
            - name: GITLAB_SSH_PORT
              value: "30022"
            - name: GITLAB_NOTIFY_ON_BROKEN_BUILDS
              value: "true"
            - name: GITLAB_NOTIFY_PUSHER
              value: "false"
            - name: GITLAB_BACKUP_SCHEDULE
              value: daily
            - name: GITLAB_BACKUP_TIME
              value: 01:00
            - name: DB_TYPE
              value: postgres
            - name: DB_HOST
              value: postgresql
            - name: DB_PORT
              value: "5432"
            - name: DB_USER
              value: gitlab
            - name: DB_PASS
              value: passw0rd
            - name: DB_NAME
              value: gitlab_production
            - name: REDIS_HOST
              value: redis
            - name: REDIS_PORT
              value: "6379"
          ports:
            - name: http
              containerPort: 80
            - name: ssh
              containerPort: 22
          volumeMounts:
            #- mountPath: /home/git/data
            - mountPath: /etc/gitlab
            - mountPath: /var/opt/gitlab
              name: data
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 180
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 180
            timeoutSeconds: 5
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: gitlab-pvc

GITLAB_ROOT_PASSWORD 密码部分,可以直接将值设为密码,这里从第二章中设置的密码文件中读取GITLAB_ROOT_EMAIL 邮箱部分,自定义即可GITLAB_HOST 主机地址,可自定义

查看文件内容

cat ./gitlab-yaml/gitlab-dplm.yaml

k8s gitlab 解决方案 k8s和gitlab_容器_29

图为后补的,工具窗口不同了,不用在意

2.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/gitlab-dplm.yaml

k8s gitlab 解决方案 k8s和gitlab_容器_30

2.3 查看服务

查看已部署的服务

kubectl get pod -n gitlab-dev

k8s gitlab 解决方案 k8s和gitlab_容器_31

此时遇到的问题是gitlab这个pod一直启动不成功,解决方法请看:gitlab启动失败后一直重启问题解决 问题解决后,正常如下图

kubectl get pod -n gitlab-dev -o wide

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_32

3. 服务配置

gitlab-svc.yaml

3.1 文件创建

创建文件gitlab-svc.yaml

vim ./gitlab-yaml/gitlab-svc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: Service
metadata:
  name: gitlab
  namespace: gitlab-dev
  labels:
    name: gitlab
spec:
  ports:
    - name: http
      port: 80
      targetPort: http
      nodePort: 30021
    - name: ssh
      port: 22
      targetPort: ssh
      nodePort: 30022
  selector:
    name: gitlab
  type: NodePort

查看文件内容

cat ./gitlab-yaml/gitlab-svc.yaml

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_33

3.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/gitlab-svc.yaml

k8s gitlab 解决方案 k8s和gitlab_git_34

3.3 查看服务

查看已部署的服务

kubectl get svc -n gitlab-dev

k8s gitlab 解决方案 k8s和gitlab_gitlab_35

以上就是redis、postgresql、gitlab三个部分的部署

九、命令总结

如果出现问题需要删除创建的服务,可参考以下命令

1. 部署pvc

kubectl apply -f ./gitlab-yaml/pgs-pvc.yaml
kubectl apply -f ./gitlab-yaml/redis-pvc.yaml
kubectl apply -f ./gitlab-yaml/gitlab-pvc.yaml

2. 查看pvc

kubectl get pvc -n gitlab-dev

3. 删除指定pvc

kubectl delete pvc pgs-pvc -n gitlab-dev

4. 部署pod

kubectl apply -f ./gitlab-yaml/pgs-dplm.yaml
kubectl apply -f ./gitlab-yaml/redis-dplm.yaml
kubectl apply -f ./gitlab-yaml/gitlab-dplm.yaml

5. 查看pod

kubectl get pod -n gitlab-dev

6. 删除pod

删除无副本设置的pod

kubectl delete pod postgresql -n gitlab-dev

删除设置副本的pod

kubectl delete deployment postgresql -n gitlab-dev

7. 部署svc

kubectl apply -f ./gitlab-yaml/pgs-svc.yaml
kubectl apply -f ./gitlab-yaml/redis-svc.yaml
kubectl apply -f ./gitlab-yaml/gitlab-svc.yaml

8. 查看svc

kubectl get svc -n gitlab-dev

9. 删除指定svc

kubectl delete svc postgresql -n gitlab-dev

注:此注释可无视,由于操作是在阿里云服务器的运维管理浏览器窗口操作,复制粘贴功能有瑕疵导致内容格式会错乱,故安装了ossutil工具,在本地创建了文件后上传到oss然后再拉取到服务器指定位置(gitlab-yaml文件夹),如有需要可参考linux服务器中oss工具安装和上传下载文件


十、访问GitLab

访问已经部署好的gitlab服务

1. 访问地址

首先根据自己的服务查看服务所在节点 然后使用节点ip+端口即可访问

查看gitlab的pod部署在哪个节点

kubectl get pod -n gitlab-dev -o wide

如图,部署在k8s-worker2节点

k8s gitlab 解决方案 k8s和gitlab_kubernetes_36

查看gitlab服务映射的端口

kubectl get svc -n gitlab-dev -o wide

如图,映射的端口为30021

k8s gitlab 解决方案 k8s和gitlab_gitlab_37

故,gitlab访问地址为worker2节点ip+端口号30021

gitlab服务所在节点ip:30021

2. 访问gitlab

访问网址gitlab服务所在节点ip:30021

k8s gitlab 解决方案 k8s和gitlab_gitlab_38

k8s gitlab 解决方案 k8s和gitlab_git_39

注意,账号为root

密码为之前设置的gitlab.123

这里有个地方有点无语,我之前设置的账号为gitlab-admin

使用这个账号登录不进去,必须换成root

k8s gitlab 解决方案 k8s和gitlab_kubernetes_40

登录成功后界面如下

k8s gitlab 解决方案 k8s和gitlab_gitlab_41

3. 修改地址参数(这一步好像有点多余,做了好像没啥反应,仅供参考吧)

正常情况下我们使用搭建的gitlab服务创建项目后,可复制克隆地址,但是我们得到的是这样的

前缀不是ip也不是域名,这个是我们gitlab在k8s集群中的pod名称

k8s gitlab 解决方案 k8s和gitlab_git_42

x先查看gitlab容器名称

kubectl get pod -n gitlab-dev -o wide

进入gitlab容器

kubectl exec -it gitlab-c78cfd94c-7nrjl -n gitlab-dev -- /bin/bash

复制内容,ip为gitlab服务所在节点的ip

external_url 'http://ip:30021'

将内容添加到rb文件中,由于容器中没有装vim故只能用vi

vi /etc/gitlab/gitlab.rb

添加后退出容器 exit 删除gitlab的pod

kubectl delete pod gitlab -n gitlab-dev

我们在配置文件中设置了副本,所以删除后会自动重启新的

k8s gitlab 解决方案 k8s和gitlab_容器_43

等待重启,等到gitlab的新pod准备好以后,去访问进行查看

(前提,我们之前配置了service中的targetPort端口映射,这里的30021就是http对应的容器端口80)

记住,这里重启的新的gitlab的pod之后,账号密码就变成了原来初始化的,之前创建的项目及修改的内容都会重置

4. 创建项目

登录后的界面如下,直接创建一个新项目New project

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_44

如果不是这个界面也没关系,找到创建项目界面,左上角Menu–Projects–View all projects会跳转到上面这个界面

k8s gitlab 解决方案 k8s和gitlab_容器_45

创建新项目

k8s gitlab 解决方案 k8s和gitlab_kubernetes_46

为项目起名,然后选择root,其他默认

k8s gitlab 解决方案 k8s和gitlab_容器_47

创建后会提示添加SSH key,下一步进行

k8s gitlab 解决方案 k8s和gitlab_gitlab_48

5. SSH KEY配置

为了可以正常使用ssh推送拉取项目代码,需添加sshkey 查看sshkey的内容如下 正常文件在~/.ssh/id_rsa.pub中

cat ~/.ssh/id_rsa.pub

将ssh-rsa开头的内容复制,包含ssh-rsa,结尾到root前的空格,不包含空格

k8s gitlab 解决方案 k8s和gitlab_容器_49

可在提示中选择Add SSH key进行添加

k8s gitlab 解决方案 k8s和gitlab_kubernetes_50

如果没有这一项可直接进行查找sshkey位置:右上角呼出Edit profile—>SSH Keys

如图位置

k8s gitlab 解决方案 k8s和gitlab_kubernetes_51

将内容粘贴

k8s gitlab 解决方案 k8s和gitlab_kubernetes_52

确认(应该是第一次需要确认,后续删除再加就不需要了)

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_53

添加完成后如下

k8s gitlab 解决方案 k8s和gitlab_kubernetes_54

接下来就可以正常使用ssh进行代码的拉取推送

6. 克隆项目到本地

这里需要注意的是,在我们创建的项目界面,克隆地址如下

k8s gitlab 解决方案 k8s和gitlab_gitlab_55

这里的地址不是ip而是我们gitlab服务在k8s集群中的pod名称 我们使用http地址,点右侧复制按钮先复制下来 (当然这个地址可以同等替换为ip+端口号的形式,即http://ip:30021/root/test-project.git) 接下来我们尝试克隆项目到本地

在本地创建一个空文件夹,名称为k8s-gitlab-test

前提是系统安装了GIT工具

打开文件夹后右键打开git bash here窗口

首先git init命令创建本地的git仓库

k8s gitlab 解决方案 k8s和gitlab_git_56

然后使用git clone命令将克隆地址粘贴过来进行克隆

k8s gitlab 解决方案 k8s和gitlab_git_57

会跳转到用户名密码窗口进行登录

k8s gitlab 解决方案 k8s和gitlab_容器_58

账号root

密码gitlab.123

k8s gitlab 解决方案 k8s和gitlab_容器_59

在本地的文件夹中,我们发现了一个新的项目文件夹

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_60

7. 本地项目推送到gitlab仓库中

7.1 本地项目创建

在本地创建一个文件夹k8s-gitlab-demo

在文件夹中创建一个文本文件test123.txt

k8s gitlab 解决方案 k8s和gitlab_gitlab_61

7.2 远程项目创建

像之前test-project一样在gitlab仓库中创建一个项目,名称为k8s-gitlab-demo

k8s gitlab 解决方案 k8s和gitlab_git_62

7.3 远程仓库克隆地址

同样的将项目的克隆地址http那个复制下来

k8s gitlab 解决方案 k8s和gitlab_容器_63

到本地的k8s-gitlab-demo文件夹中右键git bash here打开git窗口

这里发现一个问题,就是远程仓库默认的分支为main,而后续提交推送到远程仓库的命令中分支使用main却提交不成功,必须使用master才能提交成功,但是这样就会出现两个分支,master是提交时创建的 猜测:这里可能我安装的本地GIT工具版本过旧没更新,所以使用的还是master作为默认分支故使用main提交失败 如果你已经习惯了master,本文最后也附上了一个链接地址,将创建项目的主分支main修改为master,这样后续创建的项目的主分支名称默认为master

7.4 初始化本地仓库

git init

k8s gitlab 解决方案 k8s和gitlab_kubernetes_64

7.5 绑定远程与本地git仓库连接

git remote add origin 远程仓库地址(该地址就是刚刚复制的http克隆地址)

k8s gitlab 解决方案 k8s和gitlab_容器_65

7.6 远程拉取到本地

此时建立了连接,我们可以先把远程拉取到本地

git pull origin master

k8s gitlab 解决方案 k8s和gitlab_容器_66

7.7 提交本地所有文件到仓库

git add .

k8s gitlab 解决方案 k8s和gitlab_容器_67

7.8 提交并注释信息

双引号中为提交的注释信息

git commit -m "commit info"

k8s gitlab 解决方案 k8s和gitlab_kubernetes_68

7.9 推送到远程仓库

git push -u origin master

k8s gitlab 解决方案 k8s和gitlab_gitlab_69

注:这里可以看到,我们开始使用main节点推送失败了,但是main是默认的分支

然后我们使用master推送成功,但是到了远程仓库中看到master是新建的,也就是推送命令执行时新建了一个master分支出来,此时远程仓库中有两个分支存在,这个点很疑惑,不过暂时没发现使用有什么影响,文末附修改默认分支为master的方法可供参考

网上介绍说gitlab是从14版本后开始使用默认main,gitlab-ce:14的版本之前也包括14都是用的master,如果影响使用可参考文末连接修改默认分支名为master,后续创建项目都会以master为默认主分支如未进行pull拉取远程到本地操作可能会遇到如下报错,可执行7.6命令

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_70

推送成功后到gitlab界面

7.11 查看远程仓库

刷新远程项目在main分支并没有新上传的test123.txt

k8s gitlab 解决方案 k8s和gitlab_git_71

我们到master分支查看

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_72

可以看到文件在master节点出现了

k8s gitlab 解决方案 k8s和gitlab_k8s gitlab 解决方案_73

如下为使用gitlab-ce:14.0.0-ce.0版本执行相同操作后的界面,这里默认就是master分支且可以直接看到文件上传到该分支

k8s gitlab 解决方案 k8s和gitlab_gitlab_74

7.10 命令参考

每次创建一个项目后,在项目下面都会有命令汇总帮助我们使用命令如下 仅供参考,有些亲测好像不能用,可自行尝试

Command line instructions
You can also upload existing files from your computer using the instructions below.


Git global setup
git config --global user.name "Administrator"
git config --global user.email "hslb@163.com"

Create a new repository
git clone git@gitlab-69cb4d6cf9-2qhlk:root/k8s-gitlab-demo.git
cd k8s-gitlab-demo
git switch -c main
touch README.md
git add README.md
git commit -m "add README"
git push -u origin main

Push an existing folder
cd existing_folder
git init --initial-branch=main
git remote add origin git@gitlab-69cb4d6cf9-2qhlk:root/k8s-gitlab-demo.git
git add .
git commit -m "Initial commit"
git push -u origin main

Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab-69cb4d6cf9-2qhlk:root/k8s-gitlab-demo.git
git push -u origin --all
git push -u origin --tags

8. 密码修改

默认配置的密码并不是长久密码,按照如下操作修改后可获得长久密码

同样右上角呼出Edit profile

k8s gitlab 解决方案 k8s和gitlab_容器_75

左侧找到Password

k8s gitlab 解决方案 k8s和gitlab_gitlab_76

填写当前密码以及新密码保存设置即可

修改密码 原始密码gitlab.123 新密码gitlab.111 新密码gitlab.111 然后重新登录即可

9. 修改默认主分支

参考链接将默认主分支修改为master:gitlab默认主分支main修改为master