美文网首页
k8s集群-Gitlab实现CICD自动化部署-1

k8s集群-Gitlab实现CICD自动化部署-1

作者: Chris0Yang | 来源:发表于2023-04-07 10:30 被阅读0次

    部署K8S集群

    地址:https://www.jianshu.com/p/51542b0b239b

    # 所有节点安装nfs工具
    yum install nfs-utils -y
    
    # 准备一个共享目录
    mkdir -pv /nfs_dir/{gitlab_etc_ver130806,gitlab_log_ver130806,gitlab_opt_ver130806,gitlab_postgresql_data_ver130806}
    
    # 在mastaer01机器,将共享目录以读写权限暴露给`IP地址`网段中的所有主机
    vim /etc/exports
    
    more /etc/exports
    /nfs_dir/gitlab_etc_ver130806  IP地址(rw,sync,no_root_squash,no_all_squash)
    /nfs_dir/gitlab_log_ver130806  IP地址(rw,sync,no_root_squash,no_all_squash)
    /nfs_dir/gitlab_opt_ver130806  IP地址(rw,sync,no_root_squash,no_all_squash)
    
    # 有结果后,在重新启动下所有节点的nfs相关服务
    systemctl enable rpcbind
    systemctl enable nfs
    systemctl restart rpcbind nfs
    
    showmount -e ip地址
    
    # 创建命令空间
    kubectl create namespace gitlab-ver130806
    
    # 要执行的yaml
    kubectl -n gitlab-ver130806 apply -f 3postgres.yaml
    kubectl -n gitlab-ver130806 apply -f 4redis.yaml
    kubectl -n gitlab-ver130806 apply -f 5gitlab.yaml
    kubectl -n gitlab-ver130806 apply -f 6gitlab-tls.yaml
    

    以下是:CICD部署yaml文件

    3postgresql.yaml

    # pv
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gitlab-postgresql-data-ver130806
      labels:
        type: gitlab-postgresql-data-ver130806
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nfs
      nfs:
        path: /nfs_dir/gitlab_postgresql_data_ver130806
        server: 'NFS-ip地址'
    
    # pvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: gitlab-postgresql-data-ver130806-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: nfs
      selector:
        matchLabels:
          type: gitlab-postgresql-data-ver130806
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: postgresql
      labels:
        app: gitlab
        tier: postgreSQL
    spec:
      ports:
        - port: 5432
      selector:
        app: gitlab
        tier: postgreSQL
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: postgresql
      labels:
        app: gitlab
        tier: postgreSQL
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gitlab
          tier: postgreSQL
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: gitlab
            tier: postgreSQL
        spec:
          #nodeSelector:
          #  gee/disk: "500g"
          containers:
            - image: postgres:12.6-alpine
            #- image: harbor.test.com/library/postgres:12.6-alpine
              name: postgresql
              env:
                - name: POSTGRES_USER
                  value: gitlab
                - name: POSTGRES_DB
                  value: gitlabhq_production
                - name: POSTGRES_PASSWORD
                  value: testuser
                - name: TZ
                  value: Asia/Shanghai
              ports:
                - containerPort: 5432
                  name: postgresql
              livenessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - exec pg_isready -U gitlab -h 127.0.0.1 -p 5432 -d gitlabhq_production
                initialDelaySeconds: 110
                timeoutSeconds: 5
                failureThreshold: 6
              readinessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - exec pg_isready -U gitlab -h 127.0.0.1 -p 5432 -d gitlabhq_production
                initialDelaySeconds: 20
                timeoutSeconds: 3
                periodSeconds: 5
    #          resources:
    #            requests:
    #              cpu: 100m
    #              memory: 512Mi
    #            limits:
    #              cpu: "1"
    #              memory: 1Gi
              volumeMounts:
                - name: postgresql
                  mountPath: /var/lib/postgresql/data
          volumes:
            - name: postgresql
              persistentVolumeClaim:
                claimName: gitlab-postgresql-data-ver130806-pvc
    

    4redis.yaml

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redis
      labels:
        app: gitlab
        tier: backend
    spec:
      ports:
        - port: 6379
          targetPort: 6379
      selector:
        app: gitlab
        tier: backend
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis
      labels:
        app: gitlab
        tier: backend
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gitlab
          tier: backend
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: gitlab
            tier: backend
        spec:
          #nodeSelector:
          #  gee/disk: "500g"
          containers:
            - image: redis:6.2.0-alpine3.13
            #- image: harbor.test.com/library/redis:6.2.0-alpine3.13
              name: redis
              command:
                - "redis-server"
              args:
                - "--requirepass"
                - "testuseredis"
    #          resources:
    #            requests:
    #              cpu: "1"
    #              memory: 2Gi
    #            limits:
    #              cpu: "1"
    #              memory: 2Gi
              ports:
                - containerPort: 6379
                  name: redis
              livenessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - "redis-cli ping"
                initialDelaySeconds: 30
                periodSeconds: 10
                timeoutSeconds: 5
                successThreshold: 1
                failureThreshold: 3
              readinessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - "redis-cli ping"
                initialDelaySeconds: 5
                periodSeconds: 10
                timeoutSeconds: 1
                successThreshold: 1
                failureThreshold: 3
          initContainers:
          - command:
            - /bin/sh
            - -c
            - |
              ulimit -n 65536
              mount -o remount rw /sys
              echo never > /sys/kernel/mm/transparent_hugepage/enabled
              mount -o remount rw /proc/sys
              echo 2000 > /proc/sys/net/core/somaxconn
              echo 1 > /proc/sys/vm/overcommit_memory
            image: registry.cn-beijing.aliyuncs.com/acs/busybox:v1.29.2
            imagePullPolicy: IfNotPresent
            name: init-redis
            resources: {}
            securityContext:
              privileged: true
              procMount: Default
    

    定制一下镜像

    sources.list

    [root@k8s-master dockerfile]# cat sources.list
    deb http://mirrors.aliyun.com/ubuntu/ xenial main
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
    deb http://mirrors.aliyun.com/ubuntu/ xenial universe
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
    deb http://mirrors.aliyun.com/ubuntu xenial-security main
    deb-src http://mirrors.aliyun.com/ubuntu xenial-security main
    deb http://mirrors.aliyun.com/ubuntu xenial-security universe
    deb-src http://mirrors.aliyun.com/ubuntu xenial-security universe
    

    Dockerfile

    [root@k8s-master dockerfile]# cat Dockerfile
    FROM gitlab/gitlab-ce:13.8.6-ce.0
    
    RUN rm /etc/apt/sources.list \
        && echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
        && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
    COPY sources.list /etc/apt/sources.list
    
    RUN apt-get update -yq && \
        apt-get install -y vim iproute2 net-tools iputils-ping curl wget software-properties-common unzip postgresql-client-12 && \
        rm -rf /var/cache/apt/archives/*
    
    RUN ln -svf /usr/bin/pg_dump /opt/gitlab/embedded/bin/pg_dump
    
    [root@k8s-master dockerfile]# docker build -t gitlab/gitlab-ce:13.8.6-ce.1 .
    

    5gitlab.yaml

    # pv
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gitlab-etc-ver130806
      labels:
        type: gitlab-etc-ver130806
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nfs
      nfs:
        path: /nfs_dir/gitlab_etc_ver130806
        server: 10.0.1.201
    
    # pvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: gitlab-etc-ver130806-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs
      selector:
        matchLabels:
          type: gitlab-etc-ver130806
    # pv
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gitlab-log-ver130806
      labels:
        type: gitlab-log-ver130806
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nfs
      nfs:
        path: /nfs_dir/gitlab_log_ver130806
        server: 10.0.1.201
    
    # pvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: gitlab-log-ver130806-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs
      selector:
        matchLabels:
          type: gitlab-log-ver130806
          
    # pv
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gitlab-opt-ver130806
      labels:
        type: gitlab-opt-ver130806
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nfs
      nfs:
        path: /nfs_dir/gitlab_opt_ver130806
        server: 10.0.1.201
    
    # pvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: gitlab-opt-ver130806-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs
      selector:
        matchLabels:
          type: gitlab-opt-ver130806
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: gitlab
      labels:
        app: gitlab
        tier: frontend
    spec:
      ports:
        - name: gitlab-ui
          port: 80
          protocol: TCP
          targetPort: 80
        - name: gitlab-ssh
          port: 22
          protocol: TCP
          targetPort: 22
      selector:
        app: gitlab
        tier: frontend
      type: NodePort
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: gitlab
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gitlab-cb-ver130806
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: gitlab
        namespace: gitlab-ver130806
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gitlab
      labels:
        app: gitlab
        tier: frontend
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gitlab
          tier: frontend
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: gitlab
            tier: frontend
        spec:
          serviceAccountName: gitlab
          containers:
            - image: harbor.test.com/library/gitlab-ce:13.8.6-ce.1
              name: gitlabtest
    #          resources:
    #            requests:
    #              cpu: 400m
    #              memory: 4Gi
    #            limits:
    #              cpu: "800m"
    #              memory: 8Gi
              securityContext:
                privileged: true
              env:
                - name: TZ
                  value: Asia/Shanghai
                - name: GITLAB_OMNIBUS_CONFIG
                  value: |
                    postgresql['enable'] = false
                    gitlab_rails['db_username'] = "gitlab"
                    gitlab_rails['db_password'] = "testuser"
                    gitlab_rails['db_host'] = "postgresql"
                    gitlab_rails['db_port'] = "5432"
                    gitlab_rails['db_database'] = "gitlabhq_production"
                    gitlab_rails['db_adapter'] = 'postgresql'
                    gitlab_rails['db_encoding'] = 'utf8'
                    redis['enable'] = false
                    gitlab_rails['redis_host'] = 'redis'
                    gitlab_rails['redis_port'] = '6379'
                    gitlab_rails['redis_password'] = 'testuseredis'
                    gitlab_rails['gitlab_shell_ssh_port'] = 22
                    external_url 'http://git.test.com/'
                    nginx['listen_port'] = 80
                    nginx['listen_https'] = false
                    #-------------------------------------------
                    gitlab_rails['gitlab_email_enabled'] = true
                    gitlab_rails['gitlab_email_from'] = 'admin@test.com'
                    gitlab_rails['gitlab_email_display_name'] = 'test'
                    gitlab_rails['gitlab_email_reply_to'] = 'gitlab@test.com'
                    gitlab_rails['gitlab_default_can_create_group'] = true
                    gitlab_rails['gitlab_username_changing_enabled'] = true
                    gitlab_rails['smtp_enable'] = true
                    gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
                    gitlab_rails['smtp_port'] = 465
                    gitlab_rails['smtp_user_name'] = "gitlab@test.com"
                    gitlab_rails['smtp_password'] = "testsendmail"
                    gitlab_rails['smtp_domain'] = "exmail.qq.com"
                    gitlab_rails['smtp_authentication'] = "login"
                    gitlab_rails['smtp_enable_starttls_auto'] = true
                    gitlab_rails['smtp_tls'] = true
                    #-------------------------------------------
                    # 关闭 promethues
                    prometheus['enable'] = false
                    # 关闭 grafana
                    grafana['enable'] = false
                    # 减少内存占用
                    unicorn['worker_memory_limit_min'] = "200 * 1 << 20"
                    unicorn['worker_memory_limit_max'] = "300 * 1 << 20"
                    # 减少 sidekiq 的并发数
                    sidekiq['concurrency'] = 16
                    # 减少 postgresql 数据库缓存
                    postgresql['shared_buffers'] = "256MB"
                    # 减少 postgresql 数据库并发数量
                    postgresql['max_connections'] = 8
                    # 减少进程数   worker=CPU核数+1
                    unicorn['worker_processes'] = 2
                    nginx['worker_processes'] = 2
                    puma['worker_processes'] = 2
                    # puma['per_worker_max_memory_mb'] = 850
                    # 保留3天备份的数据文件
                    gitlab_rails['backup_keep_time'] = 259200
                    #-------------------------------------------
              ports:
                - containerPort: 80
                  name: gitlab
              livenessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - "curl -s http://127.0.0.1/-/health|grep -w 'GitLab OK'"
                initialDelaySeconds: 120
                periodSeconds: 10
                timeoutSeconds: 5
                successThreshold: 1
                failureThreshold: 3
              readinessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - "curl -s http://127.0.0.1/-/health|grep -w 'GitLab OK'"
                initialDelaySeconds: 120
                periodSeconds: 10
                timeoutSeconds: 5
                successThreshold: 1
                failureThreshold: 3
              volumeMounts:
                - mountPath: /etc/gitlab
                  name: gitlab1
                - mountPath: /var/log/gitlab
                  name: gitlab2
                - mountPath: /var/opt/gitlab
                  name: gitlab3
                - mountPath: /etc/localtime
                  name: tz-config
    
          volumes:
            - name: gitlab1
              persistentVolumeClaim:
                claimName: gitlab-etc-ver130806-pvc
            - name: gitlab2
              persistentVolumeClaim:
                claimName: gitlab-log-ver130806-pvc
            - name: gitlab3
              persistentVolumeClaim:
                claimName: gitlab-opt-ver130806-pvc
            - name: tz-config
              hostPath:
                path: /usr/share/zoneinfo/Asia/Shanghai
    
          securityContext:
            runAsUser: 0
            fsGroup: 0
    

    开始部署

    kubectl -n gitlab-ver130806 exec -it $(kubectl -n gitlab-ver130806 get pod|grep -v runner|grep gitlab|awk '{print $1}') -- gitlab-rake gitlab:backup:restore BACKUP=1602889879_2020_10_17_12.9.2
    
    kubectl -n gitlab-ver130806 exec -it $(kubectl -n gitlab-ver130806 get pod|grep -v runner|grep gitlab|awk '{print $1}') -- gitlab-ctl reconfigure
    
    kubectl -n gitlab-ver130806 exec -it $(kubectl -n gitlab-ver130806 get pod|grep -v runner|grep gitlab|awk '{print $1}') -- gitlab-ctl status
    

    6gitlab-tls.yaml

    # old version
    
    #apiVersion: extensions/v1beta1
    #kind: Ingress
    #metadata:
    #  name: gitlab
    #  annotations:
    #    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    #    nginx.ingress.kubernetes.io/proxy-body-size: "20m"
    #spec:
    #  tls:
    #  - hosts:
    #    - git.test.com
    #    secretName: mytls
    #  rules:
    #  - host: git.test.com
    #    http:
    #      paths:
    #      - path: /
    #        backend:
    #          serviceName: gitlab
    #          servicePort: 80
    
    # Add tls
    # openssl genrsa -out tls.key 2048
    # openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=*.test.com
    # kubectl -n gitlab-ver130806 create secret tls mytls --cert=tls.cert --key=tls.key 
    
    # new version
    
    ## https://kubernetes.io/docs/concepts/services-networking/ingress/
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: gitlab
      annotations:
        nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
        nginx.ingress.kubernetes.io/proxy-body-size: "20m"
    spec:
      tls:
      - hosts:
        - git.test.com
        secretName: mytls
      rules:
      - host: git.test.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: gitlab
                port:
                  number: 80
    ---
    

    相关文章

      网友评论

          本文标题:k8s集群-Gitlab实现CICD自动化部署-1

          本文链接:https://www.haomeiwen.com/subject/lrhuddtx.html