Amazon Web Services ブログ

Amazon EKS – 一般向け利用を開始

Amazon Elastic Container Service for Kubernetes を発表し、re:Invent 2017 の期間中にお客様をプレビューにご招待しました。本日謹んで、Amazon EKS が、お客様が利用可能な実稼働状態に達したことをお知らせいたします。その Kubnernetes 適合性が認証され、既存の Kubernetes ワークロードを実行できるようになりました。

Cloud Native Computing Foundation最新のデータによれば、Kubernetes を実行している全企業の 57% が AWS は 選択しており、Kubernetes 環境としては AWS が先頭を走っています。Kubernetes はお客様の IT 戦略のコアであり、毎週 AWS で数億ものコンテナを実行しています。Amazon EKS は Kubernetes クラスターのビルド、保護、操作、保守のプロセスを簡略化し、Kubernetes クラスターをゼロから設定することなく、アプリケーションのビルドに集中したいと考える組織にコンテナベースのコンピューティングの便益をもたらしています。

AWS インサイド
Amazon EKSAWS クラウド内で実行できるため、多くの AWS サービスと機能を大いに活用しながら、Kubernetes に関する既知の知識すべてをそのまま有効に適用できます。概要は以下の通りです。

Multi-AZ – Kubernetes コントロールプレーン (API サーバーおよび etcd データベース) は 3 つの AWS アベイラビリティーゾーンにわたって高い可用性で動作します。マスターノードはモニタリングされており、失敗した場合は置き換えられ、また自動的にパッチされ更新されます。

IAM インテグレーションAmazon EKS は認証に Heptio Authenticator を使用します。IAM ロールを使用できるため、新たな認証情報を管理する労力から解放されます。

ロードバランサーサポート – AWS Network Load Balancer、AWS Application Load Balancer、またはオリジナル (classic) の Elastic Load Balancer を使用して、ワーカーノードへのトラフィックをルーティングできます。

EBS – Kubernetes PersistentVolumes (クラスターストレージ用) が Amazon Elastic Block Store (EBS) ボリュームとして実装されます。

Route 53External DNS プロジェクトにより、Kubernetes クラスターにおけるサービスに Route 53 DNS レコード経由でアクセスできるようになります。これにより、サービスディスカバリが容易になり、ロードバランシングをサポートします。

Auto Scaling – お使いのクラスターは Auto Scaling を使用して、ロードの変化に合わせて拡大、縮小させることができます。

コンテナインターフェイス – Kubernetes の Container Network InterfaceElastic Network Interfaces を使用して、Kubernetes Pods に対する静的 IP アドレスを提供します。

これらの機能に関する詳細については、Amazon Elastic Container Service for Kubernetes をご覧ください。

Amazon EKS は責任共有モデルでビルドされており、そのコントロールプレーンを AWS が管理し、ユーザーはワーカーノードを実行します。これで、高い可用性を実現し、既存のワークロードを EKS に移すプロセスを簡略化します。以下は、非常に大まかな概要です。

Amazon EKS クラスターを作成する
クラスターを作成するために、コントロールプレーンをプロビジョニングし、ワーカークラスターをプロビジョニングして接続し、コンテナを起動します。以下の例ではワーカークラスターに新しい VPC を作成しますが、任意のサブネットに Kubernetes クラスターの名前がタグ付けされていれば、既存の VPC を使用することもできます。

Amazon EKS 入門ガイド に指示に従い、IAM ロールの作成を始めます。Kubernetes はこの IAM ロールを引き受け、Elastic Load Balancers のような AWS リソースを作成するために使用します。このロールが作成されたら、すべてのクラスターで使用できます。入門ガイドで言及されているテンプレートを使用して、CloudFormation スタックを作成すればいいだけです。

スタックがロールを作成することを承認し、[作成] をクリックして先に進みます。

ロールは数秒で作成され、その ARN がスタックの [Output (出力)] タブに表示されます (この ARN は後で必要になります)。

次に、入門ガイドのサンプルテンプレートを使用し、以下のパラメータで VPC (仮想プライベートクラウド) を作成します。

テンプレートは、必要なルートテーブル、ゲートウェイ、およびセキュリティグループとともに 2 つのサブネットを持つ VPC を作成します。

ARN の場合は、セキュリティグループの ID が後で必要になります。

次に、 kubectl をダウンロードして、Heptio Authenticator を使用するために設定します。Heptio Authenticator は、kubectl が Kubernetes クラスターにアクセスする場合に IAM 認証を使用する許可を付与します。ダウンロードおよび設定の説明は 入門ガイドに記述されており、その指示どおりに進めます。

設定プロセスを完了させるにあたって、AWS コマンドラインインターフェース (CLI) の最新バージョンで実行しているか確認します (古いバージョンで実行した場合は、 eks コマンドは利用できません)。

自分の IAM ロール、自分の VPC、すべてのツールの環境が整い、初めの Amazon EKS クラスターを作成できるようになりました!

管理者権限 (Heptio Authenticator の動作上の理由により、ルート認証情報は使用できません) を持つ IAM ユーザーで EKS コンソールにログインし、[クラスターの作成] をクリックします。

クラスターの名前とともに (Kubernetes はサブネットのタグ付けに依存するため、VPC を作成したときの名前と一致している必要があります)、VPC のサブネット ID および セキュリティグループ ID の両方を入力して、[作成] をクリックします。

コントロールプレーンクラスターは、[作成中] ステータスで始まって、10 秒以下で [アクティブ] に移行します。

今度は、 kubectl を設定して、クラスターにアクセスできるようにします。その前に、CLI を使用して認証機関データを取得する必要があります。

$ aws eks describe-cluster --region us-west-2 --cluster-name jeff1 --query cluster.certificateAuthority.data

このコマンドが長い文字列のデータを返します。これには 1 分かかります。

また、コンソールからクラスターエンドポイントを取得します。

自分がホームディレクトリにいることを確認して、そのなかにサブディレクトリ .kube を作成し、ファイル config-jeff1 を作成します。そして、エディタで config-jeff1 を開き、入門ガイドのテンプレート設定ファイルをコピーして、クラスターエンドポイント、証明書、およびクラスター名をファイナライズします。ファイルは次のようになります。

apiVersion: v1
clusters:
- cluster:
    server: https://FDA1964D96C9EEF2B76684C103F31C67.sk1.us-west-2.eks.amazonaws.com
    certificate-authority-data: "...."
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"

kubectl をテストする前に、クラスターの作成するためにコンソールにログインしたときに使用した同じ IAM ユーザーを使用するように CLI が設定されたか確認する必要があります。

これで、すべてが想定どおりに動作しているか検証するためのクイックテストを実施できるようになりました。

この時点で、マスター VPC および Kubernetes コントロールプレーンの設定が完了しました。今は、ワーカーノードをいくつか作成できる状態です (EC2 インスタンス)。繰り返しになりますが、これは CloudFormation テンプレートを使用しています。

スタックは数分で作成され、IAM ロール、セキュリティグループ、およびオートスケーリングを設定します。

ここで、ワーカーノードがクラスターとのジョイン方法を認識できるように、コンフィギュレーターマップを設定する必要があります。マップをダウンロードして、スタックから NodeInstanceRole の ARN を追加し、設定を適用します。

そして、ノードの準備ができたか確認します。

Guest Book のサンプルを実行する
Kubnernetes クラスターの設定がすべて終わり、Guest Book アプリケーションを使用してテストできるようになりました。Kubernetes レプリケーションコントローラーおよびサービスを作成します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-master-controller.json
replicationcontroller "redis-master" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-master-service.json
service "redis-master" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-slave-controller.json
replicationcontroller "redis-slave" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-slave-service.json
service "redis-slave" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/guestbook-controller.json
replicationcontroller "guestbook" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/guestbook-service.json
service "guestbook" created

実行中のサービスをリストアップし、外部 IP アドレスおよびポートをキャプチャします。

ウェブブラウザでそのアドレスにアクセスします。

主要事項
私たちは、Kubernetes repo や、CNI PluginHeptio AWS AuthenticatorVirtual Kubelet をはじめとするプロジェクトの開発に貢献しています。現在、Kubernetes の経験があるシステム開発エンジニア、DevOps エンジニア、プロダクトマネージャー、ソリューションアーキテクトの人材を募集中です。詳細に関しては、オープンポジションの一覧をご覧ください。

Amazon EKS は本日より、米国東部 (バージニア北部) および米国西部 (オレゴン) で利用可能です。また、まもなく他のリージョンにも拡大する予定です。詳しいロードマップに基づき、今年はさらなる機能を次々に送り出していきます。

EKS コントロールプレーンの時間あたりのお支払いは 0.20 USD です。通常の EC2、EBS、Load Balancing のお支払いはアカウント内の実行リソースによって決まります。詳細については、EKS 料金表ページを参照してください。

Jeff;