今こそ振り返るEKSの基礎

C47bda32c8455a59471cd7e19c32c074?s=47 濱田孝治
January 23, 2020

 今こそ振り返るEKSの基礎

皆さん、EKS始めるときeksctl使ってますか?コマンド一発でAWS関連リソースやインフラ一式できあがる超便利ツールですが、逆に個別のAWSリソースがどのように作成されているか、クラスターに紐づくVPCやNodeにはどのような制約があるのか、IAM周辺がどのように処理されているのか、そのあたり隠蔽されて分かりづらい部分あるんじゃないでしょうか。

このセッションでは、改めてEKS周辺のAWSリソースがどのように関連して動作しているのかを振り返りつつ、今日のEKS祭りのためのベース知識を皆さんと共有できればと思います。

C47bda32c8455a59471cd7e19c32c074?s=128

濱田孝治

January 23, 2020
Tweet

Transcript

  1. 今こそ振り返る EKSの基礎 そしてあなたは 今⽇ EKSを完全に理解する…

  2. 2 ⾃⼰紹介 濱⽥孝治(ハマコー) •クラスメソッド(株) •AWS事業本部コンサルティング部 •好きなサービス •ECS、EKS、CloudFormation

  3. 3 @hamako9999 ハマコー

  4. 4 #jawsug #jawsug_ct

  5. 5 今⽇のイベントにおける登壇の位置付け 19:00 - 19:20 今こそ振り返るEKSの基礎 濱⽥孝治 / クラスメソッド AWS事

    業本部コンサルティング部 19:20 - 19:45 コンテナうまみつらみ〜Kubernetes初⼼ 者がEKSと格闘した1年を振り返る〜 多⽥ 吉克(Tada Yoshikatsu) - エ ンジニア, (株)いい⽣活 サービス プラットフォーム開発部 19:50 - 20:15 Kubernetesをめぐる冒険 坂本 諒 / Chatwork 20:15 - 20:40 OSSから理解するEKSとそのエコシステ ムについて 太⽥ 航平(Kohei Ota/inductor) - ZOZOテクノロジーズ MLOpsチーム エンジニア 20:45 - 21:15 スーパー LT タイム LT✕5本
  6. 6 EKSの基礎ってなんやねん︖

  7. 7 昔の俺 ⾃分のEKSの始め⽅

  8. 8 ⾃分のEKSの始め⽅ 1. kubernetes触りたい 2. どこでやろ。やっぱり慣れてるからAWSつかうか 3. eksctl、マジ神︕ 4. [kubectl

    apply]で、コンテナできた︕環境できたの で、kubernetes本の内容試してみるで︕ 5. kubernetesおもろいやん︕ワッショイワッショイ!!
  9. 9 こんなイメージ eksctl kubernetesオモロイなぁ Amazon EC2 Elastic Load Balancing (ELB)

  10. 10 実際 eksctl で、これなにやってるんやろ︖ Amazon EC2 Elastic Load Balancing (ELB)

  11. 11 https://eksctl.io/

  12. 12 eksctl create clusterで出来上がるAWSリソース $ eksctl create cluster • EKS

    ControlPlane • VPC, InternetGateway, route table, subnet, EIP, NAT Gateway, security group • IAM Role, Policy • node group, Worker node(EC2) • 〜/.kube/config これだけのリソースが、たったあ れだけのコマンドで出来上がる 驚き
  13. 13 めちゃくちゃ便利なだけに eksctlを使っているだけだと AWSのリソースに対する理解が 深まらない

  14. 14 EKS運⽤するにあたり出てきそうなあるあるネタ あなたはこれらの運⽤に即座に対応できるでしょうか︖ • クラスターのアップデート、実際どないしよ • クラスター触れる⼈を増やしたい • 既存のクラスターVPCに別のクラスターを接続させたい •

    ノードグループを複数VPCに展開したい • NAT Gateway⾼いからInternetGatewayだけにしたい • コントロールプレーンとワーカーノードを別AWSアカウントで管理 したい • 2AZのVPCを3AZに拡張したい。もちろんノードも使いたい
  15. 15 あらためて感じた あーなんもわかってないわ

  16. 16 EKSの開始⽅法は⼤きく分けて2つ ① eksctlを使う ② コンソールを使う できることは同じだがこちらはステッ プバイステップでポチポチ作っていく

  17. 17 基本の流れはこちらにあります https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started-console.html

  18. 18 今⽇の趣旨 eksctl EKSをもっと⻑きに渡っ て運⽤するためにはここ をきちんと理解する必要 がある Amazon EC2 Elastic

    Load Balancing (ELB)
  19. 19 Agenda • コンソールによるEKSの開始⽅法の解説 ① Amazon EKSサービスロール作成 ② EKSクラスターVPCの作成 ③

    EKSクラスターの作成 ④ kubeconfigの設定 ⑤ マネージド型ノードグループの起動 • オススメのEKS学習マテリアル
  20. 20 ①Amazon EKS サービスロールの作成

  21. 21 EKSクラスターが利⽤するサービスロールを作成 • EKSクラスターが他のAWSリソースに対してアクセスするた めのロールを作成。必須のAWSマネージドポリシーは2つ • AmazonEKSServicePolicy • EKSがKubernetesクラスタを作成〜運⽤するためのポリシー •

    例)クラスターログの転送(logs:PutLogEvents) • 例)VPCに作成するENI(ec2:CreateNetworkInterface) • AmazonEKSClusterPolicy • KubernetesクラスタのコントロールプレーンがAWSリソースを 操作するためのポリシー • 例)autoscaling,ec2,elasticloadbalancing
  22. 22 それぞれのポリシーの位置付け EKS Amazon EC2 Elastic Load Balancing (ELB) AmazonEKSServicePolicy

    AmazonEKSClusterPolicy
  23. 23 公式ドキュメント(IAMロール) https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/service_IAM_role.html

  24. 24 深夜のリプ合戦も参考になるよ︕ https://twitter.com/hamako9999/status/1219987231256924161

  25. 25 ②EKSクラスターVPCの作成

  26. 26 Amazon EKSクラスターVPCの作成 • クラスター作成前にクラスターで利⽤するVPCを作 成する必要有り • EKS CreateCluster APIの必須パラメータ

    • name︓クラスターの名前 • role-arn︓サービスロールのARN • resources-vpc-config︓クラスターが利⽤するVPCの 情報 EKSクラスター⽤のVPCを 作らなくては︕
  27. 27 公式ドキュメント(クラスターVPC) https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/network_reqs.html

  28. 28 クラスターVPCの主な要件(1) • 2つ以上のAZ • パブリックサブネット(インターネット⽤ロードバ ランサー) • プライベートサブネット(ワーカーノード⽤) •

    アウトバウンドインターネットアクセス→要NAT Gateway
  29. 29 クラスターVPCの主な要件(2) • VPC IPアドレス指定(RFC 1918)とパ ブリック(⾮RFC 1918)の両⽅を定義 可能 •

    VPCのタグ付け要件 • サブネットのタグ付け要件 • 内部ロードバランサー⽤のプライベート サブネットタグ付け要件 • 外部ロードバランサー⽤のパブリックサ ブネットタグ付け要件 キー 値 kubernetes.io/cluster/<c luster-name> shared キー 値 kubernetes.io/cluster/<c luster-name> shared キー 値 kubernetes.io/role/inter nal-elb 1 キー 値 kubernetes.io/role/elb 1
  30. 30 Amazon EKSクラスターVPCの作成 CloudFormation実⾏ で2層構造のVPCが作 成される ・PublicSubnet2個 ・PrivateSubnet2個 (NAT Gatewayへの

    ルーティング有り)
  31. 31 ③EKSクラスターの作成

  32. 32 Amazon EKSクラスターの作成 • 必須 • Cluster name • Kubernetes

    version • Role︓前で作成したEKSのサービスロール • VPC︓前で作成したクラスターVPC • Subnets︓上で指定したVPCのサブネットが全て表⽰されている ので選択 • ⾮必須 • Endpoint private access • Endpoint Public access • ログ記録
  33. 33 Amazon EKSクラスターの作成 クラスターの作成により、ク ラスターVPC内にコントロー ルプレーンと通信するための ENI(Elastic Network Interface)が作成され、 Kubernetesのコントロール

    プレーンと通信可能となる 同時にクラスター内通信⽤の 専⽤のクラスターセキュリ ティグループが作成される EKS
  34. 34 EKSコントロールプレーンとVPCの関係 Controle Plane VPC VPC Controle Plane A Controle

    Plane B Controle Plane VPC A VPC B これは無理
  35. 35 公式ドキュメント(セキュリティグループ) https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/sec-group-reqs.html KubernetesおよびEKSのバージョ ンにより仕様が違うので注意

  36. 36 ④kubeconfigの作成

  37. 37 kubeconfigとは kubernetesを扱うためのCLIであるkubectlコマンドの 接続先クラスターを管理する設定ファイル クラスター作成直後は、クライアントからkubectlがつ ながらない状態 kubectl kubeconfig 未設定のため つながらない

  38. 38 kubeconfigの作成 以下のコマンド実⾏で⾃動的にkubeconfigを設定して くれる $ aws eks update-kubeconfig –name cluster-name

    - context: cluster: arn:aws:eks:ap-northeast-1:629895769338:cluster/handson-eks-cluster user: arn:aws:eks:ap-northeast-1:629895769338:cluster/handson-eks-cluster name: arn:aws:eks:ap-northeast-1:629895769338:cluster/handson-eks-cluster current-context: arn:aws:eks:ap-northeast-1:629895769338:cluster/handson-eks-cluster ~/.kube/configファイルを⾃動で書き換え (カレントコンテキストも設定)
  39. 39 kubeconfigの作成 user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - --region -

    ap-northeast-1 - eks - get-token - --cluster-name - handson-eks-cluster command: aws 今はaws-iam-authenticatorが不要になりaws cliで トークン取得が可能になっている $ aws eks get-token
  40. 40 kubeconfigの作成 $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP

    PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 10h $ kubectl get nodes No resources found. ようやくkubernetesの世界にたどり着いた ノードはまだない
  41. 41 ⑤マネージド型ノードグループの起動

  42. 42 マネージド型ノードグループの起動 ワーカーノード⽤IAMロールの作成 • AmazonEC2ContainerRegistryReadOnly • ECR参照⽤ • AmazonEKSWorkerNodePolicy •

    ワーカーノードからのEKSクラスターアクセス⽤ • AmazonEKS_CNI_Policy • VPC CNI Plugin⽤ポリシー • ワーカーノードによるネットワーク設定変更⽤ これはなにか︖
  43. 43 公式マニュアル(ポッドネットワーキング) CNIプラグイン は、ワーカー ノードのVPC IP アドレスをポッ ドのIPアドレス に割り当てるプ ラグイン

    https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/pod-networking.html
  44. 44 マネージド型ノードグループの起動 マネージド型ノードグループの作成 • IAMロール、サブネット、リモートアクセス可否 • コンピューティング構成設定(AMIタイプ、インス タンスタイプ、ディスクサイズ) • スケーリングポリシー

    コンソールのEKSクラスター画⾯からポチポチ でできるのでめっちゃ楽
  45. 45 ワーカーノードの起動確認 $ kubectl get node NAME STATUS ROLES AGE

    VERSION ip-192-168-148-252.ap-northeast-1.compute.internal Ready <none> 6m v1.14.7-eks-1861c5 ip-192-168-213-27.ap-northeast-1.compute.internal Ready <none> 6m v1.14.7-eks-1861c5 ノードができた︕︕ EC2にはいろんなタグ が満載
  46. 46 ここまでやってみて はじめてこれが⾔えます

  47. 47 今⽇のゴール EKS完全に理解した Amazon EC2 Elastic Load Balancing (ELB) EKS

  48. 48 ハマコーオススメの EKS学習マテリアル

  49. 49 2019年最終⽉の奇跡 https://qiita.com/advent-calendar/2019/amazon-eks

  50. 50 まとめ • EKSを⻑きに渡って運⽤するには、kubernetesの知 識以前に、各AWSリソースがどのように連携して動 作しているのか知ることが不可⽋ • 公式マニュアルの「コンソールでの開始」を元に じっくりポチポチ始めてみよう •

    Amazon EKS Advent Calendar 2019は宝の⼭
  51. 51 皆さんのこれからの⻑い EKS⼈⽣に幸多きことを 願っております