安装NFS服务
主要用途为提供持久化存储,创建的pv后端存储时需要nfs,所以需要搭建nfs服务
(1)yum安装nfs
yum install nfs-utils -y
systemctl start nfs
chkconfig nfs on
(2)创建nfs共享目录
mkdir /root/nfsdata{1..3}
(3)设置允许共享的目录
vim /etc/exports
/root/nfsdata1 *(insecure,rw,sync,no_root_squash,no_all_squash)
/root/nfsdata2 *(insecure,rw,sync,no_root_squash,no_all_squash)
/root/nfsdata3 *(insecure,rw,sync,no_root_squash,no_all_squash)
(4)重启nfs服务
systemctl restart nfs
kubernetes部署gitlab
(1)在kubernetes主节点上创建一个新的空间,用来分隔环境
kubectl create ns kube-ops
2.1创建gitlab所需的pv和pvc卷
(2)创建gitlab所需的pv和pvc卷
vim pv_pvc_gitlab.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: gitlabt
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /root/nfsdata1
server: 35.220.xx.xx #这个就是nfs服务端的机器ip
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: gitlabt
namespace: kube-ops
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
(3) 通过kubectl apply更新yaml文件
kubectl apply -f pv_pvc_gitlab.yaml
(4)查看是否绑定有pv,pvc
kubectl get pvc -n kube-ops
如果显示有以下效果,则表名绑定成功
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
gitlabt Bound gitlabt 5Gi RWX 5h39m
2.2创建postsql所需的pv和pvc
(1)vim pv_pvc_postsql.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: postsql
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /root/nfsdata2
server: 35.220.xx.xx
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postsql
namespace: kube-ops
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
(2)通过kubectl apply更新yaml文件
kubectl apply -f pv_pvc_postsql.yaml
(3)查看是否绑定有pv,pvc
kubectl get pvc -n kube-ops
(4)如果显示有以下效果,则表名绑定成功
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
gitlabt Bound gitlabt 5Gi RWX 5h39m
postsql Bound postsql 5Gi RWX 5h36m
2.3创建redis所需的pv和pvc
(1) vim pv_pvc_redis.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: data
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /root/nfsdata3
server: 35.220.xxx.xxx
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data
namespace: kube-ops
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
(2)通过kubectl apply更新yaml文件
kubectl apply -f pv_pvc_redis.yaml
(3)查看是否绑定有pv,pvc
kubectl get pvc -n kube-ops
(4)如果显示有以下效果,则表名绑定成功
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
gitlabt Bound gitlabt 5Gi RWX 5h39m
postsql Bound postsql 5Gi RWX 5h36m
data Bound data 5Gi RWX 5h29m
2.4 安装postsql服务
vim gitlab-postgresql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
namespace: kube-ops
labels:
name: postgresql
spec:
selector:
matchLabels:
name: postgresql
template:
metadata:
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
(2)通过kubectl apply更新yaml文件
kubectl apply -f gitlab-postgresql.yaml
(3)查看postsql是否部署成功
kubectl get pod -n kube-ops
(4)显示如下则证明部署成功
NAME READY STATUS RESTARTS AGE
postgresql-7bf865566b-vxhpc 1/1 Running 0 143m
2.5 安装redis服务
(1) vim 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
(2)通过kubectl apply更新yaml文件
kubectl apply -f gitlab-redis.yaml
(3)查看postsql是否部署成功
kubectl get pod -n kube-ops
(4)显示如下则证明部署成功
NAME READY STATUS RESTARTS AGE
postgresql-7bf865566b-vxhpc 1/1 Running 0 143m
redis-56c8dc76cd-nnkll 1/1 Running 0 140m
2.6安装gitlab服务
(1) vim 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: 17292xxxxx@qq.com ##这里填自己的邮箱
- name: GITLAB_HOST
value: 34.150.xxx.xx ##这里填gitlab的host地址,可以是主节点的ip
- 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: 360 ##这个值可以设置大一点,gitlab在启动时比较慢会处于一段时间的502,如果探测时间超过会进行重启,这样gitlab会一直处于重启状态
timeoutSeconds: 50
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 360
timeoutSeconds: 50
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
(2)通过kubectl apply更新yaml文件
kubectl apply -f gitlab.yaml
(3)查看postsql是否部署成功
kubectl get pod -n kube-ops
(4)显示如下则证明部署成功
NAME READY STATUS RESTARTS AGE
postgresql-7bf865566b-vxhpc 1/1 Running 0 143m
redis-56c8dc76cd-nnkll 1/1 Running 0 140m
gitlab-bbd77bfd-vthfj 1/1 Running 0 47m
访问gitlab的web页面
(1)查看宿主机暴露的端口
kubectl get svc -n kube-ops
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gitlab NodePort 10.20.68.137 <none> 80:30852/TCP,22:32353/TCP 54m
(2)通过节点ip+端口进行访问,出现如下画面则表示安装成功,最后进行登录 账号密码为 root admin321
创建项目
将服务器的公钥拷贝一份进gitlab中
最后克隆仓库即可
参考于https://mp.weixin.qq.com/s/z-9jAEKFgK2jFuv2yaREhQ 该原作者中yaml文件语法有问题,进行了简单的修改确保服务能正常运行
本文详细介绍了如何在Kubernetes集群中安装NFS服务,创建持久卷(PV)和持久卷声明(PVC),然后分别配置并部署GitLab所需的各种组件,包括PostgreSQL和Redis。最后,通过NodePort服务对外暴露GitLab的Web界面,实现远程访问。
1721

被折叠的 条评论
为什么被折叠?



