【发布时间】:2021-09-10 22:09:07
【问题描述】:
我有一个带有 Patroni 的三个节点的 PostgreSQL 集群。集群管理着非常高的工作负载,因此,它在裸机机器上运行在生产环境中。 我们需要将此基础架构迁移到 Kubernetes(出于多种原因),并且我正在使用 PgBench 执行一些性能测试。首先,我比较了 Baremetal 和 Virtual Machine,降级非常小。然后我比较了 VSI 和 Kubernetes 来了解 K8s 增加的开销。
现在我正在尝试微调 CPU 和内存。 K8s 在具有 48 个 vCPU 和 192 Gb 的 Worker 节点上运行。但是,一旦部署了 PostgreSQL,我仍然可以看到:
NAME CPU(cores) MEMORY(bytes)
postgresql-deployment-5c98f5c949-q758d 2m 243Mi
即使我将以下内容分配给 PostgreSQL 容器:
resources:
requests:
memory: 64Gi
limits:
memory: 64Gi
如果我跑步:
kubectl top pod <pod name> -n <namespace>
我得到了以下信息:
NAME CPU(cores) MEMORY(bytes)
postgresql-deployment-5c98f5c949-q758d 2m 244Mi
即使出现以下结果,K8s 仪表板也会出现相同的结果:
kubectl describe pod <pod name> -n <namespace>
显示 Pod 以 Guarantee QoS 和 64Gi 的 RAM 用于请求和限制运行。
这应该如何工作?
我不明白的另一件事是 CPU limit 和 requested。我希望输入这样的内容:
resources:
requests:
cpu: 40
memory: 64Gi
limits:
cpu: 40
memory: 64Gi
我希望为我的容器保留 40 个 vCPU,但在部署过程中,当我运行 kubectl describe pod <pod name> -n <namespace> 时,我发现节点上的 CPU 不足。我可以使用的最大值是 1。
这应该如何工作?
显然,我阅读了文档并搜索了不同的示例,但是当我将事情付诸实践时,我看到的测试结果与理论不同。我知道我错过了什么。
【问题讨论】:
标签: postgresql kubernetes