kubernetes中部署gitlab

avatar 2022年6月9日19:19:44 评论 592 次浏览

以前部署的gitlab是在单机的ECS上,来回升级比较麻烦,而且目前的工作环境已经全部使用了kubernetes,所以就想着把gitlab也迁移到kubernetes中,在网上找了很多资料,还有看了一下官网的安装方法,始终在数据持久化和ldap以及email的配置问题上遇到问题,这里记录一下,方便以后使用:

数据持久化

为了方便gitlab的数据持久化,这里使用nfs来挂载数据盘,不过在gitlab里的配置就不能修改了,因为挂载的只有数据目录不保护配置文件目录,不过不用担心,后面有解决方法,先安装一下nfs,可以参考:https://www.wulaoer.org/?p=361

我需要在nfs共享目录创建三个目录,redis、data、postgresql分别给redis,gitlab,postgresql做持久化

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# cd /apps/work/server/k8s/devops
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# mkdir {data,postgresql,redis}

创建redis服务

这里创建redis服务,后面的挂载点挂载到nfs的redis目录里,给文件命名gitlab-redis.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: wulaoer-devops-system
  labels:
    name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      name: redis
      labels:
        name: redis
    spec:
      containers:
      - name: redis
        image: sameersbn/redis:latest
        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
        nfs:
          server: 10.18.248.154
          path: /apps/work/server/k8s/devops/redis
          readOnly: false

---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: wulaoer-devops-system
  labels:
    name: redis
spec:
  ports:
    - name: redis
      port: 6379
      targetPort: redis
  selector:
    name: redis

创建postgresql

同样在postgresql的yaml文件中配置postgresql的数据挂载点,方便数据持久化。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: wulaoer-devops-system
  labels:
    name: postgresql
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgresql
  template:
    metadata:
      name: postgresql
      labels:
        name: postgresql
    spec:
      containers:
      - name: postgresql
        image: sameersbn/postgresql:12-20200524
        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,btree_gist
        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
        nfs:
          server: 10.18.248.154
          path: /apps/work/server/k8s/devops/postgresql
          readOnly: false

---
apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: wulaoer-devops-system
  labels:
    name: postgresql
spec:
  ports:
    - name: postgres
      port: 5432
      targetPort: postgres
  selector:
    name: postgresql

创建gitlab

因为创建gitlab和其他的不一样,我们不但要创建,而且需要修改配置文件,所以如果在创建之后修改配置文件重启就会失效,所以需要在yaml文件中定义变量的方式,把配置信息植入到服务中。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: wulaoer-devops-system
  labels:
    name: gitlab
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gitlab
  template:
    metadata:
      name: gitlab
      labels:
        name: gitlab
    spec:
      containers:
      - name: gitlab
        image: sameersbn/gitlab:14.0.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: wulaoer
        - name: GITLAB_ROOT_EMAIL
          value: wulaoer@wulaoer.org
        - name: GITLAB_HOST
          value: 0.0.0.0:30004
        - name: GITLAB_PORT
          value: "80"
        - name: GITLAB_SSH_PORT
          value: "22"
        - 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"
        - name: LDAP_ENABLED
          value: "true"
        - name: LDAP_LABEL
          value: "LDAP"
        - name: LDAP_HOST
          value: "10.123.6.237"
        - name: LDAP_PORT
          value: "389"
        - name: LDAP_UID
          value: "uid"
        - name: LDAP_BIND_DN
          value: "cn=admin,dc=wulaoer,dc=org"
        - name: LDAP_PASS
          value: "**********"
        - name: LDAP_ACTIVE_DIRECTORY
          value: "false"
        - name: LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN
          value: "true"
        - name: LDAP_BASE
          value: "ou=Users,dc=wulaoer,dc=org"
    #    - name: LDAP_USER_FILTER
     #     value: ''
        - name: LDAP_USER_ATTRIBUTE_USERNAME
          value: "['uid', 'userid', 'sAMAccountName']"
        - name: LDAP_USER_ATTRIBUTE_MAIL
          value: "['mail', 'email', 'userPrincipalName']"
        - name: LDAP_USER_ATTRIBUTE_NAME
          value: 'cn'
        - name: LDAP_USER_ATTRIBUTE_FIRSTNAME
          value: 'givenName'
        - name: LDAP_USER_ATTRIBUTE_LASTNAME
          value: 'sn'
        - name: GITLAB_TIMEZONE
          value: 'Asia/Shanghai'
        - name: SMTP_ENABLED
          value: "true"
        - name: SMTP_DOMAIN
          value: "www.wulaoer.org"
        - name: SMTP_PORT
          value: "80"
        - name: SMTP_HOST
          value: "smtp.mxhichina.com"
        - name: SMTP_USER
          value: "git@wulaoer.org"
        - name: SMTP_PASS
          value: "*******"
        - name: SMTP_AUTHENTICATION
          value: "login"
        ports:
        - name: http
          containerPort: 80
        - name: ssh
          containerPort: 22
        volumeMounts:
        - mountPath: /home/git/data
          name: data
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 180
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          timeoutSeconds: 1
      volumes:
      - name: data
        nfs:
          server: 10.18.248.154
          path: /apps/work/server/k8s/devops/data
          readOnly: false
---
apiVersion: v1
kind: Service
metadata:
  name: gitlab
  namespace: wulaoer-devops-system
  labels:
    name: gitlab
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: http
      nodePort: 30004
    - name: ssh
      port: 22
      targetPort: ssh
  selector:
    name: gitlab

这里注意,redis和postgresql的变量信息如果修改,要和原配置信息一致,否则会无法连接的问题。更多配置信息可以参考:https://github.com/sameersbn/docker-gitlab#monitoring 服务已经配置好了,给服务配置一个ingress,方便通过域名访问。

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: ops-gitlab-ingress
  namespace: wulaoer-devops-system
  annotations:
    kubesphere.io/creator: admin
spec:
  tls:
    - hosts:
        - ops-git.wulaoer.org
      secretName: wulaoer-ssl
  rules:
    - host: ops-git.wulaoer.org
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: gitlab
                port:
                  number: 80

所有服务已经启动成功了,访问一下。如果想通过域名实现22端口的通信,需要在slb上增加一个22端口,然后把端口指向gitlab服务即可。

ldap已经配置好了,我这里是因为上次实现的时候把注册关闭了,如果不关闭注册功能应该现实三栏。而且针对gitlab的升级也写的挺好的,如果备份可以参考:https://www.wulaoer.org/?p=2370

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: