Kubernetes 部署 gitlab

Kubernetes 部署 gitlab

敏捷开发和devops潮流下,gitlab的使用率直线上升,自身所带有的CI/CD工具也很齐全,深受开发人群的喜爱,我们将在kubernetes 集群环境中部署一套gitlab环境,作为代码管理和使用自动化构建部署功能,准备在生产环境中使用

环境准备

k8s集群(阿里云专业版)
postgres 数据库

redis 缓存服务

gitlab 应用

关于postgres、redis的部署请查看之前相关部署文章

gitlab 部署

版本 gitlab 中文版 11.1.4

gitlab 本身是无状态服务,但是其中的repository仓库,配置等文件需要进行持久化存储,容器目录为:

/home/git/data
/etc/gitlab/
/var/opt/gitlab
/var/log/gitlab 可选

编写deployment 部署文件,gitlab.yaml,提前创建好pv 资源datadir-gitlab,这里使用的是阿里云的nas服务,配置gitlab时,请修改example.com 为自身域名,邮箱配置参数按实际情况进行修改,ssh端口这里暴露为nodeport类型32222,使用SLB的22端口代理进来。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: datadir-gitlab
  namespace: gitlab-cicd
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nas
  resources:
    requests:
      storage: 50Gi
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: gitlab
  namespace: gitlab-cicd
  labels:
    name: gitlab
spec:
  replicas: 1
  template:
    metadata:
      name: gitlab
      labels:
        name: gitlab
    spec:
      containers:
      - name: gitlab
        image: twang2218/gitlab-ce-zh:11.1.4
        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: admin123456
        - name: GITLAB_ROOT_EMAIL
          value: xxx@xx.com
        - name: GITLAB_HOST
          value: xxx.example.com
        - 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: GITLAB_OMNIBUS_CONFIG
          value: |
            ## time_zone
            gitlab_rails[‘time_zone‘] = ‘Asia/Shanghai‘
            ## postgres
            postgresql[‘enable‘] = false
            gitlab_rails[‘db_adapter‘] = "postgresql"
            gitlab_rails[‘db_encoding‘] = "utf-8"
            gitlab_rails[‘db_database‘] = "gitlab"
            gitlab_rails[‘db_username‘] = "postgres"
            gitlab_rails[‘db_password‘] = "xxx"
            gitlab_rails[‘db_host‘] = "postgres-svc"
            gitlab_rails[‘db_port‘] = 5432
            ## redis
            redis[‘enable‘] = false
            gitlab_rails[‘redis_host‘] = "redis"
            gitlab_rails[‘redis_port‘] = 6379
            #gitlab_rails[‘redis_password‘] = "redis_password"
            gitlab_rails[‘redis_database‘] = 0
            ## pages
            pages_external_url "http://page.example.com/"
            gitlab_pages[‘enable‘] = true
            gitlab_rails[‘pages_path‘] = "/var/opt/gitlab/pages"
            gitlab_pages[‘external_http‘] = [‘1.1.1.2:80‘]
            #gitlab_pages[‘access_control‘] = true
            ## gitlab ssh,http克隆地址,默认为hostname
            external_url "http://gitlab.example.com/"
            ## email setting
            gitlab_rails[‘smtp_enable‘] = true
            gitlab_rails[‘smtp_address‘] = "smtp.qq.com"
            gitlab_rails[‘smtp_port‘] = 465
            gitlab_rails[‘smtp_user_name‘] = "xxx@xx.com"
            gitlab_rails[‘smtp_password‘] = "xxx"
            gitlab_rails[‘smtp_authentication‘] = "login"
            gitlab_rails[‘smtp_enable_starttls_auto‘] = true
            gitlab_rails[‘smtp_tls‘] = true
            gitlab_rails[‘gitlab_email_from‘] = ‘xx@xx.com‘
            gitlab_rails[‘smtp_domain‘] = "smtp.qq.com"
            postgresql[‘enable‘] = false
            postgres_exporter[‘enable‘] = false
            redis[‘enable‘] = false
            prometheus[‘enable‘] = false
            alertmanager[‘enable‘] = false
            node_exporter[‘enable‘] = false
            redis_exporter[‘enable‘] = false
            prometheus_monitoring[‘enable‘] = false
        ports:
        - name: http
          containerPort: 80
        - name: ssh
          containerPort: 22
        volumeMounts:
        - mountPath: /home/git/data
          name: data
        - mountPath: /etc/gitlab
          name: etc-gitlab
        - mountPath: /var/opt/gitlab    
          name: opt-gitlab
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 900
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          timeoutSeconds: 1
      volumes:
      - name: data
        persistentVolumeClaim:
            claimName: datadir-gitlab
      - name: etc-gitlab
        persistentVolumeClaim:
            claimName: etc-gitlab
      - name: opt-gitlab
        persistentVolumeClaim:
            claimName: opt-gitlab

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

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gitlab
  namespace: gitlab-cicd
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
spec:
  rules:
  - host: gitlab.example.com
    http:
      paths:
      - backend:
          serviceName: gitlab
          servicePort: http
        path: /

注意:本次部署使用的数据服务应提前部署好,若没有部署请查看>>上一篇 <<文章部署 , 连接地址可以直接使用svc-name.namespace.svc 的方式,修改自定义的账号密码

执行gitlab.yaml部署文件

$ kubectl apply -f gitlab.yaml
persistentvolumeclaim/datadir-gitlab configured
deployment.apps/gitlab configured
service/gitlab configured
ingress.extensions/gitlab configured

查看pod 运行状态:

$ kubectl get pod -n gitlab-cicd
NAME                              READY   STATUS    RESTARTS   AGE
gitlab-54548c6969-ghvff           1/1     Running   0          2h
gitlab-ci-runner-0                1/1     Running   0          2h
gitlab-ci-runner-1                1/1     Running   0          2h
redis-8477595b9c-qh6th            1/1     Running   0          77d
stolon-keeper-0                   1/1     Running   0          1d
stolon-keeper-1                   1/1     Running   0          1d
stolon-keeper-2                   1/1     Running   0          1d
stolon-proxy-db976479d-5r6qs      1/1     Running   0          1d
stolon-proxy-db976479d-8x46s      1/1     Running   0          1d
stolon-sentinel-54579c7dd-bk76h   1/1     Running   0          1d
stolon-sentinel-54579c7dd-cwtm2   1/1     Running   0          1d

运行成功后,浏览器访问 http://gitlab.example.com 输入上面配置初始root 用户密码 admin123456,登录成功后测试gitlab运行稳定性,进行相关配置,gitlab默认是公开注册,需要配置使用邮箱验证;创建新项目,克隆仓库和上传文件,最后不要忘记进行忘记密码操作,测试邮件服务是否配置成功

注意:

gitlab.yaml 部署文件中,注意GITLAB_OMNIBUS_CONFIG 配置项的参数,这里我关闭了镜像默认启动的grafana、altermanager、prometheus 等服务,并开启了pages服务,配置pages服务时注意不要使用gitlab.example.com 子域名,可以配置page.example.com

如要需要开启自定义域名,需要配置gitlab_pages[‘external_http‘] 参数

其他相关配置参数请查阅gitlab官网 相关文档

Kubernetes 部署 gitlab

上一篇:http请求发送后从客户端到服务端的详细过程


下一篇:jsp指令元素 include中遇到的index_jsp.class文件不生成的问题及原因