前回に続きまして、今回はawsに環境を構築するところまで行おうと思います。
kubernetes(k8s)環境構築編
※EKSはtokyoリージョンにはまだ来ていません。(2018/11/07) 来てます。(2019/01/28)
awsのよくわからない言葉
- EKS(Elastic kubernetes Service) kubernetesのAPIを用意したawsのサービス。
- Cloud Formation EC2のインスタンスやセキュリティグループなどを自動管理してくれるもの。
- ECR(Elastic Continer Registry) awsのDockerのプライベートリポジトリ
しくみ
要するにCloudFormationがEC2にインスタンスを立ててくれてその上にk8sを入れてDockerを動かすよ!ってことです。(GKEも同じ)
セキュリティグループやロードバランサーまでいじってくれます。
クライアントPC(もしくはコンソールサーバ)からEKSのAPI経由で、各ノードをコントロールできます。
やること
- VPCにEKS用のサブネットを作成する。
- EKSを作る。
- cloudformationでいろいろ作る。
- EKSの認証情報をkubectlに当てる。
って感じです。
tips
aws Profileとkube configはメインのものとは別にしておくと便利
例:)
$ aws configure --profile aws-kube-test-nodes
$ export AWS_PROFILE=aws-kube-test-nodes
$ aws eks update-kubeconfig --name=test-nodes --kubeconfig=~/.kube/aws-test-nodes.conf
$ export KUBECONFIG=~/.kube/aws-test-nodes.conf
EKS用のsubnetはprivateとpublicの対で。
EKS用のsubnetはprivateとpublicのものを2本用意しておくこと。(EKSはInternet Gatewayがあるかどうかでlocalかglobalかを判断する。)
Security Groupsは専用のものを。
EKS用のSecurity Groupsは専用のものを空で用意しておく。EKS同士であっても共有しないこと。
おかしくなるよ!
VPCのEKS用のpublicサブネットに注意
既存のVPCにEKS用のサブネットを手動で作る場合には、publicとprivateの対で作成して、publicのサブネットの自動割り当て IP 設定の変更 -> パブリック IPv4 アドレスの自動割り当てを有効にする
を有効にしないといけないので注意!(2つ以上のAZで作らないといけないので、最低4つのsubnetが必要になる。 https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-public-private-vpc.html
※チュートリアルだとCloudFormationでVPCを作っているので注意
あとからsubnetを追加するには。
EKSのsubnetやSecuryGroupsはCloudFormationと同じにしておく必要があるが、CloudFormation側を変更してもEKS側には自動で反映されない。EKSは編集できないので作り直す必要がある。EKSを作り直すとkubectlのconfigも変えないといけない。要するにめんどくさい。
※もしかしたらtagで判断しているのかも。
EKSを作るIAMユーザーとkubectlを使うユーザーは同じにすること。
参考:Amazon EKS の使用開始 - Amazon EKS
コンソールを使用してクラスターを作成する場合は、クラスター上で kubectl コマンドを実行する際、同じ IAM ユーザー認証情報が AWS SDK 認証情報チェーンにあることを確認する必要があります。
kubectl で認証が通りません。&あとから変えられない。管理ユーザーを作ってそれで作成しよう。
CLIしか使わないのであれば、管理IAMユーザーを作って aws eks create-cluster
コマンドで作成しましょう。(いけてねーな)
なんていうデマが横行していますが、ちゃんとロールを設定すれば大丈夫とのことです。
クラスターのユーザーまたは IAM ロールの管理
その他
CloudFormationを作成するときにEKS clouster nameを入れるが、間違っていてもエラーを吐いてくれないので注意!
kube-systemのpodsがちゃんと立ち上がったことを確認してからいじりましょう。
$ kubectl -n kube-system get pods -o wide
で確認する。ECRには詳しく触れませんが、Dockerのプライベートリポジトリとawsの組み合わせも曲者です。
まとめ
- k8sを覚えておくとawsからgcpやbluemixに移動とかしてもナレッジを活かせる。
- コマンドやしくみが複雑すぎてk8s専任担当が必要なのでは?
- 新しいawsみたいなのを覚えるぐらいのイメージ
- Dockerを知っていないといけない。(まずはDockerからやったほうがいい)
- Docker使えるとデプロイが楽になるかもしれない。(ホントかよ
- AutoScaleまでやってくれるので構築できてしまえばaws側からいじることはほとんどない。(いじってはいけない)
まぁいいんじゃないですかね。さすがGoogle謎テクノロジーの結晶やで。。。