0
0

More than 3 years have passed since last update.

Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた④

Last updated at Posted at 2019-10-02

はじめに

本記事では、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 の構成は、図の様になります。
image.png

  • フロントエンド:PHP App

    • AWS ELB(パブリック ELB)
    • 複数の Slave DB で読み込みの冗長化
    • シングル Master DB に書き込みリクエスト
  • バックエンド:Redis

    • シングル Master Pod(書き込み)
    • マルチ Slave Pods(読み込み)
    • Master と継続的に同期する複数の Slave を用意

Backend Deployment

image.png
Stateless app の構築にあたり、先ずはバックエンドを作成します。作成内容は以下です。

  • Redis Master pod
  • Redis Master service
  • Redis Slave pods
  • Redis Slave service

それでは、「redis-master.yaml」ファイルを使用して、Redis Master の作成を行います。
image.png
「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 の作成を行います。
image.png
「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 について確認してみます。
image.png
「kubectl get pods -o wide」と入力すると、作成した pods の情報が表示されます。例えば、1番上に表示されている redis-master の worker node は、ip-192-168-208-206.ec2.internal であることが分かります。

image.png
worekr node の情報は、「kubectl describe node [NODE]」と入力することで、取得することができます。例えば、「kubectl describe node ip-192-168-208-206.ec2.internal」と入力すれば、redis master の worker node の名前やラベルなどといった情報を取得できます。

Frontend Deployment

image.png

フロントエンドを作成します。
使用する YAML ファイル名は、「frontend.yaml」ファイルです。
image.png
「kubectl apply -f frontend.yaml」と入力し、デプロイが完了したら、「kubectl get pods -o wide」を入力します。これで、フロントエンド側で作成した pods の情報を見ることができます。
また、「kubectl get service frontend」と入力することで、

  • サービス名:frontend
  • タイプ  :LoadBalancer

と、フロントエンドサービスの情報を確認することができます。

これよりさらに、細かい情報を取得することもできます。
image.png
より詳しい情報を取得したい場合は、「kubectl describe service frontend」と入力します。
AWS のコンソール画面から、今回作成したサービスを確認することができるので、無事に作成できているか確認しましょう。

Scaling our pods up and down

それでは、次は pod のスケーリングアップ・ダウンを行ってみましょう。

Scaling Up

image.png
「kubectl scale --replicas 5 deployment frontend」とコマンド入力することで、pod を5つスケールアップします。

Scaling Down

今度は逆に、pod を5→4にスケールダウンさせます。
image.png
「kubectl scale --replicas 4 deployment frontend」と入力することで、pod を4つに変更します。

image.png
「kubectl get pods」と入力し、現在の pod の数を確認すると pod の数が減っているのが確認できます。

yaml ファイルを直接書き換えることでも、pod の数を変更することができます。
image.png
image.png
「frontend.yaml」ファイルの「replicas」を 3→10に変更します。

image.png
「kubectl apply -f frontend.yaml」と入力し、「kubectl get deployment fronted」と入力すると、pod の数が10にスケールアップしていることが確認できます。

スケーリングを行う際の注目点としては、レプリカセットが作成されていることです。
image.png
「frontend-5c548f4769」が、レプリカセットです。そして、注意することは、このレプリカセットの数字を直接変えようとしてはいけません。
「kubectl scale --replicas 4 rs frontend-5c548f4769」と入力しても、レプリカセットの数字は変わりませんし、ポッドの数も変わりません。

Self-Healing Mecahnism of K8s

最後に、K8s の自動修復について軽く紹介したいと思います。

image.png
図のように3つの pod が存在している状態で、その中の1つの pod を削除します。

image.png
[frontend-5c548f4769-bdlv2] を削除しても、代わりの[frontend-5c548f4769-thb9h] が作成されるので、pod の数は減ることはありません。

K8s の自動修復は、pod だけでなく redis-master node にも適用されます。
image.png
試しに、[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 の構築などについて紹介したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0