Member-only story

GKEのベスト・プラクティス :可用性の高いクラスターの設計と構築(後半)

GKEのクラスター設計についての記事です。長いので前半と後半の二回に分けて投稿します。今回は後半です。

gavin.zhou
Mar 1, 2022

Correctly set up your deployment

アプリケーションはそれぞれ異なる特徴を持っています。あるものはバッチワークロード、あるものはステートレスなマイクロサービス、あるものはステートフルなデータベースをベースにしています。アプリケーションの制約をKubernetesに認識させるために、Kubernetes Deploymentsを使ってワークロードを管理することができます。Deploymentは望ましい状態を記述し、Kubernetesのスケジュールと連動して実際の状態を望ましい状態に合わせて変更します。

Is your application stateful or not?

あなたのアプリケーションはステートフルですか、それともそうではありませんか?

データベースなど、セッション間で状態を保存する必要があるアプリケーションであれば、ステートフルなアプリケーション特有の特性を適切に処理する方法で1つ以上のポッドを管理・維持するKubernetesコントローラであるStatefulSetの使用を検討してください。これは、ReplicaSetsやDeploymentsのようなポッドを管理する他のKubernetesコントローラと似ています。しかし、Deploymentsとは異なり、StatefulsetはPodが交換可能であることを前提としていません。

状態を維持するために、StatefulSetにはPersistent Volumes も必要で、ホストされたアプリケーションが再起動時にデータを保存・復元できるようにします。Kubernetesは、Cloud Storageの上の抽象化レイヤーとして、Storage Class、Persistent Volumes、Persistent Volume Claimsを提供しています。

Understanding Pod affinity

ポッドアフィニティについて

すべてのレプリカを同じノードでスケジューリングしたいですか?そのノードが故障したらどうなるでしょうか?一度にすべてのレプリカを失ってもいいのでしょうか?KubernetesのPodアフィニティとアンチアフィニティのルールを使えば、Podとそのレプリカの配置をコントロールすることができます。

単一障害点(Single Point of Failure)を回避するために、Pod anti-affinity を使用してKubernetesに同一ノード上にPodを配置しないように指示します。ステートフルなアプリケーションの場合、特に正常に動作するために最低数のレプリカ(つまりクォーラム)を必要とする場合、これは重要なコンフィグレーションとなります。

--

--

No responses yet