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!