最近のブログ投稿で、SlackエンジニアリングはChefインフラストラクチャの大幅な改善について詳述している。これはサービス、データベース、アプリケーションを実行する何万ものEC2インスタンスを管理するもので、最近、単一のChefスタックから、より弾力性のある、シャーディングされたインフラに移行した。
新しいアーキテクチャに移行するにあたり、Slackは多くの制限、すなわち以前のセットアップで困難であった以下の領域を解決することを望んだ。
-
ノードにシャードを割り当てる
-
隣接ノードの発見
-
Chefを検索する
-
クックブックのアップロード
以前の設定では、Slackは3つの環境にわたって単一のChef stackを持っていた。Sandbox、Development、Productionである。このアーキテクチャは、変更が環境間で同時にデプロイされ、スタックに問題があればインフラ全体に影響を与える可能性があるため、リスクがあった。システムはクックブックの更新を処理するためにDishPigという名前のプロセスを使い、これは毎時トリガーされた。
エンジニアリングチームはこれらの制限に対処するためにいくつかの重要な変更を加えた。まず、複数のChefスタックを作成して負荷を分散し、システムの回復力を確保した。新しいインスタンスはAWS Route53 Weighted CNAMEレコードを使用して特定のシャードに割り当てられる。チームはまた、開発環境と本番環境のChefインフララクチャを別々のスタックに分けた。
新しいシャードインフラにおけるノード発見の課題を解決するために、チームはサービス発見のためにConsulを使用し始めた。これはNebulaオーバーレイネットワークとの循環依存を避けるために慎重な実装を必要とした。チームはカスタムChefライブラリ関数を開発し、様々な条件に基づくノード検索を容易にし、以前のChef検索機能を効果的に置き換えた。
同社はまた、複数のChefスタックを横断して検索する機能を維持するために、Shearch(Sharded Chef Search)と呼ばれる新しいサービスを作成した。このサービスは異なるシャード間で実行されたクエリの結果を統合する。また、従来のChef Knifeコマンドを置き換えるGnifeという新しいツールを開発し、複数のシャードにわたる操作を可能にした。
チームはDishPigシステムをChef Librarianに置き換えた。このサービスはクックブックのバージョン管理と環境更新を独立して管理し、より制御されたデプロイを可能にする。変更がマージされると、GitHub Actionsはリポジトリの完全なコピーを含むtarballをビルドし、クックブックのバージョンはタイムスタンプベースのフォーマット(YYYYMMDD.TIMESTAMP.0)を使って更新される。
Chef Librarianは環境を特定のバージョンに更新し、環境を相互に照合するためのAPIエンドポイントを提供する。Chef Librarianを使うことで、Slackは本番環境に昇格させる前にサンドボックスと開発環境で変更をテストでき、問題のある変更がすべての環境に同時に影響するリスクを減らすことができた。このサービスはより良い追跡と可視性のためにDynamoDBに成果物のバージョンとデプロイ情報を保存する。
Slackアプリは、Gitのコミット情報を使って適切なチームメンバーを特定し、タグ付けすることで、変更が環境にプロモートされたときにユーザーに通知する。KubernetesのCronJobは、問題が検出された場合にプロモートを防止するためのセーフティチェックで、環境間のバージョンのプロモートを処理する。
SlackはChefロール(バージョン管理できない)のリスクを、基本情報とランリストに絞り込むことで最小化した。ロールは対応する環境が更新されたときだけ、関連するChefスタックにアップロードされる。
SlackはChefインフラのさらなる改善を検討している。一つの可能性は、AWSのアベイラビリティゾーンによって本番Chef環境をセグメント化することで、変更のデプロイをよりきめ細かく制御できるようになる。彼らはChef PolicyFilesとPolicyGroupsの採用も検討しているが、これは現在のセットアップを大きく変えることになるだろう。
Chefの人気は2010年代半ばのピークと比べると低下しているが、これはAnsibleや他のクラウドネイティブなソリューションのような代替ツールの台頭による可能性がある。業界全体のコンテナ化へのシフトは、多くの組織の構成管理へのアプローチを変え、多くの組織が代わりにDockerとKubernetesを採用した。このツールが2020年にProgress Softwareに買収されたことも、長期的な採用に影響を与えたかもしれない。
しかしChefは、特に既存のChef実装やChefのアプローチに適した特定のユースケースを持つ組織の間で、強固なユーザーベースを維持している。