Kubernetes 是当前容器编排和管理的主流平台。在更注重稳定性的 1.6 之后,Kubernetes 1.7 带来了五十多个新功能,更侧重于联合、可扩展性、安全性以及部署、扩展和管理容器化应用的其他方式。
以下介绍一些使 Kubernetes 1.7 更稳定和更受欢迎的新功能。
Kubernetes 1.7 的主要功能
API 聚合:与 Kubernetes 1.6 相比,此功能的主要优点是可以与其他 Kubernetes API 聚合的由用户提供的 API 服务器。
聚合层使得可以在你的集群中安装更多 Kubernetes 样式的 API。这些 API 可以是预先构建的、已有的第三方解决方案,如服务目录,也可以是用户创建的 API,如 apiserver-builder。 API 聚合层在 kube-apiserver 中运行。
在扩展资源注册之前,聚合层不起作用。要注册 API,用户必须添加一个 API 服务对象,该对象在 Kubernetes API 中“声明” URL 路径。这时,聚合层将把任何发送到该 API 路径的东西(例如 /apis/myextension.mycompany.io/v1/...)代理到注册的 API 服务。
容器运行时接口(CRI):随着 CRI 的改进,Kubernetes 添加了新的 RPC 调用以及一些增强功能,例如改进的可调试性、增加的容器和镜像文件系统指标或统计信息,可以帮助你从容器运行时检索容器指标。在 1.7 中添加的指标调用不允许 Kubelet 从容器运行时收集指标。预计 Kubelet 可以在 1.8 版本中从 API 中选择使用容器指标。
可扩展外部访问控制:这是此版本中添加的 alpha 功能。添加此功能的主要动机是为 API 服务器添加自定义业务逻辑,以便在创建和验证策略时更改对象。管理员和集成商现在可以定义自己的策略来允许内容进入他们的 Kubernetes 集群。
这是一个 alpha 功能,因此默认情况下禁用。要启用它,你需要在启动 apiserver 时在 -admission-control 标志中包含 “GenericAdmissionWebhook”。如果你有多个 kube-apiserver 副本,那么应该设置相同的标志。
考虑一个用例,你的基础架构需要所有 Pod 资源拥有一组通用的标签,并且你不希望任何 Pod 持久存储到 Kubernetes。如果这些需求没有满足,你可以写自己的外部准入 webhook 来进行验证并作出相应的响应。
加密 etcd 中的 secret:etcd 是一个强大的、一致的和高度可用的密钥值存储库,被 Kubernetes 用于所有 API 对象的持久存储。以前,所有 secret 都以明文形式存储在节点上的 tmpfs 文件中。不幸的是,任何可以访问 Kubernetes API 的用户都可以看到所有的 secret。
在本版本中,Kubernetes 添加了加密机制,允许对存储在 etcd 密钥值存储中的敏感数据在数据存储级别进行加密。这允许Kubernetes 的用户不仅可以对磁盘上的数据进行加密,还可以加密 etcd 中的数据,以防止恶意方通过 Kubernetes API 进行读取。
这种模块化的方法用来存储系统中的敏感信息和证书。
限制节点访问 API:这个新加的功能,用于限制节点对 secret 和仅在该特定节点上运行的其他 Pod 信息的访问。这将防止未授权的节点在集群中全局访问 secret,这些未授权的节点只能修改自己的 Node API 对象和绑定到自己的 Pod 对象。
这也是一个改进的安全功能,可帮助机构限制跨节点访问敏感信息。这将是为数据和以安全为中心的应用而使用 Kubernetes 的另一个优势。
网络策略 API:这一功能在此版本更加稳定,将帮助你定义 Pod 组可以如何彼此进行通信以及如何与其他网络端点进行通信。它由网络插件实现。资源使用标签来选择 Pod,并定义用于指定哪些流量可以为选定的 Pod 所用的规则。
审核日志改进:在此版本中,API 服务器存储的审核日志可以更加定制化和可扩展,支持事件过滤和 webhook。它们还提供更丰富的数据用于系统审核。这将帮助你从大量数据中过滤出有用的日志信息,更快地调试问题。
本地存储:这是有状态应用最常要求的功能之一,此次作为 alpha 功能引入。 标准 PVC / PV 接口和 StatefulSets 中的 StorageClasses 可以帮助你访问本地存储卷。这将有助于机构管理因为性能要求而需要本地存储的应用程序。
StorageOS 插件:新的 StorageOS Volume 插件提供了来自本地或附加节点存储的、高可用的、在整个集群范围持续的卷。StorageOS 可以为 Kubernetes 集群提供存储。StorageOS 作为容器在你的 Kubernetes 环境中运行,使得 Kubernetes 集群中的任何节点都可以访问本地存储。可以复制数据以提供节点故障保护。在核心,StorageOS 提供块存储。你可以选择安装什么文件系统类型来使设备在容器内可用。
Kubernetes 1.7 的其他功能
Kubelet TLS 引导:此版本现在支持客户端和服务器证书轮换。
StatefulSet:这是 1.7 中的一个新的 beta 功能,它允许有状态应用(如 Kafka,Zookeeper 和 etcd)使用一系列更新策略(包括滚动更新)自动更新。我们可以期待更好的性能,因为不需要通过 Pod Management Policies 订购而可以为应用提供更快的扩展和启动。
弃用了什么?
第三方资源(TPR):Kubernetes 1.7 已经弃用第三方资源(TPR),替代为提供更整洁 API 的 Custom Resource Definitions(CRD)。这也有助于解决 TPR beta 期间出现的问题和受关注的用例。Kubernetes 社区已经预计在 1.8 版本中删除 TPR。因此,如果你使用 TPR beta 功能,请考虑将其迁移到 CRD。
Kubernetes 1.6 发布的重点是规模和自动化。Kubernetes 1.7 的目标是,提高安全性、存储和扩展功能,使 DevOps 程序更适合企业客户。这一最新版本显然正在为企业内部采用 Kubernetes 进一步打下基础。