【レポート】Kubernetes on AWS(Amazon EKS実践入門) #AWSSummit
こんにちは、坂巻です。
2019/6/12(水)~14(金) の期間で開催されている、AWS Summit Tokyo 2019からセッションをレポートします。 本記事は「Kubernetes on AWS(Amazon EKS実践入門)」のレポートになります。
セッション情報
スピーカー:河野 信吾氏 (アマゾン ウェブ サービス ジャパン株式会社)
コンテナオーケストレーションツールとして人気のKubernetesですが、まだ利用に踏み出せていない方も多いのではないでしょうか?AWSではKubernetesの運用を支援するAmazon EKSを提供しています。本セッションではKubernetes初心者の方を対象に、Amazon EKSの概要や始め方、アプリケーションのデプロイを通じて具体的な利用イメージを持っていただきつつ、より効果的でAWSらしい設計手法をご理解いただきます。
レポート
agenda
- コンテナ recap
- Kubernetes
- Amazon EKS
- ユースケースとAWS連携
- ラーニングパス
- まとめ
コンテナ recap
コンテナとは
- ソフトウェアをOS内の独立した環境で実行する技術
- 代表的な実装:Docker
- Build, share and run any application, anywhere
- 依存関係をパッケージング
- 特徴
- ポータビリティ
- いつでも作れていつでも捨てられる
- コードで定義
Dockerコンテナの3つのフェーズ
- Build
- Buildはコンテナイメージを作ること
- Dockerファイルでイメージを定義
- 動作に依存するものを全て記述
- docker build ..
- Share
- イメージレジストリにコンテナイメージを格納
- Public RegistryはDocker Hubなどがある
- docker push ..
- Run
- Dockerエンジンが実行されているホストでコンテナを起動
- docker run ..
コンテナのユースケース例
- マイクロサービスのアプリケーション
- ジョブ実行
- CI/CDの実行
- 機械学習
コンテナ実行(RUN)時の課題と要望
- 1台のホストで全コンテナを動作せるのは簡単だがリソースに限界がある
- 複数ホストでDcokerを実行するホストが増えてくると運用が大変
- 耐障害性
- コンテナホストが停止したらコンテナ全滅、機能停止
- 運用制
- コンテナはどのホストで動かす?リソースは空いてる?
- 通信したいコンテナはどこにいる?IP?名前?
- リソース制限などを一括でかけたい
- スケール
- 負荷に応じてスケールアウトしたい
Kubernetes
Kubernetesとは
- オープンソースのコンテナオーケストレーションツール
- Cloud Native Computing Foundationが開発プロジェクトをホスト
- 通称k8s
Kubernetesが人気の理由
- 成長を続けるユーザー数と活発なコミュニティ
- "Runs Anyware" クラウドでもオンプレでも
- 拡張可能なAPIとエコシステム
- 自分でAPIを作成して拡張も可能
コンテナオーケストレーションツールのデファクトとも言われている
Kubernetesが提供する機能
- ノードにコンテナを自動配置
- 手動スケール/オートスケール
- 自動ローリングアップデート/ロールバック
- 失敗したコンテナの自動復旧
- 通信相手を特定/ロードバランス
- 機密情報や設定の管理
- バッチ実行
コンテナにおける多くの課題を解決する機能を備えている
Kubernetesのインフラ構成
- コントロールプレーン
- オーケストレーション機能
- 本番運用時は冗長化が必須
- データプレーン
- コンテナ実行部分
Kubernetesオブジェクト
- Pod(ポッド)
- デプロイの最小単位「ひとつ以上のコンテナ」から構成
- Pod内コンテナはIPアドレス、ストレージ等を共有
- Service
- Podを名前解決により発見(サービスディスカバリ)
- ロードバランス(L3/L4)
- Deployment
- Podを維持、コントロールするReplicaset(指定Podの数の維持)の管理
Kubernetesマニフェスト宣言的設定
- マニフェスト
- あるべき状態(なってほしい状態)をYAMLやJSONで記述
- 照合ループ
- それぞれが個別に動いた結果の宣言と状態の差分を解消
KubernetesとAWS
- 多くのKubernetesユーザーがAWSでKubernetesを動かしている
- これまではEC2で自前でKubernetesを構築していた
Kubernetes運用の悩み
- コントロールプレーンの運用は"重労働"
- コントロールの冗長化は必須
- 運用中のバージョンアップは大変
- 運用責任はお客様
- ユーザーはもっとアプリケーションを実行する部分に集中したい
Amazon EKS
- Kubernetesのコントロールプレーンマネージドで提供
- Kubernetesのリリースを改変なく利用
- CNCFによるKubernetes準拠の認定既存のエコシステムがそのまま動作
- AWSサービスとのスムーズな連携
- 東京リージョン含め、13リージョンで利用可能
Amazon EKSを使う理由
- 堅牢なコントロールプレーンをマネージドで提供
- ユーザーをコントロールプレーンの運用から開放
- Kubernetesの運用を支援する機能
- バージョンアップ、コントロールプレーンログの集約
- AWSマネージドサービスとスムーズな連携が可能
- 選択可能なデータプレーン(ノード)
- ワークロードに合わせたインスタンスタイプやEC2 AMIを利用できる
Amazon EKSが提供する価値
"Undifferentiated Heavy Lifting"を削減し、ビジネス価値の創出に集中できる
Amazon EKS事/Snapchat
- 性能問題でサービス拡大が困難
- EKSを利用しコスト削減、性能が向上した
EKSをデプロイする方法
- AWSマネジメントコンソール
- AWS CLI
- CloudFormation
- OSS
- eksctl
- terraform
Amazon EKSの構築と利用の準備
- EKS構築に必要な権限を割り当て(IAM)
- 必要なコマンドをインストール
- ekctl
- kubectl
- eksctlコマンドで作成実行
- eksctl create cluster -f 設定ファイル
Kubernetesの世界へようこそ!
- kubectlを使って,Kubernetes APIにアクセス
会場では、eksctlを利用してデプロイのデモがありました!!
ユースケースとAWS連携
HTTP/HTTPS対応のロードバランサーを使いたい
- SSLオフロード、パスベースルーティング、複数ドメイン対応などをしたい
- Ingressオブジェクトによるロードバランサ機能
- ALB Ingress Controller
- AWSのサービスチームがメンテナンスに参加
- ALBを自動デプロイ設定
- Route 53、ACM等その他、AWSマネージドサービスと連携
ログを集約したい
- FluentdのDemonSetを利用して、ログを集約
- https://github.com/fluent/fluentd-Kubernetes-daemonset
- CloudWatch Container Insights(プレビュー)
- コンテナログとメトリクスをCloudWatchに集約
- 数個のマニフェストを適用するだけの、簡単なセットアップ
- EKSコントロールプレーンのログもCloudWatch Logsに配信可能
オートスケールしたい
- 2種類の水平オートスケール
- Podレベル:水平オートスケーリング
- ノードレベル:クラスタオートスケーリング
- ノードレベルはAuto Scalingと連携
- ノード(EC2)でPodのPendingを検知してスケール
デプロイを効率したい
Codeシリーズを利用して、パイプラインを構築
- CodeCommitへpush
- 変更を検知、パイプライン開始
- コンテナをBuild、Amazon ECRにpush
- Lambdaをトリガー
- Golang SDKを利用してDeploymentを更新
- コンテナイメージを取得
Amazon ECR
- スケーラブルなフルマネージドイメージレジストリ
- セキュア(IAM連携、クロスアカウントアクセス、イメージの暗号化)
- ライフサイクルポリシーによるイメージのクリーンアップ
堅牢なデータストアを使いたい
- Amazon RDS(Aurora)、DynamoDB、ElastiCacheなど
- 冗長構成による可用性向上
- リードレプリカによる負荷分散
- 自動バックアップによるデータ保全
- 多彩なデータベースエンジンを選択可能
マネージドサービスの利用を推奨
ラーニングパス
- コンテナ入門 -> 本セッション -> Blackbelt Online セミナー/EKS Workshop(ハンズオン) -> 実際の開発
- GitHubでコンテナ関連のワークロードのロードマップを公開している
まとめ
- AWSはKubernetesのプラットフォームとして豊富な実績をもっており、多くのユーザーが利用している
- EKSはマネージドコントロールプレーン、AWSマネージドサービスとの連携を提供
感想
Kubernetes on AWSの特徴を理解することができました。提示のあったラーニングパスを使用してキャッチアップしていきたいと思います。