Edited at

図でわかるGetting Started with Amazon EKS


はじめに


  • EKS構築でハマるという声が多かったので、某雑食系エンジニアサロンのもくもく会でGetting Started with Amazon EKSをやってみました。(クラスタ名がmokumokuになってます。適宜会社やサービス名に変更してください)

  • 可能な限りAWSコンソールからGUIでEKSクラスタを作成しています。CLIになれている人は逆に見づらい可能性があります。

  • キャプチャをとりつつハマりそうなポイントを補足したので、初心者にとってわかりやすくなっていることを祈ります。

  • 手順を1つずつ進めやすいようにQiitaのスライドで見れるよう作りました。下に長いページが多いのでスクロールが必要です。

  • 漏れやtypoがあったら遠慮なく修正リクエストください。よろしくおねがいします。



対象


  • kubernetes、EKSを始めたいAWS初心者


前提環境


  • AWSアカウントがありAWSにログインできる

  • 以下の操作権限がある


    • IAM

    • VPC

    • CloudFormation

    • EKS

    • EC2



  • AWSCLIが使える



手順


  • EKSクラスターのサービスロールを作成する

  • EKSクラスターのVPCを作成する

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

  • kubeconfigファイルを作成する

  • EC2のキーペアを作成する

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



EKSクラスターのサービスロールを作成する


EKSを始める前に、EKSクラスタ作成時にIAMサービスロールを指定する必要があるのであらかじめ作成しておく。

AWSにログインしてIAMのロールを開く。

image.png


ロールの作成>AWSサービス>EKSを選択。

image.png


ここは特になし。

image.png


ここも特になし。

image.png


ロール名を入力して作成。

image.png


ロールが作成されたことを確認。

image.png



EKSクラスターのVPCを作成する


EKSを始める前に、EKSクラスタ作成時にVPCを指定する必要があるのであらかじめ作成しておく。

CloudFormationを開く。

image.png


CloudFormation>スタック>スタックの作成。

image.png

テンプレートURL

https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/amazon-eks-vpc-sample.yaml


スタック名を設定して次へ。

image.png


ここは特になし。

image.png


ここも特になし。スタックを作成。

image.png


スタックの作成が完了したらVPCでリソースを確認する。

CloudFormation>スタック>リソース名でも確認できる。

image.png



EKSクラスターを作成する


EKSを開いてクラスターの作成。

image.png


設定を入力して作成。ページが長いのでキャプチャ分割してます。

クラスタが作成されるのに10~15分かかります。

image.png

image.png

image.png



kubeconfigファイルを作成する


ここからはAWS CLIを使ってkubeconfigを作成します。

kubectlコマンドを使う際に対象のk8sクラスタの向き先や認証情報などを設定するファイルですね。

aws eksコマンドで作成したEKSクラスタがあるか確認する。

$ aws eks list-clusters --region ap-northeast-1

{
"clusters": [
"mokumoku"
]
}


aws eks update-kubeconfig コマンドでkubeconfigを作成する。

kubectl config view で作成したkubeconfigの設定内容を確認することが出来ます。

aws eks --region ${region} update-kubeconfig --name ${cluster_name}

例:

$ aws eks --region ap-northeast-1 update-kubeconfig --name mokumoku

Added new context arn:aws:eks:ap-northeast-1:634938955698:cluster/mokumoku to /Users/ota/.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.html


kubectlコマンドでEKSクラスタに接続できるかテスト。


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

※すでにGKEやDocker for Macなどでkubectlコマンドを使用していた場合はこのエラーが出ると思います。

エラーの記載通りaws-iam-authenticator のインストール実行してください。


注記

"aws-iam-authenticator": executable file not found in $PATH エラーが発生した場合、kubectl は、Amazon EKS に設定されていません。詳細については、「aws-iam-authenticator のインストール」を参照してください。

その他の認可またはリソースタイプのエラーが発生した場合は、トラブルシューティングセクションの 許可されていないか、アクセスが拒否されました (kubectl) を参照してください


Get Startedの手順には無いですが、複数のKubernetesクラスタを扱う場合はkubectxをインストールしておくと簡単にクラスタを切り替えることができとても便利なのでおすすめです。

$ kubectx

arn:aws:eks:ap-northeast-1:634938955698:cluster/mokumoku


EKSクラスタ起動直後のリソース一覧を確認。


$ kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-67c9d9c78-lxtdr 0/1 Pending 0 24m
kube-system pod/coredns-67c9d9c78-mdcd7 0/1 Pending 0 24m

NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 24m
kube-system service/kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 24m

NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/aws-node 0 0 0 0 0 <none> 24m
kube-system daemonset.apps/kube-proxy 0 0 0 0 0 <none> 24m

NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/coredns 0/2 2 0 24m

NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/coredns-67c9d9c78 2 2 0 24m



EC2のキーペアを作成する


EKSワーカーノードを作成する際にEC2のキーペアを指定する必要があります。

既にAWSを運用していて設定したいEC2のキーペアがある人はこの手順を飛ばしても構いません。

EC2>キーペアを作成。

image.png

${キーペア名}.pem が作業端末にダウンロードされるので ~/.ssh とかにコピーしておく


$ cp ~/Downloads/mokumoku.pem ~/.ssh/
$ ls -l ~/.ssh/mokumoku.pem
-rw-r--r--@ 1 ota staff 1692 Jul 15 16:28 /Users/ota/.ssh/mokumoku.pem


キーペア名を入力して作成。

image.png



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


CloudFormation>スタックの作製。

image.png


eks-nodegloupのテンプレートを設定して次へ。

image.png

# Amazon S3 URL

https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/amazon-eks-nodegroup.yaml


もろもろ設定して次へ。

image.png

image.png

image.png


ここは特になし。

image.png


IAMリソースの作成を承認して作成。EKSのワーカーノードが作成されるのを待つ。

image.png


ステータスが CREATE_COMPLETE になったら作成完了。

このあと使うので Cloudformation>スタック>出力>NodeInstanceRole の値メモっておく。

このスタックだと arn:aws:iam::634938955698:role/mokumoku-EKS-WORKER-NodeInstanceRole-1DNYLH5PVY791

image.png


ここからはCLIで作成したワーカーノードをEKSに登録する。

設定ファイルをDLしてrolearnを先ほどメモしたNodeInstanceRoleの値に書き換える。

# EKSの設定ファイルをDL

$ curl -o aws-auth-cm.yaml https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/aws-auth-cm.yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
# vscodeなどエディタで編集
$ code aws-auth-cm.yaml

image.png


設定ファイルをEKSにデプロイする。

# ワーカーノードが登録されてないことを確認

$ kubectl get nodes
No resources found.

# aws-auth-cm.yamlをデプロイ
$ kubectl apply -f aws-auth-cm.yaml
configmap/aws-auth created

# 2分ほどで登録されるのでワーカーノードの登録を確認
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-238-116.ap-northeast-1.compute.internal Ready <none> 96s v1.12.7

EKSにワーカーノードが登録されPodをデプロイできるようになりました。



おわりに

Getting Startedの手順はここまでです。お疲れ様でした。

次のステップとしてゲストブックアプリケーションを起動するというチュートリアルが用意されています。

ぜひこちらの手順でEKSにPodやServiceをデプロイしてみてください。

よいk8sライフを。