はじめに
これまで Kubernetes をちゃんと触ったことが無かったのですが、2019年11月に マネージド型ノードグループがリリース されて、ノードの管理などもより簡単になったそうなので、Aamazon EKS のチュートリアルを元に、Kubernetes の理解をしていこうかと思います。
今回、クラスタの作成には eksctl
を利用します。
- Aamazon EKS のチュートリアル
環境
開発環境は以下の通りです。
環境/ツール | バージョン |
---|---|
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コンソール画面で見ると、以下のような感じになります。
クラスタの作成と共に、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
を利用して作成した場合、クラスタは以下のような構成になります。
出典:https://aws.amazon.com/jp/quickstart/architecture/amazon-eks/
- マルチAZ構成で、1つのVPC内に Publicサブネットx3、Privateサブネットx3 が作成されます。
- k8sノードが配置されるのは、Privateサブネットの方になります。
AWSコンソールで確認すると、以下のような内容で、VPC/サブネットが作成されていました。
クラスタの削除
Amazon EKS でクラスタを作成した場合、作成したk8sクラスタごとに 0.20 USD/時間 の料金が発生します(ワーカーノードとなるEC2インスタンスの費用は別)。
そのため、不要なクラスタは、削除しておきましょう。
$ eksctl delete cluster --name=dev
まとめ
AWSコンソールからだと、各パラメータの指定なども理解していないと難しい部分がありますが、
eksctl
を利用することで、ほぼコマンド1つで、k8sクラスタやワーカーノードを作成することができました。
このように作成された内容を元に、構成などを確認すると理解もしやすいです。
次は、k8sクラスタにアプリケーションをデプロイしてみます。