はじめに
- 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のロールを開く。
EKSクラスターのVPCを作成する
EKSを始める前に、EKSクラスタ作成時にVPCを指定する必要があるのであらかじめ作成しておく。
CloudFormationを開く。
テンプレートURL
https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/amazon-eks-vpc-sample.yaml
スタックの作成が完了したらVPCでリソースを確認する。
CloudFormation>スタック>リソース名でも確認できる。
EKSクラスターを作成する
EKSを開いてクラスターの作成。
設定を入力して作成。ページが長いのでキャプチャ分割してます。
クラスタが作成されるのに10~15分かかります。
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のキーペアがある人はこの手順を飛ばしても構いません。
${キーペア名}.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
EKSワーカーノードを起動して設定する
# Amazon S3 URL
https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-02-11/amazon-eks-nodegroup.yaml
IAMリソースの作成を承認して作成。EKSのワーカーノードが作成されるのを待つ。
ステータスが CREATE_COMPLETE
になったら作成完了。
このあと使うので Cloudformation>スタック>出力>NodeInstanceRole
の値メモっておく。
このスタックだと arn:aws:iam::634938955698:role/mokumoku-EKS-WORKER-NodeInstanceRole-1DNYLH5PVY791
ここからは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
設定ファイルを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ライフを。