【51CTO.com快译】近期即将发布的Kubernetes圣诞版共带有45项针对成熟性、安全性、以及可扩展性方面的增强功能。在本文中,我将重点关注Kubernetes API、容器与基础设施、存储、网络和安全性等方面的关键性更新。
Kubernetes API
让我们首先来看看具有可扩展性的Kubernetes API。api-machinery、CLI和autoscaling SIG这三大变更将作为1.23版的一部分被发布。
Kubectl事件命令
一直以来,您可能会受到kubectl get命令的选项和数据收集方法的限制。对此,1.23的alpha版将首发一个新的命令--kubectl event。使用kubectl的get events,您可以更便捷地观察到集群的整体状态,并解决相关问题。具体而言,其主要特点包括:
- 能够查看与特定资源相关的所有事件
- 监控集群中的特定事件
- 按照事件的状态或特定命名空间中的类型,去过滤事件
除了上述特点,您也可以通过查看设计文档,以了解在后续版本中即将推出的新功能。值得一提的是,您可以在安装了新的kubectl版本后,立即开始使用kubectl events命令。
将HPA API升级为一般可用性
Horizontal Pod Autoscaler(HPA)是Kubernetes的核心组件,可以根据各项指标自动扩展Pod的数量。HPA可以扩展或缩减的资源包括:副本集、部署、以及CPU利用率等众所周知的指标状态集。自2015年以来,它一直是Kubernetes API中的一部分。如今,它最终走向了一般可用性(General Availability,GA)。
如果您已经在客户端和控制器中使用到了HPA,那么您可以直接使用v2,而非v2beta1。从这次发布,我们可以看到HPA已经作为了Kubernetes API的核心组件,并为加入最终产品做好了准备。因此,您可以放心地使用HPA了。
CRD验证表达式语言
作为一个强大的抽象层,Custom Resource Definition(CRD)扩展了Kubernetes,并使其与所有可自定义的资源协同工作。不过,如果用户定义了新的自定义资源、及其相关规范,那么使用Webhooks、控制器和客户端工具进行验证时,则可能比较繁琐。不过庆幸的是,我们可以将诸如Common Expression Language之类的内联表达式语言,集成到CRD中进行验证。
在1.23版本中,作为alpha功能被提供的验证规则,可以方便您添加x-kubernetes-validation-rules。您可以在Kubernetes文档中查看到如下类似的示例:
- ...
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- x-kubernetes-validation-rules:
- - rule: "self.minReplicas <= self.replicas"
- message: "replicas should be greater than or equal to minReplicas."
- - rule: "self.replicas <= self.maxReplicas"
- message: "replicas should be smaller than or equal to maxReplicas."
- properties:
- ...
- minReplicas:
- type: integer
- replicas:
- type: integer
- maxReplicas:
- type: integer
- required:
- - minReplicas
- - replicas
- - maxReplicas
假设您要创建如下违反了第二条规则的自定义资源实例:
- apiVersion: "stable.example.com/v1"
- kind: CronTab
- metadata:
- name: my-new-cron-object
- spec:
- minReplicas: 0
- replicas: 20
- maxReplicas: 10
那么Kubernetes API将会以如下错误消息作为响应:
- The CronTab "my-new-cron-object" is invalid:
- * spec: Invalid value: map[string]interface {}{"maxReplicas":10, "minReplicas":0, "replicas":20}: replicas should be smaller than or equal to maxReplicas.
可见,如果您在集群中准备使用CRD,那么就必须在Open API架构和控制器中使用相应的验证机制。而在这次新的版本中,您可以将它们迁移到x-kubernetes-validation-rules,让Kubernetes API为您完成繁琐的工作。
容器与基础设施
在新的版本中,我发现了Windows和node SIG两个值得注意的功能。它们属于临时容器和Windows特权容器。
临时容器
临时容器可以起到观察其他Pod的状态、故障排除和调试等作用。这个新的功能还附带了一个CLI命令。用户可以使用kubectl debug,来轻松地进行排障。其实,该命令运行在pod的一个容器中,而kubectl exec命令则在该容器中运行一个进程。
使用1.23版本,您将能够在PodSpec.EphemeralContainer下添加临时容器,作为pod规范的一部分。虽然与容器规范类似,但是它们并不涉及到各种资源请求或端口,毕竟它们只是临时被添加到pod中的。例如,您将能够为my-service pod添加一个Debian的容器,并以交互的方式连接,从而让用户进行实时调试。具体请见如下代码段:
- $ kubectl debug -it -m debian my-service -- bash
- root@debug:~# ps x
- PID TTY STAT TIME COMMAND
- 1 ? Ss 0:00 /pause
- 11 ? Ss 0:00 bash
- 127 ? R+ 0:00 ps x
其实,临时容器在1.22版本中已经处于alpha版状态了。这次,它们将在1.23版本中被升级为beta版。如果您尚未试用它的话,我建议您最好创建各种调试容器的镜像,并在自己的工具箱中包含kubectl debug命令。
Windows特权容器和主机网络模式
作为一种强大的容器实例,特权容器可以访问和使用主机资源。这和直接运行在主机上的进程非常类似。在Linux容器被广泛使用时,它们虽然在某种程度上构成了安全威胁,但是有利于管理主机的实例。
随着1.23版本的发布,Windows实例的特权容器和主机网络模式将升级为beta版。如果您的集群中有Windows节点,或计划在将来包含这些节点的话,那么请查看功能性和GA计划的设计文档。
贮存
在1.23版本中,存储SIG变化主要体现在卷挂载期间,卷的所有权更改上。
目前,在卷绑定之前,卷的权限会递归地更新为pod规范中的fsGroup值。显然,当卷的体积过大时,所有权的更改可能会导致在创建Pod期间的等待时间过长。因此,我们往往需要添加一个新的字段--pod.Spec.SecurityContext.FSGroupChangePolicy,来允许用户指定该如何操控权限和所有权的更改。
而在1.23版中,此功能已升级到了GA,您可以使用以下两个选项去指定相关策略:
- Always:始终更改各种权限和所有权,以匹配fsGroup字段。
- OnRootMismatch:仅当顶级目录与fsGroup字段不匹配时,才更改相应的权限和所有权。
如果您正在使用诸如数据库等,对于权限更改敏感的应用,那么请检查新的字段,并将其包含在您的pod规范中,以避免在pod创建的过程中,等待过长的时间。
联网
自从IPv6在Kubernetes 1.9版中作为alpha功能被添加以来,它已是用户对Kubernetes团队期待已久的功能。在最新版本中,双栈式的IPv4/IPv6网络终于具有了一般可用性。
该功能包括了对于各种Pod和服务的多个IPv4/IPv6地址的感知。同时,它还支持原生IPv4到IPv4的通信,以及与集群之间IPv6到IPv6的通信。
尽管Kubernetes提供了双栈式网络,但您可能会受到底层基础架构和云提供商的能力的限制。由于节点需要具有可路由的IPv4/IPv6网络接口,而pod需要具有双栈式网络连接,因此您还需要一个能够感知双栈式网络的插件,来为pod和服务分配IP地址。目前,诸如kubenet之类的CNI插件已经可以支持双栈式网络了,并且Kubeadm和kind也正在逐渐增加对于此类生态系统的支持。
安全性
1.23版本在auth SIG方面的增强主要体现在,将Pod安全标准升级到了beta版。
在之前的版本中,Pod安全标准是作为Alpha功能,用来替换PodSecurityPolicy的。在命名空间和标签的帮助下,他们创建了一种限制pod权限的方法,来执行相应的策略。在将其包含到部署之中后,您便可以提高pod和集群的安全性了。
小结
在2021年的最后一个版本中,Kubernetes带来了更具可扩展性和可靠性的API和基础设施的增强功能。此外,在存储、网络和安全性方面的改进,也使得Kubernetes成为了真正的、面向未来的、业界领先的容器编排平台。
最后,请通过Kubernetes的博客和其发行说明,来进一步了解更多最新的增强功能吧!
原文标题:Kubernetes Version 1.23 Is Out: Everything You Should Know,作者: Amir Kaushansky
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】