OpenShift 4 - 就地调整 Pod 资源使用量

OpenShift / RHEL / DevSecOps 汇总目录
说明:本文已经在 OpenShift 4.14 的环境中验证

为什么需要就地调整 Pod 资源

以往在 Kubernetes 中调整 Pod 的 CPU 和内存资源的过程需要创建一个新的 Pod 来替换原有 Pod,不过在 Kubernetes 1.27.以及 OpenShift 4.14 版本开始支持原地调整 Pod 使用的资源。

在原有 Pod 就地调整资源具备以下优势:

  • 减少停机时间:重新创建 Pod 以调整其资源可能会导致停机,特别是如果 Pod 是 StatefulSet 的一部分或正在处理关键任务时。就地调整 Pod 大小可减少停机时间,确保更顺畅的运行。
  • 高效利用资源:资源配置过多会造成浪费,而资源配置不足则会导致性能问题。动态调整大小可确保根据实时需求高效使用资源。
  • 节约成本:高效的资源利用可以节约成本,尤其是在云环境中,使用多少资源就要支付多少费用。
  • 简化操作:无需手动干预和重新创建 Pod 或调整部署配置。这简化了运营开销。

启动 InPlacePodVerticalScaling 特性

为了在 OpenShift 中使用就地调整 Pod 资源的功能,需要先通过 FeatureGate 启动相关功能。

  1. 在 OpenShift 管理控制台进入“管理->集群设置”,在 “配置” 中查找 “featuregate”,然后进入 FeatureGate。
    在这里插入图片描述
  2. 在 FeatureGate 的 YAML 中增加以下部分,然后保存。
spec:
  customNoUpgrade:
    enabled:
      - InPlacePodVerticalScaling
      - BuildCSIVolumes
      - CloudDualStackNodeIPs
      - OpenShiftPodSecurityAdmission
  featureSet: CustomNoUpgrade

在这里插入图片描述

实现就地调整 Pod 资源

  1. 执行命令创建测试 Pod,其中设置了 cpu 和 memory 使用量。
$ cat << EOF | oc apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: resizeme
spec:
  containers:
  - name: resizeme
    image: ubi9/ubi
    command: ["tail", "-f", "/dev/null"]
    resources:
      requests:
        cpu: 1
        memory: "512Mi"
      limits:
        cpu: 2
        memory: "1Gi"
EOF
  1. 执行命令查看 Pod 的 resizePolicy,确认 restartPolicy 缺省都是 NotRequired。
$ oc get pod resizeme -ojsonpath="{.spec.containers[0].resizePolicy}" | jq
[
  {
    "resourceName": "cpu",
    "restartPolicy": "NotRequired"
  },
  {
    "resourceName": "memory",
    "restartPolicy": "NotRequired"
  }
]
  1. 执行命令修改 Pod 使用的资源,将 cpu 调整为 2。
$ oc patch pod resizeme -p ' {"spec": {"containers": [{"name": "resizeme", "resources": { "requests" :{ "cpu" : 2, "memory": "512Mi"}, "limits" :{ "cpu" : 2, "memory" : "1Gi" } } }] }}'
  1. 执行命令查看 resize 的状态。InProgress 为正在进行中,成功完成后将没有返回。
$ oc get pods resizeme -o jsonpath="{.status.resize}{'\n'}"
InProgress
  1. 执行命令查看 Pod 使用资源,可以看到 Pod 可使用的 cpu 已经调整为 2。
$ oc get pod resizeme -ojsonpath="{.status.containerStatuses[0].resources}" | jq
{
  "limits": {
    "cpu": "2",
    "memory": "1Gi"
  },
  "requests": {
    "cpu": "2",
    "memory": "512Mi"
  }
}
  1. 也可在 Pod 的指标界面中可以看到 Pod 可使用的 cpu 已经调整为 2。
    在这里插入图片描述

参考

https://cloud.redhat.com/blog/in-place-resource-resize-of-openshift-pod-spec
https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值