COLUMN

コンテナサービス「Amazon EKS」とは?実際に使用してみた

Amazon EKS(以下EKSとします。)は、AWSで利用できるKubernetesのマネージドサービスです。
EKSを利用することで、Kubernetesをクラウド上で実行できるようになります。
当コラムではEKSの簡単な概要説明と、実践の紹介をします。

前回のコラムでもコンテナサービスを扱っております。
コンテナ管理サービス「Amazon ECS」とは?実際に使用してみた」ではECSの概要説明、実践を行っています。是非ご確認ください。

AWS EKSの導入にお悩みの方はこちらへお問い合わせください。

EKSの概要

EKSはオーケストレーションツールのデファクトスタンダードといえるKubernetesをクラウド上で利用可能なマネージドサービスです。コンテナを稼働するサーバーとしては、EC2、Fargateを選択できます。
ECSとの違いとしては、オーケストレーションツールが異なります。
ECSはAWS独自のオーケストレーションツールを利用しておりAWS上でのみ利用できますが、EKSはKubernetesを利用しているため、オンプレミスでKubernetesを利用していた方はクラウド上で同一のものを使える利点があります。また、ECSにはない高度な機能として、コンテナのスケーリングや障害時の自己修復機能などが利用できます。
EKSの詳細は以下を参照してください。

リンク:Amazon Elastic Kubernetes Service別ウィンドウで開きます

実践例

今回は、AWSが提供しているEKSのドキュメントを参考にして、クラスターやワーカーノードの作成とサンプルアプリケーションのデプロイを行っていきます。
クラスターやワーカーノードの作成には、コマンドで操作する方法と画面で操作する方法の2種類がありますが、今回は主に画面を利用した方法で実践を行います。(なお、以下のドキュメントには2種類の方法が記載されていますので参考にしてみてください。)

リンク:Amazon EKSの開始方法別ウィンドウで開きます

作成する構成は以下の図の通りです。

構成のポイント

1. コンテナが稼働するサーバーはEC2で構築

2. Multi-AZで可用性の高い構成

[前提]

作業時の各種コマンドは、作業用にOSをAmazon Linux 2として作成したEC2インスタンス上で実施しています。EC2インスタンスの作成手順については割愛しています。
確認するコマンドのバージョンは2020/12時点の最新バージョンです。
以下は作業手順です。

---

1. EKS使用前の作業

1-1. AWS CLIのバージョン確認

1-2. eksctlのインストール

1-3. kubectlのインストール

1-4. 認証情報の設定

2. CloudFormationでのスタック作成

2-1. EKSサービスロールのスタック作成

2-2. EKSワーカーノードロールのスタック作成

2-3. クラスター環境用VPCのスタック作成

3. EKSクラスターの作成

3-1. EKSクラスターの作成

3-2. kubeconfigファイルの作成

4. ワーカーノードの作成

4-1. EKSノードグループの起動

4-2. コンテナのデプロイ

---

1. EKS使用前の作業

ここでは、作業用のEC2インスタンスに各作業で使用するコマンドなどのインストールを行っていきます。

1-1. AWS CLIのバージョン確認

AWS CLIのバージョンが1.18.163 以降であることを確認します。

CLIに、「aws –version」と入力します。

aws --version
aws-cli/2.1.4

※AWS CLIのバージョン1と2では同じawsコマンドが使用されています。両方のバージョンがインストールされている場合、最初に見つかったバージョンが使用されます。公式ドキュメントではバージョン1.18.49以降が推奨されています。バージョン1と2の両方がインストールされている場合やバージョンが古い場合は以下のリンクを参考にしてください。

リンク:Linux での AWS CLI バージョン 2 のインストール、更新、アンインストール別ウィンドウで開きます

1-2. eksctlのインストール

「eksctl」をダウンロードし、解凍します。

curl --silent --location "https://github.com/weaveworks/eksctl/
releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz
-C /tmp

ダウンロードした「eksctl」をPATHの通ったディレクトリへ移動します。

sudo mv /tmp/eksctl /usr/local/bin

バージョンを確認し、以下のように結果が表示されればインストール成功です。

eksctl version
0.31.0
1-3. kubectlのインストール

「kubectl」をダウンロードします。

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/
1.18.8/2020-09-18/bin/linux/amd64/kubectl

実行権を付与します。

chmod +x ./kubectl

コマンドにPATHを通すため別フォルダへ移動します。

sudo mv ./kubectl /usr/local/bin

バージョンを確認し、以下のように結果が表示されればインストール成功です。

kubectl version --short --client
Client Version: v1.18.8-eks-7c9bda
1-4. 認証情報の設定

コンソールで利用するアカウントの「アクセスキー」、「シークレットキー」、「リージョン」を設定します。

aws configure
AWS Access Key ID [None]: <アクセスキー>
AWS Secret Access Key [None]: <シークレットキー>
Default region name [None]: <リージョン>

※今回、リージョンは東京リージョン(ap-northeast-1)を選択しています。

2.CloudFormationでのスタック作成

CloudFormationでは、リソースをスタック単位で管理しているため、今回は、利用するAWSリソース毎にスタックを作成します。

※CloudFormationの使用方法は以下を参照してください。

リンク: AWS CloudFormationユーザーガイド別ウィンドウで開きます

2-1. EKSサービスロールのスタック作成

CloudFormationのコンソール画面を操作する端末上で、以下のjsonを入力し、「EKS-service-role.json」のファイル名で保存します。

**************************
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Amazon EKS Cluster Role'


Resources:

  eksClusterRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - eks.amazonaws.com
          Action:
          - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonEKSClusterPolicy

Outputs:

  RoleArn:
    Description: The role that Amazon EKS will use to create AWS resources for Kubernetes clusters
    Value: !GetAtt eksClusterRole.Arn
    Export:
      Name: !Sub "${AWS::StackName}-RoleArn"
**************************

ステップ1では「テンプレートの指定」の「テンプレートソース」は、「テンプレートファイルのアップデートロード」を選択し、「ファイルの選択」から「EKS-service-role.json」を選択し、「次へ」をクリックします。

ステップ2では「スタックの名前」に「EKS-service-role」を入力し、「次へ」をクリックします。

ステップ3では設定はデフォルトのまま、「次へ」をクリックします。

ステップ4では作成前の設定確認を行います。

設定に間違いが無いことを確認し、画面下部の「AWS CloudFormationによってIAMリソースが作成される場合があることを承認します。」をチェックし、「スタックの作成」をクリックします。

画面が自動的に切り替わり、「CREATE_COMPLETE」と表示されれば、スタックの作成が完了です。

2-2. EKSワーカーノードロールのスタック作成

ステップ1では「テンプレートの指定」の「テンプレートソース」に、「Amazon S3 URL」を選択し、その下段に「https://amazon-eks.s3.us-west-2.amazonaws.com/
cloudformation/2020-08-12/amazon-eks-nodegroup-role.yaml」を入力し、「次へ」をクリックします。

ステップ2では「スタックの名前」に「eks-worker-node-role」を入力し、「次へ」をクリックします。

ステップ3以降は[2-1. EKSサービスロールのスタック作成]と同様に、デフォルトのまま設定し、確認します。

2-3. クラスター環境用VPCのスタック作成

ステップ1では「テンプレートの指定」の「テンプレートソース」に、「Amazon S3 URL」を選択し、下段に「https://amazon-eks.s3.us-west-2.amazonaws.com/
cloudformation/2020-08-12/amazon-eks-vpc-sample.yaml」を入力し、「次へ」をクリックします。

ステップ2では「スタックの名前」に「eks-cluster-vpc」を入力し、「次へ」をクリックします。

ステップ3以降は[2-1. EKSサービスロールのスタック作成]と同様に、デフォルトのまま設定し、確認します。なお、今回は、ステップ4の「AWS cloudFormationによってIAMリソースが作成される場合があることを承認します。」のメッセージは表示されません。

この後、画面が自動で切り替わります。そして、次の作業で行うEKSクラスターの設定を行うため、「出力」タブをクリックします。「SecurityGroups、SubnetIds、VpcId」の値をメモ帳などにコピーしておきます。

3. EKSクラスターの作成

3-1. EKSクラスターの作成

ステップ1で「クラスター設定」の「名前」の欄に「eks-cluster」を入力し、「クラスターサービスロール」に2-1.で作成したEKSサービスロール名の「EKS-service-role」を選択し、「次へ」をクリックします。

ステップ2では「VPC」に2-3.で作成したクラスター環境用VPC名の「eks-cluster-vpc」を選択します。「セキュリティグループ」は、2-3.でメモ帳にコピーした「SecurityGroupsの値」を選択し、「次へ」をクリックします。

ステップ3では、設定はデフォルトのまま、「次へ」をクリックします。

ステップ4では作成前の設定確認を行います。
設定に間違いが無いことを確認し、「作成」をクリックします。

※作成には約10分かかります。

3-2. kubeconfigファイルの作成

クラスターへアクセスするために必要なkubeconfigファイルを自動で作成します。
CLIに以下のコマンドを入れます。

aws eks --region ap-northeast-1 update-kubeconfig --name eks-
cluster

接続のテストを行います。

kubectl get svc
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)
AGE
svc/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP
1m

4. ワーカーノードの作成

4-1. EKSノードグループの起動

eks-clusterの画面にある「コンピューティング」タブをクリックし、「ノードグループ追加」をクリックします。

ステップ1では「ノードグループの設定」の「名前」に「eks-worker-node」を入力し、「ノードIAMロール」は、2-2.で作成したEKSワーカーノードロール名「eks-worker-node-role」を選択し、「次へ」をクリックします。

ステップ2では、今回は以下のように設定しました。

  • AMIタイプ「Amazon Linux (AL2_x86_64)
  • インスタンスタイプ「t3.small」
  • ディスクサイズ「10」
  • 最小サイズ「3」
  • 最大サイズ「3」
  • 希望サイズ「3」

設定後に「次へ」をクリックします。

ステップ3では作成済みの「SSHキーペア」を選択し、「次へ」をクリックします。
※「SSHキーペア」が無い場合はEC2コンソールのリンクから作成できます。

ステップ4では作成前の設定確認を行います。
設定に間違いが無いことを確認し、「作成」をクリックします。

※作成に約5分かかります。

4-2. コンテナのデプロイ

Availability ZoneにまたがるGuestbookのアプリケーションとRedisのデータベースアプリケーションのコンテナをデプロイします。
作成する構成は以下の図の通りです。

構成のポイント

1. GuestbookのウェブアプリケーションとRedisのデータベースの2種類のコンテナを導入

2. RedisはAvailability Zoneにまたがり、1ノードをMaster(読み書き可)にし、残りはSlave(参照のみ)のバックアップとして冗長化構成

コンテナをクラスターに導入し、起動します。

(redis-master-controller用)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/
examples/master/guestbook-go/redis-master-controller.json

(redis-master-service用)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/
examples/master/guestbook-go/redis-master-service.json

(redis-slave-controller用)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/
examples/master/guestbook-go/redis-slave-controller.json

(redis-slave-service用)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/
examples/master/guestbook-go/redis-slave-service.json

(guestbook-controller用)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/
examples/master/guestbook-go/guestbook-controller.json

(guestbook-service用)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/
examples/master/guestbook-go/guestbook-service.json

LoadBalancerに割り当てられたEXTERNAL-IPエンドポイントを確認します。

CLIに以下のコマンドを入れます。

kubectl get pod,svc -o wide

結果が表示され、下部に以下のような表示がされるため、赤字部分をコピーします。

********************************
~<省略>~
NAME TYPE CLUSTER-IP EXTERNAL-IP  PORT(S) AGE SELECTOR
service/guestbook LoadBalancer 10.100.246.184
a673a63146ec64412aae9f5b47de095a-930813037.ap- northeast-1.elb.amazonaws.com 3000:32741/TCP 6s app=guestbook
~<省略>~
********************************

確認したEXTERNAL-IPエンドポイントの3000番ポートへアクセスします。
ブラウザを開き、赤字部分に:3000を加えて表示します。

http://a673a63146ec64412aae9f5b47de095a-930813037.ap-northeast-1.elb.amazonaws.com:3000

Guestbookのウェブアプリケーション実行が確認でき、デプロイが成功しました。

おわりに

AWSではECSやEKSなどニーズにあったコンテナサービスを提供しています。クラウドで構築するシステム環境の方針にあうベストなサービスを選択しましょう。

AWS EKSの導入にお悩みの方はこちらへお問い合わせください。

ページ上部へ戻る

無料ダウンロード

自社のクラウド導入に必要な知識、ポイントを
このに総まとめ!

あなたはクラウド化の
何の情報を知りたいですか?

  • そもそも自社は本当にクラウド化すべき?オンプレとクラウドの違いは?
  • 【AWS・Azure・Google Cloud】
    どれが自社に最もマッチするの?
  • 情シス担当者の負荷を減らしてコストを軽減するクラウド化のポイントは?
  • 自社のクラウド導入を実現するまでの具体的な流れ・検討する順番は?

初めての自社クラウド導入、
わからないことが多く困ってしまいますよね。

NTT東日本では
そんなあなたにクラウド導入に必要な情報を

1冊の冊子にまとめました!

クラウド化のポイントを知らずに導入を進めると、以下のような事になってしまうことも・・・

  • システムインフラの維持にかかるトータルコストがあまり変わらない。。
  • 情シス担当者の負担が減らない。。
  • セキュリティ性・速度など、クラウド期待する効果を十分に享受できない。。
理想的なクラウド環境を実現するためにも、
最低限の4つのポイントを
抑えておきたいところです。
  • そもそも”クラウド化”とは?
    その本質的なメリット・デメリット
  • 自社にとって
    最適なクラウド環境構築のポイント
  • コストを抑えるため
    具体的なコツ
  • 既存環境からスムーズにクラウド化
    実現するためのロードマップ

など、この1冊だけで自社のクラウド化のポイントが簡単に理解できます。
またNTT東日本でクラウド化を実現し
問題を解決した事例や、
導入サポートサービスも掲載しているので、
ぜひダウンロードして読んでみてください。

クラウドのわからない・
面倒でお困りのあなたへ

クラウドのご相談できます!
無料オンライン相談窓口

NTT東日本なら貴社のクラウド導入設計から
ネットワーク環境構築・セキュリティ・運用まで
”ワンストップ支援”が可能です!

NTT東日本が選ばれる5つの理由

  • クラウド導入を
    0からワンストップでサポート可能!
  • 全体最適におけるコスト効率・業務効率の改善
    中立的にご提案
  • クラウド環境に問題がないか、
    第3者目線でチェック
    してもらいたい
  • 安心の24時間・365日の対応・保守
  • NTT東日本が保有する豊富なサービスの組み合わせで
    ”課題解決”と”コスト軽減”を両立

特に以下に当てはまる方はお気軽に
ご相談ください。

  • さまざまな種類やクラウド提供事業者があってどれが自社に適切かわからない
  • オンプレミスのままがよいのか、クラウド移行すべきなのか、迷っている
  • オンプレミスとクラウド移行した際のコスト比較を行いたい
  • AWSとAzure、どちらのクラウドが自社に適切かわからない
  • クラウド環境に問題がないか、第3者目線でチェックしてもらいたい
  • クラウド利用中、ネットワークの速度が遅くて業務に支障がでている

クラウドを熟知するプロが、クラウド導入におけるお客さまのLAN 環境や接続ネットワーク、
クラウドサービスまでトータルにお客さまのお悩みや課題の解決をサポートします。

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。