《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.6环境中验证
手动扩展收缩Pod数
- 创建测试项目
$ oc new-project scale-up-down
- 创建测试应用资源
$ oc new-app --image-stream=php --code=https://github.com/liuxiaoyu-git/hpademo
$ oc expose svc hpademo
- 访问测试应用
$ curl $(oc get route hpademo --template={{.spec.host}})
OK!
- 查看项目包括的资源,确认目前是有1个Pod,这是由于Deployment关联的 replicaset只定义了1个Pod副本。
$ oc get all
NAME READY STATUS RESTARTS AGE
pod/hpademo-1-build 0/1 Completed 0 89s
pod/hpademo-74c787766d-62tcs 1/1 Running 0 43s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hpademo ClusterIP 172.30.69.117 <none> 8080/TCP,8443/TCP 90s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hpademo 1/1 1 1 90s
NAME DESIRED CURRENT READY AGE
replicaset.apps/hpademo-74c787766d 1 1 1 43s
replicaset.apps/hpademo-c855d4967 0 0 0 90s
NAME TYPE FROM LATEST
buildconfig.build.openshift.io/hpademo Source Git 1
NAME TYPE FROM STATUS STARTED DURATION
build.build.openshift.io/hpademo-1 Source Git@122d440 Complete About a minute ago 46s
NAME IMAGE REPOSITORY TAGS UPDATED
imagestream.image.openshift.io/hpademo image-registry.openshift-image-registry.svc:5000/scale-up-down/hpademo latest 43 seconds ago
- 手动扩展运行应用的Pod数为3副本。
$ oc scale deployment/hpademo --replicas=3
deployment.apps/hpademo scaled
- 查看确认当前运行应用的Pod数为3个。
$ oc get pod
NAME READY STATUS RESTARTS AGE
hpademo-1-build 0/1 Completed 0 11m
hpademo-74c787766d-62tcs 1/1 Running 0 10m
hpademo-74c787766d-p4p6j 1/1 Running 0 10s
hpademo-74c787766d-p6vtg 1/1 Running 0 10s
手动收缩到“0”个Pod
虽然我们可以在Kubernetes中手动将Deployment对应的replicaset设为0个,但是这样设置意义不大,因为此时即便有用户访问应用,Kubernetes也不会再创建Pod来运行这个应用了。相比Kubernetes,OpenShift提供了手动Idling的功能。Idling可将运行应用的Pod数暂时降为“0”个,这样当应用不被访问的时候就不会再消耗系统资源。如果有请求访问应用,OpenShift会恢复运行replicaset设置的运行应用Pod副本数量。不过,OpenShift只支持根据请求自动将Pod数从“0“扩展到“多”的过程,而不支持反向Pod自动收缩到“0”个过程 - 即当没有应用访问的时候,Pod数最少只能自动收缩的“1”个。如果要收缩到“0”个,只能通过手动的方式实现。
- 查看Service对应的Endpoint对象,确认目前Endpoint中有3个地址,这是由于Service后台有3个运行的Pod。
$ oc get endpoints
NAME ENDPOINTS AGE
hpademo 10.128.2.77:8443,10.128.2.78:8443,10.131.0.73:8443 + 3 more... 11m
- 执行命令,将让endpoints对象空闲。注意提示“The service will unidle Deployment “scale-up-down/hpademo” to 3 replicas once it receives traffic”是说当应用接收到请求后会直接恢复运行3个副本。
$ oc idle endpoints/hpademo
The service "scale-up-down/hpademo" has been marked as idled
The service will unidle Deployment "scale-up-down/hpademo" to 3 replicas once it receives traffic
Deployment "scale-up-down/hpademo" has been idled
- 此时再次查看名为hpademo的Endpoint,确认已经没有访问Endpoint对应的地址了,说明后台没有运行这个应用的Pod了。
$ oc get endpoints
NAME ENDPOINTS AGE
hpademo <none> 5m7s
$ oc get pod
NAME READY STATUS RESTARTS AGE
hpademo-1-build 0/1 Completed 0 4m21s
- 再次访问测试应用。
$ curl $(oc get route hpademo --template={{.spec.host}})
OK!
- 再次查看名为hpademo的Endpoint,确认它已经有了3个对应的访问IP地址。
$ oc describe endpoints hpademo
Name: hpademo
Namespace: scale-up-down
Labels: app=hpademo
app.kubernetes.io/component=hpademo
app.kubernetes.io/instance=hpademo
app.kubernetes.io/name=php
Annotations: endpoints.kubernetes.io/last-change-trigger-time: 2020-08-24T12:27:59Z
Subsets:
Addresses: 10.128.2.81,10.128.2.82,10.131.0.74
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
8443-tcp 8443 TCP
8080-tcp 8080 TCP
Events: <none>
自动扩展收缩Pod数
- 将运行应用的Pod副本恢复为“1”。
$ oc scale deployment/hpademo --replicas=1
- 设置Deployment可以使用的CPU资源上限。
$ oc set resources deployment hpademo --requests=cpu=200m --limits=cpu=500m
- 为名为hpademo的Deployment设置Autoscaler,最小1个(无法设成“0”)Pod副本,最大10个Pod副本。
$ oc autoscale deployment hpademo --cpu-percent=50 --min=1 --max=10
- 查看“oc autoscale”命令在项目中自动生成的HPA对象。
$ oc describe hpa hpademo
Name: hpademo
Namespace: scale-up-down
Labels: <none>
Annotations: <none>
CreationTimestamp: Thu, 24 Dec 2020 12:15:03 +0000
Reference: Deployment/hpademo
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): 0% (0) / 50%
Min replicas: 1
Max replicas: 10
Deployment pods: 1 current / 1 desired
。。。
- 获得访问测试应的ROUTE-URL。
$ oc get route hpademo --template={{.spec.host}}
- 在一个新的Terminal窗口执行以下命令,直接根据指定的Image运行一个Pod。
$ oc run -it --rm load-generator --image=busybox /bin/sh
- 然后在上一步运行的Pod中执行以下脚本,其中需用实际地址替换“<ROUTE-URL>”。
# while true; do wget -q -O- <ROUTE-URL>; done
- 通过查看HPA跟踪当前运行Pod的副本数量,可以看到 REPLICAS 一列从‘1’逐步增加。
$ oc get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpademo Deployment/hpademo <unknown>/50% 1 10 1 72s
hpademo Deployment/hpademo 0%/50% 1 10 1 75s
hpademo Deployment/hpademo 13%/50% 1 10 1 90s
hpademo Deployment/hpademo 36%/50% 1 10 1 2m15s
hpademo Deployment/hpademo 69%/50% 1 10 1 2m30s
hpademo Deployment/hpademo 68%/50% 1 10 2 2m45s
hpademo Deployment/hpademo 95%/50% 1 10 2 3m
hpademo Deployment/hpademo 94%/50% 1 10 2 3m15s