美文网首页
容器宿主机到底怎么选,你只需要知道这5点

容器宿主机到底怎么选,你只需要知道这5点

作者: Daniels_Cai | 来源:发表于2018-01-03 18:11 被阅读266次

    前言

    容器宿主机的选择需要考虑如下几个问题

    1. 用物理机还是虚拟机?
    2. 用多大规格的服务器?
    3. CPU和内存配比多少合理?
    4. 一个集群,需要放多少节点?
    5. 主机越大越好,还是越小越好?

    这些问题,每一个单独拿出来,都不是很好回答,并且每个企业实际情况不尽相同,我将结合我们在生产环境的实际使用经验,来谈一谈如何选择容器的宿主机,你从本文中可以获得一些启发,来规划符合自己的容器集群。

    1. 采用物理机还是虚拟机;

    采用物理机的好处

    1. 资源利用率高

    采用虚拟机的好处

    1. 重启速度快。
    2. 规格可以自由确定.并且方便修改。
    3. 方便重建

    采用虚拟机,可以获得虚拟机带来的诸多好处,采用物理机唯一的优势是资源利用率高。考虑到资源利用率并不是问题, 最终采用虚拟机。

    为什么资源利用率不是问题?

    http://openskill.cn/article/88 这里的测试数据可以看出, KVM 虚拟化

    1. 虚拟机相对物理机的 CPU 性能损失在 1% 以内
    2. 内存几乎无损耗.
    3. virtio 网络几乎无损耗.
    4. 磁盘 损耗受影响因素较多,推荐使用 ext4, qcow2, writeback 缓存, virtio 驱动。磁盘 从其他渠道获取的信息来看。 大致有 12% 的损耗。

    实际生产需要落地的数据,放在共享存储上 (cephfs, moosefs) , 其iops 由存储系统提供,本地磁盘只用来存储镜像及容器运行的临时数据。 对磁盘的性能要求,无需特别苛刻。

    为什么考虑重启速度?

    在实际的运维过程中,我们发现部分场景下,会出现主机卡死,或者docker进程卡死, 这时,最快恢复业务的方法是重启主机。 容器在主机重启后,可以自动恢复,因此可以做到在1到2分钟内快速恢复业务。这一点太重要了,物理机重启由于需要做各种硬件检测,重启时间一般在5到10分钟, 虚拟机重启一般在1分钟以内 , 物理机显然无法满足需求。

    为什么重建能力很重要?

    容器平台经常需要更新操作系统,或者根据需要调整主机规格

    1. 运行一段时间后,发现内存配置偏少了, 需要添加内存。这时候申请一台新的机器加入到集群中,将旧机器下线即可。
    2. 运行多年的 ubuntu 12.04 官方已经不再维护, 需要全量替换,工作量相当大。好的方法就是使用全新的服务器替换旧服务器。
    3. 当发生故障,主机无法恢复时, 直接申请新服务器加入集群即可。

    2. 容器主机的规格是如何确定的?

    我们起初上线了 8 核 32G规格的虚拟机。 运维过程中发现了如下的问题

    1. 部分应用启动时就需要16G 内存。 32G 的虚拟机显得捉襟见肘,一台主机只能运行一个此类应用。 出故障时,集群中可能没有满足条件的主机可供迁移。
    2. 系统弹性较弱。 以80% 为警戒线,每台主机的弹性内存空间为 6.4G . 很多应用在突发请求时,会占用远超 6.4G的内存,导致主机内存耗尽。
    3. 内存是独占性资源,即使程序没有任何请求, 内存也会被独占。其结果是一台主机上的内存占用特别高。 CPU 资源占用比率则相对较少。

    从以上角度来看, 容器主机的规格越大越好

    后来,我们将主机规格调整为 32核 128G (为什么不用物理机请参考,为什么考虑重启速度?,为什么资源利用率不是问题? )。 运维过程中发现了如下问题

    1. 主机故障时,影响范围很大。当内存使用率为 60% 的时候, 我们运行了 72个容器, 涉及到 40个业务。 当主机故障时,会同时影响40个业务。
    2. 太多的进程数。 监控中发现有 too many process 的报警, 这在之前32G虚拟机时,不太会出现。
    3. 文件描述符数量,tcp 最大连接数量等等, 都有可能被用满。

    从以上角度来看, 容器主机的规格越小越好。 物理机的容量更加大(内存可以配置到 512G 甚至更高), 故障时,影响范围更加巨大。

    3. CPU与内存的配比是如何确定的?

    8核32G 的配比为 1:4 ,从以往的运行监控数据来看。当内存使用到 90%左右时, CPU使用率 40%。

    1. 为了有效利用资源,以 1:8 配比。 比如 16核128G
    2. 为了稳定性和资源弹性,仍然以 1:4 配比 。 比如 16核64G

    目前在资源利用率上,docker已经做得很好, 主要考虑稳定性和弹性。 采用 1:4 的配比。

    4. 一个环境中配置几台主机?

    假设一个环境中有2台主机, 当其中一台主机故障时,为了能将业务迁移到另外一台主机, 这两台主机的利用率最高可以到 50% 。

    为了给集群提供弹性, 当有主机故障时, 其他主机要有能力承载这台主机上的业务。 我们可以算出相关关系, N为集群主机数量, M为能够承受损坏的主机数量
    (N - 1 )* (1 - usage% ) = M * usage%
    N = (M*usage%) / (1- usage%) + 1

    我们看一下,为了能够承受一台主机完全损坏, N= usage%/ ( 1- usage%) + 1 , usage% = N-1 /N
    集群利用率和集群主机数量关系为

    • 2 台主机 50%
    • 3 台主机 66.6%
    • 4 台主机 75%
    • 5 台主机 80%
    • 6 台主机 83%

    我们挑选一个合理且方便计算的利用率 80% , 那么集群中最少需要5台主机。

    结合主机的规格,我们可以算出一个集群的最小容量。

    • 16核 64G, 集群容量最小为 80核320G
    • 32核128G,集群容量最小为 160核640G

    按照一个业务占用 2G (QA环境经验值)内存来算 , 集群可承载的业务数量为

    • 16核 64G, 承载 128个
    • 32核128G,承载 384个

    5. 一台主机是既是一个共享域, 又是一个冲突域。

    1. 共享域主机的资源越多越好。 这样可以提供更好的资源弹性。 从而提高系统稳定性。
    2. 冲突域主机的资源越少越好,故障时,影响范围可控。

    过大或过小的规格,都会导致问题。 目前合理的规格为 16核64G, 或者 32核128G , 一个集群主机数量不少于5台.

    相关文章

      网友评论

          本文标题:容器宿主机到底怎么选,你只需要知道这5点

          本文链接:https://www.haomeiwen.com/subject/lehknxtx.html