はじめに
CI/CDのパイプラインをGitLabRunnerのKubernetes Executor(EKS)を使って実行する方法になります。
GitLab RunnerをEKSにインストールをします。
※EKSクラスターは構築済みの前提です。
これを利用する背景や課題だったこと、メリットなど
以前はec2上にkopsを構築、スケールアウトにはSpotinstを利用して、Runnerを利用していましたが、メンテナンスのコスト高、安定感に欠けていました。
今回はAWSの完全マネージド(EKS+Autoscale+Spotinstance)にすることによりメンテナンスの容易さ+安定化することが目的となります。
また、スポットインスタンスのワークロードでEC2 Auto Scalingを利用することにより、入札不要モデル(上限価格は設定不要、デフォルト値はオンデマンド価格)で、スポットインスタンスでも中断回数を大きく減らすことが可能で、パイプラインの中断を防ぎます。
作業の流れ
- k8s上にrunnerのnamespaceを作成
- GitLab runnerのchartが利用できるhelm repositoryを追加する
- Runnerの設定ファイルの取得と反映
- Runnerのinstall
1. k8s上にRunnerのnamespaceを作成
kubectlでEKSのクラスターに接続できる状態で、以下を実行します。
$ kubectl create namespace gitlab
namespace/gitlab created
2. GitLab Runnerのchartが利用できるhelm repositoryを追加する
gitlabのhelmリポジトリ追加します。
$ helm repo add gitlab https://charts.gitlab.io
追加されたか確認します。
$ helm repo list
NAME URL
gitlab https://charts.gitlab.io
3.Runnerの設定ファイルの取得と反映
以下を実行してvalues.yamlを作成します。
適宜values.yamlを修正します。
$ helm inspect values gitlab/gitlab-runner > values.yaml
$ vim values.yaml
以下、修正する必要がありそうな部分です。
Runnerが使うCPUやメモリもこのファイルで設定できます。
#GitLabのURL(Runnerを動かしているサーバのURL)
gitlabUrl:
#Gitlabから取得したトークン
runnerRegistrationToken:
#Runnerを動かす最大コンテナ数
concurrent:
#RBACの作成を有効
rbac:
create: true
4.Runnerのinstall
上記で作成した設定パラメータのyaml(values.yaml)を使ってhelmでinstallできます。
更新や削除する場合は以下の※を実行します。
$ helm install -n gitlab gitlab-runner -f values.yaml gitlab/gitlab-runner
※パラメータを書き換えで更新する場合(既に上記の手順でインストールしている場合は以下で上書き)
$ helm upgrade -n gitlab gitlab-runner -f values.yaml gitlab/gitlab-runner
※runnerの削除する場合
既にインストールされている場合は以下で削除
$ helm delete -n gitlab gitlab-runner
installされているか確認します。
$ helm list -n gitlab
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
gitlab-runner gitlab 1 2020-07-21 08:22:00.642993 +0900 JST deployed gitlab-runner-0.18.1 13.1.1
EKS上に展開されているか確認します。
$ kubectl get all -n gitlab
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-gitlab-runner-7bdc85b647-tggk9 1/1 Running 0 159m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab-runner-gitlab-runner 1/1 1 1 159m
NAME DESIRED CURRENT READY AGE
replicaset.apps/gitlab-runner-gitlab-runner-7bdc85b647 1 1 1 159m
参考
https://docs.gitlab.com/runner/install/kubernetes.html
https://www.creationline.com/lab/gitlab/33461