13
10

More than 3 years have passed since last update.

いまさらAmazon EKSを使ってみる (普通のk8sとの違いなど )

Last updated at Posted at 2021-01-23

今更ながら、k8sは使ってるがAmazon EKSはちゃんと使ったことないので気になったポイントまとめ
※2021年1月時点

[1] Amazon EKSとは

  • AWSが提供するマネージドKubernetesサービス(2018 GA)
  • Masterにあたるコントロールプレーン(etcd含む)がサーバレス的に提供され、Worker部分は統合されたEC2(NodeGroup)かFargateでクラスタを構成する
  • re:Invent 2020にてEKS Anywhereという新サービスが発表され、オンプレミス環境のKubernetesの管理拡張も可能になる予定(GCPのAnthos的な感じ)

image.png

Kubernetesバージョンについて

可用性/耐障害性とSLAについて

価格について

  • 基本はクラスタごとに毎時課金 0.10USDと、ワーカーノード(EC2 or Fargate)の利用料
  • その他暗号化のKMSやCloudWatch、S3、ECR(コンテナレジストリ)利用料など関連サービスを利用した料金

Amazon EKS利用のメリット

  • マネージドかつHA構成のコントロールプレーン(etcd含む)が容易に構築できる
  • WorkerノードのAuto Scalingが利用できる(PodではなくNodeレベルのCluster Autoscaler
  • 使った分だけの従量課金
  • 認証認可をKubernetesのRBACAWS IAMを統合できる(AWSユーザ向けの利点)
  • その他のAWSサービスとの統合(例:KMS、Cloud Watch、EFS、などなど)

[2] クラスタ構築関連

実際にクラスタを作成する際に気になったポイント
※所感としてはGKEより複雑な印象

クラスタ作成手段

  • クラスタ作成方法は3種類の方法がある
    • ①AWSコンソールからGUIポチポチ
    • ②AWS標準CLIツール「aws cli」を利用
    • ③公式のEKSクラスタ構築用CLIツール「eksctl」を利用

eksctlとは?

ファイル名 https://eksctl.io/
  • 標準的なAWSサービスはAWSコンソールかaws cliで操作するが、EKSのk8sクラスタ構築は煩雑なためか、EKS k8sクラスタ作成用のCLIが別途提供されている
  • 普通にコンソールからEKS k8sクラスタを作成する場合、Master要素(コントロールプレーン)の他にもVPC/Subnet/SGやIAM、Workerノードの作成など多くの操作手順が必要だが、eksctlはコマンド1つでそれらを自動的に生成し、クラスタ構築してくれる
  • もともとWeaveworks社がGo言語ベースで開発し、OSSとして公開されている
  • 裏でCloud Formationが連携していて、各種必要なAWSリソース生成を行っている
  • GCP GKEでいうとgcloudコマンド相当

eksctlインストール

$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

$ sudo mv /tmp/eksctl /usr/local/bin

eksctlでEKS k8sクラスタ作成

  • 極論でいえば、eksctl create clusterコマンドだけで作成できる
  • 実際は色々なオプションを付ける
  • eksctl create cluster --helpでオプションは参照可能

クラスタ作成例)

eksctl create cluster  \
  --name=test-cluster \      #クラスタ名
  --region=ap-northeast-1 \  #リージョン
  --version=1.18 \           #バージョン
  --node-type=t3.medium \    #Workerインスタンスタイプ
  --nodes=2 \                #Workerノード数
  --nodes-min=2 \            #Workerオートスケール最小
  --nodes-max=2 \            #Workerオートスケール最大
  --node-volume-size=20      #Workerディスクサイズ

※参考:2020/12にリリースされたAWS CloudShellから、kubectlとeksctlをセットアップすればクラスタ作成(CLIコマンド実行)がすぐに試せます
https://aws.amazon.com/jp/blogs/news/aws-cloudshell-command-line-access-to-aws-resources/

  • eksctlで上記コマンドで自動生成された主なAWSリソース
    • Cloud Formationスタック(KSクラスタとWorker(NodeGroup)の2つ)
    • EKSクラスタ
    • VPC 
    • サブネット
    • SG
    • InternetGWとNAT-GW
    • IAM ROLE
    • EC2(NodeGroup)
    • etc.

eksctlでEKS k8sクラスタ削除

eksctl delete cluster --name クラスタ名

Kubernetesバージョン

  • k8sバージョンは2021/1時点でアップストリーム最新版は1.20だが、EKSでは1.18

アーキテクチャ

  • 基本的に①パブリック、②プライベート、③パブリック&プライベート の3パターンがある
  • Master(コントロールプレーン)~Worker間は、サブネット内のENIを経由する(ENIは自動生成される)
  • Master(コントロールプレーン)のAPIエンドポイントは、パブリックかプライベートか選択できる
  • 下記は標準的なパブリック&プライベートの例

image.png
https://aws.amazon.com/jp/blogs/news/de-mystifying-cluster-networking-for-amazon-eks-worker-nodes/

  • VPC

    • クラスタ全体では基本2つ
        1. Master/コントロールプレーンは「Amazon EKS管理VPC」と呼ばれるユーザが意識しない領域に作成される(サーバーレス)
        1. Workerノードは指定したVPCに作成できる
  • サブネット

    • Workerノード用に2つ以上のアベイラビリティーゾーンでサブネット作成が必要
    • パターンは3つ
      • パブリックのみ
      • プライベートのみ
      • パブリックとプライベートの併用(上の図)
  • SG

  • IAM ROLE

CNIプラグイン

ワーカーノードのイメージ

  • EC2 起動テンプレートが利用でき、ベースイメージ(AMI)やインスタンスタイプなどを規定できる

コンテナイメージの利用

  • ECRを利用する場合は、ワーカーノードのIAM ROLEにECR利用のための以下の権限を付与しておく必要あり
    • "ecr:BatchCheckLayerAvailability"
    • "ecr:BatchGetImage"
    • "ecr:GetDownloadUrlForLayer"
    • "ecr:GetAuthorizationToken"

[3] クラスタ接続設定

###1. kubectlインストール

例)

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl

chmod +x ./kubectl

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

###2. kubeconfigファイルの更新

例)

aws eks --region リージョン update-kubeconfig --name クラスタ名

[4] おまけ

モニタリング

EKSコンソール上からのワークロードのモニタリングができる

image.png

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10