kubernetes部署gitlab

本文详细介绍了如何在Kubernetes集群中安装NFS服务,创建持久卷(PV)和持久卷声明(PVC),然后分别配置并部署GitLab所需的各种组件,包括PostgreSQL和Redis。最后,通过NodePort服务对外暴露GitLab的Web界面,实现远程访问。
安装NFS服务

主要用途为提供持久化存储,创建的pv后端存储时需要nfs,所以需要搭建nfs服务

(1)yum安装nfs

yum install nfs-utils -y
systemctl start nfs
chkconfig nfs on

(2)创建nfs共享目录
mkdir /root/nfsdata{1..3}

(3)设置允许共享的目录
vim /etc/exports
/root/nfsdata1 *(insecure,rw,sync,no_root_squash,no_all_squash)
/root/nfsdata2 *(insecure,rw,sync,no_root_squash,no_all_squash)
/root/nfsdata3 *(insecure,rw,sync,no_root_squash,no_all_squash)

(4)重启nfs服务
systemctl restart nfs
kubernetes部署gitlab
(1)在kubernetes主节点上创建一个新的空间,用来分隔环境
kubectl create ns kube-ops
2.1创建gitlab所需的pv和pvc卷
(2)创建gitlab所需的pv和pvc卷
vim  pv_pvc_gitlab.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlabt
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
   path: /root/nfsdata1
   server: 35.220.xx.xx  #这个就是nfs服务端的机器ip
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: gitlabt
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

(3) 通过kubectl apply更新yaml文件
kubectl apply -f pv_pvc_gitlab.yaml

(4)查看是否绑定有pv,pvc
kubectl get pvc -n kube-ops

如果显示有以下效果,则表名绑定成功
NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
gitlabt   Bound    gitlabt   5Gi        RWX                           5h39m
2.2创建postsql所需的pv和pvc
(1)vim  pv_pvc_postsql.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postsql
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /root/nfsdata2
    server: 35.220.xx.xx
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postsql
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

(2)通过kubectl apply更新yaml文件
kubectl apply -f pv_pvc_postsql.yaml

(3)查看是否绑定有pv,pvc
kubectl get pvc -n kube-ops

(4)如果显示有以下效果,则表名绑定成功
NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
gitlabt   Bound    gitlabt   5Gi        RWX                           5h39m
postsql   Bound    postsql   5Gi        RWX                           5h36m
2.3创建redis所需的pv和pvc
(1) vim pv_pvc_redis.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /root/nfsdata3
    server: 35.220.xxx.xxx

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

(2)通过kubectl apply更新yaml文件
kubectl apply -f pv_pvc_redis.yaml

(3)查看是否绑定有pv,pvc
kubectl get pvc -n kube-ops

(4)如果显示有以下效果,则表名绑定成功
NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
gitlabt   Bound    gitlabt   5Gi        RWX                           5h39m
postsql   Bound    postsql   5Gi        RWX                           5h36m
data      Bound    data      5Gi        RWX                           5h29m
2.4 安装postsql服务
vim gitlab-postgresql.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: kube-ops
  labels:
    name: postgresql
spec:
  selector:
    matchLabels:
       name: postgresql
  template:
    metadata:
      labels:
        name: postgresql
    spec:
      containers:
      - name: postgresql
        image: sameersbn/postgresql:10
        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: postsql
---
apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: kube-ops
  labels:
    name: postgresql
spec:
  ports:
    - name: postgres
      port: 5432
      targetPort: postgres
  selector:
      name: postgresql

(2)通过kubectl apply更新yaml文件
kubectl apply -f gitlab-postgresql.yaml

(3)查看postsql是否部署成功
kubectl get pod -n kube-ops

(4)显示如下则证明部署成功
NAME                          READY   STATUS    RESTARTS   AGE
postgresql-7bf865566b-vxhpc   1/1     Running   0          143m
2.5 安装redis服务
(1) vim gitlab-redis.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: kube-ops
  labels:
    name: redis
spec:
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      name: redis
      labels:
        name: redis
    spec:
      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: data
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: kube-ops
  labels:
    name: redis
spec:
  ports:
    - name: redis
      port: 6379
      targetPort: redis
  selector:
    name: redis

(2)通过kubectl apply更新yaml文件
kubectl apply -f gitlab-redis.yaml

(3)查看postsql是否部署成功
kubectl get pod -n kube-ops

(4)显示如下则证明部署成功
NAME                          READY   STATUS    RESTARTS   AGE
postgresql-7bf865566b-vxhpc   1/1     Running   0          143m
redis-56c8dc76cd-nnkll        1/1     Running   0          140m
2.6安装gitlab服务
(1) vim gitlab.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: kube-ops
  labels:
    name: gitlab
spec:
  selector:
    matchLabels:
        name: gitlab
  template:
    metadata:
      name: gitlab
      labels:
        name: gitlab
    spec:
      containers:
      - name: gitlab
        image: sameersbn/gitlab:11.8.1
        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
        - name: GITLAB_ROOT_EMAIL
          value: 17292xxxxx@qq.com  ##这里填自己的邮箱
        - name: GITLAB_HOST
          value: 34.150.xxx.xx   ##这里填gitlab的host地址,可以是主节点的ip
        - name: GITLAB_PORT
          value: "30852"
        - name: GITLAB_SSH_PORT
          value: "32353"
        - 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
          name: data
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 360  ##这个值可以设置大一点,gitlab在启动时比较慢会处于一段时间的502,如果探测时间超过会进行重启,这样gitlab会一直处于重启状态
          timeoutSeconds: 50
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 360
          timeoutSeconds: 50
      volumes:
      - name: data
        persistentVolumeClaim:
         claimName: gitlabt

---
apiVersion: v1
kind: Service
metadata:
  name: gitlab
  namespace: kube-ops
  labels:
    name: gitlab
spec:
  ports:
    - name: http
      port: 80
      targetPort: http
      nodePort: 30852
    - name: ssh
      port: 22
      nodePort: 32353
      targetPort: ssh
  selector:
    name: gitlab
  type: NodePort

(2)通过kubectl apply更新yaml文件
kubectl apply -f gitlab.yaml

(3)查看postsql是否部署成功
kubectl get pod -n kube-ops

(4)显示如下则证明部署成功
NAME                          READY   STATUS    RESTARTS   AGE
postgresql-7bf865566b-vxhpc   1/1     Running   0          143m
redis-56c8dc76cd-nnkll        1/1     Running   0          140m
gitlab-bbd77bfd-vthfj         1/1     Running   0          47m
访问gitlab的web页面
(1)查看宿主机暴露的端口
kubectl  get svc -n kube-ops

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                     AGE
gitlab       NodePort    10.20.68.137    <none>        80:30852/TCP,22:32353/TCP   54m

(2)通过节点ip+端口进行访问,出现如下画面则表示安装成功,最后进行登录 账号密码为 root   admin321
创建项目
将服务器的公钥拷贝一份进gitlab中
最后克隆仓库即可

参考于https://mp.weixin.qq.com/s/z-9jAEKFgK2jFuv2yaREhQ   该原作者中yaml文件语法有问题,进行了简单的修改确保服务能正常运行

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值