Skip to content

Latest commit

 

History

History
91 lines (56 loc) · 5.16 KB

File metadata and controls

91 lines (56 loc) · 5.16 KB

Top


可用性

ベース構成

ワークロードリソースを使ったPodの作成

Kubernetesでは、Podを直接作成するのではなく、Deployment、StatefulSet、DaemonSetなどのワークロードリソースを使用することが推奨されます。これらのリソースは高可用性とスケーラビリティを提供し、Podの自動回復とローリングアップデートを実現します。

  • Deployment: ステートレスなアプリケーションに最適。レプリカ数の管理とローリングアップデートを提供
  • StatefulSet: データベースなどのステートフルなアプリケーション用。順序付きデプロイと永続的な識別子を提供
  • DaemonSet: 各ノードで1つのPodを実行する必要がある場合(ログ収集、モニタリングエージェントなど)

これらのワークロードリソースにより、Podの障害時の自動回復やローリング更新による無停止デプロイが可能になります。

ALBおよびServiceによるロードバランシング

EKSでは、Application Load Balancer (ALB) とKubernetesのServiceリソースを組み合わせることで、高可用性なトラフィック分散を実現できます。AWS Load Balancer Controllerを使用することで、ALBを自動的にプロビジョニングし、複数のPodにトラフィックを分散できます。

  • Service(ClusterIP): クラスタ内でのPod間通信とロードバランシング
  • Ingress + ALB: 外部からのHTTP/HTTPSトラフィックの負荷分散

ALBによるヘルスチェック機能により、異常なPodへのトラフィック送信を自動的に停止し、可用性を向上させます。

カスタマイズ

Liveness/Readiness Probe

PodのヘルスチェックにはLiveness ProbeとReadiness Probeを設定することで、アプリケーションの健全性を監視し、自動回復を実現できます。

  • Liveness Probe: Podが正常に動作しているかを確認。失敗した場合はPodを再起動
  • Readiness Probe: Podがトラフィックを受け取る準備ができているかを確認。失敗した場合はServiceのエンドポイントから除外

これらのProbeにより、障害の早期検出と自動回復、トラフィックの適切な分散が可能になります。

安全なPod停止

Podの停止時にはpreStopフックとterminationGracePeriodSecundsを適切に設定することで、データの整合性を保ちながら安全に停止できます。

  • preStopフック: Pod停止前に実行される処理(データベース接続のクローズ、進行中のリクエストの完了待ちなど)
  • terminationGracePeriodSeconds: SIGTERMシグナル送信からSIGKILLまでの猶予時間
  • ローリングアップデート設定: maxUnavailableとmaxSurgeの調整による段階的な更新

これにより、サービスの中断を最小限に抑えながらPodの更新や停止が可能になります。

affinity

Pod affinityとanti-affinityを使用することで、Podの配置を制御し、可用性とパフォーマンスを向上させることができます。

  • Node Affinity: 特定のノードタイプやAZにPodを配置
  • Pod Anti-Affinity: 同一アプリケーションの複数レプリカを異なるノードやAZに分散
  • Pod Affinity: 関連するアプリケーション(例:WebサーバーとCache)を同一ノードに配置

これらの設定により、単一障害点を回避し、ネットワークレイテンシを最適化できます。

PDB

Pod Disruption Budget (PDB) を設定することで、ノードのメンテナンスやクラスタのスケーリング時にも最小限のサービス影響で運用を継続できます。

  • minAvailable: 常に利用可能であるべき最小Pod数
  • maxUnavailable: 同時に停止可能な最大Pod数

PDBにより、ローリングアップデートやノードメンテナンス時のサービス継続性が保証されます。

UpdateStrategy

DeploymentやStatefulSetのUpdateStrategyを適切に設定することで、アプリケーションの更新時の可用性を制御できます。

  • RollingUpdate: 段階的な更新でサービス継続性を維持
  • Recreate: 全Podを一度に停止してから新しいバージョンを起動
  • maxUnavailable/maxSurge: ローリングアップデート時の同時更新Pod数制御

適切なUpdateStrategyにより、アプリケーションの特性に応じた最適な更新方法を選択できます。


Top