EKS Workshop実施メモ


# はじめに
k8s学習の第一歩として[Amazon EKS Workshop](https://eksworkshop.com/)を実施する事にしました。
本記事は自身のWorkshopの学習メモとして投稿します。
## 目的
EKSを動かしながらk8sで出来ることを理解するのが大きな目的です。

k8sに関しては現時点で[AWS公式のチュートリアル](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html)を実施した程度の知識しかない為、本Workshopで手を動かしながら、k8sで出来ることを確認していきます。
その後は[Kubernetes完全ガイド](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear-%E9%9D%92%E5%B1%B1/dp/4295004804)を読み込むことで、詳細な実装方法やパラメータについての理解を深めていく予定です。

尚、WorkShopの内容等の詳細な説明や手順は下記の記事を参考にして頂ければと思います。

**参考** 

* [【EKSWorkshop】EKSやkubernetes周辺を効率よく学ぶのにオススメなチュートリアル集](https://dev.classmethod.jp/articles/eks-workshop/)
* [未経験の方にもおすすめ! KubernetesとAWS EKS のワークショップを受けてみた](https://techblog.timers-inc.com/entry/kubernetes-awseks-workshop)
* [Amazon EKS の構築・運用のエッセンスを学べる「 Amazon EKS Workshop」の紹介](https://sadayoshi-tada.hatenablog.com/entry/2019/03/12/071048)

# 本編
- [Introduction](#Introduction)  
- [Start the workshop](#Start the workshop)  

- [Beginner](#Beginner)  
 - [Deploy the Kubernetes Dashboard](#Deploy the Kubernetes Dashboard) 
 - [Deploy the Example Microservices](#Deploy the Example Microservices) 
 - [Helm](#Helm) 
 - [Health Checks](#Health Checks) 
 - [Autoscaling our Applications and Clusters](#Autoscaling our Applications and Clusters) 
 - [Intro to RBAC](#Intro to RBAC) 
 - [Using IAM Groups to manage Kubernetes access](#Using IAM Groups to manage Kubernetes access) 
 - [IAM Roles for Service Accounts](#IAM Roles for Service Accounts) 
 - [EXPOSING A SERVICE](#EXPOSING A SERVICE) 

- [EXPOSING A SERVICE](#EXPOSING A SERVICE) 



## Introduction
k8s、EKSの概要説明。基本座学だが、k8sの基礎知識やアーキテクチャが簡潔にまとまっている。
![k8s_architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646352/4d52b8de-27cf-8c26-3f8d-43ae4ecc1680.png)
(https://www.eksworkshop.com/010_introduction/architecture/architecture_control_and_data_overview/ より引用)

## Start the workshop
本章以降でEKSを動かす為の環境セットアップ。AWSの[Cloud9](https://aws.amazon.com/jp/cloud9/)を利用することが特徴。

## Beginner
本WorkSHopの本編部分はBeginner、Intermediate、Advancedの3つに分かれている。今回はBeginnerを実施。

### Deploy the Kubernetes Dashboard
Kubernetes Dashboardを作成。 このダッシュボードはクラスタやNodeをGUIから状態管理・更新できるツール。
<img width="1433" alt="dashboard.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646352/be74ecc4-f166-6355-c6ca-86508acbbe54.png">
(https://www.eksworkshop.com/beginner/040_dashboard/ より引用)

### Deploy the Example Microservices
実際に3つのマイクロサービスをデプロイする。マニフェストについても合わせて学習。
デプロイしたPodの状況に合わせて以下のイメージが変化してくいく為、感覚的に理解しやすい。
![examplemicroservice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646352/54b8c2c7-eb45-f757-df03-719e4a9d5a3b.png)
(https://www.eksworkshop.com/beginner/050_deploy/ より引用)

### Helm
KubernetesのパッケージマネージャーであるHelmを利用し、サンプルアプリケーションをデプロイする。
Helmについては以下を参照。

- [helmを使ってKubernetesを楽にする](https://qiita.com/Hiroyuki_OSAKI/items/8965ceb6c90bae3bea76)  
- [helmとは & helmの使い方](https://qiita.com/sheepland/items/75b647b71c34c7d38804)   

### Health Checks
Kubernetes のヘルスチェックについてサンプルアプリケーションを利用し学習。
Kubernetes のヘルスチェックでは2種類のヘルスチェックがある。  

- **Liveness probes**  
Podが正常起動している事の確認。
- **Readiness probes**  
Podがサービスインしている事の確認。  

### Autoscaling our Applications and Clusters
Autoscaling設定についてサンプルアプリケーションを利用し学習。
k8sのAutoscalingには次の2つのパターンがある。

- **Horizontal Pod Autoscaler（HPA）**  
レプリカセット内の Pod をスケールイン・アウトする。
- **Cluster Autoscaler**  
クラスターをスケールイン・アウトする。

### Intro to RBAC
RBAC(Role-based access control)についてサンプルアプリケーションを利用し学習。
RBACとは各種リソースへのアクセス権限を管理する仕組み。

- [KubernetesのRBACについて](https://qiita.com/sheepland/items/67a5bb9b19d8686f389d)

### Using IAM Groups to manage Kubernetes access
AWSのIAMを利用したk8sのアクセス権限制御について学習。

### IAM Roles for Service Accounts
Fine-Grained IAM Rolesについて学習。Pod単位のアクセス権限の管理が可能。

### Exposing a Service
Serviceをデプロイする。LoadBalancerの設定を行い、Ingressによるサービスの公開を体験する。

# おわりに
k8sで出来る事の幅広さを体感した。
PodやClusterのScalingの仕組み、アクセスコントロールの仕組みなど様々な設定があり、それぞれを活用する事で要件に合った構築が可能となる。
一方で出来る事が多い≒検討するべき項目が多い為、有識者がいないと設計を進めるのが難しいのではないかとも感じた。

今回のEKS Workshopの実践により、"What"=k8sで何ができるか、についてある程度理解を深めることが出来た。
一方で各マニュフェストの記載方法等、"How"=どのように実装するのか、については知識が不足している為、書籍[Kubernetes完全ガイド](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear-%E9%9D%92%E5%B1%B1/dp/4295004804)で学習していきたい。