Help us understand the problem. What is going on with this article?

AWS EKSの公式チュートリアルをやってみる

ローカル環境のKubernetesでとにかく動くものを作ってみるでローカル環境にKubernetesを立てて見たので、今回はAWSのEKSをとにかくさわってみることを目的にAWS EKSの公式チュートリアルをやって見たのでメモ。

Docker/Kubernetes 実践コンテナ開発入門にはGCPのGKEについての簡単な説明があります。
AWSのEKSについては何かないかと探したら公式チュートリアルあったのでやってみました。
つまづくところも多かったので、つまづいたところをピックアップしていきます。

公式チュートリアル

やったこと

チュートリアル にそってEKSをクラスターを作成してみました。

  • EKSクラスター作成のための下準備

    • IAMロールの作成
      • IAMユーザの作成
    • グループの作成
    • AWS EKS クラスターVPCの作成
    • Amazon EKS の kubectl をインストール
    • aws-iam-authenticatorのインストール
    • AWS Cliのインストール
    • Credentialの作成
  • EKSクラスターの作成

    • Amazon EKS クラスターを作成する
    • Amazon EKS の kubectl を設定する
    • Amazon EKS ワーカーノードを起動して設定する
    • ゲストブックアプリケーションを起動する(AWSが用意したサンプルアプリケーション)

ローカル環境にAWS系のツール等入れていなかったので、準備しなければいけないものが多かったです。
チュートリアルはやっている人が結構いるようなので、そちらの記事も参考にすると良さそう。

料金

  • EKS 0.2$/h
  • EC2インスタンス(デフォルトだと3台分。t3.nanoインスタンスで動作確認可能でした。)
  • ロードバランサ

作った後にすぐ消すのであれば、全部で5ドル以下で可能です。
チュートリアルが終わったあとは、サービスを停止できたか確認しましょう。

環境

  • ローカル環境
    • OS: Mac OS 10.13.6(High Sierra)
    • Docker for Mac: stable版 2.0.0.3
    • docker: 18.09.2
    • Kubernetes: v1.10.11
    • python: 2.7.9
  • AWS環境
    • リージョン:us-east-1

東京リージョン(ap-northeast-1)でEKSが実行できるので最初進めていましたが、EKS最適化AMIが用意されていないので注意が必要です。

EKS

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/what-is-eks.html

IAMロールの作成

EKS-TESTというロールを作成しました。後々AWS Cli での操作が必要になるので、EKS-TESTというIAMユーザを作成しておきました。

aws-iam-authenticatorのインストール

「aws-iam-authenticator を Amazon EKS にインストールするには」 にしたがって進めていたのですが、4のコマンドを実行した際にエラーが発生しました。

$ cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$HOME/bin:$PATH

私の場合は $HOME/bin がなかったのでフォルダを作成する必要があったので、フォルダを作成して解決しました。

$ $HOME/bin/

Amazon EKS クラスターを作成する

最初はコンソール上から作成を行いました。
eks.png
作成は問題なくできたのですが、コンソールにログインするユーザを間違えると後々問題になります。エラーを回避したい場合はaws-cliで使用するのが良さそうです。画面上から色々できるかなと思ったら、クラスターを作成するぐらいしか操作できない?

Amazon EKS の kubectl を設定する

最初aws-iam-authenticatorをインストールしていなかったので、下記のコマンド実行時エラーが発生しました。

エラー
$ aws --profile=EKS-TEST eks --region us-east-1 update-kubeconfig --name EKS-TEST
Added new context  <clusterのARN>/EKS-TEST to /Users/[ユーザ名]/.kube/config
Warning: aws-iam-authenticator is not installed properly or is not in your path.
Refer to the AWS Documentation to download it at https://docs.aws.amazon.com/eks/latest/userguide/configure-kubectl.htm

aws-iam-authenticatorをインストールして、成功しました。

成功
Updated context <clusterのARN>/EKS-TEST in /Users/[ユーザ名]/.kube/config

3.のコマンドを実行した際にエラーが発生しました。

$ get svc
error: the server doesn't have a resource type "svc"

【解決方法】Amazon EKSでkubectl get svcコマンドに失敗する

原因はEKSクラスタを作成したIAMユーザとAWS CLIのIAMユーザが異なっているためでした。

EKSクラスタを画面から作成した際にルートアカウントで作成し、AWS CliではEKS-TESTユーザで作成を行っているのが原因のようだったので、EKS-TESTユーザでAWSコンソールにログインし、EKSクラスタの作成を実施。もう一度コマンドを実行して、成功しました。

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

Amazon EKS ワーカーノードを起動して設定する

EKSが東京リージョンで利用可能ということで、最初は東京リージョンで作業していたのですが、
NodeImageIdの選択でAWS EKS 最適化 AMI が 東京リージョンにない・・・のでバージニア北部で作り直しました。
ちなみに作成するテンプレート情報をデザイナーで見てみるとこんな感じになっています。
template.png

ワーカーノードをクラスターと結合するには

yaml:aws-auth-cm.yamlを実行する際にもエラーが発生しました。

$ kubectl apply -f aws-auth-cm.yaml
error: unable to recognize "aws-auth-cm.yaml": Get https://5DF40067B3D1F08F77EF974EE000BE9C.yl4.ap-northeast-1.eks.amazonaws.com/api?timeout=32s: dial tcp: lookup 5DF40067B3D1F08F77EF974EE000BE9C.yl4.ap-northeast-1.eks.amazonaws.com on [240d:1a:37e:6100:ce1a:faff:feb5:b064]:53: no such host

こちらものエラーは原因がわかりませんでしたが、EKS-TESTユーザでログインして何もかもやり直したらうまくいった模様。ロールの関係?コマンドの関係?

2.で別の問題が発生。コマンドを実行しても何も反応なし。

kubectl get nodes --watch

クラスタに紐づいたノードがない状態になっています。

$ kubectl get nodes
No resources found.

原因はワーカノード作成の際に、作成したクラスターの名前とClusterNameが異なっているのが原因でした。公式ドキュメントにも重要と書いていたのに見逃してしまっていました。

ClusterName: Amazon EKS クラスター用に作成した際に使用した名前を入力します。

重要
この名前は、「ステップ 1: Amazon EKS クラスターを作成する」で使用した名前と完全一致する必要があります。
それ以外の場合、ワーカーノードにクラスターを結合できません。

ゲストブックアプリケーションを起動する

ノードとクラスタが結びついていない状態(上記のエラーのまま)でも、kubectl applyを実行していると、うまくいかなかったので、delete-contextで一度全て削除を行って作成を行ったところうまくいきました。

$ kubectl config delete-context https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-controller.json

参考
https://qiita.com/hana_shin/items/b7a947511a89accea6d4

色々エラーが発生しましたが、終わりです。
image.png

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away