tjtjtjのメモ

自分のためのメモです

Kubernetes 学習 Scale Your App を自前クラスタで復習

Scale Your App

https://kubernetes.io/docs/tutorials/kubernetes-basics/scale/scale-intro/

チュートリアルの準備

$ kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
kb1    Ready    master   10d   v1.13.2
kb2    Ready    <none>   10d   v1.13.2
kb3    Ready    <none>   10d   v1.13.2

$ kubectl get deployments
No resources found.

$ kubectl get pods
No resources found.

$ kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   10d

kubernetes-bootcamp をデプロイ

チュートリアルで使う kubernetes-bootcamp をデプロイ。podは1コ。

$ kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
deployment "kubernetes-bootcamp" created

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   0/1     1            0           8s

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

$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-6bf84cb898-qswcf   1/1     Running   0          2m4s

Step 1: Scaling a deployment

スケールアップ

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

スケールアップを確認。オプション -o wide で pod:node を確認できる

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

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

$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-6bf84cb898-6k94z   1/1     Running   0          35s
kubernetes-bootcamp-6bf84cb898-jz9wf   1/1     Running   0          35s
kubernetes-bootcamp-6bf84cb898-qswcf   1/1     Running   0          3m10s
kubernetes-bootcamp-6bf84cb898-vlwg6   1/1     Running   0          35s

$ kubectl get pods -o wide
NAME                                   READY   STATUS    RESTARTS   AGE     IP            NODE   NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-6bf84cb898-6k94z   1/1     Running   0          79s     10.244.2.10   kb3    <none>           <none>
kubernetes-bootcamp-6bf84cb898-jz9wf   1/1     Running   0          79s     10.244.1.11   kb2    <none>           <none>
kubernetes-bootcamp-6bf84cb898-qswcf   1/1     Running   0          3m54s   10.244.2.9    kb3    <none>           <none>
kubernetes-bootcamp-6bf84cb898-vlwg6   1/1     Running   0          79s     10.244.1.12   kb2    <none>           <none>

deployments/kubernetes-bootcamp 詳細確認

$ kubectl describe deployments/kubernetes-bootcamp
Name:                   kubernetes-bootcamp
Namespace:              default
CreationTimestamp:      Tue, 05 Feb 2019 20:02:55 +0900
Labels:                 run=kubernetes-bootcamp
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=kubernetes-bootcamp
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=kubernetes-bootcamp
  Containers:
   kubernetes-bootcamp:
    Image:        gcr.io/google-samples/kubernetes-bootcamp:v1
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   kubernetes-bootcamp-6bf84cb898 (4/4 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  4m41s  deployment-controller  Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 1
  Normal  ScalingReplicaSet  2m6s   deployment-controller  Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 4

Step 2: Load Balancing

LoadBalancer で expose。

$ kubectl expose deployment kubernetes-bootcamp --type=LoadBalancer --name=bootcamp-service
service/bootcamp-service exposed
$ kubectl get services bootcamp-service
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
bootcamp-service   LoadBalancer   10.108.87.251   <pending>     8080:31729/TCP   44s
$ kubectl describe services bootcamp-service
Name:                     bootcamp-service
Namespace:                default
Labels:                   run=kubernetes-bootcamp
Annotations:              <none>
Selector:                 run=kubernetes-bootcamp
Type:                     LoadBalancer
IP:                       10.108.87.251
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31729/TCP
Endpoints:                10.244.1.11:8080,10.244.1.12:8080,10.244.2.10:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

curl 連打。各podが働いているのが分かる。

$ curl http://10.108.87.251:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-qswcf | v=1

$ curl http://10.108.87.251:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-vlwg6 | v=1

$ curl http://10.108.87.251:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-6k94z | v=1

$ curl http://10.108.87.251:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-jz9wf | v=1

Step 3: Scale Down

スケールダウン

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

スケールダウンしたことを確認

$ kubectl get pods -o wide
NAME                                   READY   STATUS        RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-6bf84cb898-6k94z   1/1     Running       0          10m   10.244.2.10   kb3    <none>           <none>
kubernetes-bootcamp-6bf84cb898-jz9wf   1/1     Terminating   0          10m   10.244.1.11   kb2    <none>           <none>
kubernetes-bootcamp-6bf84cb898-qswcf   1/1     Running       0          13m   10.244.2.9    kb3    <none>           <none>
kubernetes-bootcamp-6bf84cb898-vlwg6   1/1     Terminating   0          10m   10.244.1.12   kb2    <none>           <none>

$ kubectl get pods -o wide
NAME                                   READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-6bf84cb898-6k94z   1/1     Running   0          12m   10.244.2.10   kb3    <none>           <none>
kubernetes-bootcamp-6bf84cb898-qswcf   1/1     Running   0          15m   10.244.2.9    kb3    <none>           <none>

curl 連打。スケールダウン後のpodがレスポンしたのが分かる。

$ curl http://10.108.87.251:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-qswcf | v=1

$ curl http://10.108.87.251:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-6k94z | v=1