##はじめに
本記事では、Udemy にて Stephane Maarek 氏 が提供している「Amazon EKS Starter: Docker on AWS EKS with Kubernetes」 について紹介していきます。
前回は、Kubernetes Dashboard のデプロイ方法について学んでいきました。今回は、stateless app の作成を行ってまいります。
過去の記事のリンクは以下を参照ください
Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた①
Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた②
Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた③
##Deploy & inspect a stateless app
本記事で作成する stateless app の構成は、図の様になります。
-
フロントエンド:PHP App
-
AWS ELB(パブリック ELB)
-
複数の Slave DB で読み込みの冗長化
-
シングル Master DB に書き込みリクエスト
-
バックエンド:Redis
-
シングル Master Pod(書き込み)
-
マルチ Slave Pods(読み込み)
-
Master と継続的に同期する複数の Slave を用意
###Backend Deployment
Stateless app の構築にあたり、先ずはバックエンドを作成します。作成内容は以下です。
- Redis Master pod
- Redis Master service
- Redis Slave pods
- Redis Slave service
それでは、「redis-master.yaml」ファイルを使用して、Redis Master の作成を行います。
「kubectl apply -f redis-master.yaml」と入力し、「redis-master.yaml」ファイルをデプロイします。
「kubectl get pods」、「kubectl get service redis-master」と入力することで、Redis Master pod、Redis Master service がそれぞれ YAML ファイルの内容通りに作成されていることを確認できます。
同じように、「redis-slaves.yaml」ファイルを使用して、Redis Slave の作成を行います。
「kubectl apply -f redis-slaves.yaml」と入力し、「redis-slaves.yaml」ファイルをデプロイします。
「kubectl get pods」、「kubectl get service」と入力することで、Redis Slave pod、Redis Slave service がそれぞれ YAML ファイルの内容通りに作成されていることを確認できます。
次に、作成した pods の IP や worker node について確認してみます。
「kubectl get pods -o wide」と入力すると、作成した pods の情報が表示されます。例えば、1番上に表示されている redis-master の worker node は、ip-192-168-208-206.ec2.internal であることが分かります。
worekr node の情報は、「kubectl describe node [NODE]」と入力することで、取得することができます。例えば、「kubectl describe node ip-192-168-208-206.ec2.internal」と入力すれば、redis master の worker node の名前やラベルなどといった情報を取得できます。
フロントエンドを作成します。
使用する YAML ファイル名は、「frontend.yaml」ファイルです。
「kubectl apply -f frontend.yaml」と入力し、デプロイが完了したら、「kubectl get pods -o wide」を入力します。これで、フロントエンド側で作成した pods の情報を見ることができます。
また、「kubectl get service frontend」と入力することで、
- サービス名:frontend
- タイプ :LoadBalancer
と、フロントエンドサービスの情報を確認することができます。
これよりさらに、細かい情報を取得することもできます。
より詳しい情報を取得したい場合は、「kubectl describe service frontend」と入力します。
AWS のコンソール画面から、今回作成したサービスを確認することができるので、無事に作成できているか確認しましょう。
##Scaling our pods up and down
それでは、次は pod のスケーリングアップ・ダウンを行ってみましょう。
###Scaling Up
「kubectl scale --replicas 5 deployment frontend」とコマンド入力することで、pod を5つスケールアップします。
###Scaling Down
今度は逆に、pod を5→4にスケールダウンさせます。
「kubectl scale --replicas 4 deployment frontend」と入力することで、pod を4つに変更します。
「kubectl get pods」と入力し、現在の pod の数を確認すると pod の数が減っているのが確認できます。
yaml ファイルを直接書き換えることでも、pod の数を変更することができます。
「frontend.yaml」ファイルの「replicas」を 3→10に変更します。
「kubectl apply -f frontend.yaml」と入力し、「kubectl get deployment fronted」と入力すると、pod の数が10にスケールアップしていることが確認できます。
スケーリングを行う際の注目点としては、レプリカセットが作成されていることです。
「frontend-5c548f4769」が、レプリカセットです。そして、注意することは、このレプリカセットの数字を直接変えようとしてはいけません。
「kubectl scale --replicas 4 rs frontend-5c548f4769」と入力しても、レプリカセットの数字は変わりませんし、ポッドの数も変わりません。
##Self-Healing Mecahnism of K8s
最後に、K8s の自動修復について軽く紹介したいと思います。
図のように3つの pod が存在している状態で、その中の1つの pod を削除します。
[frontend-5c548f4769-bdlv2] を削除しても、代わりの[frontend-5c548f4769-thb9h] が作成されるので、pod の数は減ることはありません。
K8s の自動修復は、pod だけでなく redis-master node にも適用されます。
試しに、[redis-master-55db5f7567-l8jqq] を削除します。すると、削除した redis-master node に代わって [redis-master-55db5f7567-2dwpf] が新たに生成されました。
このように、K8s は pod だけでなく redis-master node も自動修復することができます。
##おわりに
stateless app については以上となります。今回は、stateless app を作成するために、backend とfrontend の環境をそれぞれ作成しました。次回は、Amazon EFS を使った app の構築などについて紹介したいと思います。