はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら。
この記事ではAmazon EKSを耐障害性の観点から超詳細解説しています。
具体的には以下流れで説明します。
- Amazon EKSとは
- Amazon EKSのスケーラビリティ
- Amazon EKSのストレージ
- Amazon EKSのロギング
AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。
この記事を読んでほしい人
- Amazon EKSを採用するときのベストプラクティスを説明できるようになりたい人
- Amazon EKSの耐障害性に不安を感じている人
- AWS Certified DevOps Engineer Professionalを目指している人
Amazon EKSとは
EKSとはKubernetesクラスターをAWS上でローンチするためのサービスです。
ECSと同じようにコンテナアプリケーションの自動デプロイやスケーリング、管理をするためのサービスですがEKSはオープンソースのKubernetesベースでありAWSオリジナルのECSとはAPIが異なります。
以前はEKS on EC2しかサポートしていませんでしたが、現在はEKS on Fargateもサポートしているため、Kubernetesをインフラストラクチャレイヤーの管理なしで使えるようになっています。
AWSではコンテナサービスを使いたい場合、まずはECS on Faragateを検討するのがベストプラクティスです。
EKSを検討するのはすでにKubernetesを利用しているあるいは可搬性を考慮する場合が多いです。
Amazon EKSのスケーラビリティ
EKSのスケーラビリティを考える前にノード管理の仕方について抑え、その後スケーラビリティを考えるという流れで説明します。
EKS on EC2
EKS on EC2の場合、ノードの管理の仕方が2パターンあります。
1つがマネージドノード型ノードグループ、もう1つがセルフマネージド型ノードです。
マネージド型ノードグループでは、Kubernetes アプリケーションを実行するためのEC2インスタンスを個別にプロビジョニングまたは登録する必要はありません。
1 回の操作で、クラスターのノードを作成、自動的に更新、または終了できます。
一方セルフマネージド型ノードの場合、自分でノードを作成しクラスタに登録する必要があります。
Amazon EKS最適化AMIと呼ばれる特殊なAMIがEKSで用意されているのでこれを使ってEC2インスタンスを構築し、EKSクラスタに登録するという流れです。
ここからはEKS on EC2のスケーラビリティについてです。
EKS on EC2はどちらのノードタイプでもノードがAutoScalingGroupで管理されています。
そのため、ノード内にポッドが多数起動し負荷が高くなるとAutoScalingが新しいノードとしてのEC2インスタンスを起動します。
ただし、ECSと異なりEKSはKubernetesの仕組みで動いているのでAWSの世界のAutoScalingGroupを直接意識することはあまりありません。
実際にはCluster-AutoscalerというKubernetes側の仕組みを使ってスケーリングし、その裏側でAutoScalingのAPIがCALLされているという仕組みです。
EKS on Fargate
EKS on Fargateの場合はECS on Fargateと同様、管理対象がありません。
そのため、スケーリングについても特に設定することなく自動で使うことが可能です。
また、数年前はEKS on Fargateのスケーリング性能が悪すぎるため性能を求めるならEKS on EC2を選ぶしかないといわれていましたが、最近は性能が改善されているのでEKS on Fargateでも耐えられるケースが多くなっています。
Amazon EKSのストレージ
EKSでストレージの設定をする際にはEKSクラスタ上でStorageClassマニフェストを指定しCSIに準拠したドライバを活用する必要があります。
EKSは様々なストレージオプションをサポートし、これにはAmazon EBSやAmazon EFSが含まれます。
EBSは単一のEC2インスタンスにアタッチされるブロックレベルのストレージを提供し、高いパフォーマンスと信頼性を実現します。
一方、EFSはマルチAZにわたる複数のEC2インスタンスで共有されるファイルレベルのストレージであり、スケーラビリティとシンプルな共有が可能です。
Amazon EKSのロギング
Amazon EKSは、コントロールプレーンとノード/コンテナの2つのレベルで効果的なロギングを提供します。
コントロールプレーンのロギング
コントロールプレーンロギングでは、APIサーバーやスケジューラーなどのKubernetesマスターコンポーネントのアクティビティをCloudWatch Logsに自動的に記録します。
これにより、クラスタのパフォーマンスや問題のトラブルシューティングが容易になります。
ノード/コンテナのロギング
ノードとコンテナのロギングでは、FluentdあるいはFluent Binを使用してログデータをCloudWatch Logsや他のカスタムロググループに送信できます。
これにより、アプリケーションとインフラストラクチャの活動を監視し、問題の特定と修正が迅速に行えます。
まとめ
この記事ではAmazon EKSを耐障害性の観点から超詳細解説しました。
- Amazon EKSとは
- Amazon EKSのスケーラビリティ
- Amazon EKSのストレージ
- Amazon EKSのロギング
次回はKinesisシリーズの耐障害性を考えます。