• 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官网 相关文档

  • 相关阅读:
    PyQuery基本操作介绍
    JuPyter(IPython) Notebook中通过pip安装第三方Python Module
    PyQuery查询html信息
    Windows10 磁盘活动时间百分之百导致系统卡顿解决方法
    Django中文无法转换成latin-1编码的解决方案
    Spring Security核心概念介绍
    正则表达式之基本原理
    java基础类型源码解析之HashMap
    java基础类型源码解析之String
    java集合类型源码解析之PriorityQueue
  • 原文地址:https://www.cnblogs.com/h-gallop/p/12304413.html
Copyright © 2020-2023  润新知