Slide 1

Slide 1 text

EKS 101 2020 / 05 / 26 Kubernetes Novice Meetup @taxin_tt

Slide 2

Slide 2 text

Who am I ? @taxin_tt ● AWS, Python, Kubernetes ● Kubernetes歴: 8ヶ月くらい

Slide 3

Slide 3 text

Today’s Talk ● 話すこと ● EKSとは? ● クラスタの作成方法 ● 作成したクラスタを利用した簡単な検証 (Deploymentの作成) ● EKSを使う上で気になる点 +α ● 話さないこと ● Kubernetesとは? ● コンテナとは?

Slide 4

Slide 4 text

Kubernetesを触ってみたい

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

What can we use for Practice? ● kubeadm ● Kind (Kubernetes in Docker) ● Managed Services ○ AKS (Azure) ○ EKS (AWS) ○ GKE (GCP)

Slide 7

Slide 7 text

EKSを触ってみよう

Slide 8

Slide 8 text

その前に...

Slide 9

Slide 9 text

AWSにおけるコンテナ環境

Slide 10

Slide 10 text

AWSにおけるコンテナ環境 Control Plane / Data Plane を一種類ずつ組み合わせて環境を用意する Control Plane コンテナを管理する コンポーネントが稼働する場所 ECS EKS Data Plane ユーザーが作成した コンテナが稼働する場所 EC2 Fargate

Slide 11

Slide 11 text

AWSにおけるコンテナ環境 Control Plane / Data Plane を一種類ずつ組み合わせて環境を用意する → 他のクラウドベンダーが提供するコンテナサービスと考え方が異なる

Slide 12

Slide 12 text

Why?

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ビルディング・ブロック ● AWSの一つ一つのサービスをブロックとして 複数のブロックを組み合わせて要件にあったシステムを作るという考え方 ○ 基盤系サービス:EC2, RDS, S3 ○ + アプリケーション関連サービス:CloudFront, SQS/SNS ○ + 運用系サービス:Cloudwatch, Systems Manager, Codeシリーズ ○ + ... ● 各ブロックはAPIで連携するため柔軟なシステムの構築が可能

Slide 15

Slide 15 text

ビルディング・ブロック 複数のブロックを組み合わせてシステム(=コンテナ環境)を作る Control Plane コンテナを管理する コンポーネントが稼働する場所 ECS EKS Data Plane ユーザーが作成した コンテナが稼働する場所 EC2 Fargate

Slide 16

Slide 16 text

AWSにおけるKubernetes (EKS)

Slide 17

Slide 17 text

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 +α

Slide 18

Slide 18 text

(今度こそ) EKSを触ってみよう

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Step0: Set up ● kubectl ○ kubernetesと通信する際に利用するコマンドラインツール ■ homebrewを利用して設定 (mac) $ brew install kubectl $ kubectl version Client Version: version.Info{... ,GitVersion:”1.17.2”,...}

Slide 21

Slide 21 text

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 ...

Slide 22

Slide 22 text

Step0: Set up ● eksctl ○ EKSベースのクラスタを作成するためのコマンドラインツール ○ クラスタを構成する複数のAWSリソースをまとめて作成・設定してくれる $ brew tap weaveworks/tap $ brew install weaveworks/tap/eksctl $ eksctl version 0.16.0

Slide 23

Slide 23 text

Step0: Set up ● eksctl ○ 設定値をYAMLで渡すことも可能 ○ クラスタ作成時のデフォルト値に注意 ■ InstanceType(EC2): m5.large

Slide 24

Slide 24 text

● クラスタ作成用のコマンドを実行 $ eksctl create cluster -f ./cluster.yaml Step1: Create k8s Cluster

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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/

Slide 28

Slide 28 text

● 定義したPodが正常に作成されたかを確認する $ kubectl get pods Step2: Deploy nginx

Slide 29

Slide 29 text

Step3: Access nginx ● 任意のPod (nginx-deployment-xx) を指定してポートフォワーディング $ kubectl get pods $ kubectl port-forward nginx-deployment-xxxx 32711:80

Slide 30

Slide 30 text

Step3: Access nginx

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

+α ● 覚えることは多いように感じる (Kubernetes + AWS) ○ (今すぐ) 覚えなくてもいいこと も結構ある ○ Indexをはっておくだけでも十分 ● 一旦は、自分のやってみたいことをやってみる ○ 必要になったタイミングで、知識のインプット + クラスタでの検証 ○ だからこそ、クラスタの簡単な作り方を知っておくのは大事!

Slide 36

Slide 36 text

まとめ ● Kubernetes + AWSのサービスで色々なことができる ● EKSやっていきましょう!

Slide 37

Slide 37 text

Thank you for Listening !

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

(+α) Monitoring

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Kubernetes - Monitoring ● Cloudwatch Container Insights ○ 1) CloudWatch Agent / Fluentd のデプロイ ○ 2) CloudWatchのダッシュボードでのメトリクスの確認 ● ※ 事前にWorker Node用のIAM Roleに下記のポリシーをアタッチ ○ CloudWatchAgentServerPolicy

Slide 42

Slide 42 text

Kubernetes - Monitoring ● CloudWatchAgentServerPolicy ○ eksctl用の設定ファイル内で指定可能 ○ 下記のPolicyも必要なので注意 ■ AmazonEKSWorkerNodePolicy ■ AmazonEKS_CNI_Policy

Slide 43

Slide 43 text

● セットアップ用のコマンドを実行 ○ 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のデプロイ

Slide 44

Slide 44 text

Step1:Cloudwatch Agent/Fluentdのデプロイ ● Cloudwatch Agent / FluentdのPodがデプロイされていることを確認

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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