k8s集群部署gitlab


1.為什么搭建nfs服務器?

因為我們要使用nfs作為持久化存儲,創建的pv后端存儲時需要nfs,所以需要搭建nfs服務。

2.安裝nfs服務

選擇自己的任意一台機器,我選擇k8s的master1節點,對應的機器ip是192.168.0.6,在192.168.0.6上執行如下步驟,大家在自己環境找一台k8s節點的機器安裝就可以了~

(1)yum安裝nfs

yum install nfs-utils -y

systemctl start nfs

chkconfig nfs on

(2)在master1上創建一個nfs共享目錄

mkdir  /data/v3   -p

mkdir  /data/v4

mkdir  /data/v5

cat  /etc/exports

/data/v3     192.168.0.0/24(rw,no_root_squash)

/data/v4     192.168.0.0/24(rw,no_root_squash)

/data/v5     192.168.0.0/24(rw,no_root_squash)

exportfs -arv   使配置文件生效

systemctl restart nfs

(3)k8s的各個node節點也需要安裝nfs

yum install nfs-utils -y

systemctl start nfs

chkconfig nfs on

創建安裝gitlab需要的pv和pvc

1.創建一個名稱空間

kubectl create ns kube-ops

2.創建gitlab需要的pv和pvc

cat pv_pvc_gitlab.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlabt
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  nfs:
    server: 192.168.0.6  #這個就是nfs服務端的機器ip,也就是k8s的master1節點ip
    path: /data/v5
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: gitlabt
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

 注意:

nfs:
  server: 192.168.0.6  
   #這個就是nfs服務端的機器ip,也就是k8s的master1節點ip

通過kubectl apply更新yaml文件

kubectl apply -f pv_pvc_gitlab.yaml

查看pv和pvc是否綁定

kubectl get pvc -n kube-ops

顯示如下,說明綁定成功了

NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
gitlabt   Bound    gitlabt   10Gi       RWX                           2m

3.創建postsql的pv和pvc

cat pv_pvc_postsql.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postsql
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  nfs:
    server: 192.168.0.6
    path: /data/v4
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postsql
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

通過kubectl apply更新yaml文件

kubectl apply -f pv_pvc_postsql.yaml

查看pv和pvc是否綁定

kubectl get pvc -n kube-ops

顯示如下,說明postsql的pvc和pv綁定成功了

NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
gitlabt   Bound    gitlabt   10Gi       RWX                           5m6s
postsql   Bound    postsql   10Gi       RWX                           2s

4.創建redis的pv和pvc

cat  pv_pvc_redis.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  nfs:
    server: 192.168.0.6
    path: /data/v3
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data
  namespace: kube-ops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

通過kubectl apply更新yaml文件

kubectl apply -f pv_pvc_redis.yaml

查看pv和pvc是否綁定

kubectl get pvc -n kube-ops

顯示如下,說明gitlab的pvc和pv綁定成功了

NAME      STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data      Bound    data      20Gi       RWX                           5s
gitlabt   Bound    gitlabt   10Gi       RWX                           7m7s
postsql   Bound    postsql   10Gi       RWX                           2m3s

安裝postgresql服務

cat  gitlab-postgresql.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: kube-ops
  labels:
    name: postgresql
spec:
  selector:
    matchLabels:
       name: postgresql
  template:
    metadata:
      name: postgresql
      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

通過kubectl apply更新yaml文件

 kubectl apply -f gitlab-postgresql.yaml

查看postgresql是否部署成功

kubectl get pods -n kube-ops

顯示如下,說明postgresql部署成功

NAME READY STATUS RESTARTS AGEpostgresql-79f85cdfb4-r64q5 1/1 Running 0 68s

安裝gitlab需要的redis服務

cat  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

通過kubectl apply更新yaml文件

 kubectl apply -f gitlab-redis.yaml

查看postgresql是否部署成功

kubectl get pods -n kube-ops

顯示如下,說明redis部署成功

NAME READY STATUS RESTARTS AGE
postgresql-79f85cdfb4-r64q5 1/1 Running 0 4m30s
redis-56c8dc76cd-q4q75    1/1   Running  0    65s

安裝gitlab服務

cat  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: 19xxxxxxxx@qq.com
        - name: GITLAB_HOST
          value: 192.168.0.6
        - 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: 180
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          timeoutSeconds: 1
      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

 注意:

上面文件里的GITLAB_ROOT_EMAIL應該設置成自己的郵箱地址,不要用我的,用我的你們后面注冊gitlab賬號會有問題

- name: GITLAB_ROOT_EMAIL
  value: 19xxxxxxxx@qq.com

 通過kubectl apply更新yaml文件

kubectl apply -f gitlab.yaml

查看postgresql是否部署成功

kubectl get pods -n kube-ops
NAME READY STATUS RESTARTS AGE gitlab-cdff65b5f-7kfxn 1/1 Running 0 2m26s postgresql-79f85cdfb4-r64q5 1/1 Running 0 10m redis-56c8dc76cd-q4q75 1/1 Running 0 6m42s

 查看gitlab在宿主機暴露的端口

kubectl get svc -n kube-ops

顯示如下:

gitlab       NodePort    10.98.248.116    <none>        80:30852/TCP,22:32353/TCP   5m25s

 我們在瀏覽器訪問k8s的master1節點的IP:30852即可訪問到gitlab web界面,我訪問的地址是192.168.0.6:30852,出現如下界面

Full name:可以隨便起名字,符合要求即可,也可和我的保持一致,如下
gitlab-admin
Username:可以隨便起名字,符合要求即可,也可和我的保持一致,如下
gitlab-admin
Email: 這個寫你們自己的郵箱,跟你們gitlab.yaml文件里的郵箱地址一致即可,我寫的qq郵箱,如下
198xxxxxxx@qq.com
Email confirmation:  這個就是跟上面Email對應的值保持一致即可,如下
198xxxxxxx@qq.com
Password: 自己設置個密碼,我設置的是admin123
admin123

 

 原文:https://mp.weixin.qq.com/s/z-9jAEKFgK2jFuv2yaREhQ

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM