スマートキャンプのエンジニア入山です。
本記事はスマートキャンプ Advent Calendar 2019 - Qiita の13日目の記事です。
スマートキャンプにおける新規プロダクトの基盤としてKubernetes(k8s)を導入してから、早いもので1年が経過しました。 また、Amazon EKSの東京リージョンがリリースされてからも、もう少しで1年になります!
この1年間でk8sやEKSは大幅にアップデートされており、EKSではサーバーレス運用が可能となるFargate for EKSが12月3日に発表されるなど、k8s運用の選択肢も増えてきています。最近では導入事例や技術ネタを多く目にするようになりましたが、k8s導入のハードルはまだまだ高いイメージがあるのではないでしょうか?
以前、以下の記事でノンマネージドk8sの環境構築方法を紹介しましたが、マネージド(EKS)ではもっと簡単に環境構築が可能です!(今見直すとノンマネージドのk8s構築って大変です…)
EKSの環境構築にはいくつか方法がありますが、その中でもシンプル&簡単なeksctlを使ってEKS環境構築をする方法を紹介します!
eksctlとは
eksctlは、EKSクラスタを構築するためのCLIツールで、基本的なEKSクラスタを1コマンドで作成することができます。 AWSの各リソースはCloudFormationを使用して作成する仕様となっており、Goで開発されています。
リソースがない状態からの新規構築だけでなく、既存リソース(VPCなど)が存在する場合もそれらを利用して EKS クラスタを作成することができます。
eksctlで作成されるもの
eksctlにおまかせして新規EKSクラスタを作成した場合、Amazon EKS アーキテクチャ - クイックスタートで紹介されているアーキテクチャ(以下図)に従った構成で各リソースがAWS上に構築されます。
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の機能追加によってハードルが下がってきているので、今後の更なる機能追加が楽しみです!
明日は弊社エンジニア瀧川の記事です!お楽しみに!