三个月转瞬即逝,Kubernetes 如约发布了 V1.25 版本,新版本在诸多领域都有增强。
Kubernetes 1.25 带来了 40 余项功能增强,其中 13 个功能成为稳定状态;10 个是对于现有功能的改进;15 个全新功能;还有 2 个废弃功能。在功能增强的数量上,1.25 与之前的两个版本大致相同,Kubernetes 依然在按自己的节奏稳步推进中。
本文将在众多特性中选择几个进行介绍,涵盖安全、存储、网络等领域。

01 存储

CSI Migration

Kubernetes 的存储插件分为树内(in-tree)和树外(out-of-tree)两种。简单说 in-tree 是指在 Kubernetes 主仓库维护的插件,而 out-of-tree 是指独立维护的插件。在之前,Kubernetes 有很多插件都是 in-tree 的,这样会使得 Kubernetes 代码维护困难,并且造成 Kubernetes 主库的臃肿,所以三年前 storage SIG 就开始从 Kubernetes 核心中迁移 in-tree 的存储插件到外面,变为 out-of-tree 存储插件。
V1.25 版本中,很多 in-tree 的存储插件都将被删除,包括 GlusterFS, flocker, quobyte, storageos 等,具体列表请参考 deprecations-and-removals-for-storage-drivers [1] 。举例而言,从 1.25 版本开始,用户在使用以下 yaml 对接 GFS 存储时,将得到警告信息“this feature will be removed soon after in a subsequent release”。

apiVersion: v1
kind: Pod
metadata:
  name: glusterfs
spec:
  containers:
  - name: glusterfs
    image: nginx
    volumeMounts:
    - mountPath: "/mnt/glusterfs"
      name: glusterfsvol
  volumes:
  - name: glusterfsvol
    glusterfs:
      endpoints: glusterfs-cluster
      path: kube_vol
      readOnly: true

在 1.25 中迁移的特性终于达到了 GA 状态,感谢 storage SIG 长久以来孜孜不倦的工作。

Container Object Storage Interface

对象存储的标准来了。这个功能是一项迟到了很久的功能,在 2020 年时就已经被提出了,并且差点合入 Kubernetes 1.24 版本。不过由于时间来不及,所以被放到了 1.25,现在它终于要成为一个 alpha 功能了。文件和块存储通过 CSI 在 Kubernetes 生态中被视为一等公民。但是对象存储却没有得到这么高的待遇。近年来,对象存储作为文件系统和块设备的替代存储形式越来越受到欢迎,对象存储存进了计算和存储的分解。它也更加易于管理、扩展和自动化。当前 COSI 设计文档提出的的目标是:
功能上

  • 支持自动创建桶
  • 支持自动删除桶
  • 支持自动生成访问凭证
  • 支持自动访问凭证撤销
  • 支持工作负载的自动化 Bucket Provisioning(使 Pod 能够访问 Bucket)
  • 支持桶重用(通过 COSI 使用现有的桶)
  • 支持跨命名空间的自动存储桶

共享系统属性上

  • 支持跨集群的工作负载可移植性
  • 以供应商中立的方式实现上述目标
  • 标准化第三方供应商与 COSI 轻松集成的机制
  • 允许用户(非管理员)创建和使用存储桶(自助服务)
  • 为存储桶创建和共享建立一流的访问控制实践

COSI 的设计文档可以参考 object-storage-support [2]

博云 & Kubernetes & 存储

讲了有关于存储的新特性后,也向大家介绍下由博云开源的 CSI -- Carina,它是一个为 Kubernetes 而生的高性能本地存储组件,专门针对云原生的有状态应用而生。Carina 项目前期由博云独自研发,现在已经开源。它的地址是 https://github.com/carina-io/...
图片
经过了一段时间的发展,Carina 社区的活跃度取得了令人惊喜的增长。最近 Carina 社区正在对社区成员的身份进行规划,Carina 社区非常欢迎各位使用者和贡献者的加入。

02 网络

multiple ClusterCIDRs

在用户初始化一个集群时,找到一个恰当的 CIDR 很难,如果太大的话会造成浪费,如果太小的话,等到业务增多了 IP 可能会不够用,到时候就会如鲠在喉了。由于 CIDR 是在集群启动时设置的,而且以后不能修改,严重的可能会铲掉集群重新开始。Kubernetes 1.25 带来了一个新功能,通过 ClusterCIDRConfig 来动态的配置 CIDR,这个方式可以很好解决上面提出的问题。

Reserve Service IP ranges for dynamic and static IP allocation

还记得在上篇 Kubernetes 1.24 发布的文章中提到过的 service 动态和静态 IP 的预留功能吗,在 1.25 中这个功能已经从 alpha 版本进化到了 beta 版本,想尝鲜的已经可以用起来了。

博云 & Kubernetes & 网络

在 Kubernetes 相关的组件中,博云对于网络的投入是时间最久、精力最多的。博云自研的 CNI -- fabric 已经在诸多客户中被长时间使用,其中不乏金融类、科研类的用户,作为一个支持 linux 、windows 操作系统,amd64 、arm64 架构的软件,fabric 将继续支撑用户的作业,为用户的云应用提供高效稳定的运行环境。在最近的更新中,fabric 将在可观测性方面做出巨大提升,敬请期待!

03 安全

在 Kubernetes 1.21 中 PodSecurityPolicy 被标记为弃用,而在 1.25 中,这个功能被正式删除了。不过不用担心,Kubernetes 对于每个破坏性的变更都是慎之又慎的,PodSecurityPolicy 的删除也不例外。之所以删除它,是因为它被多方诟病使用上的晦涩难懂,Kubernetes 社区经过考虑后,选择删除这个功能。并且提供了一个更好的替代品 -- Pod Security Admission,目前 Pod Security Admission 在 1.25 中达到了稳定阶段,用户可以放心迁移到 Pod Security Admission。之前博云公众号也曾经系统介绍过PSA,欢迎大家查阅。

结语

Kubernetes 1.25 也许不如上个版本夺人眼球,但它足够优秀。很多不需要的功能被清除,很多功能达到稳定状态,值得我们去好好使用。尽可能升级手边的 Kubernetes 吧,感受新版本带来的新鲜感!

引用:
[1]https://kubernetes.io/blog/20...
[2]https://github.com/kubernetes...
参考内容:https://github.com/kubernetes... 
https://kubernetes.io/blog/20... 
https://sysdig.com/blog/kuber...


博云
104 声望16 粉丝

博云技术社区定期分享容器、微服务、DevOps等云原生技术干货和落地实践。