はじめに
マイクロアド24年新卒インフラエンジニアの齊藤(id:saitoperf)です。 今回は、インフラ研修やその後の業務で学んだ「サーバ構築・運用周りの技術スタック」を紹介します。
マイクロアドのインフラエンジニアは現在9名で、各々得意な領域はありますが、基本的にはラックマウントや配線といった物理的なタスクから、監視基盤やミドルウェアの構築・運用までの一連に対応できます。 インフラ研修では、まずは座学やハンズオンを通して、チームメンバー全員が知っているような基礎的な知識をインプットしました。
どのようなインフラ基盤を使っているのか?
マイクロアドでは、データセンタで運用しているベアメタルサーバ1に加えて、AWS、Google Cloud、オンプレミス上で構築したOpenStackの環境をインフラ基盤として使っています。 また、KaaS (Kubernetes as a Service) の基盤としてRancherを使用しています。
ベアメタル(MAAS)
マイクロアドでは、データセンタで約1,600台の物理サーバを運用しています。 これらのベアメタルサーバを使った基盤には、主に「広告配信システム」と「データプラットフォーム」が乗っています。 これらのシステムは、レイテンシを限りなく削る必要があったり、膨大な量のデータをサーバ間で送受信する必要があったりと、VMにおけるパフォーマンスのゆらぎを許容できないためベアメタル基盤を使用しています。
サーバやネットワーク機器の選定、ラッキング、配線のような物理的な作業もインフラチームの担当領域です(搬入する量が多い場合は、ラッキングまで業者に依頼することもあります)。 OJTでは、物理サーバを新たに30台搬入する業務を経験しました。 データセンタで運用しているサーバには、基本的に1台に対して3本のLANケーブル(1つはIPMI用で残りの2つはサービス用)を接続するため、ケーブルだけで90本となりラベリングだけでも一苦労でした。 ここでは、美しい配線のためには、LANケーブルの長さやラック上の配置位置を事前に設計しておくことが非常に重要だと学びました。
ラッキングと配線が完了して、BIOSとIPMIの設定をすると、MAASに自動登録されます。 MAASはMetal as a Serviceをオンプレ上で構築するためのOSSで、MAASを使うとブラウザ上からベアメタルサーバを管理することができます。
IPMIとMAASに関する記事はこちら。
developers.microad.co.jp developers.microad.co.jp
AWSとGoogle Cloud
これらのパブリッククラウドは、主にコーポレートサイトや全社で使うような社内サービスといった外部からアクセスされるようなサービスを乗せる基盤として使用しています。 広告配信システム以外の新規事業のインフラは基本的にGoogle Cloudを使って行く方針ですが、AWSと親和性の高いプロダクトの場合はAWSを選定しています。
OpenStack
OpenStackは、クラウドコンピューティング基盤を作るためのOSSで、AWSやGoogle Cloudのようなクラウドをオンプレミスで構築することができます。 マイクロアドでは、データセンタのベアメタルサーバを数台使用してOpenStackの基盤を作っています。 検証用サーバなどの特段高い負荷がかからなかったり短いレイテンシを要求しないようなサーバは、OpenStack上に構築してコストを削減しています。
Rancher
Rancherは、Kubernetesクラスタをブラウザや専用のCLI、APIを用いて構築・管理するプラットフォームで、Kubernetesに精通してなくても簡単にクラスタを構築・管理できます。 他にも、複数のクラスタを同一のUIで管理できたり、ユーザ・グループごとに各クラスタのリソースに対するアクセス制御もできるといったメリットもあって利用しています。
マイクロアドでは、主にデータ基盤周りのミドルウェアがRKE2(Kubernetesディストリビューション)クラスタ上で動作しています。 また、インフラチームではコスト削減の観点から、使用率の低いサーバをKubernetes上に移行する案が出ており、今後さらなる活用が見込まれています。
どのように構成管理しているのか?
これらのインフラ基盤を効率よく管理するためには、構築の自動化やシステムの監視が必須になります。 マイクロアドでは主にTerraformとAnsibleを構成管理ツールとして使用しています。 過去には他の構成管理ツールも使用していましたが、現在はこの2つに落ち着いています(もちろんMakefileも大いに使われています)。
また、マイクロアドではGitHub Enterprise ServerでTerraformやAnsibleのコードを管理しており、インフラチーム内でもコードレビューの文化が根付いています。
Terraform
Terraformは、特定のプラットフォームに対してリソースを作るツールになります。 例えば、AWSに対してEC2インスタンスやVPCを作成するといった作業をコード化することができます。
マイクロアドでは、広告配信システム以外の新しいプロダクトに関してGoogle Cloudを利用しており、そのインフラの管理にTerraformを使用しています。 そのため、GitHub Enterprise Server上で管理しているTerraformコードを見ることで、プロダクトのインフラ構成が一目で分かるようになっています。 現状では、MAAS、OpenStack、RancherではTerraformを使用していませんが、Terraformにはこれらのプロバイダも用意されています。 そのため、いずれはこれらの基盤に対してTerraformを活用して、さらなるIaC化に取り組んでいく予定です。
Ansible
Ansibleは、Terraformと比較してよりレイヤの低いタスクを得意とする構成管理ツールです。 例えば、対象サーバにパッケージをインストールしたり、デーモンを起動したりするような事ができます。 現在は主にバージョン2.9と2.12を使用しており、2.16への移行を進めています。 また、現在マイクロアドではUbuntuへの統一が進められていますが、まだCentOSを使用しているサーバも存在するため、OSやOSのバージョンを判別して適切なPlayBook2を実行するようにしています。
AnsibleのエコシステムとしてAnsible AWXとAnsible Moleculeがあります。 これらはAnsibleをより便利にするツールで、マイクロアドでも使用しています。
- AWX
Ansibleの実行をブラウザ上で実施できるツール - Molecule
DockerやVagrantのような仮想化機構を使って、Ansibleロールのテストを1つのサーバで実施するツール
詳しくはこちら。
developers.microad.co.jp developers.microad.co.jp
CI/CDについて
CI/CDにはJenkinsを使用しています。 マイクロアドでは、Controllerを1台、Agentを4台でJenkinsを構築しており、GitHub Enterprise Serverと連携させて使っています3。 Jenkinsは開発部全体で使われているため、Agentのリソースが枯渇しないように運用において気を使っています。 インフラチームでは、主に以下の用途でCI/CDを使用しています。
- Ansibleの自動テスト
- 公開鍵の配布
- ローカルDNSの更新
ネットワーク勉強会(おまけ)
現在進行形で、毎週1時間ほどマイクロアドのネットワーク基盤を紐解いていく勉強会を開いてもらっています。 ここでは、ネットワークの基礎を振り返りつつ、レイテンシセンシティブな広告配信システムを実現するための設計やチューニング方法といった応用的なことを教わります。
- サーバルームの設計:どの位置にどのサーバを設置すると配線や管理がしやすいなど
- ネットワークトポロジの説明(Spine/Leaf)
- L3 DSR を実現するためのファイアウォール設定
- AS、BGPについて
このように、参考書には書かれていないような運用面の話が聞けてとても楽しいです。
おわりに
研修ではこれらの他にも、ロードバランサの操作や証明書の発行・登録などについて教わりました。 また、配属当初は課題図書という形で研修の隙間にネットワークやLinuxの基礎を自由に学習する時間が与えられ、インフラエンジニアとして知っておくべき基礎知識を学習することができました。
インフラチームでは、物理的なレイヤから、アプリ開発一歩手前までのレイヤを幅広く扱っているので、様々なレイヤが好きという方にはピッタリの環境だと思っています。 今回紹介したツールの他にも、研修では教わりませんでしたがデータ基盤周りの技術を扱っていたりと、少人数のチームながら触れる技術は多岐に渡るので、チャレンジングな環境だと感じています。 また、ベアメタル、プライベートクラウド、パブリッククラウドといった幅広いインフラ基盤を運用できる事にもとても魅力を感じています。
個人的に、MAASやOpenStackをTerraformで管理したり、KubernetesのCluster API4を使ってMAASやOpenStackをRancherの支配下に置いたりと、興味のあることは沢山あります。 マイクロアドでは1on1などを通して、このように挑戦してみたいことや興味のあることを気軽に上司に話せるような環境ですので、好奇心を絶やさず色々学んでいきたいです!
(隙間時間で取り組んだ課題図書です。)
新卒インフラエンジニア絶賛採用中
マイクロアドでは技術への探究心があり、最新の技術・動向について積極的に学び活かす意欲を持った仲間を募集しています! またインフラエンジニアだけでなく、サーバサイド、機械学習エンジニアなど幅広く募集しています! 気になった方は以下からご応募ください!
- 本記事では、ミドルウェアやアプリケーションを仮想化機構(VMやコンテナ等)上で動かしてないサーバをベアメタルサーバと呼んでいます。↩
- PlayBookは、Ansibleで実行する具体的な処理内容を記載したファイルです。例えば、aptでパッケージをインストールする処理や、ターゲットのサーバにファイルをコピーする処理などを記載できます。↩
- JenkinsはControllerとAgentというコンポーネントから構成されており、Controllerがジョブのスケジューリングやユーザインタフェースを担っており、Agentがジョブの実行を担っています(参考)。↩
- Cluster APIは、クラスタの作成、アップグレード、スケーリング、削除などを自動化するツールセットで、異なるインフラ環境でも一貫した方法でクラスタ管理ができるようになります。↩