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 AGEpostgresql-79f85cdfb4-r64q5 1/1 Running 0 4m30sredis-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
