Amazon EKS への道
~ EKS 再入門 ~
青柳 英明
2019/10/19
JAWS-UG 福岡 「7度目もちょっと濃い目にAWSの話をしてみよう」
はじめに 1
・セッション資料は終了後に公開します
・ガンガンTweetしてください
・質問や感想など、お気軽に声をお掛けください
ハッシュタグ: #jawsug #jawsugfuk
自己紹介 2
青柳 英明
所属: クラスメソッド 福岡オフィス
経歴:
クラウドおじさん
職業: AWSソリューションアーキテクト
オンプレインフラおじさん LV20
LV1 コアメンバーです
本日お話しすること 3
お話しすること
・EKS環境の構築方法 (概要)
・EKSに特化したKubernetesの解説
お話ししないこと
・Kubernetesの全般的な技術解説
・PodやServiceの作成方法
コンテナ/Dockerとは
Kubernetesとは
Amazon EKSとは
4
コンテナとは 5
仮想サーバ
HWリソース
OS
仮想HW
OS
App
App
仮想HW
OS
App
App
仮想HW
OS
App
App
コンテナ
HWリソース
OS
App App App
・疑似的な環境を作り込む ・「壁」を作って環境を分離
・サーバ環境の提供 ・プロセス実行環境の提供
コンテナ(Docker)の利点 6
(1) 動作が軽い、起動が速い
・障害からの素早い復帰、要求に合わせて迅速にスケーリング
(2) ホスト環境にかかわらず、同じ動作をする
・開発/検証/本番環境、オンプレ/クラウドで同じコンテナが動作
(3) 「Docker Hub」というエコシステムの存在
・OS/ミドルウェアベンダによる豊富なコンテナイメージ提供
Kubernetesとは 7
単体ホスト上で
コンテナを動かす
多数のホスト上で
大量のコンテナを動かす
…
…
・稼働コンテナ数に限界
・ホスト障害=全停止
・ホスト追加でスケーリング
・冗長化による対障害性
多数のコンテナを管理する仕組み=コンテナオーケストレーションの
デファクトスタンダード → Kubernetes
Kubernetesの構成要素 8
APIサーバー
コンテナ管理
管理DB
管理コンポーネント用ホスト コンテナ実行ホスト
コントロールプレーン データプレーン
(マスターノード) (ワーカーノード)
Amazon EKSとは 9
アンマネージド
マスターノード ワーカーノード
マネージド
マスターノード
サーバ構築不要
サーバ管理不要
ワーカーノード
APIサーバー
コンテナ管理
管理DB
APIサーバー
コンテナ管理
管理DB
AWSが提供する「マネージドKubernetesサービス」
Amazon EKSの歴史
10
Amazon EKS アップデート履歴 11
2017/11: re:Invent 2017で発表、招待制のプレビュー開始
2018/06: 正式リリース (バージニア北部、オレゴン)
2018/08: GPUインスタンスのサポート
2018/08: Holizontal Pod Autoscaler(HPA)のサポート
2018/10: ダイナミックアドミッションコントローラのサポート (Istioが使用可能に)
2018/11: ALBイングレスコントローラーのサポート
2018/11: Cloud Mapと統合
2018/12: コントロールプレーンのインプレースアップデート
2018/12: 東京リージョン対応
※ 対応リージョン拡大やセキュリティ対応などを除いた主なものを記載しています
Amazon EKS アップデート履歴 12
2019/03: APIエンドポイントのプライベートアクセスサポート
2019/03: App Mesh一般提供開始
2019/04: コントロールプレーンのログをCloudWatch Logsへ出力可能に
2019/05: eksctlコマンドを使用した開始手順の提供
2019/05: AWS CLIのeks get-tokenコマンドの提供 (aws-iam-authenticatorが不要に)
2019/06: ECR PrivateLink、Podセキュリティポリシーのサポート
2019/09: IAM Roles for Service Accounts
2019/09: EBS CSI Driver
2019/09: EFS CSI Driver
2019/10: Windowsノードのサポート
主なものだけでも、これだけのアップデートが行われています!
EKSを構築するには
13
以前の構築手順 14
1. EKSサービス用のIAMロールを作成
2. EKS環境を配置するVPCネットワーク環境を作成
3. EKSコントロールプレーンを作成
4. 作成したEKSコントロールプレーンへkubectlコマンドで接続
5. EKSワーカーノードとなるEC2インスタンスをプロビジョニング
6. EC2インスタンスをEKSコントロールプレーンから認識させる
7. EC2インスタンスがEKSワーカーノードとして組み込まれたことを確認
現在の構築手順 15
新コマンドラインツール eksctl を使用
10~20分後
$ eksctl create cluster --name eks-sample
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-17-77.ap-northeast-1.compute.internal Ready <none> 75s v1.14.7-eks-1861c5
ip-10-0-63-243.ap-northeast-1.compute.internal Ready <none> 75s v1.14.7-eks-1861c5
ip-10-0-71-167.ap-northeast-1.compute.internal Ready <none> 75s v1.14.7-eks-1861c5
[✔] EKS cluster "eks-sample" in "ap-northeast-1" region is ready
eksctl コマンドの動作 16
eksctl create cluster
ネットワーク環境
(VPC/Subnets)
EKS
コントロールプレーン
ワーカーノード
(EC2起動テンプレート/AutoScaling)
「cluster」スタック 「nodegroup」スタック
CloudFormation
eksctl コマンドの動作 17
eksctl create cluster
・必要なIAMロール → 自動的に作成してくれる!
・必要なセキュリティグループ → 自動的に作成してくれる!
・kubectlのconfigファイル → 自動的に編集してくれる!
eksctl コマンドのオプション 18
--version
--vpc-cidr
--node-type
--nodes
--node-ami
Kubernetesバージョン (例:1.14)
VPCのCIDR (例:192.168.0.0/16)
ワーカーノードのインスタンスタイプ (例:m5.large)
ワーカーノードの数 (例:2)
ワーカーノードのAMI (OS種類、GUIインスタンス、等)
詳しい解説はこちら (具体的な実行例もあります)
https://dev.classmethod.jp/cloud/aws/getting-started-amazon-eks-with-eksctl/
ネットワーキング
19
以前のEKSクラスターのネットワーク構成 20
VPC
Public Subnet
Availability Zone
Public Subnet
Availability Zone
Internet Gateway
Elastic Load Balancer
Worker Nodes
Containers
Worker Nodes
Containers
パブリックサブネットのみの構成
(セキュリティグループやアクセス認証によってセキュリティは担保)
現在のEKSクラスターのネットワーク構成 21
VPC
Private Subnet
Public Subnet
Availability Zone
NAT Gateway
Private Subnet
Public Subnet
Availability Zone
NAT Gateway
Internet Gateway
Elastic
Load Balancer
Worker Nodes
Containers
Worker Nodes
Containers
eksctl は標準でパブリック+プライベートサブネット構成を作成
プライベート専用ネットワーク構成 (Optional) 22
VPC
Private Subnet
Availability Zone
Private Subnet
Availability Zone
Worker Nodes
Containers
Worker Nodes
Containers
プライベートサブネットのみの構成
Elastic Load Balancer
(DirectConnect経由でオンプレからのみアクセス可とする、等)
コントロールプレーンの接続エンドポイント 23
AWS Cloud
EKSコントロールプレーン
Internet
接続エンドポイント
(パブリック)
kubectl / REST API
[EKSの標準設定]
インターネット経由でアクセス
(認証情報によって接続制限)
コントロールプレーンの接続エンドポイント 24
AWS Cloud
EKS
コントロールプレーン
Internet
接続エンドポイント
(プライベート)
VPC
[接続をプライベートに限定]
※ ただし eksctl では作成できないので、
AWS CLI 等での設定が必要
シチュエーション例:
・踏み台サーバの使用を強制
・DX経由でオンプレから接続
kubectl / REST API
アクセスコントロール
25
コンテナ(Pod)単位のアクセス制御 (IRSA) 26
S3 Bucket-A
Role-A
S3 Bucket-B
Role-B
Pod
A
Pod
A
Pod
B
Pod
B
Host-1 Host-2
ホスト単位でしか
アクセス権限を
設定できなかった
[つい最近まで]
コンテナ(Pod)単位のアクセス制御 (IRSA) 27
S3 Bucket-A
Role-A
S3 Bucket-B
Role-B
Pod
A
Pod
B
Pod
A
Pod
B
Host-1 Host-2
ServiceAccount-A ServiceAccount-B
Pod単位で
IAMロールに紐づいた
アクセス権限を
設定可能に
[IRSA導入後]
おわりに
28
おわりに 29
今回は、EKSを使い始める際の知識・手順を中心にお話ししました。
まだまだEKSには様々な機能やトピックがあります。
・各種AWSリソースとの連係 (LB/Storage/etc.)
・App MeshやCloud Mapとの連係
・CI/CD関連
機会があれば、またお話したいと思います!
30
ご清聴ありがとうございました
SlideShareスライド一覧 EKS関連ブログ記事

Amazon EKS への道 ~ EKS 再入門 ~

Editor's Notes

  • #2 【表紙】 ※このまま文字を流し込むだけで使えます。 ・センターラインを揃える。 ・文章が長くなる場合には適当な位置で改行する。 ・タイトル+サブタイトル と 日付 は情報レベルが違うので、マージンをとる。同じ情報は近くにまとめる。