Kubernetes v1.30 新特性一览

大家好,我是张晋涛。

Kubernetes v1.30 是 2024 年发布的第一个大版本,包含了 45 项主要的更新。 对比去年的话,v1.27 有近 60 项,v1.28 有 46 项,v1.29 有 49 项。可以看到 Kubernetes 变得更加谨慎了,会更加保守的控制进入其核心的功能。

恰好前些天我在 “硬地骇客” 播客上录制了一期节目,正好提到 Kubernetes 现在是不是变得太复杂了,感兴趣的话可以听一下。

具体来看 v1.30 版本中有 10 个增强功能正在进入 Alpha 阶段,18 个将升级到 Beta 阶段,而另外 17 个则将升级到稳定版。

这次的版本称之为 “Uwernetes” 是 UwUKubernetes 的组合,因为发布团队认为这个版本是最可爱的版本了,也是对所有参与到 Kubernetes 生态中的人的一种致敬。让我们一起探索这个充满爱和喜悦的版本吧 UwU

d5c0d3cd437953f67da175deea846d50.png

我维护的 「k8s生态周报」每篇都有一个叫上游进展的部分,会发一些 Kubernetes 上游中值得关注的内容。不过我年终总结中提到了,我断更了一段时间,之后会继续更新的,感谢大家的支持。

Pod 调度就绪机制达到 GA

这个功能实际上是从 Kubernetes v1.26 开始增加的。是 KEP 3521 的第一部分。并且在 v1.27 时候达到了 Beta。

我们来快速的回顾一下 Pod 的创建过程。

当 client 通过 kube-apiserver 创建成功 Pod 资源后,kube-scheduler 会去检查尚未被调度的 Pod,然后为其进行调度,分配 Node。之后 Node 获取到调度到该 Node 上的 Pod 然后进行创建。(这里省略了很多细节,但其他的部分与我们此处要介绍的内容关系不太大,就不展开了。)

根据上述的过程,我们可以发现,在 Pod 创建成功后,其实就默认该 Pod 是可以被调度了,kube-scheduler 就应该开始工作了。

但在实际的场景中,Pod 通常还会需要一些其他的资源,最典型的比如存储。在一些环境中,这些资源是需要预先进行创建的,尤其是在一些云厂商的场景中,还需要检查用户账户中是否还有余额可以用于创建云盘等

一但前置的依赖无法满足,假如 kube-scheduler 已经完成了 Pod 的调度,那么 kubelet 侧就会处于尝试创建 Pod ,但失败的情况。

这个 KEP 的出现就可以很好的解决这个问题,增加了一个 Pod 是否准备好被调度的机制。如果前置依赖不满足,那么 Pod 就无需被调度,这也不会消耗资源。kube-scheduler 和 kubelet 都无需进行处理。待条件满足,Pod 再被调度和创建即可。

3e79eff172db061a5dc5935963ebc33b.png
image-20240411023540509

这个机制我个人感觉还是挺好的,甚至我可以有更灵活的策略来控制应用的副本。比如在大流量,需要动态扩容的场景下,我可以利用此机制预先创建一些 Pod 资源以及准备好它的依赖, 甚至可以在 Node 上准备好镜像等。当需要增加副本时,直接标记 Pod 可被调度,

使用时,通过配置 Pod 的 .spec.schedulingGates 即可。例如:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  schedulingGates:
  - name: moelove.info/disk
  - name: foo.bar/xyz
  containers:
  - name: kong
    image: kong:3.6

注意这里可以为它设置多个 schedulingGates 但是要确保它们的唯一性。

如果将上述配置应用到 Kubernetes 集群中,则会看到

➜  ~ kubectl get pods 
NAME       READY   STATUS            RESTARTS   AGE
test-pod   0/1     SchedulingGated   0          17s

.status 中也会有相关输出:

status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: null
    message: Scheduling is blocked due to non-empty scheduling gates
    reason: SchedulingGated
    status: "False"
    type: PodScheduled
  phase: Pending
  qosClass: BestEffort

那么何时能正常调度呢?我们在实现对应的 controller 或者 operator 时,只需要移除 schedulingGates 的配置即可。

kubectl 交互式删除达到 GA

很多人都会直接使用 kubectl 进行 Kubernetes 集群的管理,包括资源的创建和删除等。删除操作是很危险的动作,并且不可逆,如果由于错误的拼写,不小心的复制粘贴或者错误的补全等, 不小心误删了重要的资源,可能会带来一些不小的麻烦。

这是一般情况下的删除操作,在回车后就直接执行了。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张晋涛-MoeLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值