美文网首页
伸缩APP-运行多个APP实例

伸缩APP-运行多个APP实例

作者: 趁你还年轻233 | 来源:发表于2018-03-12 19:46 被阅读68次

原文地址:https://kubernetes.io/docs/tutorials/kubernetes-basics/scale-intro/
目标:

  • 使用kubectl扩展应用

在之前的单元里我们创建了一个Deployment,然后紧接着通过Service公开曝光了出去。Deployment仅仅创建了一个Pod来运行应用。当流量增加以后,我们需要扩充我们的应用规模以满足用户的需求。

Scaling通过改变一个Deployment里的副本的个数来实现。

总结:

  • 扩展一个Deployment

在启动一个Deployment的时候,你可以为命令kubuctl run添加--replicas参数,从而达到启动多个实例的效果。

Scaling预览
扩展前:

扩展前
扩展后:
扩展后

scaling out:扩展部署将确保创建新Pod并将其排定到具有可用资源的节点。
scaling in:缩放将减少Pod到新的期望状态的数量。
autocaling:kubernetes支持Pods的自动扩展。
scaling to zero:缩放到零也是可能的,它将终止指定部署的所有Pod。

运行一个应用的多个实例需要一种分发流量的方式。Services有一个集成的负载均衡器,以确保将网络流量分发到外露的Deployment的所有Pod。Services将持续监控使用断点的Pod,以确保流量可以被发送到可用的Pod.

Scaling通过改变Deployment中的副本个数做到扩展或缩放。

一旦你有了一个运行了多个实例的应用以后,无需停机就可以进行滚动更新。我们将在下一个单元学习这个。现在,让我们到在线终端去scale我们的应用吧。

使用kubectl scale命令scale一个Deployment并且查看一个运行中的负载均衡
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1 1 1 1 4m
状态说明
DESIRED:显示已经配置的副本数
CURRENT:显示正在运行多少副本
UP-TO-DATE:已更新以匹配所需(已配置)状态的副本
AVAILABLE :显示用户有多少可用的副本

接下来,我们把Deployment扩展到4个副本。使用命令如下:
kubectl scale +deployment type+名字+已配置的实例副本数
kubect scale deployments/kubernetes-bootcamp --replicas=4

kubectl get deployments

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4         4         4            4           17m

检查当前pod数
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5dbf48f7d4-4sdxt 1/1 Running 0 19m 172.18.0.4 host01
kubernetes-bootcamp-5dbf48f7d4-hnx4g 1/1 Running 0 1m 172.18.0.5 host01
kubernetes-bootcamp-5dbf48f7d4-r6ntq 1/1 Running 0 1m 172.18.0.7 host01
kubernetes-bootcamp-5dbf48f7d4-v5f9q 1/1 Running 0 1m 172.18.0.6 host01

查看部署日志
kubectl describe deployments/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
CreationTimestamp: Thu, 01 Mar 2018 08:31:39 +0000
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: 1 max unavailable, 1 max surge
Pod Template:
Labels: run=kubernetes-bootcamp
Containers:
kubernetes-bootcamp:
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Port: 8080/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason


Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: kubernetes-bootcamp-5dbf48f7d4 (4/4 replicas created)
Events:
Type Reason Age From Message


Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set kubernetes-bootcamp-5dbf48f7d4 to 1
Normal ScalingReplicaSet 3m deployment-controller Scaled up replica set kubernetes-bootcamp-5dbf48f7d4 to 4

负载均衡

设置名称为NODE_PORT的环境变量

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT

NODE_PORT=30257

每次请求我们都会碰到不同的Pod。这表明负载平衡正在工作
curl $(minikube ip):$NODE_PORT
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-4sdxt | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-4sdxt | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-4sdxt | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-hnx4g | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-hnx4g | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-r6ntq | v=1

kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5dbf48f7d4-4sdxt 1/1 Running 0 26m
kubernetes-bootcamp-5dbf48f7d4-hnx4g 1/1 Running 0 8m
kubernetes-bootcamp-5dbf48f7d4-r6ntq 1/1 Running 0 8m
kubernetes-bootcamp-5dbf48f7d4-v5f9q 1/1 Running 0 8m

缩小Deployment

将服务缩小到2个副本,再次运行scale命令
kubectl scale deployments/kubernetes-bootcamp --replicas=2

查看Deployment个数
kubectl get deployments

查看Pod个数
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5dbf48f7d4-flnt6 1/1 Running 0 16s 172.18.0.2 host01
kubernetes-bootcamp-5dbf48f7d4-vwxbh 1/1 Running 0 4s 172.18.0.5 host01

如果不带 -o wide参数的话,将隐藏IP和NODE这两个重要属性。
kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5dbf48f7d4-flnt6 1/1 Running 0 24s
kubernetes-bootcamp-5dbf48f7d4-vwxbh 1/1 Running 0 12s

期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:

努力成为优秀前端工程师!

相关文章

网友评论

      本文标题:伸缩APP-运行多个APP实例

      本文链接:https://www.haomeiwen.com/subject/idxmfftx.html