「AWS Black Belt Online Seminar Amazon Elastic Container Service for Kubernetes (Amazon EKS)」の自分向けメモ
EKSって何?......レベルの人向け
何故コンテナなのか
- パッケージング
- 配布
- イミュータブルインフラストラクチャ
上記が人気の理由
1台のサーバーでDockerコンテナを利用するのは簡単だが、サーバーが増えると管理が大変になっていく
Kubernets(K8s)概要
- 複数ホスト間でのアプリの管理
- デプロイ、メンテ、スケーリング機能
- CNCF(Cloud Native Computing Foundation)による管理、推進
できること
- ホスト管理、スケジューリング
- コンテナの死活管理
- オートリカバリ
- 再起動
- サービスディスカバリ、ロードバランシング
- 負荷分散
- アプリ設定の管理
- バッチ実行
- エコシステムとの連携
アーキテクチャ
Workerとplaneで構成される
- k8s master(Control plane)
- k8s APIを実行するためのCLIであるkubectl(キューブコントロール)で操作する
- Worker Node
- EC2インスタンス群
- 実行環境
Control plane
- etcd:3つに分散されたKVS
- Kubectlからload balancer経由でetcdにアクセスする
- 構成、管理するのは大変 ⇒ EKSの誕生
- Worker Nodeを配置するVPCの用意だけでよい
Workloadsリソース
リソースのうち、コンテナ実行に関するリソースは以下
Pods
- 最小デプロイ単位
- 1Podに1つのコンテナが基本
- 1Podに複数コンテナを含むことも可能
- VolumeやNetworkを共有し、コンテナ間はlocalhostで通信
ReplicaSet
- Podのレプリカを作成し、Podの数を維持するリソース
- ロングランニングなPod向け
- 障害時に別NodeにPodを作成する
Deployment
- 複数のReplicaSetを作成、管理
- Podのローリングアップデートやロールバックを実現するためのリソース
- ローリングアップデート:バージョンアップ時に新バージョンの起動、旧バージョンの停止をする
DeamonSet
- 選択したノードの組に対して、各ノードにPodを1つ動かすためのリソース
- fluentdなどログ収集用のノードで利用する
Job
- 1つ以上のPodを作成し、指定された数のPodが正常に完了するようにコントロールするリソース
- Podが失敗した場合は新しいPodを作成する
- CronJob:Jobを時間通りに実行する
Service/Ingressリソース
- 外部公開する際のリソース
- Serviceリソース
- 外部からのアクセスをロードバランシングできる
- Ingress
- ALBを公開できる
EKS概要
- 運用難易度の高いControl planeのマネージドサービスで提供
- K8sをそのまま動かせる
- 2018年に東京リージョンで利用可能になった
使い方
- クラスター作成
- Worker Node配置
- アタッチ
事前準備
- kubectl等のインストール
- ロール、VPC作成
クラスター作成
- CLIで作成可能
- クラスター名
- ロール指定
- サブネット指定
- セキュリティグループ(ENIに適用する)
- kubeconfigの作成
↑Control plane作成完了
Worker Node配置
- テンプレートから作成完了
- インスタンスタイプやEKS最適化AMIを指定可能
Worker Nodeをクラスターに参加させる
- ファイルをダウンロードし、インスタンスロールを記載し、適用で参加
- CNI(Container Networking Interface)を利用し、シンプルでセキュアなネットワークの構築が可能
アドオン起動
- オートスケーリング
- Worker NodeとPodを考慮する
- k8s自体は考慮不要
- Fluentdを用いたログ収集
- EKS Deployment Pipeline
- コミットをトリガーにローリングアップデートまで自動化が可能