你需要知道的有关Kubernetes 1.23版的更新都在这里

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

[[442113]]

【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
相关推荐

2021-12-09 08:16:40

JVM参数系统

2020-12-23 09:00:00

开发Web工具

2020-06-02 07:00:00

会话安全黑客攻击

2017-08-29 11:21:03

微软

2022-09-22 08:00:00

API开发数据

2020-08-26 13:41:37

JDK 10版本Java

2021-05-17 07:04:07

动态代理面试

2021-11-01 08:00:00

Java异常处理开发

2020-08-12 09:32:31

小米MIUI

2021-02-01 08:39:26

JTAG接口Jlink

2019-01-24 08:19:17

云服务多云云计算

2021-07-01 09:00:00

安全数字化转型渗透

2016-03-01 16:14:32

问问应用商店Android Wea

2024-07-02 11:16:21

2019-11-04 09:07:48

DevOps互联网IT

2023-09-11 08:51:23

LinkedList双向链表线程

2021-06-17 13:40:47

区块链比特币公有链

2020-12-08 11:08:55

时间复杂度软件

2021-07-19 08:33:56

时间复杂度大O

2013-05-27 09:33:13

Windows 8.1
点赞
收藏

51CTO技术栈公众号