SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

eksctlを使った簡単Amazon EKS環境構築

スマートキャンプのエンジニア入山です。

本記事はスマートキャンプ Advent Calendar 2019 - Qiita の13日目の記事です。

qiita.com

スマートキャンプにおける新規プロダクトの基盤としてKubernetes(k8s)を導入してから、早いもので1年が経過しました。 また、Amazon EKSの東京リージョンがリリースされてからも、もう少しで1年になります!

この1年間でk8sやEKSは大幅にアップデートされており、EKSではサーバーレス運用が可能となるFargate for EKSが12月3日に発表されるなど、k8s運用の選択肢も増えてきています。最近では導入事例や技術ネタを多く目にするようになりましたが、k8s導入のハードルはまだまだ高いイメージがあるのではないでしょうか?

以前、以下の記事でノンマネージドk8sの環境構築方法を紹介しましたが、マネージド(EKS)ではもっと簡単に環境構築が可能です!(今見直すとノンマネージドのk8s構築って大変です…)

tech.smartcamp.co.jp

EKSの環境構築にはいくつか方法がありますが、その中でもシンプル&簡単なeksctlを使ってEKS環境構築をする方法を紹介します!

eksctlとは

eksctlは、EKSクラスタを構築するためのCLIツールで、基本的なEKSクラスタを1コマンドで作成することができます。 AWSの各リソースはCloudFormationを使用して作成する仕様となっており、Goで開発されています。

リソースがない状態からの新規構築だけでなく、既存リソース(VPCなど)が存在する場合もそれらを利用して EKS クラスタを作成することができます。

f:id:mt_iri:20191213094808p:plain

eksctl

eksctl の開始方法 - Amazon EKS

eksctlで作成されるもの

eksctlにおまかせして新規EKSクラスタを作成した場合、Amazon EKS アーキテクチャ - クイックスタートで紹介されているアーキテクチャ(以下図)に従った構成で各リソースがAWS上に構築されます。

f:id:mt_iri:20191213080437p:plain

eksctlでのEKS環境構築

事前準備

以下は、事前に準備が必要です。今回は説明を省略します。

  • AWS CLIのインストール
  • AWS CLIの認証情報設定(IAMユーザー作成とprofile設定)
  • kubectlのインストール

eksctlのインストール

最初にeksctlをインストールします。 また、今回の内容は以下のバージョンで実施しています。

$ brew install weaveworks/tap/eksctl
$ eksctl version
[ℹ]  version.Info{BuiltAt:"", GitCommit:"", GitTag:"0.11.1"}

EKSクラスタの作成

早速EKSクラスタの作成に入るのですが、基本的に以下のコマンドを1つを実行するだけでCloudFormationのスタックが作成され、EKSの各リソースが作成されます。

$ eksctl create cluster

ただ、デフォルトでは、リージョンがus-west-2であったり、インスタンスがm5.largeとなっているため、いくつかのオプションを指定して実行します。(必要に応じてオプション設定値は変更してください)

$ eksctl create cluster \
      --vpc-cidr 10.0.0.0/16 \
      --name eks-sample \
      --region ap-northeast-1 \
      --version 1.14 \
      --nodegroup-name sample-workers \
      --node-type t2.small \
      --nodes 1 \
      --nodes-min 1 \
      --nodes-max 3 \
      --managed

また、既存のサブネットに作成する場合は、以下のオプションで既存サブネットを指定します。

      --vpc-private-subnets=subnet-xxxxxxxx,subnet-xxxxxxxx \
      --vpc-public-subnets=subnet-xxxxxxxx,subnet-xxxxxxxx

※既存に作成する場合は、private * 2、public * 2のサブネット指定が必要です

その他のオプションや詳細は、以下のコマンドで確認できます。

eksctl create cluster --help

コマンドを実行すると、EKSクラスタの構築が始まります。

作成されたEKSクラスタの確認

eksctlでは、EKSコントロールプレーンとの通信に必要なKUBECONFIGも自動で生成してくれるため、eksctlの実行後すぐにkubectlによるEKSクラスタの操作が可能です。

$ eksctl get cluster
NAME            REGION
eks-sample      ap-northeast-1

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   172.20.0.1   <none>        443/TCP   10m

$ kubectl get nodes
NAME                                            STATUS   ROLES    AGE    VERSION
ip-10-0-0-130.ap-northeast-1.compute.internal   Ready    <none>   5m   v1.14.7-eks-1861c5

EKSクラスタとオプションで指定した通りにEKSノードが1つ作成されたことが確認できました!

EKSクラスタの削除

作成した全てのリソースを削除する場合は、以下のコマンドを実行します。

$ eksctl delete cluster \
     --name eks-sample \
     --wait

最後に

eksctlを使うことでEKSクラスタを1コマンドで簡単に作成することができます。 今回は省略しましたが、YAML形式のファイルに構成を定義することで構築する環境の詳細な指定や、EKSクラスタの管理もできます。

運用面の課題はありますが、環境構築のハードルが下がるだけでも、EKSが試しやすくなるのではないでしょうか。 また、運用面についてもEKSの機能追加によってハードルが下がってきているので、今後の更なる機能追加が楽しみです!

明日は弊社エンジニア瀧川の記事です!お楽しみに!