こんばんは、ACS 事業部の埜下です。
KubeCon + CloudNativeCon Europe 2023 の 1 日目、「Availability and Storage Autoscaling of Stateful Workloads on Kubernetes」 というセッションについてお伝えします。
こちらのセッションは Shopify のステートフルサービスのデータの可用性と、ストレージをどのようにオートスケーリングしているかについて説明されたセッションです。
可用性
Shopify では検索エンジンとして Elasticsearch を使っており、Kubernetes に StatefulSet リソースとしてデプロイしているそうです。
Kubernetes ではデータの冗長性は提供されず、データを複製するのはアプリケーション次第です。
Elasticsearch では、データセットをプライマリシャードとレプリカシャードとして扱い、StatefulSet で複数用意された PV (Persistent Volume) にそれぞれ格納することで、データの可用性を担保するそうです。 かつ、地理的にも分散させることで自然災害などへの耐障害性を持たせているとのこと。
ストレージオートスケーリング
Shopify ではブラックフライデーなどのセール時期だけ大容量のストレージが必要になり、その時期が過ぎるとプロビジョニングされた大容量ストレージは不要になるため、ストレージのオートスケーリングを取り入れたようです。
スケールダウン
ステートフルシステムのスケールダウンは簡単な作業ではないそうです。
StatefulSet 内の Pod Template で用意したストレージは容量を下げることができないため、ストレージオートスケーリング用のカスタムコントローラを作成したそうです。 カスタムコントローラは外部公開はされていないとのこと。
このカスタムコントローラは StatefulSet で定義されたストレージサイズを見て、対象の PVC と Pod を削除したあと、指定されたサイズで PV を再作成することでスケールダウンを実現しています。
スケールアップ
スケールアップは StatefulSet のストレージサイズを大きくするだけで、Kubernetes がストレージを拡張してます。
これは、PV を提供する StorageClass の allowVolumeExpansion
が有効になっている場合に使えます。
そのため、スケールダウンのようにカスタムコントローラは使わなくてもよかったそうです。
スケールアウト
スケールアウトの場合は StatefulSet の Replicas
に大きな値を設定するだけで Pod と PV、PVC が増えます。
簡単ではありますが、本来必要なのはストレージだけなのに、Pod も増えるためコンピューティングリソースも増加することに注意が必要です。
スケールアップとスケールアウトは費用対効果を見て、どちらを採用するか検討してね、とのことでした。