はじめに
こんにちは。
aptpod Advent Calendar 2022 8 日目を担当する、SRE チームの柏崎です。
SRE チームは、 intdash のインフラ関連の業務はもちろんですが、自社のコーポレートサイトやオフィスのネットワーク等の運用など、いわゆる「社内 SE」的な業務も担当しています。
今回は、社内 SE 業務のうちの 1 つで、私がアプトポッドに入社して以来 8 年ほど面倒を見ている、GitLab の運用についてご紹介しようと思います。
GitLab 運用ノウハウ
ここでは、これまで長く運用してきた GitLab 運用の知見の一部をご紹介します。
※ 現在 GitLab は、Omnibus と呼ばれる deb/rpm パッケージでのインストールや、Helm chart での k8s へのインストールなど、様々なインストール方式が提供されていますが、アプトポッドでは当初からソースインストール方式を使い続けています。
利用するバージョンは 1 つ前
GitLab は、年 1 回のメジャーリリース、月 1 回のマイナーリリースがあり、都度様々な新機能が追加されています。
私は、「1 つ前のマイナーリリース」の最新を追いかけるようにしています。
GitLab は、バグフィックスやセキュリティフィックスが含まれるパッチリリースが頻繁に行われています。
最新リリースでは、不具合やアップグレードドキュメントの不備があることが多く、そういったものは後追いのパッチリリースで修正されていきます。
当初は最新リリースを追いかけていましたが、前述のような不具合等で切り戻す事も多く苦労しました。
1 つ前のマイナーリリースを使うことで、これにアップグレードする頃には大きな不具合は修正されていて、切り戻しはほとんど発生しなくなりました。
( こんな 1 行修正 MR を出したこともあります。)
ドキュメントをよく読む
アップグレード時に注意すべき点を把握するため、アップグレード手順だけではなく、インストール手順も含めてドキュメントをよく読むようにしています。
具体的には下記です。
- Installation from source
- Ruby, Go, Git, Node.js, Yarn などの必要バージョンに更新が無いか、インストール手順に更新が無いか、重点的に確認します。
- Installation system requirements
- Redis, PostgreSQL などの必要バージョンに更新が無いか確認します。
- Version-specific upgrading instructions
- バージョン毎に、アップグレード時の注意点が書かれています。
Ruby と Node.js
Ruby は rbenv、Node.js は nodenv を利用してインストールしています。
env 系を利用することで複数のバージョンを手軽に同居させられるので、Ruby や Node.js の必要バージョンが変わった際に、アップグレード作業時間外に事前に準備することができるようにしています。
Ruby のメモリアロケータ
GitLab のような Ruby on Rails なアプリケーションを長く稼働していると、メモリ断片化によるメモリ使用量の逼迫に悩まされると思います。
当初は定期的に Puma ワーカーや Sidekiq プロセスを立ち上げ直すことで対処していました。
メモリアロケータを jemalloc にした Ruby を利用するようにしてから、メモリ使用量の上昇がゆるやかになり、このような対処が不要になりました。
CI 環境
ついでに、CI 環境についても触れておきます。
GitLab は早くから CI サービスが統合されていて、私が GitLab 運用を担当するようになってからは、CI 環境の整備に力を入れてきました。
現在では、製品のアプリはもちろんのこと、プロジェクト独自のアプリも含めて、ほとんどのリポジトリで CI が実行されています。
実行基盤
Docker Machine で、GCP でプリエンプティブル VM インスタンスを利用し、低コストで運用しています。
CI は、ジョブ毎に n1-highcpu-4 (4 vCPU, 3.6 GB) のマシン上で実行され、最大 20 並列で動きます。
プリエンプティブル VM インスタンスを利用していることで、このような「つよつよ環境」を利用しても、月額 1 万強で済んでいます。
Docker Hub のミラーリング
CI は、ジョブごとに新規の環境で実行されるので、Docker Hub からのイメージの取得が都度行われます。
CI 実行基盤と同じネットワーク内に レジストリのキャッシュ を用意し、イメージ取得の高速化・トラフィックの抑制を行っています。
おわりに
いかがでしたでしょうか。
GitLab や CI 環境の運用は、「みんなの業務は俺が支えてるんだ」感を味わえるので、実は結構好きな業務です。
だいぶまとまりが無い内容になってしまいましたが、アプトポッドの GitLab・CI についてのご紹介でした。