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

Amazon EKS のチュートリアルで Kubernetes を理解する #01 クラスタ作成

はじめに

これまで Kubernetes をちゃんと触ったことが無かったのですが、2019年11月に マネージド型ノードグループがリリース されて、ノードの管理などもより簡単になったそうなので、Aamazon EKS のチュートリアルを元に、Kubernetes の理解をしていこうかと思います。
今回、クラスタの作成には eksctl を利用します。

環境

開発環境は以下の通りです。

環境/ツール バージョン
macOS Catalina(10.15.2)
Python 3.7.6
Homebrew 2.2.2
awscli 1.17.0

Kubernetesクラスタ構築手順

何はともあれ、まずはクラスタを構築してみます。

eksctl のインストール

最初に、 Amazon EKS での k8sクラスタの管理用ツールである eksctl をインストールします。

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

クラスタの新規作成

eksctl を利用して、k8sクラスタを作成します。
2020年1月時点では、ワーカーノードとして、Fargateを利用するのか、EC2を利用するのかが選択できますが、
ここでは、EC2を利用することとします。

eksctl create cluster \
--name dev \
--version 1.14 \
--region us-west-2 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 3 --nodes-min 1 --nodes-max 4 \
--managed
オプション 説明
--name dev "dev"という名称で、k8sのクラスタを作成します。
--version 1.14 k8sのバージョンは、1.14を使用します。
--region us-west-2 AWSの環境はオレゴンリージョンを利用します。
--nodegroup-name standard-workers "standard-workers"という名称で、ノードグループを作成します。
--node-type t3.medium ノードとして、"t3.medium" のインスタンスを利用します。
--nodes 3 --nodes-min 1 --nodes-max 4 初期環境として3ノードで作成します。最小は1ノード、最大は4ノードです。
--managed マネージド型ノードグループ を利用します。

クラスタ作成のコマンドを実行すると、以下のような内容がコンソールに表示されます。
クラスタ作成には、10~15分程度かかります。

[ℹ]  eksctl version 0.12.0
[ℹ]  using region us-west-2
[ℹ]  setting availability zones to [us-west-2c us-west-2b us-west-2a]
[ℹ]  subnets for us-west-2c - public:192.168.0.0/19 private:192.168.96.0/19
[ℹ]  subnets for us-west-2b - public:192.168.32.0/19 private:192.168.128.0/19
[ℹ]  subnets for us-west-2a - public:192.168.64.0/19 private:192.168.160.0/19
[ℹ]  using Kubernetes version 1.14
・・・・・・
[ℹ]  kubectl command should work with "/Users/takanorig/.kube/config", try 'kubectl get nodes'
[✔]  EKS cluster "dev" in "us-west-2" region is ready

作成されたクラスタを、AWSコンソール画面で見ると、以下のような感じになります。

amazon-eks-dev01.jpg

クラスタの作成と共に、kubectlの接続設定ファイルである kubeconfig も、以下に出力されます。

/Users/$USERNAME/.kube/config

関連ツールのインストール

k8sクラスタを操作するために、kubectl および aws-iam-authenticator をインストールします。
kubectl は、k8sクラスタをコマンドラインから操作するためのツールで、アプリケーションのデプロイや、クラスタのリソース管理などを行うことができます。
aws-iam-authenticator は、「AWS IAM Authenticator for Kubernetes」のことで、k8sクラスタの認証に IAM を使用してアクセスできるようになります。

kubectl のインストール

まず、他のツールなどのインストールのために、すでに別の kubectl がインストールされている可能性があるため、既存の環境を確認します。

$ which kubectl
/usr/local/bin/kubectl

私の場合は、Docker と合わせて kubectl がインストールされていました。
バージョンが合っていれば、そのまま使えるとは思いますが、本チュートリアルの操作では、新たにAWSが提供する媒体をインストールすることとします。

ここでは、以下にインストールします。
実際の開発や運用時は、/usr/local/bin など、適切なディレクトリにインストールしてください。

$ mkdir -p /Users/$USERNAME/MyWork/amazon-eks/bin
$ cd /Users/$USERNAME/MyWork/amazon-eks/bin
$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/darwin/amd64/kubectl
$ chmod +x ./kubectl

※ バージョンは、k8sのバージョンに合ったものをダウンロードしてください。

以下のコマンドで、インストールされているバージョンを確認できます。

$ ./kubectl version --short
Client Version: v1.14.7-eks-1861c5
Server Version: v1.14.9-eks-c0eccc

パスを設定しておきます。
ここでは、一時的に指定するだけですが、永続化する場合は、~/.zprofile などにPATHの指定を記載してください。

export PATH=/Users/$USERNAME/MyWork/amazon-eks/bin:$PATH

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

aws-iam-authenticator は、Homebrewを利用してインストールします。

$ brew install aws-iam-authenticator

以下のコマンドで、インストールされているバージョンを確認できます。

$ aws-iam-authenticator version  
{"Version":"v0.4.0","Commit":"c141eda34ad1b6b4d71056810951801348f8c367"}

クラスタの状態確認

kubectl get コマンドを利用して、クラスタの状態を確認できます。
現状、クラスタを作成しただけなので、k8s本体だけが動作している状況です。

$ kubectl get svc

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

クラスタの構成

eksctl を利用して作成した場合、クラスタは以下のような構成になります。

amazon-eks-on-aws-architecture-diagram.jpg
出典:https://aws.amazon.com/jp/quickstart/architecture/amazon-eks/

  • マルチAZ構成で、1つのVPC内に Publicサブネットx3、Privateサブネットx3 が作成されます。
  • k8sノードが配置されるのは、Privateサブネットの方になります。

AWSコンソールで確認すると、以下のような内容で、VPC/サブネットが作成されていました。

amazon-eks-dev02.jpg
amazon-eks-dev03.jpg

クラスタの削除

Amazon EKS でクラスタを作成した場合、作成したk8sクラスタごとに 0.20 USD/時間 の料金が発生します(ワーカーノードとなるEC2インスタンスの費用は別)。
そのため、不要なクラスタは、削除しておきましょう。

$ eksctl delete cluster --name=dev

まとめ

AWSコンソールからだと、各パラメータの指定なども理解していないと難しい部分がありますが、
eksctl を利用することで、ほぼコマンド1つで、k8sクラスタやワーカーノードを作成することができました。
このように作成された内容を元に、構成などを確認すると理解もしやすいです。

次は、k8sクラスタにアプリケーションをデプロイしてみます。

Why not register and get more from Qiita?
  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
No 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
ユーザーは見つかりませんでした