knative serving 0.6 版本变更

简介: 概要 新API模型 我们已经通过了knative serving “v1beta1” API模型提议,这些改变会使得kubernetes用户更容易使用Serving资源,解锁了在knative Service中使用Route,并且可以自己指定Revision名称,开启了GitOps场景。

文章翻译自官方release note,链接见最下方。

概要

新API模型

我们已经通过了knative serving “v1beta1” API模型提议,这些改变会使得kubernetes用户更容易使用Serving资源,解锁了在knative Service中使用Route,并且可以自己指定Revision名称,开启了GitOps场景。我们争取在接下来几个发布中完成。

在这次发布中,我们移植新的API定义到v1alpha1 API,作为转换到v1beta1(又称lemonade)的第一步。以下不兼容的变更会在0.7+版本实施:

  • Service和Configuration不再支持内嵌Build。
  • Service不支持 manual 模式。

你可以通过knative/docs的例子来了解新API接口,我们会继续支持大多数v1alpha1的接口直到我们停用它。

彻底改变缩容到零

我们从根本上改变了缩容到零的机制,新的架构通过Serving资源模型较少的改动,获得职责上更好的分离,并且解决了一些长期存在的问题(一些在这次版本发布,一些将来发布)。看下面内容了解更多。

自动证书(alpha,可选)

我们添加了自动证书集成!默认的实现基于 cert-manager 来提供证书(例如通过Let’s Encrypt),但和Istio插件化类似,你也可以替换cert-manager为其他证书提供系统。当前证书针对每个路由提供,但泛域名将在未来版本支持。这个功能依赖Istio 1.1,并且需要显式的开启。

控制器解耦

我们已经开始将Knative中的“可插拔”控制器拆分为它们自己的控制器进程,以便希望替换Knative子系统的人能够更容易地删除绑定的默认实现。例如,要安装Knative Serving但不包含Istio:

kubectl apply -f serving.yaml \
  -l networking.knative.dev/ingress-provider!=istio

注意,由于kubectl不能理解Istio对象的yaml(尽管他们已经被label选择器过滤掉了),我们会看到一些错误。可以安全的忽略找不到 "networking.istio.io/v1alpha3" 的 "Gateway" 资源。

你也可以用以下命令忽略基于cert-manager实现的自动证书(Auto-TLS)控制器:

kubectl apply -f serving.yaml \
  -l networking.knative.dev/certificate-provider!=cert-manager

扩缩容

把Knative PodAutoscaler(又称KPA) /scale 子资源移出来,变成一个PodScalable 通用类型(“duck type”)。这样可以利用informer缓存,并且扩展的字段可以让ServerlessService(又称SKS)利用PodSpec在未来版本优化。

(具体修改见#3889 ,题外话,之前每次调解都需要使用scale client连接API server读取/scale子资源,用不上缓存)

我们现在确保在Revision缩容到零前,“activator”组件已经接管流量(又称正向切换[positive hand-off], #2949)。这个改动开启了Revision能够管理激活。

(实现这个是为了解决缩容到0之前,要等待30秒,这个值是个经验值,主要是等待istio切换路由。但我们也不清楚30秒是否足够,还是说可以缩短。目前这个实现是在activator和queue proxy都加一个响应探测的接口,当需要缩容到零时,由pa发起请求探测检查确认是否路由到activator了。但目前的实现还不是完美的,由于istio有很多sidecar,更新路由需要时间,我们只能确定某个sidecar配置更新了)

新的注解 autoscaling.knative.dev/windowautoscaling.knative.dev/panicWindowPercentage, and autoscaling.knative.dev/panicThresholdPercentage 允许用户自定义 KPA 类型的扩缩容敏感性。(#3103)  

(译者注:增加配置时间窗口、panic的一些参数)

添加activator的链路耗时(tracing)获取更详细的数据,并且可以持续的测量性能数据(#2726)。这个解决了#1276 并且允许我们去定位性能问题,例如冷启动。

缩短默认transports的空闲超时时间,解决了使用Istio 1.1 lean安装,缩容到零的问题(#3987)。原因是当endpoints变更时,通过k8s的service没有断开连接。

解决一个阻止缩容到零的问题 (#3688),解决方法,把enable-scale-to-zero配置加入KPA调解计算中。如果minScaler注解没有设或者设为0,并且enable-scale-to-zero设为false,保留最少一个pod。

修复autoscaler重启时,做出轻率的决定(#3771)(在没有指标时不扩缩容)。

核心API

我们已经批准了v1beta的API定义!如上所述,我们要开始在接下来的几个里程碑实现v1beta1.这次里程碑把v1beta1 API接口作为v1alpha1的子集。

我们改变了执行校验的方式,基于在支持的字段使用“fieldmask”。我们现在会给每个Kubernetes对象创建一个副本(仅限于我们需要的字段),并和原来的对象比较,这样确保我们在Kubernetes API发展中仔细考虑使用哪些资源字段(#3424#3779) 在这基础上,清理了内部API的校验 (#3789#3911)。

status.domain已经过时,使用status.url 来替换 (#3970) 。使用 apis.URL 类型作为URL status 字段,解决issue "无法获取服务 URL" (#1590)。

添加可以通过configmap设置默认的cpu、内存request和limit值。并且删除了之前默认的CPU limit,这样可以回退到k8s的默认值,除了由operator特别指定的。(#3550#3912)

去掉configurationMetadataGeneration label的使用 (#4012) ,并完成了我们转向CRD 子资源的最后一个改动(#643)。

网络

彻底改变了我们缩容到零的方式!这个开启了Revision管理自己启动的语义。需要缩容到零时实现了正向切换,并且增加了autoscaling控制器的同步周期,保持和其他控制器一致。

添加自动配置TLS证书。

停止发布Istio yaml文件。重新分发istio不是我们的本意,并且之前的版本暴露我们的改动-优化了Istio yamls。用户应该请教Istio或者厂商指定的文档来如何获得一个支持knative的Istio版本。

我们已经开始在Service或者Route的子路由中采取扁平命名方案。老的URL目前还可以使用,但新的URL会出现在 status.traffic[*].url 字段里。

支持安装Istio 1.1 (#3515#3353)

解决在开启Istio mTLS时,readiness 探测的问题(#4017)

监控

Activator也把请求日志记录下来(#3781)

测试和发布 

  • label serving.knative.dev/release: devel需要有发布名字或者数字来替代devel,暴露TAG来填充
  • 总是用istio的HEAD版本来做升级测试,解决在升级降级knative测试遇到的错误
  • 添加额外一致性测试(9个新增的测试),改进现有的一致性测试和v1beta1的覆盖率。

参考内容

内容翻译自knative/serving release node https://github.com/knative/serving/releases/tag/v0.6.0

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Java Maven
IDEA离线使用本地maven仓库
IDEA离线使用本地maven仓库
3498 1
IDEA离线使用本地maven仓库
|
数据采集 数据可视化 数据挖掘
交互式数据分析:使用Jupyter Notebooks和IPython提高生产力
【4月更文挑战第12天】Jupyter Notebooks和IPython是交互式数据分析的强大工具,提供了一个集成环境,支持多种编程语言,提升效率并减少错误。它们具有交互式编程、丰富库支持、可扩展性和协作功能。基本流程包括数据导入(如使用Pandas从CSV加载)、预处理、分析(利用Pandas、NumPy、Matplotlib等)、模型选择与训练(如Scikit-learn的RandomForestClassifier)以及模型评估和优化。
378 2
|
8月前
|
人工智能 监控 安全
从 DeepSeek 敏感信息泄露谈可观测系统的数据安全预防
探讨了 SLS 中增强数据安全的几种方式:权限精细化管控有效减少了潜在安全风险;接入层脱敏技术阻止敏感数据落库,提升了隐私保护;StoreView 字段集控制通过限制查询数据范围,降低数据泄露损害。智能监控系统提供实时监测,快速识别并阻断异常拖库行为,为企业提供了迅速响应和抵御威胁的能力。
|
9月前
|
存储 数据采集 数据挖掘
《数据库数据冗余大揭秘:问题与解决方案全解析》
数据冗余是数据库管理中的常见问题,如同家中堆积的杂物,虽看似无害,却会占用存储空间、降低查询效率并增加维护难度。文章分析了数据冗余的成因,如设计不合理、业务需求变化及数据导入导出等,并提出了解决方案,包括数据库规范化设计、数据清洗整合、建立数据字典及优化业务流程。通过实际案例,展示了处理数据冗余对提升数据库性能和业务效率的重要性。重视数据冗余问题,能让数据库更高效地支持业务发展。
643 0
|
传感器 存储 物联网
新技术趋势与应用:区块链、物联网和虚拟现实的融合创新
在数字化浪潮中,区块链技术以其不可篡改的特性成为信任的基石;物联网技术通过智能设备的互联互通,将物理世界数字化;而虚拟现实技术则打造沉浸式体验,模糊现实与虚拟的边界。这三者的结合预示着一个高度互联、智能化且富有创造力的未来,其中区块链确保数据安全,物联网提供实时数据,虚拟现实则为用户带来前所未有的交互体验。本文将探讨这些技术的发展趋势和潜在应用场景,并展示它们如何共同塑造未来社会的面貌。
261 5
|
机器学习/深度学习 人工智能 供应链
AI技术在医疗领域的应用与未来展望###
本文深入探讨了人工智能(AI)技术在医疗领域的多种应用及其带来的革命性变化,从疾病诊断、治疗方案优化到患者管理等方面进行了详细阐述。通过具体案例和数据分析,展示了AI如何提高医疗服务效率、降低成本并改善患者体验。同时,文章也讨论了AI技术在医疗领域面临的挑战和未来发展趋势,为行业从业者和研究人员提供参考。 ###
|
数据挖掘 BI 数据处理
FineBI在线学习资源-数据处理
FineBI在线学习资源-数据处理
254 1
|
SQL 关系型数据库 Linux
在CentOS 6上安装和使用PostgreSQL的方法
在CentOS 6上安装和使用PostgreSQL的方法
286 2
|
机器学习/深度学习 人工智能 前端开发
移动应用开发的未来趋势:跨平台框架与AI的融合
【7月更文挑战第30天】随着移动技术的不断进步,移动应用开发领域正在经历一场革命。传统的原生开发模式正逐渐让位于更加灵活、高效的跨平台解决方案。同时,人工智能(AI)技术的融入为移动应用带来了前所未有的智能功能和用户体验。本文将探讨跨平台框架的发展,AI技术在移动应用中的运用以及二者结合后如何塑造未来的移动应用开发。
251 2
|
开发者 Java UED
大文件传输不再头疼:揭秘Struts 2如何轻松应对文件上传与下载难题!
【8月更文挑战第31天】在Web应用开发中,文件上传与下载至关重要。Struts 2作为主流Java EE框架,凭借Commons FileUpload及文件上传拦截器简化了相关操作。本文探讨Struts 2在文件传输上的优势,通过具体配置与代码示例,展示如何设置最大文件大小、使用`fileUpload`拦截器以及实现文件上传与下载功能。对于大文件传输,Struts 2不仅能够轻松应对,还支持上传进度显示,有效提升了用户体验。总体而言,Struts 2为文件传输提供了高效便捷的解决方案,助力开发者构建稳定可靠的Web应用。然而,在处理大文件时需兼顾网络带宽与服务器性能,确保传输顺畅。
237 0