AWSのKubernetes環境(EKS)をコマンド一発で作る
Amazon Elastic Container Service for Kubernetes(EKS)がGAになって半年ちょっとが経ち、ようやく重い腰を上げて作ってみました。
ただドキュメント(Getting Started with Amazon EKS)がなかなか読みにくく、長いのでCloudformationやAWS CLIを使ってコマンド一発で自動で起動できるようにしてみました。
前提
必要なツール
kubectl
AWS CLI
やる気
環境
macOS
ソースコード
ソースコードはgithubにあげています。
https://github.com/monkeydaichan/eks-sample
os1maさんのソースをforkする形で利用させてもらってます。
やっていく
EKSは限られたリージョンでしか構築できません。今回はオレゴン(us-west-2)に構築しました。
それではEKSを作っていきましょう。
EKSの起動
eks-start.shを実行すると、env/env.shで環境変数を設定してEKSが作られていきます。
作られるリソースの名前を変更したい場合はここを変更してください。
1 2 |
$ ./eks-start.sh |
シェルを実行して20分ぐらいでEKSの構築が終わります。
EKSの構築が終わったら下記のコマンドでKUBECONFIGを設定します。
変数EKS_KUBE_CONFIG_FILEはenv/env.shでセットしている内容に読み替えてください。
1 2 |
$ KUBECONFIG=EKS_KUBE_CONFIG_FILE |
KUBECONFIGのセットが終わったら、nodeの情報が取れます。
1 2 |
$ kubectl get node |
ダッシュボードにアクセス
コマンドだけじゃ嫌よ。というかたはダッシュボードをデプロイしてください。
1 2 3 |
$ cd resource/dashboard $ ./deploy.sh |
tokenとURLが表示されます。
URLにアクセスしてtokenを入力するとダッシュボードにログインできます。
サンプルアプリケーション
AWSがサンプルアプリケーションを公開しているので、それをデプロイします。
1 2 3 |
$ cd resource/sample-application $ ./deploy.sh |
これで自動でロードバランサーが作成されます。
ロードバランサーのドメインはダッシュボードから確認してください。
http://ドメイン:3000
にアクセスするとサンプルアプリケーションが表示されます。
サンプルアプリケーションの削除は下記コマンドでできます。
1 2 3 |
$ cd resource/sample-application $ ./delete.sh |
EKSの権限
EKSのフル権限は作成したIAMユーザに付与されます。
他のIAMユーザにもフル権限を付与したい場合は次のようにします。
env/env.shの中身をすべてコピーしてターミナルに貼り付け。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ ROLE_ARN=$(aws cloudformation describe-stacks \ --stack-name $EKS_WORKER_STACK_NAME \ --query 'Stacks[0].Outputs[0].OutputValue' \ | sed -E 's/.(.*)./\1/') $ cat << EOT > prepare/config/configmap.yml apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: $ROLE_ARN username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes mapUsers: | - userarn: <The ARN of the IAM user you want to add> username: <Any name> groups: - system:masters |
prepare/config/configmap.yml
ファイルの<ARN of the IAM user you want to add>
を追加したいIAMユーザのARNに変更、 <Any name>
は任意の名前に変更します。
このymlファイルをEKSにデプロイすることで、権限の付与ができます。
1 2 |
$ kubectl apply -f prepare/config/configmap.yml |
EKSの削除
作ったEKSを削除したい場合もコマンド一発です。
1 2 |
$ ./all-delete.sh |
ハマったところ
IAMユーザの追加のところで非常にハマりました。。。
ドキュメント読むの大事やんねー。。。