1クール続けるブログ

とりあえず1クール続けるソフトウェアエンジニアの備忘録

【AWS Re:Inventレポート】CON203-R1 - [REPEAT 1] Getting started with Kubernetes on AWS

Getting started with Kubernetes on AWS

去年のWorkshopの資料を見たことがあったので、行くか迷ったんですが、1年経ってアップデートがあるかも…?であったり復習としてはちょうど良いのではないかという気持ちで参加いたしました。
資料を見る限りでも135分では到底終わりそうにないボリュームが有ることが分かります。個人的にはHelmを飛ばして、Cluster AutoscalerやIAM Roleとの統合をやったほうがいいのではなんて思っていたりもしました。
資料はこちらです。con203というタグがセッション番号と紐付いているみたいです。

eksworkshop.com

Workshopの流れ

チームハッシュを入力して、Workshop専用のアカウントにログインし、Cloud9をセットアップするところまでは他のWorkshopと同じです。なぜかCloud9のテーマを変えるような指示があった点だけは違いますが…。ダークテーマのほうが見やすかったのは確かです。View -> Theme -> Solrized -> Darkで設定しました。
EKSに関してはCloud9から触れるように権限周りが対応出来ていないのか、追加の処理を行うことになります。まず一時認証情報をOFFにします。その後インスタンス一覧から見れるCloud9のインスタンスに、管理者権限のついたIAMRoleをアタッチします。最後に、Cloud9側の認証情報を消して、GetCallerIdentityで改めて認証情報の取得を行いました。

ここからの流れは実にシンプルで、ほとんどWorkshop資料のまま進んでいきました。

eksctl を使ったEKSクラスターの展開

この展開にかなり時間がかかってしまったため軽くKubernetesの説明や質問コーナーを設けていました 。 今になって面白いなと思うのは、参加者からEKS on Fargateはまだかという質問を受けたときに講師がちょっと待ってねと流して、GitHubに載っけているコンテナワークロードを紹介し始めたときです(さてはキーノートで出ること知ってての所業か)。

Kubernetes Dashboardのデプロイ

ここでダッシュボードにアクセスするためにkubectl proxyが使うのですが、実は使ったことがなく頭を捻りながらコマンド打ってました。既にこの時点で参加者間で進捗に大きな差が出来ており、あんまり説明などがされぬまま進んでいっていたように感じます。
kubectl proxylocalhostKubernetes API serverの間にProxy Server作るというもので、通信がKubernetes API Serverにフォワーディングされるものです。 実際にうったコマンドはkubectl proxy --port=8080 --address='0.0.0.0' --disable-filter=true & となるのですが、これはIP0.0.0.0のポート8080番の通信を行うと、リクエストにFilterをかけずに(XSRF脆弱性が生まれるらしいですが…)Kubernetes API Serverにフォワーディングされます。--disable-filter=trueに関しては実稼働環境に使うのは良くないが開発環境なら良いと注意書きがありました。

勉強不足でKubernetes APIを通してServiceにアクセス出来ることを知らなかったので、知れてよかったです。こちらのドキュメントに記載ありました(Access Services Running on Clusters - Kubernetes

Exampleアプリのデプロイ

基本はDeploymentとServiceリソースをapplyしていくだけの作業です。
冷静にサンプルアプリの1つのサービスにCrystal使われてるのびっくりでしたね(AWS社内では使われてたり…?)。
使用しているアカウント内で初めてELBを作る場合には、ELBに紐づくRoleが無いらしいので、作ってあげる必要があるようです。 aws iam get-role --role-name "AWSServiceRoleForElasticLoadBalancing" || aws iam create-service-linked-role --aws-service-name "elasticloadbalancing.amazonaws.com"というコマンドでした。
あとはscaleコマンド使ってpod増やしてみたりしました。

Helm

Helmのセットアップを行います。
nginxをHelm使ってデプロイしていきます。リポジトリの追加方法やパッケージの削除方法を学びます。 ExampleアプリをHelm使ってデプロイすることを通じて、Helmパッケージの作り方を学びます。

(自分は途中退出)

行きたい別のセッションがあったため、残りが40分ほどありましたが、退出しました。残りも基本的には知っている部分(ClusterAutoScalerやaws-auth, metrics-server)だったので一旦大丈夫でしょう。

他、気になったところで言うと、Managed WorkerNodeがこの前出たので、eksのコマンドがeksctl create cluster --managedのように--managedオプションが付くようになってました。ただ資料上、ClusterAutoscalingでノードグループの台数いじるところはまだASGのキャプチャだったので、対応出来ていない部分もあったのかもしれません。
当たり前ですが、Managed WorkerNode推奨って感じですね。