我在 4 个虚拟机上有一个 k8s 集群。1 个主服务器和 3 个工作服务器。在每个工作服务器上,我使用 rook 部署一个 ceph OSD。OSD 使用与虚拟机操作系统相同的磁盘。
VM 磁盘是远程的(底层基础设施再次是 Ceph 集群)。
这是虚拟机磁盘性能(三个虚拟机的性能都差不多):
$ dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 4.82804 s, 222 MB/s
空闲时的延迟(await)约为 8ms。
如果我在 K8S POD 内部挂载 RBD 卷,性能会非常差:
$ dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 128.619 s, 8.3 MB/s
在高负载(rbd 卷的实用率为 100%)期间,RBD 卷的延迟大于 30 秒。
我知道我的设置不是 ceph 推荐的,并且 dd 不是分析磁盘性能的最佳工具,但是在 VM 磁盘上使用 ceph 的代价仍然很大。
VM 操作系统是
CentOS 7.7.1908.
Kernel 3.10.0-1062.12.1.el7.x86_64
工作节点之间的网络带宽:
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.00 sec 2.35 GBytes 2.02 Gbits/sec
网络延迟小于1毫秒。
我正在寻找一些提示来进一步解决问题并提高性能。
答案1
关于您的 CEPH 集群的信息还不够。但有些东西可以提高性能:
- 有必要将日志放在单独的 SSD 上(NVMe 更好)。即使您有 SSD。
- 使用10GbE网络,将集群与外部网络分开。这将改善网络延迟。
- 不要使用 3 个副本卷。这是一个不错的功能,但它会使您的集群变慢。
- 默认情况下,清理始终有效。有必要进行更改。最好在晚上进行清理。
- 使用 BlueStore 作为 OSD 的格式。
- 调整服务器以获得最佳性能。例如,CPU 调节器应为性能。