Kubernetes是当前容器编排和管理的主流平台。在更注重稳定性的1.6之后,Kubernetes 1.7带来了五十多个新功能,更侧重于联合、可扩展性、安全性以及部署、扩展和管理容器化应用的其他方式。以下介绍一些使Kubernetes 1.7更稳定和更受欢迎的新功能。
Kubernetes1.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组可以如何彼此进行通信以及如何与其他网络端点进行通信。它由网络插件实现。资源使用标签来选择Pods,并定义用于指定哪些流量可以为选定的Pod所用的规则。
审核日志改进:在此版本中,API服务器存储的审核日志可以更定制化和可扩展,支持事件过滤和webhook。它们还提供更丰富的数据用于系统审核。这将帮助你从大量数据中过滤出有用的日志信息,更快地调试问题。
本地存储:这是有状态应用最常要求的功能之一,此次作为alpha功能引入。 标准PVC / PV接口和StatefulSets中的StorageClasses可以帮助你访问本地存储卷。这将有助于机构管理因为性能要求而需要本地存储的应用程序。
StorageOS插件:新的StorageOS Volume插件提供了来自本地或附加节点存储的、高可用的、在整个集群范围持续的卷。StorageOS可以为Kubernetes集群提供存储。StorageOS作为容器在你的Kubernetes环境中运行,使得Kubernetes集群中的任何节点都可以访问本地存储。可以复制数据以提供节点故障保护。在核心,StorageOS提供块存储。你可以选择安装什么文件系统类型来使设备在容器内可用。
Kubernetes1.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进一步打下基础。