你需要知道的有关Kubernetes 1.23版的更新都在这里 译文
云计算
本文将重点关注Kubernetes 1.23版在Kubernetes API、容器与基础设施、存储、网络和安全性等方面的关键性更新。

【51CTO.com快译】近期即将发布的Kubernetes圣诞版共带有45项针对成熟性、安全性、以及可扩展性方面的增强功能。在本文中,我将重点关注Kubernetes API、容器与基础设施、存储、网络和安全性等方面的关键性更新。

Kubernetes API

让我们首先来看看具有可扩展性的Kubernetes API。api-machineryCLIautoscaling 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文档中查看到如下类似的示例:

  1. ... 
  2.      openAPIV3Schema: 
  3.        type: object 
  4.        properties: 
  5.          spec: 
  6.            type: object 
  7.            x-kubernetes-validation-rules: 
  8.             - rule"self.minReplicas <= self.replicas" 
  9.               message: "replicas should be greater than or equal to minReplicas." 
  10.             - rule"self.replicas <= self.maxReplicas" 
  11.               message: "replicas should be smaller than or equal to maxReplicas." 
  12.            properties: 
  13.             ... 
  14.             minReplicas: 
  15.               type: integer 
  16.             replicas: 
  17.               type: integer 
  18.             maxReplicas: 
  19.                type: integer 
  20.            required: 
  21.             - minReplicas 
  22.             - replicas 
  23.             - maxReplicas   

假设您要创建如下违反了第二条规则的自定义资源实例:

  1. apiVersion: "stable.example.com/v1" 
  2. kind: CronTab 
  3. metadata: 
  4.    name: my-new-cron-object 
  5. spec: 
  6.    minReplicas: 0 
  7.    replicas: 20 
  8.    maxReplicas: 10 

那么Kubernetes API将会以如下错误消息作为响应:

  1. The CronTab "my-new-cron-object" is invalid: 
  2. * 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为您完成繁琐的工作。

容器与基础设施

在新的版本中,我发现了Windowsnode SIG两个值得注意的功能。它们属于临时容器和Windows特权容器。

临时容器

临时容器可以起到观察其他Pod的状态、故障排除和调试等作用。这个新的功能还附带了一个CLI命令。用户可以使用kubectl debug,来轻松地进行排障。其实,该命令运行在pod的一个容器中,而kubectl exec命令则在该容器中运行一个进程。

使用1.23版本,您将能够在PodSpec.EphemeralContainer下添加临时容器,作为pod规范的一部分。虽然与容器规范类似,但是它们并不涉及到各种资源请求或端口,毕竟它们只是临时被添加到pod中的。例如,您将能够为my-service pod添加一个Debian的容器,并以交互的方式连接,从而让用户进行实时调试。具体请见如下代码段:

  1. $ kubectl debug -it -m debian my-service -- bash 
  2. root@debug:~# ps x 
  3.    PID TTY      STAT   TIME COMMAND 
  4.      1 ?        Ss     0:00 /pause 
  5.     11 ?        Ss     0:00 bash 
  6.    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】

责任编辑:华轩 来源: 51CTO

同话题下的热门内容

携手构建丹东纺织工业互联网平台,助力纺织业专精特新企业数字化转型自动化的云优化会取代DevOps人员的工作吗?创建云迁移测试策略指南监控云流量的七种QoS优秀实践2022年针对云计算基础设施的网络犯罪威胁将不断上升2022 年值得关注的三个云安全趋势改进边缘计算进行数据处理的优秀实践三大核心优势,亚马逊云科技助力跨国企业植根中国

编辑推荐

一文让你看懂IaaS、PaaS和SaaS看完小白也能懂什么是公有云、私有云、混合云Hyper-V深度评测六:虚拟机迁移方面的改进IOUG主席谈Oracle云服务战略和大数据用途你在 Docker 中跑 MySQL?恭喜你,好下岗了!
我收藏的内容
点赞
收藏

51CTO技术栈视频号