とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

オンプレミスでCircleCI Serverを動かそう(その1) ツールのインストール編

CircleCIを利用することで、お手軽にCIを開始できることは、過去のエントリーでも繰り返し紹介してきました。しかし機密保持等の事情から、クラウドサービスを利用できない環境もあるのではないでしょうか。

こうしたケース向けに、CircleCIではオンプレミス版であるCircleCI Serverを提供しています。CircleCI ServerはKubernetes上にデプロイするアプリケーションです。その構築手順はドキュメントにまとめられているのですが、このドキュメントはAWS/GCPの両環境を併記していたり、やや冗長な手順が混在する都合上、全体的に見通しが悪くなっています。また言葉が足らないせいで、初見では理解しづらい箇所もいくつか存在します。

そこで本ブログでは、AWSのEKSクラスター上にCIrcleCI Serverを構築するための最短手順*1を、Step by Stepでわかりやすく紹介します。なおインストールするバージョンは、CircleCI Server 3.4.1を対象としています。

必要なもの

事前に、以下のものを用意してください。Route53上のゾーンはCircleCI Serverに必須ではありませんが、ExternalDNSを使うといくらか楽ができるため、もしも他の権威サーバーを利用している場合は、サブドメインを作成して委任しておくのがお勧めです。

  • AWSアカウント
  • GitHubアカウント
  • 独自ドメイン
  • 上記ドメインのRoute53上のゾーン
  • CircleCI Serverのライセンス

必要なツールのインストール

まず構築作業を行う環境を整えます。今回筆者は、AWS EC2上にUbuntu 20.04の作業用インスタンスを新規で用意しました。もちろん、既に手元のPC上にAWSやk8sを操作する環境が用意されている方は、それをそのまま使っても構いません。

作業環境には、以下に挙げるツールをインストールしてください。

AWSCLI

手順に従い、awsコマンドをインストールします。なおEC2の公式Ubuntuマシンイメージには、デフォルトでunzipコマンドがインストールされていないため注意してください。

$ sudo apt update && sudo apt install -y unzip
$ cd && curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ rm -rf aws awscliv2.zip

今回はバージョン2.5.6を使います。

$ aws --version
aws-cli/2.5.6 Python/3.9.11 Linux/5.13.0-1021-aws exe/x86_64.ubuntu.20 prompt/off

インストール後は、EKSクラスターやIAMユーザーの作成が可能なアカウント*2のプロファイルを設定しておいてください。今回はCircleCI Server構築作業専用の環境を用意していますので、以下のコマンドでデフォルトプロファイルを作成しました。

$ aws configure
AWS Access Key ID [None]: (アクセスキーID)
AWS Secret Access Key [None]: (シークレットアクセスキー)
Default region name [None]: ap-northeast-1
Default output format [None]: json

eksctl

手順に従い、EKSクラスターの作成を簡単に行うラッパーコマンドであるeksctlをインストールします。

$ cd && curl -L "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz
$ sudo install -o root -g root -m 755 eksctl /usr/local/bin/eksctl
$ rm -f eksctl

今回はバージョン0.93.0を使います。

$ eksctl version
0.93.0

kubectl

手順lに従い、kubectlコマンドをインストールします。

$ cd && curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
$ rm -f kubectl

kubectlはバージョン1.19以上が必要です。今回はバージョン1.23を使います。

$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}

Helm

手順に従い、k8sのパッケージ管理システムであるHelmをインストールします。

$ curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Helmはバージョン3.4.0以上が必要です。今回はバージョン3.8.2を使います。

$ helm version
version.BuildInfo{Version:"v3.8.2", GitCommit:"6e3701edea09e5d55a8ca2aae03a68917630e91b", GitTreeState:"clean", GoVersion:"go1.17.5"}

KOTS

Replicatedアプリケーションの管理を行う、kubectlのプラグインであるKOTSをインストールします。

$ curl -fsSL https://kots.io/install | bash

KOTSはバージョン1.65.0以上が必要です。KOTSとk8sクラスターとのバージョン互換性には注意してください。KOTS1.65.0以上が必須ということは、k8sも1.20以上が必須となります。なお今回はKOTSバージョン1.69.0、EKSバージョン1.21を使います。

$ kubectl kots version
Replicated KOTS 1.69.0

Terraform

IaCツールであるTerraformをインストールします。TerraformはCircleCI Server本体ではなく、ジョブを実行するためのNomadクラスターの構築に利用します。なお公式の手順ではリポジトリ鍵の追加にapt-keyコマンドを使用していますが、apt-keyは既に廃止予定となっており、使用は推奨できないコマンドです。そこで以下の手順では、独立したGPGキーリングに変換した上で、APTラインと紐づける方法を採用しています。

$ cd && curl -fsSL -o terraform.key https://apt.releases.hashicorp.com/gpg
$ sudo mkdir /usr/local/share/keyrings/
$ sudo gpg --no-default-keyring --keyring /usr/local/share/keyrings/terraform-keyring.gpg --import terraform.key
$ echo "deb [arch=amd64 signed-by=/usr/local/share/keyrings/terraform-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/terraform.list
$ sudo apt update && sudo apt install -y terraform
$ rm -f terraform.key

Terraformはバージョン0.15.4以上が必要です。今回はバージョン1.1.8を使います。

$ terraform --version
Terraform v1.1.8
on linux_amd64

これで必要なツール一式が揃いました。次回は実際にS3バケットやEKSクラスターなどを作成していきます。

*1:オンプレミスと言いつつ、プラットフォームはクラウドを利用します。オンプレミス=プライベートな環境、程度に思っておいてください。

*2:おそらく普段利用している、Administrator権限のあるアカウントになるでしょう。