k8s缩放应用程序
2024-10-19 13:23:56
参考:https://kubernetes.io/docs/tutorials/kubernetes-basics/
步骤1:扩展部署
要列出部署,请使用GET部署命令:kubectl get deployments
我们应该有一个POD。如果没有,请再次运行该命令。这显示:所需的状态显示的是已配置的副本数量,当前的状态显示了现在运行的副本的数量,最新的是更新以匹配所需(配置的)状态的副本的数量,可用状态显示用户实际可用的副本数量。
输出的自字段含义:
NAME: Deployments名称
DESIRED:创建Deployments时指定的副本数量。
CURRENT:当前正在运行的副本数量。
UP-TO-DATE:成功升级的副本数量。
AVAILABLE:可用的副本数量,注意副本在运行不等于可用。
AGE:应用运行时间。
接下来,让我们将部署扩展到4个副本。我们将使用kubectl Scale命令,后面跟着deployment类型、名称和所需的实例数:
$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4/4 4 4 15m
现在我们有4个可用的应用程序实例。接下来,让我们检查一下Pods的数量是否发生了变化:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubernetes-bootcamp-6bf84cb898-7mcsw 1/1 Running 0 2m53s 172.18.0.7 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-92gcb 1/1 Running 0 17m 172.18.0.4 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-949rh 1/1 Running 0 2m53s 172.18.0.6 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-r678j 1/1 Running 0 2m53s 172.18.0.5 minikube <none> <none>
现在有4种不同的IP地址。更改已在deployments事件日志中注册。要检查这一点,请使用Description命令:
$ kubectl describe deployments/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
CreationTimestamp: Sun, 07 Apr 2019 08:48:24 +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: 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 20m deployment-controller Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 1
Normal ScalingReplicaSet 5m39s deployment-controller Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 4
您还可以在此命令的输出中查看现在有4个副本。
步骤2:负载平衡
让我们检查一下service是否是负载平衡的流量。为了找到公开的IP和端口,我们可以使用 describe service:
$ kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: run=kubernetes-bootcamp
Annotations: <none>
Selector: run=kubernetes-bootcamp
Type: NodePort
IP: 10.96.175.74
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31242/TCP
Endpoints: 172.18.0.4:8080,172.18.0.5:8080,172.18.0.6:8080 + 1 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
创建一个名为Node_Port的环境变量,其值为Node端口:
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
NODE_PORT=31242
接下来,我们将对公开的IP和端口进行curl。多次执行该命令
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-949rh | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-r678j | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-949rh | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-r678j | v=1
我们每次请求都会碰到不同的情况。这表明负载平衡是有效的。
查看Deployments的推进状态(rollout status):
$ kubectl rollout status deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp" successfully rolled out
第三步:缩小规模
若要将服务缩小到2个副本,请再次运行Scale命令:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4/4 4 4 35m
$ kubectl scale deployments/kubernetes-bootcamp --replicas=2
deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 2/2 2 2 42m
复制数减少到2个。列出Pods的数量:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubernetes-bootcamp-6bf84cb898-4rhbr 1/1 Running 0 5m35s 172.18.0.6 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-v6zf2 1/1 Running 0 5m39s 172.18.0.3 minikube <none> <none>
最新文章
- ANDROID STDUIO 项目里的R文件突然丢失的解决办法N种之一
- ACM 兰州烧饼
- Shell重定向文件描述符
- PDF 补丁丁 0.4.2.1023 测试版使用手册发布
- Tilera 服务器上OpenJDK的安装尝试
- eclipse中自动生成javadoc文档
- wampserver 自定义站点
- MVC 5 属性路由中添加自己的自定义约束
- HNU 13074 Goldbach’s Conjecture 解题报告
- ThinkPHP数据字段的缓存问题
- 201521123007《Java程序设计》第13周学习总结
- RequireJS(一)
- Django_xadmin_应用外键搜索功能错误
- httpclient的主要业务代码逻辑(图解)
- asp.net mvc中action接收客户端发送过来的html片段
- C#代码执行耗时计算,此处是监测的mvc控制器方法
- Suricata规则编写——常用关键字
- Hook lua库函数时遇到的问题
- Office 365 - For security reasons DTD is prohibited in this XML document
- ansible 变量定义和引用