猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Kubernetes チュートリアルで「アプリケーションのスケーリング」を学ぶ

f:id:yoshiki_utakata:20210626215710p:plain

はじめに

前回、 Hello Minikube チュートリアルをやりました。

www.utakata.work

今回はその次のチュートリアルである「Kubernetes の基本を学ぶ」をやります。

kubernetes.io

ただし、「アプリケーションのデプロイ」等は、 Hello Minikube の方でだいぶ説明したので、「アプリケーションのスケーリング」以降をやります。

kubernetes.io

Hello Minikube は Mac 上でやったのですが、今回のチュートリアルは Kubernetes 公式サイトに用意されているコンソール上で行います。

スケーリング

Deployment の レプリカ数 を変更することで、アプリケーションのスケーリングを実現できます。

Deployment とは Kubernetes の基本的な概念で、 Hello Minikube の記事でも説明しているので、 Deployment がわからない人は Hello Minikube からやり直してください。

レプリカ数を増やすと、 Pod の数が増えます。レプリカ数を増やすことを スケールアウト と言います。

Kubernetes に関わらず、 Pod を増やしたり、サーバーの台数を増やすことをスケールアウトと呼びます。ちなみに、サーバーのスペックを上げることをスケールアップと呼びます。

f:id:yoshiki_utakata:20210626231640p:plain

実際にスケールアップさせてみる

チュートリアルのコンソールで deployments を見てみると、 kubernetes-bootcamp という deployment が動いていることがわかります。

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           4m58s

READY が 1/1 となっています。これは、現在動いているPod数 / 必要なPod数 となっています。

ReplicaSet (略して rs)というのがあります。 ReplicaSet には名前がついていて、 Deployment名-ランダム文字列 となっています。

$ kubectl get rs
NAME                            DESIRED   CURRENT   READY   AGE
kubernetes-bootcamp-fb5c67579   1         1         1       5m25s

スケールアウトさせるには、以下のコマンドを実行します。これは、必要なPod数を4に変更するコマンドです。

$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.apps/kubernetes-bootcamp scaled

Pod 数が増えたことを確認してみましょう。

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           8m37s

get pods に -o wide をつけると、レプリカの詳細が見られます。

$ kubectl get pods -o wide
NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-fb5c67579-2rzpx   1/1     Running   0          2m8s    172.18.0.8   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-dg7rb   1/1     Running   0          2m8s    172.18.0.7   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-jpwg8   1/1     Running   0          8m44s   172.18.0.5   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-mmv9b   1/1     Running   0          2m8s    172.18.0.9   minikube   <none>           <none>

4つのPodが動いていることがわかります。

kubectl describe deployments/kubernetes-bootcamp でも、 Replicas: でレプリカの数が見られたりします。

ロードバランシングの確認

サービスを見てみましょう

$ kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     NodePort
IP Families:              <none>
IP:                       10.103.225.141
IPs:                      10.103.225.141
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31229/TCP
Endpoints:                172.18.0.5:8080,172.18.0.7:8080,172.18.0.8:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Hello Minikube では type=LoadBalancer というのを使っていましたが、こちらのチュートリアルでは type=NodePort というのを使っています。

NodePort が 31229/TCP となっているので、これはポート31229で外部に公開されているということになります。

さらに、 minikube ip コマンドを実行すると、 Minikube の Kubernetes クライアントの IP がわかります。

$ minikube ip
172.17.0.10

LoadBalancer を使っていた時は 127.0.0.1 でアクセスしましたが、 NodePort を使っている場合は、 Minikube の IP でアクセスします。

curl で叩いてみます。

$ curl 172.17.0.10:31229

リクエストするたびに、応答する Pod が変わることになります。ロードバランシングされているということになりますね。

スケールダウン

レプリカの数を減らすことを スケールダウン と呼びます。スケールアップの時と同様のやり方で、レプリカ数を減らせばスケールダウンされます。

$ kubectl scale deployments/kubernetes-bootcamp --replicas=2
deployment.apps/kubernetes-bootcamp scaled

スケールアップ・ロードバランシングに関するチュートリアルは以上です。