【AWS】EKS on Fargateでゲームをデプロイしてみたので解説してみる(with Ingress Controller, 2048)vol.1
はじめに
AWS re:Invent 2019にてEKS on Fargate
が発表されました。
もう3ヶ月くらい前ですが。。
そのEKS on Fargate
を使ってみましたので、使い方とその解説をしてみようと思います。(タイトル通り)
また、操作画面のスクショを貼っているのですが、
記事が非常に長くなってしまうため、一部折りたたんでいます。
想像以上に作成に時間がかかってしまい、2部作で展開します。
完全に私の力不足です。。
EKSとは
AWS公式より
Amazon Elastic Kubernetes Service
AWSでKubernetesを簡単に実行できるマネージド型のKubernetesサービスです。
Kubernetes
をよしなに管理してくれるサービスです。(雑)
ECS
(Elastic Container Service)というDockerコンテナを管理するサービスがあるのですが、
そのKubernetes版と考えています。(私感)
Fargateとは
AWS公式より
コンテナ向けサーバーレスコンピューティングエンジンです。
サーバーのプロビジョニングと管理が不要になります。
インスタンスの選択やクラスター容量のスケーリングなしに、適切なコンピューティング容量が割り当てられます。
コンテナを稼働させるサーバーをよしなに管理してくれるサービスです。
ECS
or EKS
を使用する際に、サーバーをEC2
or Fargate
から選択することができます。
選択されたサーバー(EC2
or Fargate
)の上で、サービス(ECS
or EKS
)で管理するコンテナが稼働することになります。
EC2
を選択した場合、このEC2
の起動・停止やスケーリングは、ユーザーが設定・管理しなければなりません。
一方Fargate
を選択した場合、サーバーの管理等が必要なくなります。
少しまとめると、コンテナサービス利用の選択肢としてはこの4択になります。
- ECS + EC2
- ECS + Fargate
- EKS + EC2
- EKS + Fargate
デプロイするアプリやサービスの特性によってこの4択から最適なものを選ぶ必要がありますね。
長くなってしまいましたが、4. EKS + Fargate
を当記事では扱います。
当記事でのゴール
EKS on Fargateを使って、
2048ゲームをデプロイして遊べるようにしたいと思います。
2048とはこのようなゲームです。
きっと皆さん見たこと、遊んだことのあるゲームだと思います。
前提条件
- AWSのアカウントを所持している
- macOS
-
eksctl
コマンドではなく、マネジメントコンソールを使用して構築する- サービスの理解を深めるため
実際にはeksctl
コマンドで一発でクラスターを作成できたりします。
$ eksctl create cluster
それでは何もわからないまま終わってしまうので、
一つ一つ解説を入れながらマネジメントコンソールで作っていきたいと思います。
全体の流れ
- クラスターの作成
- Fargateプロファイルの作成
-
kubectl
コマンドでサービスをデプロイ
1. クラスターの作成
まず初めにクラスターを作成します。
クラスターとは以下の2つの要素で構成されています。
-
EKSコントロールプレーン
- Kubernetesソフトウェアを実行してくれるやつ
- EKSエンドポイントを持っています(後で利用します)
-
EKSワーカーノード
- コンテナを立ち上げるサーバー
- これをFargateであれこれよしなにやってもらいます
では実際に作成してみましょう。
1.1. (一般設定) クラスター名とIAMロールの設定
AWSマネジメントコンソールからEKSのサービスを選択します。
そして左のメニューから、「EKSクラスター」 > 「クラスターを作成」を選択していきます。
まずは一般設定として、以下の項目を設定します。
- クラスター名
- Kubernetesバージョン(デフォルトのままでOK)
- IAMロール
該当するIAMロールが存在しない場合、新規に作成する必要があります。
(2020 3/30追記)
ここでのIAMロールは、EKSとKubernetesコントロールプレーンに与える権限を設定します。
主な権限は、EC2とELB(ロードバランサー)の操作権限です。
1.2. IAMロール作成(未作成の場合)
以下、IAMロールが未作成の場合に実施してください
1.3. プライベートサブネット作成(未作成の場合)
次のチャプターでクラスターのネットワーク設定を行うのですが、
Fargateに設定するためのプライベートサブネットが最低1つ必要になります。
作成したことがない場合、以前の記事で解説していますのでそちらを参照ください。
【AWS】プライベートサブネット3分クッキング(ハンズオン)
またパブリックサブネットとプライベートサブネットの違いについても、以前の記事で解説しています。
【AWS】パブリックサブネットとプライベートサブネットの違いとは
(2020 3/30追記)
今回はIngress Controllerを使用します。
Ingress ControllerによってALB(ロードバランサー)が作成されるのですが、このALBは 最低2AZ(アベイラビリティゾーン) にまたがる必要があります。
そのため、ここでは最低2つ、AZの異なるプライベートサブネットを用意ください。
NATゲートウェイは共用で構いません。
1.4. ネットワーク設定
EKSクラスターのネットワーク設定では、以下を設定する必要があります。
- VPC(1つのみ)
- サブネット(最低2つのAZ)
- セキュリティグループ
AWSアカウントにはデフォルトのVPCと、
それに付随するパブリックサブネットが3つとセキュリティグループが1つ、
既に作成されていると思います。(私はありました)
また、Fargateに設定するためのプライベートサブネットが最低1つ必要になります。
今回私は以下を設定しています。
- デフォルトのVPC
- デフォルトのパブリックサブネット2つ(複数AZ)、プライベートサブネット
1つ2つ(複数AZ) デフォルトのセキュリティーグループ
EKSクラスターに設定すべきセキュリティグループについては、
Amazon EKS セキュリティグループの考慮事項
に記載されています。
これはVPCのデフォルトセキュリティグループと同等の設定なので、問題ありません。
また、APIサーバーエンドポイントのプライベート/パブリック設定ですが、
自分のPCからkubectl
コマンドを使って操作する必要があるため、パブリック設定をONにしています。
セキュリティを考えるのであれば、同じVPC内にEC2を立ててそこから操作するべきなのかもしれません。
(2020 3/30追記)
2点修正点があります。
- プライベートサブネットは2つ(複数AZ)を設定する
- セキュリティグループの設定は必要ない
1点目は上記でも記載していますが、ALBを使用する際に必要になるためです。
2点目に関しては、ここでのセキュリティグループは追加で必要な時に設定するようです。
クラスターのセキュリティグループは自動で設定されます。
1.5. ロギング、タグ設定
Loggingは全て無効化のままで良いです。
必要なものを有効化することで、CloudWatchにログが送られるので、興味があったら設定してみてください。
Tagsにはクラスターの名前を設定します。
「Add tag」を選択すれば入力欄が出てきます。
EKSクラスターの設定は以上になるので、「作成」を実行してください。
クラスターの作成には数分かかります。
2. Fargateプロファイルの作成
EKSクラスターを作成したら、次にFargateプロファイルを作成します。
Fargateプロファイルでは、Fargate上で起動するPodを指定することができます。
Podとは
1つ以上のアプリケーションコンテナのグループ
基本的にはPod=コンテナのイメージで良いと思います。
ただ、1つのPodには複数のコンテナを共存させることもできることを、覚えておいてください。
Nodeとは
Podは常にノード上で動作します。
ノードはワーカーマシンであり、仮想・物理マシンのどちらであってもかまいません。
Node=サーバーです。
FargateおよびEC2を指します。
まとめると
Node上でPodは動作する ≒ Fargate上でコンテナは動作する
(厳密には違うかもしれません)
では実際にFargateプロファイルを作成していきましょう。
作成したクラスターの画面から、「Fargateプロファイルを追加」を選択します。
2.1. プロファイル設定・タグ設定
ここでは以下の4項目を設定します。
- プロファイルに設定する名前
- ポッド実行ロール
- サブネット
- タグ
サブネットには、プライベートサブネットを設定する必要があります。
全て設定したら、「Next」を選択します。
ポッド実行ロールとは、Fargate(Node)上でコンテナ(Pod)を作成する際に使用するIAMロールです。
Fargate(Node)上にはコンテナイメージがないため、クラスターからそのイメージを取得する必要があります。
未作成であれば、新規に作成が必要です。次の章でその手順を説明します。
サブネットはクラスターに設定されたサブネットの中から選択する必要があります。
Fargateは選択されたサブネットの中のいずれかに起動されます。(冗長化する場合は、別のサブネットに起動することが可能)
サブネットを1つのみにすれば、Fargateを起動するサブネットを固定することが可能です。
(2020 3/30追記)
ALB Ingress Controllerに対応するため、プライベートサブネットは最低2つ(複数AZ)を指定してください。
2.2. ポッド実行ロールの作成(未作成の場合)
以下、IAMロールが未作成の場合に実施してください
手順1.2
と同様の手順で、IAMロールを作成していきます。
Fargateプロファイル設定画面の「ロール名」を選択することで、別タブにIAMロール作成画面が表示されるので、「ロールの作成」を選択します。
次にロール作成画面にて、
「EKS」 > 「EKS - Fargate pod」 > 「次のステップ:アクセス権限」> 「次のステップ:タグ」
と選択していきます。
>>>
次にNameタグを設定し、ロール名にも同様の設定をしたら、「ロールの作成」を実行します。
>>>
これでFargateプロファイルに必要な、ポッド実行ロールが作成できました。
手順2.1
に戻り、Fargateプロファイルの設定を続けてください。
2.3. ポッドセレクタの設定
次に、ポッドセレクタを設定します。
Fargate上に起動するPodの条件を指定することができます。
ここでは、以下の名前空間(namespace
)を持つPodをFargateで起動する設定をしています。
- handson(今回デプロイするアプリ用)
- kube-system(Kubernetesで使用されるnamespace)
- default
その名前空間の中でも更に条件をつけることが可能です。
「ラベルを一致させる」を選択することで設定できますが、今回は行いません。
「次へ」を選択したら、確認画面が表示されるので「作成」を実行しましょう。
これでFargateプロファイルが作成されます。
3. kubectl
コマンドでサービスをデプロイ
以降はvol.2の記事で解説していけたらと思います。。
記事は近日中(来週目標)に作成して公開します!!
(2020 3/31追記)
vol.2の記事を作成しました!
【AWS】EKS on Fargateでゲームをデプロイしてみたので解説してみる(with Ingress Controller, 2048)vol.2
まとめ
想像以上に時間がかかってしまいました。
Ingress Controllerの設定周りでだいぶ苦戦してしまっています。。
KubernetesやEKSを初見で触った時には、
数時間で完全理解!わりとゴツいKubernetesハンズオン!!
の記事に本当にお世話になりました。
図解付きで説明されていて、非常にわかりやすいと感じました。
こちらもぜひ、参考にしてみてください。
(2020 3/30追記)
今回命名にスネークチェーン(aaaa_bbb)を使用していますが、
AWSでは基本的に-(ハイフン)を使用することが望ましいかもしれません。
CloudFormationでは_(アンダーバー)が使えないことや、自動で作成されるリソースに-(ハイフン)が使われているためです。
とりあえずこの記事の範囲であれば問題はなさそうですが。
参考
AWS公式
- AWS re:Invent 2019
- Amazon EKS の機能
- AWS Fargate
- Amazon EKS セキュリティグループの考慮事項
- AWS Fargate プロファイル
- ポッド実行ロール
その他記事
Author And Source
この問題について(【AWS】EKS on Fargateでゲームをデプロイしてみたので解説してみる(with Ingress Controller, 2048)vol.1), 我々は、より多くの情報をここで見つけました https://qiita.com/hesma2/items/b575d52b592350e63d95著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .