1. ホーム
  2. 記事一覧
  3. Amazon EKSで学ぶコンテナ管理

2023.11.26

Amazon EKSで学ぶコンテナ管理

この記事の目的

この記事では、EKSの基本概念から始めて、実際に手を動かして学べるハンズオンまでをカバーします。初心者でもEKSを理解し、実際に使えるようになることを目指しています。

Amazon EKSとは?

まずはAmazon EKSを知るところから始めます。Amazon EKS(Elastic Kubernetes Service)は、クラウド環境におけるコンテナアプリケーションの管理を簡単にするためのAWSのマネージドサービスです。EKSは、オープンソースのコンテナオーケストレーションツールであるKubernetesをベースに構築されており、その複雑な設定や管理の手間を軽減します。EKSを利用することで、開発者はアプリケーションのデプロイ・スケーリング・管理に集中でき、AWSの提供するセキュリティ・信頼性・スケーラビリティの利点を享受できます。

Amazon EKSを学ぶメリット

標準化された環境

Kubernetesは、多くの企業や開発者によって採用されている業界標準のコンテナオーケストレーションツールです。EKSを学ぶことで、Kubernetesに対する理解を深めることができます。

スケーラビリティ

EKSは、需要に応じて自動的にアプリケーションのスケーリングを行うことができます。高いトラフィック時にもスムーズに対応し、リソースの無駄遣いを防ぐことが可能です。

簡易性と効率

EKSを使用することで、Kubernetesクラスターの設定や管理の複雑さを減らし、開発により多くの時間を費やすことができます。これは、特に小規模チームやリソースに制限がある場合に重要です。

コラム Kubernetesの読み方

「クバネティス」もしくは「クーベルネティス」の2通りがあります。

「クバネティス」は、ギリシャ語で「操舵手・パイロット」を意味する「kubernetes」の音訳です。また、「クーベルネティス」は、英語の「kubernetes」の発音に近い読み方です。

どちらの読み方でも、一般的に問題はありません。ただし、日本では「クバネティス」の読み方が一般的であるため、覚えておくとよいでしょう。

Amazon EKSの基本

EKSの主な特徴と利点

Amazon EKSは、Kubernetesを利用してコンテナアプリケーションを運用するためのAWSのマネージドサービスです。このサービスは、以下のような特徴と利点を提供します。

マネージドコントロールプレーン

EKSはKubernetesクラスターのコントロールプレーンを自動で管理し、アップデートやメンテナンスを行います。これにより、ユーザーはインフラストラクチャよりもアプリケーションの開発に集中できます。

コントロールプレーンは、クラスターのノードやポッドの作成、スケーリング、管理を担当しています。また、クラスターのセキュリティやネットワークの設定も管理します。

高可用性

EKSは、複数のAWSアベイラビリティゾーンにわたってクラスターを自動的に分散します。これにより、システムの耐障害性が高まり、高い可用性を実現します。

EKSは、各アベイラビリティゾーンにノードグループを作成します。ノードグループは、複数のノードから構成されます。各ノードには、アプリケーションを実行するポッドが配置されます。

セキュリティ

AWSはセキュリティを重視していますが、EKSも例外ではありません。IAMロールやセキュリティグループを用いてアクセス制御を管理することができます。

IAMロールは、ユーザーやサービスに対して、EKSクラスターへのアクセス権限を付与するために使用されます。セキュリティグループは、ノードやポッドへのネットワークアクセスを制御するために使用されます。

スケーラビリティ

EKSは、必要に応じてコンテナの数や種類を自動で調整することができ、リソースの効率的な利用が可能になります。

また、ノードグループのサイズを自動で調整することで、コンテナの数や種類を調整します。ノードグループのサイズは、CPUやメモリの使用率などの指標に基づいて調整されます。

エコシステムとの統合

EKSは、AWSのさまざまなサービスと簡単に連携することができます。例えば、Amazon RDSやAmazon S3などのサービスとの連携が容易です。Amazon RDSやAmazon S3などのサービスを、ポッドのストレージやデータベースとして使用することができます。また、Amazon CloudWatchやAmazon CloudTrailなどのサービスを、EKSクラスターのモニタリングやログ収集に使用することができます。

Kubernetesとの関係

Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するオープンソースのシステムです。Amazon EKSは、このKubernetesを基に構築されています。EKSを使用することで、Kubernetesの全機能を活用できると同時に、AWSの提供する追加の利点やサービスを利用することが可能になります。EKSは、Kubernetesの標準APIとCLIツールをサポートしており、Kubernetesエコシステム内のツールやリソースとの互換性を保持しています。

Amazon EKSのセットアップ

必要な前提条件

Amazon EKSを利用する前に準備すべきことがいくつかあります。下記はEKSクラスターをスムーズに設定し、運用するために必要です。

AWSアカウント

Amazon EKSを使用しEKSクラスターを作成するために、AWSアカウントが必要です。アカウントをまだお持ちでない場合は、AWSのウェブサイトで登録を行ってください。

IAMロール

AWS Identity and Access Management(IAM)ロールを設定し、EKSと他のAWSサービスへの適切なアクセス権限を確保します。EKSクラスターと他のAWSサービスへのアクセス権限を付与するために、IAMロールを設定する必要があります。

クラスターのIAMロールは次を参考にしてください。

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/service_IAM_role.html

ノードのIAMロールは次を参考にしてください。

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-node-role.html

IAMについては次の記事で詳しく解説しています。

https://envader.plus/article/246

AWS CLI

コマンドラインからAWSサービスを管理するために、AWS Command Line Interface(CLI)をお使いのPCにインストールします。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

kubectl

EKSクラスターと通信するために、kubectlをインストールする必要があります。まだインストールしていない場合は、Kubernetesのウェブサイトからダウンロードしてください。

https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/

EKSクラスターの作成手順

EKSクラスターを作成するプロセスは、次のステップに従います。

EKSクラスターの設定

AWS管理コンソールまたはAWS CLIを使用してEKSクラスターを設定します。ここで、クラスター名、使用するリージョン、ノードのタイプなどの基本的な設定を行います。具体的には、クラスター名、リージョン、ノードのタイプ、インスタンスタイプ、インスタンス数などを指定します。

クラスター名は、他のサービスと競合しないユニークな名前にしてください。

ネットワーキングの設定

クラスター内のノードが通信するために必要なVPC(Virtual Private Cloud)とサブネットを設定します。 VPCを作成し、サブネットを作成します。

  • VPCは、クラスターのノード間の通信を可能にするために使用されます。
  • サブネットは、クラスターのノードが配置されるネットワーク領域を定義します。

ノードグループの作成

クラスターに計算リソースを提供するために、ノードグループを作成します。これには、インスタンスタイプや数などを指定します。 ノードグループは、クラスターのノードプールを定義します。

  • インスタンスタイプは、ノードが使用する仮想マシンのタイプを指定します。
  • インスタンス数は、クラスターに作成するノードの数を指定します。

クラスターへのアクセス設定

kubectlを使用してクラスターにアクセスできるように設定します。これには、IAMロールとKubernetesのロールベースのアクセス制御(RBAC)を組み合わせて使用します。

  • IAMロールは、クラスターにアクセスするための権限を付与します。
  • RBACは、クラスター内のリソースへのアクセスを制御します。

クラスターの検証

クラスターが正しく設定されているかを確認するために、基本的なコマンドを実行してノードと通信します。kubectl get nodesコマンドを実行して、ノードが正常に作成されていることを確認します。

アプリケーションのデプロイハンズオン

ここでは、実際に簡単なWebアプリケーションをAmazon EKSにデプロイするプロセスを学びます。サンプルとして、基本的な「Hello World」アプリケーションを使用します。このアプリケーションは、Dockerコンテナとしてパッケージ化され、GitHubなどの公開リポジトリからクローンまたはダウンロードできます。

アプリケーションのクローン

まず、GitHubからサンプルアプリケーションのソースコードをローカル環境にクローンします。

git clone https://github.com/kubernetes/examples/tree/master/hello-node

Dockerイメージの作成

アプリケーションをDockerイメージとしてビルドします。これには、適切なDockerfileを用意し、docker build コマンドを使用します。Dockerfileを編集して、アプリケーションの実行に必要な環境変数などを指定します。

FROM node:16-alpine

ENV PORT 8080

WORKDIR /app

COPY index.js .

CMD node index.js

次に、docker build コマンドを使用して、Dockerイメージをビルドします。

docker build -t my-image .

イメージのレジストリへのプッシュ

ビルドしたDockerイメージを、Amazon ECR(Elastic Container Registry)などのコンテナイメージレジストリにプッシュします。

docker push my-image

コンテナ化とEKSへのデプロイ方法

アプリケーションがコンテナ化されたら、次はAmazon EKSにデプロイします。

Kubernetesマニフェストファイルの作成

Kubernetesのデプロイメントとサービスを定義するマニフェストファイル(YAML形式)を作成します。このファイルは、アプリケーションがどのようにデプロイされ、どのようにアクセスされるかを指定します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        ports:
        - containerPort: 8080

マニフェストの適用

kubectl apply コマンドを使用して、マニフェストファイルをクラスターに適用し、アプリケーションをデプロイします。

kubectl apply -f my-manifest.yaml

デプロイ後の検証

アプリケーションがデプロイされた後、以下の手順で動作を検証します。

デプロイメントの状態確認

kubectl get deployments コマンドを使用して、デプロイメントの状態を確認します。正常にデプロイされた場合、以下の出力が表示されます。

NAME  READY  UP-TO-DATE  AVAILABLE  AGE
my-deployment  1/1  1           1   11m

サービスの確認

kubectl get services コマンドを使って、アプリケーションにアクセスするためのサービス情報を確認します。正常にデプロイされた場合、以下の出力が表示されます。

NAME  TYPE  CLUSTER-IP EXTERNAL-IP  PORT(S)  AGE
my-service  LoadBalancer  10.100.0.10  13.248.12.22  80:31999/TCP  11m

アプリケーションへのアクセス

ブラウザから、サービスに割り当てられた外部IPまたはドメイン名にアクセスします。

http://<外部IPまたはドメイン名>:<ポート番号>

正常にデプロイされた場合、以下の画面が表示されます。

Hello, World!

EKSクラスターの管理と監視

ハンズオンはいかがでしたでしょうか?簡単ながらEKSの仕組みが理解できたのではないかと思います。ここからは一歩踏み込みEKSクラスターの管理について学んでいきます。

クラスターのスケーリングと管理方法

Amazon EKSでは、クラスターのスケーリングと管理が重要な役割を果たします。これには以下のようなポイントが含まれます。

オートスケーリング

EKSクラスターは、需要に基づいて自動的にスケールアップまたはスケールダウンできます。これは、クラスターオートスケーラーを使用して設定されます。オートスケーラーは、実行中のワークロードとリソースの使用状況に基づいて、必要なノード数を動的に調整します。

オートスケーリングを有効にするには、以下の設定を行う必要があります。

スケールイン/アウトの条件

ノード数をスケールする条件を指定します。例えば、CPU使用率が一定値を超えた場合にスケールアップする、またはCPU使用率が一定値を下回った場合にスケールダウンする、などの条件を指定できます。

スケールの単位

スケールするノードの数を指定します。例えば、1ノードずつスケールアップ/スケールダウンする、または10ノードずつスケールアップ/スケールダウンする、などの単位を指定できます。

スケールするノードタイプ

スケールするノードのタイプを指定します。例えば、m5.xlargeノードを使用する、またはt3.mediumノードを使用する、などのタイプを指定できます。

アップデート管理

クラスターとノードグループのアップデートは、セキュリティと性能の観点から重要です。AWS管理コンソールまたはCLIを使用して、クラスターのKubernetesバージョンをアップグレードしたり、ノードグループの設定を更新することができます。

クラスターのKubernetesバージョンをアップグレードするには、以下の手順を実行します。

AWS管理コンソールまたはCLIを使用して、クラスターのオペレーションモードを「アップグレード」に設定します。 クラスターのオペレーションモードが「アップグレード」に設定されたら、クラスターのKubernetesバージョンをアップグレードします。 ノードグループの設定を更新するには、以下の手順を実行します。

AWS管理コンソールまたはCLIを使用して、ノードグループの設定を変更します。 ノードグループの設定を変更したら、ノードグループを更新します。

ノードの監視とトラブルシューティング

EKSクラスターでは、各ノードの状態を監視し、問題が発生した場合に迅速に対応することが重要です。これには、CloudWatchやAWS CloudTrailなどのAWSのモニタリングツールを利用します。

CloudWatchでは、以下のメトリクスやログを監視することができます。

メトリクス

CPU使用率、メモリ使用率、ディスク使用率、ネットワーク帯域幅使用率など

ログ

ノードログ、Kubernetesログ、Podログなど

ノードの状態を確認するには、CloudWatchの「ノードのパフォーマンス」メトリクスを監視します。CPU使用率やメモリ使用率が異常に高い場合は、ノードが問題を抱えている可能性があります。

ノードのログを分析して、問題の原因を特定します。例えば、ノードログにエラーメッセージが記録されている場合は、そのエラーメッセージの原因を特定する必要があります。

監視ツールの利用

EKSクラスターの監視には、以下のようなツールが役立ちます。

Amazon CloudWatch

CloudWatchを使用すると、EKSクラスターのメトリクスを収集し、ログを分析し、アラートを設定することができます。これにより、パフォーマンスの問題や異常を迅速に検出し、対応することが可能です。

AWS CloudTrail

CloudTrailは、AWSアカウント内のアクションを監視し、ログ記録するサービスです。EKSクラスターに関するAPI呼び出しや設定変更の履歴を追跡するのに役立ちます。

サードパーティのツール

PrometheusやGrafanaなどのサードパーティの監視ツールもEKSと組み合わせて使用できます。これらのツールは、カスタマイズ可能な監視とより詳細な分析を提供します。

とたんにやることが多くなった印象ですが、これらは触っているうちに身につくので、ひとまず概要だけ押さえましょう。

まとめと参考資料

この記事を通じて、Amazon EKSの基本概念、セットアップ、アプリケーションのデプロイ方法、クラスターの管理と監視について学びました。EKSは、Kubernetesの複雑さを軽減しつつ、AWSの強力なインフラと統合されているため、コンテナ化されたアプリケーションの運用に大きな利点を提供します。

これらの知識とスキルは、クラウドネイティブなアプリケーション開発において非常に価値があり、実際のプロジェクトでのEKSの活用により、さらなる経験と理解を深めることができます。技術の進化に伴い、EKSや関連するサービスの新機能にも注目していくことが重要です。

参考資料

この記事の内容をさらに深く理解し、実践的なスキルを身につけるために、次の資料を参照することをお勧めします。

  1. AWS公式ドキュメント

    Amazon EKSに関する公式ドキュメントは、基本から応用まで詳細な情報を提供します。

    https://docs.aws.amazon.com/eks/index.html

  2. Kubernetes公式ドキュメント

    Kubernetesに関する基本的な概念や運用に関するガイドは、EKSをより深く理解するのに役立ちます。

    https://kubernetes.io/docs/home/

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事