【AWS】 EKSの解説
EKS(Elastic Kubernetes Service)
クラウドでのKubernetesの管理を容易にするサービス。Kubernetesはオープンソースのコンテナオーケストレーションツールで、複数のコンテナを効率的に管理するために広く使用されています。EKSを使用することで、ユーザーはKubernetesクラスターのセットアップ、スケーリング、メンテナンスをAWSが自動で行うため、管理の手間を大幅に削減できる。
スケーラビリティ: EKSは自動スケーリング機能を提供し、アプリケーションの需要に基づいてリソースを動的に調整します。
セキュリティ: AWSのセキュリティとコンプライアンスの枠組みを利用して、Kubernetesクラスターを保護します。
互換性: EKSは標準的なKubernetesと完全に互換性があるため、既存のKubernetesアプリケーションやツールをそのまま利用できます。
統合性: AWSの他のサービス(例えば、Amazon RDSやAmazon S3など)と簡単に統合でき、アプリケーションの構築と運用がスムーズに行える。
EKSを使用する基本的なステップ
クラスターの作成: AWSマネジメントコンソール、AWS CLI、またはTerraformなどのインフラストラクチャコードを使用してEKSクラスターを作成します。
ノードの設定: クラスター内で実行するコンピュータリソース(ノード)を設定します。AWSはEKS専用の仮想マシンタイプを用意しており、用途に応じて選択できます。
アプリケーションのデプロイ: Kubernetesのマニフェストファイルを使用して、コンテナ化されたアプリケーションをクラスターにデプロイします。
モニタリングと管理: AWS CloudWatchを使用してクラスターのパフォーマンスを監視し、必要に応じて調整します。
Amazon EKS のユースケース
マイクロサービスアーキテクチャの実装
EKSを使用して、マイクロサービスを個別のコンテナとしてデプロイし、それぞれを独立してスケーリングや更新を行うことができます。このアプローチにより、開発チームはサービスごとに異なる技術スタックを選択でき、アプリケーションの各コンポーネントを効率的に管理することが可能になります。
持続的インテグレーションと持続的デリバリー(CI/CD)
EKSはCI/CDパイプラインと統合しやすく、ソフトウェアのビルド、テスト、デプロイメントを自動化するプロセスを支援します。これにより、開発から運用までのプロセスがスムーズになり、速やかに新機能をリリースし、バグ修正を適用できます。
機械学習モデルのトレーニングと推論
EKS上で機械学習のワークロードを実行することも一般的です。大規模なデータセットに対してモデルをトレーニングし、推論を行うためのリソースを動的にスケーリングする能力は、特に計算資源が集中的に必要とされる場面で有効です。
エンタープライズアプリケーションの運用
大企業が既存のエンタープライズアプリケーションをクラウドに移行する際、EKSを利用して、セキュリティ、コンプライアンス、高可用性を保ちながら、これらのアプリケーションを運用することができます。AWSの広範なセキュリティとコンプライアンスの機能を利用して、企業の要求を満たすことが可能です。
ハイブリッドクラウドおよびマルチクラウド環境
EKSはハイブリッドクラウドおよびマルチクラウド環境での運用にも適しています。企業はオンプレミスのリソースとクラウドリソースを組み合わせることができ、異なるクラウドプロバイダー間でのアプリケーションの運用も可能になります。
EKS Distro
EKS)のオープンソースバージョンであり、AWSのクラウド外でもAmazon EKSと同じKubernetes環境を構築し運用することが可能。これにより、オンプレミスのデータセンターや他のクラウドプラットフォーム上で、一貫したKubernetesの管理を実現することができます。
EKS DistroはAWSが使用する同じバージョンのKubernetesをベースにしており、EKSと高い互換性を持っています。このため、ユーザーはAWSのクラウド内外でシームレスにアプリケーションを移行し、運用することができる。
EKS Distroの管理
EKS Distroは、AWSが提供するKubernetesのディストリビューションであり、オープンソースとして利用可能です。EKS Distroを使用してクラスターを構築する際にも、AWSのEKSコンソールは使用せず、通常はKubernetesネイティブのツール(kubectlなど)や他のオープンソースのKubernetes管理ツールを用いて運用されます。
EKS Anywhere
Amazon Elastic Kubernetes Service (EKS) の拡張機能であり、ユーザーが自身のオンプレミス環境や他のクラウド環境で、EKSと同じKubernetesクラスターをデプロイし、運用することを可能にするツール。
EKS Anywhereは、EKS Distroの基盤の上に構築されており、EKSで実行されているのと同じバージョンのKubernetesを使用しています。
EKS Anywhereの管理
EKS Anywhereは、ユーザーが自身のデータセンターなどの環境でクラスターを設置し、運用するためのものです。このため、クラスターの設定や管理には、EKS Anywhereが提供する専用のツールやCLI(コマンドラインインターフェース)を使用します。また、VMware vSphereなどの既存の仮想化インフラストラクチャ上でEKS Anywhereを実行する際には、その環境に適した管理ツールが用いられることが多い。
Kubernetes
コンテナ化されたアプリケーションのデプロイメント、スケーリング、および管理を自動化するためのオープンソースのプラットフォーム。
システムの中心には「ポッド」と呼ばれる、一つまたは複数のコンテナがグループ化された単位があります。各ポッドは固有のIPアドレスを持ち、コンテナ間でリソースを共有することが可能です。
ッドとノードは、Kubernetesクラスターにおいて連携しています。ポッドはワーカーノード上で実行されるコンテナのグループであり、ノードはこれらのポッドに宿泊施設とリソースを提供。
さらに、「サービス」という抽象的な層がポッドの集合に対して安定したアクセス方法を提供し、サービスを介してポッド群へのネットワークトラフィックを適切にルーティングします。
また、「デプロイメント」はアプリケーションの特定の状態を定義し、その状態を維持するようにシステムに指示します。これにより、アプリケーションのスケーリングや更新が管理され、安定した運用が可能になる。
実践
EKSでポッドの数を自動的に増減
Kubernetesのオートスケーリング機能を利用するのが一般的。
Horizontal Pod Autoscaler(HPA)
指定されたメトリクス(例えばCPU使用率)に基づいて、ポッドの数を自動的にスケーリングします。HPAの設定方法は以下の通り。
メトリクスサーバーのインストール
HPAはメトリクスサーバーからデータを収集して動作します。EKSクラスターにメトリクスサーバーがまだインストールされていない場合は、まずこれをセットアップする必要があります。
HPAリソースの定義
HPAを定義するためには、kubectlを使用してHPAリソースを作成します。この際、スケール対象のDeploymentやReplicaSet、そしてスケーリングの条件(例:CPUの使用率が70%を超えた場合にスケールアウト)を指定します。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
myappというDeploymentがCPU使用率70%を超えるとポッドが自動的に増え、使用率が下がれば減るように設定。