您管理一个 WordPress 应用程序。由于资源请求过高,某些 Pod无法启动。
Task
relative-fawn namespace 中的 WordPress应用程序包含:
- l具有 3 个副本的 WordPress Deployment
按如下方式调整所有 Pod 资源请求:
- l将节点资源平均分配给这 3 个 Pod
- l为每个 Pod 分配公平的 CPU 和内存份额
- l添加足够的开销以保持节点稳定
请确保,对容器和初始化容器使用完全相同的请求。您无需更改任何资源限制。
在更新资源请求时,暂时将 WordPress Deployment 缩放为 0 个副本可能会有所帮助。
更新后,请确认:
- lWordPress 保持 3 个副本
- l所有 Pod 都在运行并准备就绪
解题方法
步骤1.将 WordPress Deployment 缩放为 0 个副本
题目里提示了,要先将 Deployment 缩放为 0。
真正考试时,如果你不将其缩小为 0,而是直接修改cpu 和 memory 值,会导致新 Pod 起不来,因为考试环境提前做了一些限制。
kubectl -n relative-fawn scale deployment wordpress --replicas=0
*$ kubectl -n relative-fawn get deployment wordpress
NAME READY UP-TO-DATE AVAILABLE AGE
wordpress `0/0` 0 0 71s
提示 scaled,表示缩放成功
再次检查副本数,发现已为 0
kubectl -n relative-fawn get deployment wordpress
NAME READY UP-TO-DATE AVAILABLE AGE
wordpress `0/0` 0 0 71s
步骤2.检查 nodes 资源请求情况
考试时,只有一个 node 节点。而模拟环境里,我们假设是k8s-master1这个 node 节点即可。要先缩为 0 后,再检查 node 资源请求情况。
kubectl get nodes
kubectl describe node k8s-master1
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 400m (20%) 500m (25%)
memory 290Mi (15%) 0 (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
以下数字只是举例,实际以查出来的数字为准。
计算方法:
CPU 400m 占用了 20%, 20m 约等于 1%
用了 20%,还剩下 80% 约等于 1600m(80*20m)
最终是要 3 副本,每个副本里2个容器。6个容器平分1600m,每个容器最高 266m
理论上 cpu request :1m-266m 都可以设置
不能设置太低,考试时和练习环境都为 100m
内存 290Mi 占 15%,1%约为 19 Mi
用了 15%,还剩下 75% 约等于 1425Mi(75*19Mi)
最终是要 3 副本,每个副本里2个容器。6个容器平分1425Mi,每个容器最高 237Mi
理论上 内存 request :1Mi-237Mi 都可以设置
不能设置太低,考试时和练习环境都为 200Mi
步骤3. 更新 WordPress Deployment 的资源请求
*$ kubectl -n relative-fawn set resources deploy wordpress \
--requests='cpu=100m,memory=200Mi'
首先实际考试时不用计算,直接按我的改即可,或者更小一点都可以。
其次计算方式是:考试时是单台k8s集群。通过kubectl describe node xxxx查询到这台主机的requests使用情况,比如CPU 1100m(55%) MEM 240Mi(8%),就是说现在可以申请的CPU约为1000m(45%)MEM为2760Mi(92%)。
那现在wordpress是三个副本,那就是可用的除以3,当然不能完全用完,还要留一些。
CPU 1000m/3pod = 200m
MEM 2760Mi/3pod = 900Mi
步骤4.更新 WordPress Deployment 的资源请求
*$ kubectl -n relative-fawn set resources deploy wordpress \
--requests='cpu=100m,memory=200Mi'
将配置文件里, containers 的 requests cpu 设置为 100m,内存设置为 200Mi
limits 不需要改,因为题目里写了"您无需更改任何资源限制",指的就是不要改limits。
步骤5. 将 WordPress Deployment 副本恢复为 3 个
kubectl -n relative-fawn scale deployment wordpress --replicas=3
步骤6.检查
检查 wordpress pod 是否都是 running
这里大约需要等 2 分钟,Pod 才会 Running.
kubectl -n relative-fawn get pod
NAME READY STATUS RESTARTS AGE
wordpress-55bb5dd58-7rjbv 1/1 Running 0 3m23s
wordpress-55bb5dd58-lcztr 1/1 Running 0 2m17s
wordpress-55bb5dd58-tpmm9 1/1 Running 0 74s
检查 deployment wordpress 是否为 3 个副本
kubectl -n relative-fawn get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
wordpress 3/3 3 3 6m53s