BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース PinterestにおけるKubernetesプラットフォーム導入

PinterestにおけるKubernetesプラットフォーム導入

原文(投稿日:2019/09/17)へのリンク

Pinterestのソフトウェアエンジニアチームは、同社がKubernetes採用時に導入したカスタムツールとリソースを公開した。独自のプラットフォーム・アズ・ア・サービス(PaaS)と関連ワークフローの構築を検討中のチームにとっては、コンテナオーケストレーションシステムによってワークロード管理を統一化する方法や、Kubernetsのワークロードモデルがカスタムリソース定義によって拡張可能であること、堅牢なエンドツーエンドのテストパイプラインがレグレッションを回避する上で重要であること、などの情報が特に参考になるだろう。

ユーザが情報を保存、あるいは"ピン留め"可能なソーシャルメディアWebおよびモバイルアプリであるPinterestには、40億の掲示板上に2,000億以上のピン留め情報を持つ巨大なユーザベースがある。このようなボリュームとインフラストラクチャスタックの成長に伴って、Pinterestチームは、運用上の課題をいくつか抱えるようになっていた。特に問題として挙げられていたのは、同社のエンジニアがワークロード起動時に統一されたエクスペリエンスを持っていないことと、膨大な数の仮想マシンの管理がインフラストラクチャチームに大きなメンテナンス負担になっていたことだった。さらに、同社のシステムが分離していることから、どのリソースがリサイクル可能かを決定するようなインフラストラクチャガバナンスツールの構築も困難だった。この話は、Kubernetesワークフローを簡略化したAirbnbの経験を連想させる。同社チームは、サービスの信頼性、インフラストラクチャの効率性、開発者の生産性という3つの重要テーマにおいて、これらの問題への対処を試みることにした。

筆頭執筆者のLida Li氏とチームによると、Cloud Management Platformチームのこのプロジェクトは、2017年、同社が運用ワークロードをDocker化して、さまざまなコンテナオーケストレーションシステムの評価を行ったことから始まった。Kubernetesのネイティブワークロードモデルは、デプロイメント、ジョブ、デーモンセットをカバーしているが、同社チームにはさらなるワークロードのモデル化が必要だった。ユーザビリティの問題がKubernetes導入の"大きな障害"であるとともに、同一のKubernetesクラスタ上でラ異なるランタイムバージョンをサポートすることが困難であった、と氏らは述べている。氏らの選んだ解決策は、カスタムリソース定義(CRD)を設計することだった。これは当時プレリリースのデプロイメントワークフローで、新しいKubernetesesベースのCompute Platformがアーリーアダプタとして使用可能だった。チームはこのワークフローを同社のCI/CDプラットフォームに統合して、同社のエンジニア向けに、よりクリーンなサービスを開発したのだ。

Pinterest Kubernetesパイプライン
Pinterest CRD(イメージはPinterest Engineering Blogより引用)のデプロイ方法の概要

Pinterestが同社のCRD設計で達成した目標は、Kubernetsの採用を検討する他のエンジニアにも有益なものだった。まず同社では、さまざまなKubernetesネイティブリソースを単一のワークロードとして機能させたいと考えていたが、これによって同社のエンジニアたちは、同じことをばらばらに実施する必要がなくなった。第2に、サイドカーや初期化コンテナ、装置変数(equipment variable)、ボリュームを仕様に加えることで、アプリケーションに必要なランタイムサポートを追加したいと考えていた。そして最後に、これらの定義が、仕様の調整やイベントレコードの更新などといった、ネイティブリソースのライフサイクル管理に使用された。このような進化によってエンジニアのワークロードは大幅に低減し、エラーのリスクも低くなったと、Pinterestチームは考えている。これはShopifyチームが昨年のQCon New Yorkで公開した体験を連想させる。

同様の問題を解決する上で、エンジニアが考慮すべき点のひとつは、アプリケーション間の矛盾を回避し、メンテナンスやサポートの負担を軽減するために、Pinterestでは、Podレベルのサイドカーからノードレベルのデーモンセット、さらにはVMレベルのデーモンまで、すべてのタイプのワークフローを同社のインフラストラクチャチームがデプロイしていることだ。2019年3月からプラットフォームをKubernetesのみで運用しているTinderでは、その逆のアプローチを採用して、インフラストラクチャの責任を組織内すべてのエンジニアが共有している。

もうひとつ考慮すべき点は、Pinterestチームがすべてのクラスタにテストを導入して、ネイティブなKubernetesテストインフラストラクチャ上にエンドツーエンドのパイプラインを構築していることだ。これにより、Kubernetesネイティブワークフローモデルを超越することのリスクが軽減されると同時に、エンジニアたちのことばによれば、運用前に多くのレグレッションを捉えることが可能だ。Pinterestチームは、同社のデプロイワークフローも、この新たなCI|CDプラットフォームに統合している。

この記事に星をつける

おすすめ度
スタイル

BT