Pro Yearly is on sale from $80 to $50! »

0526_eks101

 0526_eks101

B2f2e01a1eb9dd92f8ed5b2dd414a2b8?s=128

TaxiN

May 26, 2020
Tweet

Transcript

  1. EKS 101 2020 / 05 / 26 Kubernetes Novice Meetup

    @taxin_tt
  2. Who am I ? @taxin_tt • AWS, Python, Kubernetes •

    Kubernetes歴: 8ヶ月くらい
  3. Today’s Talk • 話すこと • EKSとは? • クラスタの作成方法 • 作成したクラスタを利用した簡単な検証

    (Deploymentの作成) • EKSを使う上で気になる点 +α • 話さないこと • Kubernetesとは? • コンテナとは?
  4. Kubernetesを触ってみたい

  5. What can we use for Practice? • kubeadm • Kind

    (Kubernetes in Docker) • Kubernetes Service ◦ AKS (Azure) ◦ EKS (AWS) ◦ GKE (GCP) 弊社のKubernetes Servicesが含まれてないぞ...! という方はTwitterでコメント下さい ;-)
  6. What can we use for Practice? • kubeadm • Kind

    (Kubernetes in Docker) • Managed Services ◦ AKS (Azure) ◦ EKS (AWS) ◦ GKE (GCP)
  7. EKSを触ってみよう

  8. その前に...

  9. AWSにおけるコンテナ環境

  10. AWSにおけるコンテナ環境 Control Plane / Data Plane を一種類ずつ組み合わせて環境を用意する Control Plane コンテナを管理する

    コンポーネントが稼働する場所 ECS EKS Data Plane ユーザーが作成した コンテナが稼働する場所 EC2 Fargate
  11. AWSにおけるコンテナ環境 Control Plane / Data Plane を一種類ずつ組み合わせて環境を用意する → 他のクラウドベンダーが提供するコンテナサービスと考え方が異なる

  12. Why?

  13. None
  14. ビルディング・ブロック • AWSの一つ一つのサービスをブロックとして 複数のブロックを組み合わせて要件にあったシステムを作るという考え方 ◦ 基盤系サービス:EC2, RDS, S3 ◦ +

    アプリケーション関連サービス:CloudFront, SQS/SNS ◦ + 運用系サービス:Cloudwatch, Systems Manager, Codeシリーズ ◦ + ... • 各ブロックはAPIで連携するため柔軟なシステムの構築が可能
  15. ビルディング・ブロック 複数のブロックを組み合わせてシステム(=コンテナ環境)を作る Control Plane コンテナを管理する コンポーネントが稼働する場所 ECS EKS Data Plane

    ユーザーが作成した コンテナが稼働する場所 EC2 Fargate
  16. AWSにおけるKubernetes (EKS)

  17. What is EKS? • EKS = (ざっくり言うと) AWSマネージドのKubernetesサービス ◦ Control

    Planeとしての役割を担う • Data Plane ◦ EC2 or Fargateを選択する • 課金 ◦ 0.10 USD/h (EKS) + 0.0544USD/h (EC2 / t3.medium) + EBSの料金 etc. = (Worker Nodeの数が2のクラスタだと) 0.209USD/h +α
  18. (今度こそ) EKSを触ってみよう

  19. 試してみること • クラスタの作成 • Deployment (nginx) の作成 + 動いているコンテナへのアクセス

  20. Step0: Set up • kubectl ◦ kubernetesと通信する際に利用するコマンドラインツール ▪ homebrewを利用して設定 (mac)

    $ brew install kubectl $ kubectl version Client Version: version.Info{... ,GitVersion:”1.17.2”,...}
  21. Step0: Set up • AWS CLI ◦ AWSサービスの作成・設定をするためのコマンドラインツール ▪ (ver1)

    pip or インストーラーを利用して設定 $ pip3 install awscli --upgrade --user $ aws --version aws-cli/1.16.230 Python/3.7.6 Darwin ...
  22. Step0: Set up • eksctl ◦ EKSベースのクラスタを作成するためのコマンドラインツール ◦ クラスタを構成する複数のAWSリソースをまとめて作成・設定してくれる $

    brew tap weaveworks/tap $ brew install weaveworks/tap/eksctl $ eksctl version 0.16.0
  23. Step0: Set up • eksctl ◦ 設定値をYAMLで渡すことも可能 ◦ クラスタ作成時のデフォルト値に注意 ▪

    InstanceType(EC2): m5.large
  24. • クラスタ作成用のコマンドを実行 $ eksctl create cluster -f ./cluster.yaml Step1: Create

    k8s Cluster
  25. • クラスタが正常に作成されたかを確認する $ kubectl get nodes Step1: Create k8s Cluster

  26. Step1: Create k8s Cluster • (+α) MFA有効化アカウントを用いてクラスタを作成する場合 ◦ https://aws.amazon.com/jp/premiumsupport/knowledge-center/authenticate-mfa-cli/

  27. Step2: Deploy nginx • Deploymentを作成する ◦ マニュフェストファイルはexampleとして提供されているものを利用 $ kubectl apply

    -f https://k8s.io/examples/controllers/nginx-deployment.yaml https://kubernetes.io/ja/docs/concepts/workloads/controllers/deployment/
  28. • 定義したPodが正常に作成されたかを確認する $ kubectl get pods Step2: Deploy nginx

  29. Step3: Access nginx • 任意のPod (nginx-deployment-xx) を指定してポートフォワーディング $ kubectl get

    pods $ kubectl port-forward nginx-deployment-xxxx 32711:80
  30. Step3: Access nginx

  31. • localhost:32711 に対してブラウザからアクセスする ◦ 正常にアクセスできれば下記のような画面が表示される Step3: Access nginx

  32. EKSを使う上で気になる点 +α

  33. EKSを使う上で気になる点 • 1)「どのようなブロックでクラスタが構成されているか」の理解 ◦ Kubernetesクラスタの運用に携わる人は必須 ◦ eksctlは詳細を知らなくてもクラスタを作成できてしまう

  34. EKSを使う上で気になる点 • 2) KubernetesとAWSのサービスの対応関係 ◦ 何のAWSサービスを使って実現しているかを把握すると理解が進む e.g.) Service ( Type:

    LoadBalancer ) - NLB or CLB (NodeがEC2の場合) https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/load-balancing.html
  35. +α • 覚えることは多いように感じる (Kubernetes + AWS) ◦ (今すぐ) 覚えなくてもいいこと も結構ある

    ◦ Indexをはっておくだけでも十分 • 一旦は、自分のやってみたいことをやってみる ◦ 必要になったタイミングで、知識のインプット + クラスタでの検証 ◦ だからこそ、クラスタの簡単な作り方を知っておくのは大事!
  36. まとめ • Kubernetes + AWSのサービスで色々なことができる • EKSやっていきましょう!

  37. Thank you for Listening !

  38. https://eksctl.io/ https://github.com/kubernetes/examples 参考リンク

  39. (+α) Monitoring

  40. Kubernetes - Monitoring • Prometheus • Datadog • Cloudwatch Container

    Insights ◦ モニタリング用のコンポーネントのデプロイのみでセットアップ可能 (= AWSのサービスだけでモニタリングに対応できる ) ◦ Container Insightsのメトリクス取得は料金は発生する ▪ 料金試算のサイトもあるので不安な方は試算してみるのがおすすめ Amazon CloudWatch Pricing – Amazon Web Services (AWS)
  41. Kubernetes - Monitoring • Cloudwatch Container Insights ◦ 1) CloudWatch

    Agent / Fluentd のデプロイ ◦ 2) CloudWatchのダッシュボードでのメトリクスの確認 • ※ 事前にWorker Node用のIAM Roleに下記のポリシーをアタッチ ◦ CloudWatchAgentServerPolicy
  42. Kubernetes - Monitoring • CloudWatchAgentServerPolicy ◦ eksctl用の設定ファイル内で指定可能 ◦ 下記のPolicyも必要なので注意 ▪

    AmazonEKSWorkerNodePolicy ▪ AmazonEKS_CNI_Policy
  43. • セットアップ用のコマンドを実行 ◦ cluster-name / cluster-regionを置き換えてコマンドを実行 $ curl https://raw.githubusercontent.com/aws-samples/ .../quickstart/cwagent-fluentd-quickstart.yaml

    \ | sed "s/{{cluster_name}}/cluster-name/;s/{{region_name}}/cluster-region/" \ | kubectl apply -f - https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-quickstart.html Step1:Cloudwatch Agent/Fluentdのデプロイ
  44. Step1:Cloudwatch Agent/Fluentdのデプロイ • Cloudwatch Agent / FluentdのPodがデプロイされていることを確認

  45. Step2:ダッシュボードでのメトリクスの確認 • CloudWatchのダッシュボードから概要のリンクをクリックして 「Container Insights」を選択する

  46. Step2:ダッシュボードでのメトリクスの確認 • Container Insightsのダッシュボードからメトリクスを確認する ◦ 1) デプロイしたPodの負荷状況 (CPU/メモリの利用率)

  47. Step2:ダッシュボードでのメトリクスの確認 • Container Insightsのダッシュボードからメトリクスを確認する ◦ 2) クラスタを構成するWorker Nodeの負荷状況 (CPU/メモリの使用率 +α)