您现在的位置是:主页 > 数据库技术 > 数据库技术

Kubernetes1.3有哪些新功能

IDCBT2021-12-27服务器技术人已围观

简介本篇内容介绍了“Kubernetes1.3有哪些新功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细

本篇内容介绍了“Kubernetes1.3有哪些新功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

支持更多类型的应用

1 Init container

Init container 是1.3 中的 alpha feature,目的是支持一类需要在启动 Pod“普通容器”前,先进行 Pod 初始化的应用。执行该初始化任务的容器被成为“初始化容器”(init container)。例如,在启动应用之前,初始化数据库,或等待数据库启动等。下图是一个包含 init container 的 Pod:

对于此类 Pod,kubernetes 的运行策略如下:

    初始化容器按顺序依次执行,即图中容器 1->2

    若其中某一个初始化容器运行失败,则整个 Pod 失败

    当所有初始化容器运行成功,启动普通容器,即图中容器 A 和 B

    在 alpha 版本中使用 init container 需要用 annotation,下图是来自 k8s 的一个例子(略有裁剪):

    可以看到,我们在启动 nginx 普通容器之前,先用 init container 来获取 index.html,之后访问 nginx 就会直接返回该文件。当 init container 功能稳定后,k8s 会直接在 pod.spec 内加上 init Containers 字段,如下所示:

    init container 看起来是一个小功能,但是在实现上还是需要考虑不少问题,比如几个比较重要的点:

    资源问题:当调度存在 init container 的 Pod 时,应该怎样计算所需要的资源?两个极端情况:如果对 init container 和 regular container 所需要的资源求和,那么当 init container 成功初始化 Pod 之后,就不会再使用所请求的资源,而系统认为在使用,会造成浪费;反之,不计算 init container 的资源又会导致系统不稳定(init container 所使用的资源未被算入调度资源内)。目前的方法是取折中:由于初始化容器和普通容器不会同时运行,因此 Pod 的资源请求是两者中的最大值。对于初始化容器,由于他们是依次运行,因此选择其中的最大值;对于普通容器,由于是同时运行,选择容器资源的和。

    Pod Status: 目前,Pod 有 Pending, Running, Terminating 等状态。对于有初始化容器的 Pod,如果仍然使用 Pending 状态,则很难区分 Pod 当前在运行初始化容器还是普通容器。因此,理想情况下,我们需要增加一个类似于 Initializing 的状态。在 alpha 版本中暂时还未添加。

    健康检查及可用性检查:有了 init container 之后,我们该如何检查容器的健康状态?alpha 版本将两个检查都关闭了,但 init container 是会在 node 上实实在在运行的容器,理论上是需要进行检查的。对于可用性检查,关闭掉是一个可行的办法,因为 init container 的可用性其实就是当它运行结束的时候。对于健康检查,node 需要知道某个 Pod 是否处在初始化阶段;如果处在初始化阶段,那么 node 就可以对 init container 进行健康检查。因此,kubernetes 很有可能在添加类似 Initializing 的 Pod 状态之后,开启 init container 的健康检查。

    标签:

    很赞哦! ()

本栏推荐