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