如何在KUBERNETES上轻松部署GITLAB

我最近花了一些时间研究如何构建CI / CD管道以自动化测试和部署。因为我正在用容器开发所有东西并使用Kubernetes来管理它的CI跑步者GitLab和最近与k8s的集成似乎是一个不错的选择。

在这篇文章中,我将介绍使用GitLab Runner获取GitLab所需的步骤,并在Kubernetes之上运行。

这篇文章中使用的所有清单都可以在这里找到

 

 

 

先决条件:

  1. 所有配置都假设部署到命名空间gitlab
  2. 此帖子中使用的域名是web的git.example.com和ssh的ssh-git.example.com。
  3. 所有pod都配置为没有任何持久存储。emptyDir: {}到处改变持久的东西。
  4. 大多数GitLab相关配置都是在gitlab / gitlab-deployment.yml中设置的,必须进行更改。

部署GITLAB

首先,我们将创建一个单独的命名空间并部署PostgreSQL和Redis实例。

kubectl create -f gitlab-ns.yml

kubectl create -f gitlab/redis-svc.yml
kubectl create -f gitlab/redis-deployment.yml


kubectl create -f gitlab/postgresql-svc.yml
kubectl create -f gitlab/postgresql-deployment.yml

PostgreSQL密码在postgresql-deployment.yml清单中设置。检查kubectl get pods --namespace=gitlab并等待所有豆荚准备就绪。在此之后,我们可以部署GitLab本身。

kubectl create -f gitlab/gitlab-svc.yml
kubectl create -f gitlab/gitlab-svc-nodeport.yml
kubectl create -f gitlab/gitlab-deployment.yml

由于我在裸机群集上部署它,我还没有任何负载均衡器,这就是为什么我有第二个服务清单。如果您在云中执行此操作 - 您可以跳过部署gitlab-svc-nodeport.yml

让我们测试到目前为止一切正常。要访问我们的GitLab实例,我们需要知道部署它的节点端口。它通常在您部署NodePort服务时打印:

> $ kubectl create -f gitlab/gitlab-svc-nodeport.yml
You have exposed your service on an external port on all nodes in your
cluster.  If you want to expose this service to the external internet, you may
need to set up firewall rules for the service port(s) (tcp:30836,tcp:31447) to serve traffic.

See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for more details.
service "gitlab-nodeport" created

如果您没有在某处写下来,您始终可以检查已部署的服务:

> $ kubectl describe svc gitlab-nodeport --namespace=gitlab
Name:           gitlab-nodeport
Namespace:      gitlab
Labels:         name=gitlab
Selector:       name=gitlab
Type:           NodePort
IP:             10.3.0.127
Port:           ssh 22/TCP
NodePort:       ssh 30836/TCP
Endpoints:      10.2.47.9:22
Port:           http    80/TCP
NodePort:       http    31447/TCP
Endpoints:      10.2.47.9:80
Session Affinity:   None
No events.

现在我们知道GitLab的Web界面在端口3144上可用。将浏览器导航到http:// any-of-your-kuberntes-node:31447 /并且看看 GitLab。

Gitlab主页

您可以使用登录,密码root或您在部署清单中设置的任何内容登录。真棒,下一步是配置入口,以便能够通过人类可读的URL访问它。

入口

Ingress是一组规则,允许入站连接到达群集服务。它可以配置为提供外部可访问的URL,负载平衡流量,终止SSL,提供基于名称的虚拟主机等服务。

我的配置主要基于kubernetes / contrib的官方示例 所有与入口相关的清单都位于ingress目录中。基本上,它只是几个文件:

  • default-backend.yml - 任何入口规则未处理DNS记录时提供的容器。
  • configmap.yml - 配置映射,包含我们要处理的端口和目标列表。
  • nginx-ingress-lb.yml - 基于Nginx的实际入口控制器,用于处理端口80,443,22上的流量
  • gitlab-ingress.yml - 我们的GitLab实例的入口规则
kubectl create -f ingress/default-backend.yml
kubectl create -f ingress/configmap.yml
kubectl create -f ingress/nginx-ingress-lb.yml
kubectl create -f ingress/gitlab-ingress.yml

在此之后并假设DNS已正确配置,我们应该能够访问http://git.example.com上的 GitLab 。

现在,让我们部署一个GitLab Runner来运行测试。

GITLAB RUNNER

GitLab Runner支持多个执行程序:virtualbox,docker + machine,docker-ssh + machine,docker,docker-ssh,parallels,shell,ssh。不幸的是,对本地Kubernetes执行器的支持现在正在进行中,尚未准备好。我花了几个小时试图让它工作没有成功。这就是为什么我们现在要使用简单的docker执行器。

由于大多数手册 都建议使用minio作为缓存服务器,因此我们可以部署一个。

kubectl create -f minio/minio-svc.yml
kubectl create -f minio/minio-deployment.yml

让我们确保pod正在运行:

kubectl get pods --namespace=gitlab

gitlab   minio-2719559383-y9hl2    1/1    Running   0   1m

它启动并运行后,我们需要检查日志以获取令牌和秘密:

> $ kubectl logs -f minio-2719559383-y9hl2 --namespace=gitlab
+ exec app server /export

Endpoint:  http://10.2.23.7:9000  http://127.0.0.1:9000
AccessKey: 9HRGG3EK2DD0GP2HBB53
SecretKey: zr+tKa6fS4/3PhYKWekJs65tRh8pbVl07cQlJfkW
Region:    us-east-1

Browser Access:
   http://10.2.23.7:9000  http://127.0.0.1:9000

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://10.2.23.7:9000 9HRGG3EK2DD0GP2HBB53 zr+tKa6fS4/3PhYKWekJs65tRh8pbVl07cQlJfkW

Object API (Amazon S3 compatible):
   Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
   Java:       https://docs.minio.io/docs/java-client-quickstart-guide
   Python:     https://docs.minio.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide

我们需要复制AccessKeySecretKey从此响应中保存。以后需要填充我们的跑步者。还有一件事需要用minio完成。我们需要创建一个桶。

要做到这一点,我们有2个选择。

首先是直接在文件系统上创建目录,如下所示:

kubectl exec -it minio-2719559383-y9hl2 --namespace=gitlab -- bash -c 'mkdir /export/runner'

其次是通过Web界面完成。为此,我们首先需要将minio移植到我们的机器上

kubectl port-forward minio-2719559383-y9hl2 9000:9000 --namespace=gitlab

然后将浏览器导航到http:// localhost:9000,使用我们拥有的密钥和密码登录,并创建一个名为runner的存储桶。

Minio网络界面

在我们实际部署我们的跑步者之前,我们需要在GitLab中注册它。我发现首先注册它然后将令牌保存到configmap更方便。

对于注册,我们需要获取GitLab自己的令牌。要获取它,请以root用户身份登录GitLab,然后导航到管理区域。然后转到Overview - > Runners并复制您的注册令牌

GitLab亚军页面

现在我们需要配置和注册跑步者。我们将使用kubectl run命令。它将创建部署,register在交互模式下使用参数运行默认命令。

> $ kubectl run -it runner-registrator --image=gitlab/gitlab-runner:v1.5.2 --restart=Never -- register
Waiting for pod default/runner-registrator-1573168835-tmlom to be running, status is Pending, pod ready: false

Hit enter for command prompt

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
http://gitlab.gitlab/ci
Please enter the gitlab-ci token for this runner:
_TBBy-zRLk7ac1jZfnPu
Please enter the gitlab-ci description for this runner:
[runner-registrator-1573168835-tmlom]: gitlab-docker-runner
Please enter the gitlab-ci tags for this runner (comma separated):
shared,specific
Registering runner... succeeded                     runner=_TBBy-zR
Please enter the executor: virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh:
docker
Please enter the default Docker image (eg. ruby:2.1):
python:3.5.1
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Session ended, resume using 'kubectl attach runner-registrator-1573168835-tmlom -c runner-registrator -i -t' command when the pod is running

> kubectl delete deployment/runner-registrator

回答完所有问题后,您应该在管理区域的跑步者列表中找到您的跑步者。单击它并复制生成的令牌并将其粘贴到gitlab-runner/gitlab-runner-docker-configmap.yml 另外,您需要填写有关您的minio安装的信息。

apiVersion: v1
kind: ConfigMap
metadata:
  name: gitlab-runner-docker
  namespace: gitlab
data:
  config.toml: |
    concurrent = 4
    check_interval = 1

    [[runners]]
      name = "gitlab-docker-runner"
      url = "http://gitlab.gitlab/ci"
      token = <GENERATED TOKEN>
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "python:3.5"
        privileged = true
        disable_cache = false
        volumes = ["/cache"]
      [runners.cache]
        Type = "s3"
        ServerAddress = "minio.gitlab"
        AccessKey = <YOUR MINIO ACCESS KEY>
        SecretKey = <YOUR MINIO SECRET KEY>
        BucketName = "runner"

最后一步是实际部署GitLab Runner本身。

kubectl create -f gitlab-runner/gitlab-runner-docker-configmap.yml
kubectl create -f gitlab-runner/gitlab-runner-docker-deployment.yml

就是这样,现在我们已经配置了GitLab并运行CI。为了测试它,我们可以导入测试库 并运行管道。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值