fbpx

GitLab Runnerをkubernetes上でラフに動かしてみよう #gitlab #kubernetes #gitlab-jp #developer #devops

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

GitLab Runnerをkubernetes上でラフに動かしてみよう

GitLab Runnerのinstall方法はいろいろありますが、本記事ではkubernetes(以降k8s)上へのinstallについて記載します。
k8s上で簡単にGitLab Runnerを用意して使えるようにしてみましょうという感じのラフな記事です。

今回はAzure Kubernetes Service(以降AKS)を用いて作成したk8sクラスタ上に行います。
また、簡単にですがGitLab Runnerをinstallする際に利用するhelmの説明も少し行います。

GitLab Runnerをk8sへinstallする方法

https://docs.gitlab.com/runner/install/kubernetes.html

GitLab Runnerをk8sクラスタにデプロイする公式の方法はhelmを利用したinstallになります。
helmはkubernetesのためのパッケージマネージャです。

事前準備

  • k8sクラスタ(≒GitLab Runnerが動作するpod)から、GitLabホストへネットワーク到達可能
  • kubernetes 1.4以上で Beta APIsが有効
  • kubectlが利用できるクライアントでk8sクラスタへ認証済1
  • helm clientが利用できる環境2

使用環境

  • GitLab CE 12.8.2
    • 今回はAzure上のVMにinstallされたものを利用します。
  • AKS
    • Azureが提供しているフルマネージドkubernetesサービスを利用します。
    • kubernetesのバージョンは1.15.7
  • helm client v3.1.1

前置きが長くなりましたが、いざinstallしてみましょう。

GitLab Runnerをk8s上にinstall

以降の手順はAzure Cloud Shellを起動し実施します。

k8sクラスタを用意

本記事ではAKSのドキュメント紹介とし説明は割愛します。

https://docs.microsoft.com/ja-jp/azure/aks/kubernetes-walkthrough-portal

こちらの「AKS クラスターを作成する」をご参照ください。

ちなみにですが、EKS/GKEについてはGitLab上からk8sクラスタの作成を行うことも出来ますよー。

https://docs.gitlab.com/ee/user/project/clusters/add_remove_clusters.html

クラスタへの認証

こちらはAKS固有の接続方法となります。

https://docs.microsoft.com/ja-jp/azure/aks/kubernetes-walkthrough-portal

こちらの「クラスターに接続する」をご参照ください。
k8sクラスタへの認証情報が更新され、k8sクラスタへ接続すること(kubectlで操作すること)が可能になります。
興味がある人は ~/.kube/configを覗いてみるといいでしょう。

namespaceを作成

今回はgitlab namespaceにGitLab Runnerをinstallします。
既に存在しているnamespaceにinstallする場合はこの手順はskipしてOKです。

$ kubectl create namespace gitlab
namespace/gitlab created

GitLab runnerのchartが利用できるhelm repositoryを追加する

$ helm repo add gitlab https://charts.gitlab.io

repository追加後は以下のコマンドでhelmのrepositoryのlistを確認できます。

$ helm repo list
NAME    URL
gitlab  https://charts.gitlab.io

これによりhttps://charts.gitlab.ioに配置されているchartの一覧を介して操作を行うことが出来ます。

設定パラメータを投入する

例えば、GitLab Runnerのコンテナにどのくらいcpu/memを割り当てるかは、それぞれ動作させたい環境によって異なってくると思います。
helm chartは、こういった環境によって異なる値をパラメータとして投入できるように基本的に作られています。(作成者によるのであくまで基本的にです)

https://gitlab.com/gitlab-org/charts/gitlab-runner

GitLab Runnerのhelm chartは上記になりますが、values.yamlがその設定ファイルになります。
まずはこのパラメータをファイルとして取得します。

$ helm inspect values gitlab/gitlab-runner > values.yaml

そのあと、values.yamlの以下の部分を設定します。

以下に指定する値は、GitLabにログインしAdmin Area -> Runnersで表示される画面に表示されています。

gitlabUrl : "https://abcabcabcabc/"

-> 2. Specify the following URL during the Runner setup: に表示されている値を指定

runnerRegistrationToken : "xxxxxxxxxxxxxx"

-> 3. Use the following registration token during setup: に表示されている値を指定

あとはRBACの作成を有効にします。

rbac
created:
-> trueに設定

いざinstall!

先ほど編集したvalues.yamlを指定してGitLab Runnerのinstallを行います。

$ helm install -n gitlab gitlab-runner -f values.yaml gitlab/gitlab-runner
NAME: gitlab-runner
LAST DEPLOYED: Thu Mar 12 06:07:47 2020
NAMESPACE: gitlab
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://abcabcabcabc"

gitlabUrlに指定した値がおかしい(GitLabサーバへネットワーク的に到達できなかったなど)場合は、NOTES:にところにWARNが表示されます。
ちなみに"-n gitlab"は名前ではなく、namespaceを指定するオプションです。

$ helm list -n gitlab
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
gitlab-runner   gitlab          1               2020-03-12 06:07:47.677491649 +0000 UTC deployed        gitlab-runner-0.14.0    12.8.0

確かにinstallされています。

$ kubectl get all -n gitlab
NAME                                               READY   STATUS    RESTARTS   AGE
pod/gitlab-runner-gitlab-runner-86c7c46ddd-7wnwp   1/1     Running   0          6m56s

NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/gitlab-runner-gitlab-runner   1/1     1            1           6m57s

NAME                                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/gitlab-runner-gitlab-runner-86c7c46ddd   1         1         1       6m57s

リソースもいくつか作られています。

GitLab <-> GitLab Runnerの連携を確認する

GitLabにAdminでログインし、AdminArea -> Runnersを見ると先ほどinstallしたRunnerが出てきます。

これでGitLabRunnerが利用可能になっています。

このRunnerにプロジェクトをenableにし、.gitlab-ci.yamlを作ってCI/CDを動かしてみます。

動きましたね。

最後に

今回は大まかなところを中心にk8s上にGitLab Runnerをinstallする方法を説明しました。

実際の運用にあたっては、values.yamlと睨めっこして、各種適切なパラメータを設定することが必要なのでご留意ください。
https://docs.gitlab.com/runner/install/kubernetes.html#additional-configuration
ドキュメントがしっかりしているので、設定項目の意味は上記である程度解説されていますし、values.ymlのコメントを見ていただければイメージは掴めるんじゃないかなと思います。
GitLab Runner関連のパラメータもあれば、k8s関連のパラメータ(コンテナのcpu/mem request/limitやpod affinityなど)もありますので、両方ある程度理解した上で利用するのが良いのかなと思います。
values.yamlに設定された値がどのように関係するかは、chartのtemplatesフォルダのyamlファイルを見ると分かりますので、興味がある人は覗いてみると良いでしょう。

なお、この記事を書いている時点では、例えばlivenessProbe/readinessProbeに設定する値はvalues.yamlで指定できず固定値になっています。(deployment.yaml参照)
values.yamlに外だしされていない値をどうしても変更したい場合はlocalにhelm chartをもってきて、独自にhelm chartを管理/運用すると良いでしょう。(ただ、メンテナンスは大変にはなると思います)

Happy Helming!

新規CTA