はじめに
前回、 Hello Minikube チュートリアルをやりました。
今回はその次のチュートリアルである「Kubernetes の基本を学ぶ」をやります。
ただし、「アプリケーションのデプロイ」等は、 Hello Minikube の方でだいぶ説明したので、「アプリケーションのスケーリング」以降をやります。
Hello Minikube は Mac 上でやったのですが、今回のチュートリアルは Kubernetes 公式サイトに用意されているコンソール上で行います。
スケーリング
Deployment の レプリカ数 を変更することで、アプリケーションのスケーリングを実現できます。
Deployment とは Kubernetes の基本的な概念で、 Hello Minikube の記事でも説明しているので、 Deployment がわからない人は Hello Minikube からやり直してください。
レプリカ数を増やすと、 Pod の数が増えます。レプリカ数を増やすことを スケールアウト と言います。
Kubernetes に関わらず、 Pod を増やしたり、サーバーの台数を増やすことをスケールアウトと呼びます。ちなみに、サーバーのスペックを上げることをスケールアップと呼びます。
実際にスケールアップさせてみる
チュートリアルのコンソールで 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
スケールアップ・ロードバランシングに関するチュートリアルは以上です。