Cloud9でEKSのClusterの作成と削除をする

プログラム
スポンサーリンク

前回の記事でAWSでDockerファイルを使うための方法をしらべた結果、私はEKSを使うことに決めました。

この記事では、Kubernetesの最大構成単位であるClusterの作成と削除を行おうと思います。

なお、EKSでのCluster利用には無料枠がありません。また、EKS以外にもいくつかの無料枠がないサービスを利用することにもなります。

私が昨日6時間ほどいろいろ作業した結果、以下のように$0.77ほど費用がかかりました。もし無料枠がないアカウントだと、更に経費がかかることになるはずなのでご注意を。

AWSで6時間位EKSの勉強をした際の費用、0.77ドルかかった
この記事でわかること
  • Cloud9でEKSをつかう環境の構築
  • Cloud9でEKSを操作(Cluster作成、Dockerコンテナデプロイ)
  • 作成したリソースの削除
前提条件
  • Docker、Kubernetes、AWSの基礎知識(概念レベル)を持っている
  • AWSのアカウントを持っている
  • AWSアカウントの権限はAdministratorAccessである(おそらくもっと低くても大丈夫だが、今回はこの権限のアカウントを使った)
注意
  • アカウント作成後12か月以内でも無料枠外のことを行うので費用がかかる
  • 作成したEKS Clusterなどのリソースを削除し忘れるとずっと費用がかかり続けることになる

EKSの概要を整理する

実際にClusterを作る前に、簡単にですがEKSの概要を整理しましょう。

EKS(Elastic Kubernetes Service)はAWSのKubernetesマネージドサービスです。自分でKubernetesを1から構築するより、楽にKubernetesを利用できるサービスということになります。

今回作成する予定のClusterは、Kubernetesを構成する最も大きな単位です。Clusterの中にそのClusterを管理するコントロールパネルや各種ノードなどが格納されると思えば間違いではありません。

(ノードの中にGithub Actionsを使って自作のDockerコンテナをPodとしてデプロイするのが最終目標です。今回の記事ではそこまでは行いません)

EKSの概要図、クラスタが最も大きな構成単位で、その中にコントロールパネルやノードが存在する

Cloud9でEKSを使う環境を整える

この記事では環境の差分をなくすために、実行環境としてCloud9を利用します。

Cloud9はAWSが準備しているクラウドで利用可能なIDE(統合開発環境)です。ブラウザから利用可能な開発環境で、WindowsでもMacでも同じ環境でEKSの操作ができます。

注意

ここからAWSのリソースを利用します。仮にアカウント作成後12ヶ月以内でも費用が発生するので注意してください。特に、リソースの削除は絶対に行うようお願いします。

私が6時間ほどいろいろ触った際にかかった費用は$0.77でしたが、リソースの削除を忘れるとひどいことになるはずです。

Cloud9の環境を作成する

まずはCloud9の環境を作成します。

  • AWSのWebコンソールにログイン
  • 左上のサービスからCloud9を選択
  • Create environmentを選択

上記の通りに作業すると、Name environment画面が出てきます。

Cloud9設定画面その1

Nameは何でもいいのですが、とりあえずEKS_envとでも入力してください。Nameを入れたらNext stepを押します。

次の画面はConfigure settingsです。

Cloud9設定画面その2

ここではほぼデフォルトのままで問題ありません。ひょっとしたらInstance typeがt3.smallになって居るかもしれないので、その場合はt2.microにしましょう。最小構成ですが無料対象ですし今回の作業ではスペック不足ということもありません。

最後にReview画面が出てくるので一応内容を確認したあと、Create environmentを押せば作成完了です。

Cloud9設定画面その3

環境作成に数分時間がかかります。

作成が終わると以下のような画面が出てくるので、画面上部の+マークを押して「New Terminal」ボタンを押し、ターミナルを表示しましょう。

Cloud9の初期画面、新しいターミナルを表示して不要なウインドウは削除する

ついでに使わないウインドウは削除してしまって問題ありません。

一度Cloud9のタブを閉じてもう一度使いたい場合は、AWSコンソールにログインしてCloud9を選択し、使いたい環境のOpen IDEボタンを押せば大丈夫です。

Cloud9にIAMロールを割り当てる

Cloud9からEKSを操作するためには、Cloud9にIAMロールを割り当てなくてはなりません。これをやらないと、後ほどインストールするkubectlコマンドで認証エラーが出ます。

ロールを作成する

まずは割り当てるIAMロールを作成しましょう。サービス一覧から「IAM>ロール>ロールを作成」と選択すると次の画面が表示されるはずです。

ロール作成、エンティティタイプとユースケースを選択

信頼されたエンティティタイプはAWSのサービス、ユースケースはEC2を選びます。次へを押すとこの画面が出てきます。

ロール作成、許可を追加

ここではAdministratorAccessで検索して、チェックもAdministratorAccessにだけに入れてください。次へを押します。

ロール作成、名前を入力

ロール名は何でもいいのですが、ここではEKS-adminとしました。画面下の方にあるロールを作成ボタンを押すとロールの作成は終わりです。

Cloud9にロールを割り当てる

Cloud9のIDE画面に戻り、右上のアイコンをクリックしてManage EC2 Instanceを押します。

Manage EC2 Instanceの場所

すると次の画面が出るので、Cloud9のEC2インスタンスを選択してください。

Cloud9のEC2インスタンスを選択

「アクション>セキュリティ>IAMロールを選択」でロール選択画面が表示されます。

ロール選択画面を表示

先程作ったロールを選択して保存を押せば完了です。

インスタンス詳細のセキュリティタブからIAM ロールが選択したものに変わっていることが確認できます。

必要なツールをインストールする

今回の作業に必要なツール類をインストールします。以下のコマンドラインをターミナルで順次実行してください。

# kubectlをインストールする
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/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' >> ~/.bashrc
# 不要なファイルを削除
rm kubectl
# インストールが成功していることをバージョン表示で確認
kubectl version --short --client

# 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 version

# awscliをインストールする
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# 不要なファイルを削除
rm awscliv2.zip 
rm -r aws
# インストールが成功していることをバージョン表示で確認
aws --version

インストールした各種コマンドの概要は以下の通りです。

kubectlKubernetes Clusterをコマンドラインで操作するためのツール
eksctlKubernetes ClusterをEKS上に作成するのをサポートするツール
awsAWSサービスを管理するための統合ツール
インストールしたツールの概要

AWS managed temporary credentialsを無効化する

Cloud9では初期設定にAWS managed temporary credentialsという認証の設定があります。この設定が後でkubectlを使う際に邪魔になるようなので、無効化しましょう。

aws cloud9 update-environment  --environment-id $C9_PID --managed-credentials-action DISABLE
rm -vf ${HOME}/.aws/credentials

awscliの設定をする

awscliのデフォルトリージョンを設定しておきます。これ以外の設定はCloud9では必要ないみたいです。

この記事では東京リージョンを使うことにします。

aws configure set default.region ap-northeast-1

EKSにClusterを作成する

いよいよEKSにClusterを作成します。

EKSのClusterには、デプロイしたコンテナを動かす方法が大きく分けて2つ存在します。1つがEC2を使う方法、もう一つがFargateを使う方法です。

どちらにもメリット・デメリットがあるようなのですが、今回は管理が簡単らしいFargateを使うことにしました。EC2を使うことにしました。当初はFargateを使う予定でしたが、デプロイしたコンテナを公開する際にFargateだとややこしすぎて挫折したためです。

以下はEC2を使うClusterを作成するコマンドです。

注意

EKSではClusterを作ると費用が発生します。後述のリソースの削除を忘れないようにしてください。

eksctl create cluster --name test --node-type=t2.micro --nodes=2

これだけでtestという名前のClusterの作成が作成できます。下準備の割に本番はとても簡単でした。もちろん実稼働するシステムを動かすならもう少しオプションは増えるはずですが、勉強レベルならこれで十分です。

nginxコンテナをデプロイする

Clusterを削除する前に、コンテナのデプロイをしてみましょう。Kubernetesの公式ページにnginxのコンテナをデプロイするための設定ファイルがあるので、それを利用します。

kubectl get deployments
# No resources found in default namespace.
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
# deployment.apps/nginx-deployment created
kubectl get deployments
# NAME               READY   UP-TO-DATE   AVAILABLE   AGE
# nginx-deployment   0/3     3            0           7s

最初にkubectl get deploymentsで確認した際は何もありませんでしたが、kubectl applyコマンドを実行したあとはnginx-deploymentという名前のPodがあることが確認できます。

今回は確認しただけなので、利用するyamlファイルの詳細は説明しません。ちょっとわかりにくいですがこのページなどが参考になると思います。

また、nginxはWebサーバなのでHTTPでアクセス可能なはずですが、外部からCluster内のPodにアクセスするためにはまた別の設定が必要なので今回は行いませんでした。

リソースを開放する

AWSではリソースを残したままにすると費用が発生するため、作業が終わったら開放しておきます。このままEKSやCloud9を使って色々試すなら後回しでも良いですが、いずれにせよ練習環境は削除するようにしましょう。

もし削除を忘れると、以下の画像のように大きな請求をされる羽目になります。1週間で気がついたからこれですみましたが、もし気づかずにいたらひどいことになっていたはずです。

画像

EKSのCluster削除

Cluster作成と同じく削除も簡単です。削除でも数分かかります。

eksctl delete cluster --name=test
# 念のためClusterの一覧を表示、No clusters foundのはず
eksctl get cluster
注意

上記コマンド以外、例えばAWSコンソールからClusterだけ削除するなとすると、不要なリソースがAWSに残り続けます。必ずeksctlコマンドで削除してください。私は変なリソースが残ったままになってしまい、大変困っています・・・。

Cloud9環境の削除

EKSのClusterほどは費用がかからず、今回利用した範囲なら無料枠に収まりますが、今後使わないなら同じく削除しましょう。

AWSのWebコンソールでサービスからCloud9を選択し、今回利用した環境を選んでDeleteボタンを押せば削除できます。

まとめ:まずはClusterを作ってみました

Cloud9を使ってEKSのClusterを作成し、既存のDockerコンテナをデプロイしてみました。

私がAWS自体に慣れていないこともあり、環境作成で非常に時間がかかった印象です。環境さえ整ってしまえば、Clusterの作成もデプロイも簡単でした。

引き続き目標であるGithub Actionsを使ったAWSへのDockerコンテナデプロイに向けた記事を作成していく予定です。

この記事でわからないところがあったら、Twitterお問い合わせフォームから連絡をください。記事ごとのコメント欄も開放しているので、そちらでも大丈夫です。現在勉強中の内容なのでお答えできない可能性もありますが、できる限り調べてみます。

最後に、何度も繰り返しますがリソースはしっかり削除しましょう。

Cloud9でEKSに独自コンテナをデプロイして公開するに続きます。

コメント

タイトルとURLをコピーしました