上一篇,简单的从????Gitlab CI/CD方法论中探索实践中大致了解Gitlab在CI/CD功能的基本介绍,现在我们通过在K8s集群内安装Gitlab
、Gitlab Runner
来为深入探索Gitlab持续集成做好前期准备,首先我们要在集群内安装Gitlab.
集群环境
K8s的集群版本为1.11.5
,CNI使用的是Flannel
, DNS为KubeDNS
☸️ ACK???? devops ~ ???? ???? k cluster-info
Kubernetes master is running at https://192.168.99.128:6443
Heapster is running at https://192.168.99.128:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://192.168.99.128:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-influxdb is running at https://192.168.99.128:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
☸️ ACK???? devops ~ ???? ???? k get nodes
NAME STATUS ROLES AGE VERSION
cn-beijing.i-2ze01 Ready master 1y v1.11.5
cn-beijing.i-2ze02 Ready master 1y v1.11.5
cn-beijing.i-2ze03 Ready master 1y v1.11.5
cn-beijing.i-2ze04 Ready <none> 1y v1.11.5
cn-beijing.i-2ze05 Ready <none> 1y v1.11.5
通过学习Github上一个开源项目Dockerized GitLab[1]在kubernetes上进行GitLab-CE的安装部署,在部署Gitlab的之前,我们需要先部署其依赖的Redis
和PostgreSQL
,然后才能正常的运行gitlab. 这个开源项目中资源配置清单使用的是ReplicationController
,这里我将修改使用Deployment
控制器:
配置Redis服务
以为redis服务是提供给Gitlab服务使用,并不需要暴露在集群外部,因此我们在gitlab<->redis之间调用的时候,采用内部通信的方式,准备redis的配置清单redis.deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: gitlab-redis # deployment的名字
namespace: devops # 部署在devops namespace里面
labels:
name: gitlab-redis
spec:
replicas: 1
template:
metadata:
name: gitlab-redis # 约定gitlab-redis的deployment的模板名
labels:
name: gitlab-redis
spec:
containers:
- name: redis # pod内redis的容器名
image: redis:5.0.9 #也可以使用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
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: gitlab-redis-svc
namespace: devops
labels:
name: gitlab-redis-svc
spec:
ports:
- name: redis
port: 6379
targetPort: redis
selector:
name: gitlab-redis
配置postgresql服务
与redis服务一样,我们准备postgresql服务的配置清单postgresql.deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: postgresql
namespace: devops
labels:
name: postgresql
spec:
template:
metadata:
name: postgresql
labels:
name: postgresql
spec:
containers:
- name: postgresql
image: sameersbn/postgresql # latest
imagePullPolicy: IfNotPresent
env:
- name: DB_USER
value: gitlab