このプラクティスでは、Kubernetesクラスターでアプリケーションの可用性を向上させるための設定について学習します。
可用性(Availability)とは、システムが継続的に稼働し、利用可能な状態を維持することです。
CloudNativeなアプリケーションでは、以下の要素が可用性に影響を与えます。
- ネットワーク
- 可用性ゾーン
- Gateway
- 負荷分散
- K8s
- コントロールプレーン
- ノード
- ワークロード
- データ
- データベース
- キャッシュ
- ストレージ
ネットワークとデータについてはクラウドプロバイダーのベストプラクティスに従うことが一般的です。
K8sのコントロールプレーンはマネージドサービスを利用することで高い可用性を確保できます。ノードの可用性は、クラウドプロバイダーのインフラに依存しますが、オートスケーリングやKarpenterを利用することで向上させることができます。EKS Automode では Karpenter が使われています。
K8sのワークロードに関する設定は利用者が直接管理できる部分です。そのため、ワークロードの設定を適切に行うことで、アプリケーションの可用性を大幅に向上させることができます。
自身のGitHubアカウントに作成したcloudnative-practiceリポジトリにIssueを作成します。issueを作成するスクリプトを用意しているためそれを使います。
-
まずはリポジトリのルートから以下コマンドで
scriptsディレクトリに移動cd scripts -
環境変数に値を設定
export GITHUB_TOKEN={あなたのGitHubのPAT} export GITHUB_REPO={あなたのGitHubアカウント名}/cloudnative-practice
-
スクリプト実行
python create_issues.py availability
自身のGitHubアカウントのcloudnative-practiceリポジトリを開き、Issuesタブに可用性のラベルがついたissueが作成されていることを確認してください。
以下タイトルのissueを対応してください。issueを対応する流れはこちらを参照してください。コーディングルールはこちらを参照してください。もし詰まってしまった場合、exampleディレクトリにサンプルコードを用意していますので参考にしてください。
- 基本的な可用性設定
- Podにヘルスチェックを設定する(probe)
- Podにgracefulshutdownを設定する
- Podにaffinityを設定する
- PodDisruptionBudget(PDB)を設定する
- DeploymentのUpdate Strategyを設定する