Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSのコンテナウォークスルー

 AWSのコンテナウォークスルー

fun-tech meetup #11 コンテナ/クラウド シリーズ 第2回 ~クラウド編その1~

AWSのコンテナサービスに触れていない方を対象に、「ECS/ECR/EKS/Fargateって何?」から「使った気になりそう」なところまでをウォークスルー!

※Docker, Kubernetesの基礎には触れません

Masataka Yoshida

June 28, 2019
Tweet

More Decks by Masataka Yoshida

Other Decks in Technology

Transcript

  1. はなすこと • AWSのコンテナサービスについて • ECS/Fargate/EKS の使い方 >4 はなさないこと • ECRの使い方

    • プロダクションレベルでECS/EKSをどう動かすか
 コンテナのデプロイ戦略など…
  2. 順番に説明…… >8 Amazon Elastic Container Registry Amazon Elastic Container Service

    Amazon Elastic Container Service for Kubernetes AWS Fargate
  3. 順番に説明…… >9 Amazon Elastic Container Registry Amazon Elastic Container Service

    Amazon Elastic Container Service for Kubernetes AWS Fargate
  4. だいたいこうなっています >10 コントロールプレーン データプレーン Amazon EC2 AWS Fargate Amazon Elastic

    Container 
 Service Amazon Elastic Container 
 Service for Kubernetes Amazon Elastic Container 
 Registry
  5. だいたいこうなっています >11 コントロールプレーン データプレーン Amazon EC2 Amazon Elastic Container 


    Service Amazon Elastic Container 
 Registry コンテナイメージを 保管する コンテナを管理する コンテナを動かす AWS Fargate Amazon Elastic Container 
 Service for Kubernetes
  6. なぜEC2? ECSがコンテナを動かすCPUなどを貸してく れるわけではない! ECSなどのコントロールプレーンは
 コンテナの管理に注力 >13 Amazon EC2 Amazon Elastic

    Container 
 Service そのため、コンテナを動かす場所が必要
 EC2かFargateが使われる このEC2インスタンスにコンテナを置いてもらおう… ECSに頼まれたコンテナ動かしたるでー!
  7. EC2 V.S. Fargate >14 Amazon EC2 AWS Fargate 構築 EC2インスタンスを作って

    ECSに登録してから コンテナの環境を
 決めるだけ コンテナ内に 入れるか ✔ ✘ 料金 安め 高め (2019年1月に値下げ!) nginxのコンテナ 2 vCPU RAMは4GiB nginxのコンテナ 2 vCPU RAMは4GiB c5.xlargeを5台
 ECSクラスターに登録 × 10 × 10
  8. EC2 V.S. Fargate >15 Amazon EC2 AWS Fargate データプレーン の管理

    必要
 (例えばEC2インスタンスに 脆弱性が出たら自分で対処する) 不要 データプレーン の種類 豊富なEC2インスタンス
 から選択可 0.25-4 vCPU 0.5-30GB RAM 余剰リソース 出ちゃうかも… 出ない GPU/Windows コンテナ ✔ ✘
  9. EKSでFargateは使えない Q: Amazon EKS は AWS Fargate と連携していますか?
 A: いいえ。現在は

    Amazon EKS と AWS Fargate の間にはネ イティブな AWS 統合はありません。 https://aws.amazon.com/jp/eks/faqs/ >16
  10. コンテナ動かし方のまとめ >17 コントロールプレーン データプレーン Amazon EC2 Amazon Elastic Container 


    Service Amazon Elastic Container 
 Registry コンテナイメージを 保管する コンテナを管理する コンテナを動かす AWS Fargate Amazon Elastic Container 
 Service for Kubernetes
  11. ECS with EC2の構成要素 >20 タスク定義 どのコンテナを動かすかを決める サービス タスク定義を選択して、コンテナーを どこのECSクラスターに置くか・何個置 くのかを決める

    ECSクラスタ− EC2インスタンスを登録して
 コンテナを動かす場所を作る nginxのタスクを c5.xlargeのクラスターに 10個置きたい もちろんロードバランサー付きで nginxのコンテナ 2 vCPU RAMは4GiB
  12. ECSサービスの削除 >57 Delete the service discovery service created with this

    service.に チェックを入れ “delete me” と入力して削除ボタンをクリック
  13. ECS with Fargateの構成要素 >67 タスク定義 どのコンテナを動かすかを決める サービス タスク定義を選択して、コンテナーを どこのECSクラスターに置くか・何個置 くのかを決める

    ECSクラスタ− 「ネットワーキングのみ」で VPCだけ作る nginxのタスクを クラスターに 10個置きたい もちろんロードバランサー付きで nginxのコンテナ 2 vCPU RAMは4GiB
  14. AWS CLIを導入する >100 pip3 install awscli --upgrade --user [default] aws_access_key_id=

    aws_secret_access_key= Pythonが使える環境で awscli をインストールする ~/.aws/credentialsを編集する [default] region=us-east-1 output=json ~/.aws/configを編集する
  15. kubectl を導入する >101 curl -o kubectl https://amazon-eks.s3-us- west-2.amazonaws.com/1.12.7/2019-03-27/bin/darwin/amd64/ kubectl chmod

    +x ./kubectl mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH AWS用のkubectlをインストールする Docker for Macなどで既にkubectlが導入されている場合は、 $PATH の最初にAWSのkubectlが読み込まれるようにする
  16. ワーカーノードのパラメーター w Stack name: <cluster-name>-worker-nodes w ClusterName: 作成したクラスターの名前 w ClusterControlPlaneSecurityGroup:

    CloudFormationで作成したセキュリティグループ w NodeGroupName: <cluster-name>-worker-nodes w NodeAutoScalingGroupMinSize: スケーリンググループの最小数。デフォルトの1を設定 w NodeAutoScalingGroupMaxSize: スケーリンググループの最大数。デフォルトの3を設定 w NodeInstanceType: t2.small w NodeImageId: EKSワーカーノードで利用するAMIIDの指定 w US West (Oregon) (us-west-2):ami-73a6e20b w US East (N. Virginia) (us-east-1):ami-dea4d5a1 w KeyName: EC2アクセス用のキーペア名 w 作成したものを入力する w 省略するとエラーで中断するため必ず作成する w VpcId: CloudFormationで作成したVPCのID w Subnets: CloudFormationで作成したSubnet >122 【まずは触って体験】リリース直後のAmazon EKSでサンプルアプリケーションを動かしてみ た | DevelopersIO: https://dev.classmethod.jp/cloud/aws/eks-getting-started/
  17. ワーカーノードの設定 >124 curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/ 1.10.3/2018-06-05/aws-auth-cm.yaml あらかじめ用意された設定ファイルを取得する apiVersion: v1 kind:

    ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes 設定ファイル内の rolearn を先程出力されたARNに置き換える
  18. 設定ファイルの適用 >125 kubectl apply -f aws-auth-cm.yaml 設定ファイルをワーカーノードに適用する $ kubectl get

    nodes --watch NAME STATUS ROLES AGE VERSION ip-192-168-115-223.ec2.internal NotReady <none> 0s v1.10.3 ip-192-168-211-91.ec2.internal NotReady <none> 1s v1.10.3 ip-192-168-173-105.ec2.internal NotReady <none> 0s v1.10.3 ip-192-168-211-91.ec2.internal Ready <none> 89s v1.10.3 ip-192-168-115-223.ec2.internal Ready <none> 89s v1.10.3 ip-192-168-173-105.ec2.internal Ready <none> 89s v1.10.3 設定が適用されたか確認する(Ctrl+Cで終了)
  19. アプリケーションの起動 >127 kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/ guestbook-go/redis-master-controller.json kubectl apply -f

    https://raw.githubusercontent.com/kubernetes/examples/master/ guestbook-go/redis-master-service.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/ guestbook-go/redis-slave-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/ guestbook-go/redis-slave-service.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/ guestbook-go/guestbook-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/ guestbook-go/guestbook-service.json サンプルアプリケーションを登録する(6つ)
  20. アプリケーションの削除 >135 kubectl delete rc/redis-master rc/redis-slave rc/ guestbook svc/redis-master svc/redis-slave

    svc/guestbook 設定ファイルをワーカーノードに適用する $ kubectl get services -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 68m <none> $ kubectl get svc --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 68m kube-system kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 68m $ kubectl delete svc kubernetes service "kubernetes" deleted 同じCLUSTER-IPのサービスを削除する
  21. まとめ AWSのコンテナサービスは次の2つ(+1つ)を組み合わせる • コンテナを管理するコントロールプレーン(ECS, EKS) • コンテナを動かすデータプレーン(EC2, Fargate) • コンテナイメージを保管するECR

    >140 ECSはタスク定義、クラスター、サービスの順で組み立てる EKSはクラスター、ワーカーノード、アプリケーションの順で
 組み立てる
  22. 参考 • 「それコンテナにする意味あんの?」迷える子羊に捧げるコンテナ環境徹底比較 #cmdevio2019 | DevelopersIO: • https://dev.classmethod.jp/cloud/aws/cmdevio2019-container/ • Amazon

    ECS入門 〜公式のDockerイメージを使って10分で構築してみる〜 | DevelopersIO: • https://dev.classmethod.jp/cloud/aws/amazon-ecs-entrance-1/ • 【まずは触って体験】リリース直後のAmazon EKSでサンプルアプリケーションを動かしてみ た | DevelopersIO: • https://dev.classmethod.jp/cloud/aws/eks-getting-started/ • [アップデート]EKSを使う際にaws-iam-authenticatorが不要になりました! | DevelopersIO: • https://dev.classmethod.jp/cloud/aws/eks-update-get-token-cmd/ >141