云原生生态周报 Vol.9| K8s v1.15 版本发布

时间:2021-11-09 13:32:49

云原生生态周报 Vol.9| K8s v1.15 版本发布

本周作者 | 衷源、心贵

业界要闻

1、Kubernetes Release v1.15 版本发布,新版本的两个主题是持续性改进和可扩展性。(https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.15.md#kubernetes-v115-release-notes

2、Helm 这款包管理工具, 作为业界 Kubernetes 上应用分发的事实标准,其 v3.0.0-alpha.1 正式发布,这是 Helm 3 的第一个  Alpha 版本。(https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1

3、Google 的 Dropout 专利生效,有效期 15 年。Dropout 是深度学习的一种基础算法,对人工智能行业影响巨大。

4、Rancher 2.3 Preview 发布,通过一个简单以及友好的界面,用户即可使用 istio。(https://github.com/rancher/rancher/releases/tag/v2.3.0-alpha5)

5、Talos 发布。Talos 是一款专门用于部署Kubernetes的操作系统。相对于 CoreOS,RancherOS 或者 LinuxKit 这些容器操作系统,Talos 更为精简。(https://github.com/talos-systems/talos)

6、 Google 推出深度学习容器,包括 TensorFlow 1.13,TensorFlow 2.0,PyTorch 和 R 语言容器。

上游重要进展

Kubernetes v1.15 版本发布

Kubernetes Release v1.15 版本,新版本的两个主题是持续性改进和可扩展性。其中持续性改进着重于提高核心组件的可靠性和稳定性,同时修复一些遗留的问题;而可扩展性关注着重关注在 CRD 和 Webhook 的改进和优化上。我们就这两个主题讲述一些值得关注的特性和改进。v1.15 版本的发布意味着不仅我们可以更加便捷的管理集群和扩展集群,同时新版本的集群的稳定性更加坚固。

  • 可靠性和稳定性
    1. 新引入 WatchBookmark 特性。该特性能大大提高 Kube-Apiserver 的 List/Watch 性能,大家都知道,大规模集群下各个组件的 List/Watch 会消耗 Kube-Apiserver 巨大的性能开销,有了该特性,我们可以展望未来的集群规模又可以上升一个台阶。 (#74074@wojtek-t)
    2. Admission 默认开启 StorageObjectInUseProtection。StorageObjectInUseProtection 能保护正在使用的 PV/PVC 被误删除。这对手速太快的开发和 SRE 同学是一个很大的福音。(#74610@oomichi)
    3. 蚂蚁金服在大规模实践中,发现 Daemonset 有各种发布和部署 Pod 被卡住的问题,蚂蚁同学对 Daemonset Controller 可能发生的一系列死锁问题做了修复。

参考:

https://github.com/kubernetes/kubernetes/pull/78974

https://github.com/kubernetes/kubernetes/pull/77773

https://github.com/kubernetes/kubernetes/pull/77208

https://github.com/kubernetes/kubernetes/pull/78170

  • CRD 可扩展性和实用性增强
    1. 增加 CustomResourcePublishOpenAPI 特性,新版本会使用 OpenAPI v3 schemas 做 CRD 实例的校验,同时我们可以做 CRD 的Prune 和 默认值设置等,同时后续我们可能依赖 OpenAPI 做 CRD 的 Protobuf 支持。(#77825@roycaihw)
    2. 新的 Prune 特性会默认移除 CRD 实例未知的字段,同时也不会将未知字段持久化,这会大大减少 CRD 实例未知字段带来的干扰以及降低 CRD 的存储开销同时提高性能。
    3. 支持使用 OpenAPI 校验来设置 CRD 实例的默认值。通过这种更加轻量级的方式,开发者不必费劲脑力和时间去再写一个 Webhook 监听 CRD 实例的创建去设置默认值了。(#77558@sttts)
    4. 增加 CRD Conversion Webhook 支持多版本 CRD 实例之间的转换。之前我们的 CRD 版本升级(比如从 v1alpha1 升级到 v1betav1) 是个头疼的问题,使用这个功能我们的版本转化能完美解决(KEP)。
  • Webhook 增强
    1. Admission Webhook 的配置增加了 ObjectSelector。从之前的只能根据 NamespaceSelector 和指定资源进行过滤,到新版本的 Webhook 能对特定的 Label 的资源实例过滤,从而大大提高了 Webhook 的执行效率。
    2. Webhook 的配置允许一个 Webhook 的调用指向一个非 443 端口的服务。Webhook 包括 Admission webhook, AuditSink webhook, CRD Conversion webhook(还包括 kube-aggregator Service 的配置)。
    3. Admission Webhook的配置允许一个 Webhook 只注册和监听一个版本的资源,比如我们可以只注册 apps/v1 deployments 而不关心其它的 deployment 版本的资源,这样我们的 Webhook Server 不用随着 API 定义的升级去强行升级。

Kube-Apiserver 性能深入研究

  1. 大规模场景下一定要 Port 的几个特性:
    1. 优化 Watch event 的 dispatch https://github.com/kubernetes/kubernetes/issues/73958
    2. NodeLease 功能: https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet/nodelease
  1. client-go 会把 List/Watch 超时设置为 [5min, 10min),即在超时时间后会重新发起 List/Watch,建议 Daemenset 调整这个时间到几十分钟甚至数小时级别,不然 Apiserver 可能会因为大量访问崩溃。同时,也在考虑 kubelet 是否也要修改这个值,代码的注释里写着 5min 是为了平衡负载均衡以及接触负载均衡设备 watch 的hang住 bug。
  2. client-go RateLimiter 加入 Wait 方法,避免在异步场景下使用 client-go 引起 goruntine 积压:https://github.com/kubernetes/kubernetes/pull/79375
  3. Webhook 和 Adimission 支持 context-aware: https://github.com/kubernetes/kubernetes/pull/79376
  4. Kube-Apiserver 到达 IO 瓶颈时,metric 错误的将 IO 瓶颈错误归类到 504。我们需要将逻辑处理超时和写 IO 超时分开:https://github.com/kubernetes/kubernetes/pull/79609

开源项目推荐

  1. Tektoncd: 云原生时代的 Pipeline, https://github.com/tektoncd/pipeline
  2. Volcano: Kubernetes 原生的 Job 批量调度扩展 https://github.com/volcano-sh/volcano

本周阅读推荐

《Cloud 2.0:代码不再为王,Serverless 当道!》

这一篇不错的务虚文档,可以从技术演进的视角去思考云时代的技术演进。

文章链接:

https://mp.weixin.qq.com/s/QzudayLEHg0TrJtJ30f9Vg

《微服务架构之「 监控系统 」》

这篇文档详细且完整的描述了微服务架构下的监控系统。用户可以根据此文档对微服务的解决方案进行入门级的了解。

文章链接:

https://mp.weixin.qq.com/s/xH1LX6iOJqKC5Y5IRsAhpQ

《云原生应用 Kubernetes 监控与弹性实践》

云原生应用的设计理念已经被越来越多的开发者接受与认可,而 Kubernetes 做为云原生的标准接口实现,已经成为了整个 stack 的中心,云服务的能力可以通过 Cloud Provider、CRD Controller、Operator 等等的方式从 Kubernetes 的标准接口向业务层透出。本文向大家介绍一个云原生应用该如何在 Kubernetes 中无缝集成监控和弹性能力。

文章链接:https://yq.aliyun.com/articles/704346