knative serving 0.10.0 版本变更

简介: 前言Knative Serving v0.10.0 版本已经于 10 月 29 号正式发布。本次版本主要优化了activator负载均衡等能力,具体细节见以下内容。主要变更Activator半理想的负载均衡优化这部分的设计文档见  Better Load Balancing in Activator (google doc)在对activator负载均衡的优化中,设置 containerConcurrency: 1 后因为排队导致的错误已经解决。

前言

Knative Serving v0.10.0 版本已经于 10 月 29 号正式发布。本次版本主要优化了activator负载均衡等能力,具体细节见以下内容。

主要变更

Activator半理想的负载均衡优化

这部分的设计文档见  Better Load Balancing in Activator (google doc)
在对activator负载均衡的优化中,设置 containerConcurrency: 1 后因为排队导致的错误已经解决。在有容器并发数(CC,Container Concurrency)感知负载均衡的activator中,实际看到通过activator比直接访问用户容器有更低的延迟(一般来说增加额外一跳会增加延迟)。当前只实现了CC=1的场景,CC=10的还没完成。

之前版本做过一次优化,由于iptable刷新时间间隔的问题,通过service clusterip发现pod ip会有延迟,如果clusterIP没准备好,会向pod ip直接发送请求。这次的负载均衡优化只是针对向pod ip发送请求的场景,如何均衡的向每个pod发送请求。

作者想到的方案有两个,一个是把请求分配到当前负载最低的那个,第二个是two random choices 算法。有文章建议第一种方案可能更糟糕,第二种方案的实现方式是随机选择两个节点,然后从中选择一个低负载的。测试下来后,当只有一个activator的时候,效果很明显,但是包含多个activator的时候,还是有比较大的延时。作者认为的原因是:1,不同的activator会分配请求到相同的pod,导致排队 2,activator自己的流量不均匀。我理解第一个原因是各个activator没有共享当前pod负载情况,所以导致算法失效,有可能某个pod的请求相对多一些。

解决方案是把pod列表分片,每个activator只向部分pod发送请求。

Kubernetes最低支持版本为1.14

这样可以同时支持多个CRD版本以及试验其他Kubernetes CRD新功能。如果检测到低版本,安装会失败。

使用Go1.13

Serving已经切换到 Go 1.13,在同步上有更好的性能,错误包装(error wrapping)和其他功能,比如 Duration.Milliseconds

其他变更

扩缩容

  • Service名称不再使用GenerateName,我们在创建metrics和private K8s Service名称使用GenerateName,导致在测试和可靠性上很多问题,所以放弃使用。
  • Activator重构和负载均衡,在 @greghaynes 的几个变更后,允许探测和路由请求到独立的pod,可以显著的简化代码,移除重复和不高效的部分。
  • 显著提升集成测试,减少偶尔的报错

核心API

  • 切换到 K8s 1.15.3 客户端库 #5570 ,这个客户端版本可以让Knative使用K8s的新特性,选择这个版本的原因是它兼容1.14,并且因为兼容K8s 1.16,可以使用更长时间。
  • 切换回原来单一的安装方式,同时支持所有API版本,因为支持的K8s最低版本为1.14,这个版本已经解决了CRD多版本共存的问题,所以切换回之前的安装方式。
  • 跳过复制last-applied-configuration注解到 Route
  • ConfigMaps现在可以并行的校验了
  • 分别为编辑和查看添加ClusterRole
  • 在Configuration和Route里添加注解 /creator and /lastModifier
  • Service和Route加上duck.knative.dev/addressable=true标签,给eventing使用 #5874

网络

  • Activator优雅退出 #5542,activator在退出的时候,健康检查还返回成功,导致请求依然路由到退出中的activator,我们让SIGTERM信号触发健康检查失败,允许退出中的activator可以处理完剩余的请求。
  • 在AutoTLS关闭的时候,避免创建通配符证书 #5636,在v0.9.0,我们尝试创建通配符证书甚至cert-manager没有部署,导致在创建新namespace时证书创建错误。
  • 结束ClusterIngress迁移 #5689 
  • 改进健康检查支持HTTPS重定向,HTTPS,HTTP2和自定义端口   #5223,之前的健康检查依赖写入VirtualService特定的域名,现在可以探测实际的数据链路,允许使用真正服务的域名探测。
  • 修复cluster-local的可见性问题 #5734
  • 避免给cluster-local service创建错误的证书 #5611

监控

  • 添加容器和pod标签到revision和activator的指标里

参考

本文内容大部分来自于 Knative Serving release note 的解读

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
小程序 数据库 微服务
结合ruoyi-cloud和ruoyi-app实现微信小程序的授权登录
结合ruoyi-cloud和ruoyi-app实现微信小程序的授权登录
1286 0
|
运维
ETCD系列之一:简介
本文介绍etcd使用场景,工作原理。
77192 4
|
搜索推荐 数据挖掘 API
淘宝商品API接口的对接及收益
淘宝商品API接口是淘宝开放平台提供的数据服务,支持商品搜索、详情、评价等功能,帮助开发者快速获取商品数据,提升用户体验,降低运营成本,增强市场竞争力,并支持数据分析和业务决策。对接流程包括注册账号、获取API密钥、阅读文档、编写请求代码、发送请求、解析数据、错误处理和日志记录等步骤。通过实际案例,如价格比较网站、库存管理工具、个性化推荐系统等,展示了API接口的应用价值。
429 5
|
12月前
|
存储 安全 Serverless
阿里云再次被评IDC MarketScape: Worldwide Edge Delivery Service 重要玩家
阿里云喜获佳绩,再次被认可为IDC 2024全球CDN服务商MarketScape评选的全球重要玩家
|
开发者
哨兵2号分幅规则介绍及网格矢量下载
本文介绍哨兵2号(Sentinel-2)遥感影像数据的空间分幅规则,并提供其格网参考系(Military Grid Reference System,MGRS)的.kml格式文件、.shp格式矢量文件的下载方法~
1066 1
哨兵2号分幅规则介绍及网格矢量下载
|
Kubernetes 监控 调度
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
576 2
|
Kubernetes Java 容器
Spring Cloud 与 K8s 在微服务层面的不同
微服务Springcloud已经被广泛使用了,但作为云原生的技术基础K8s,存在着与Spring cloud 组件功能类似的组件,此时可以借助于容器化手段使用K8s来解决服务的注册与发现,属性配置动态化等。
|
Kubernetes 负载均衡 Cloud Native
从零开始入门 K8s | 理解 CNI 和 CNI 插件
网络架构是 K8s 中较为复杂的方面之一。K8s 网络模型本身对某些特定的网络功能有着一定的要求,因此,业界已经有了不少的网络方案来满足特定的环境和要求。CNI 意为容器网络的 API 接口,为了让用户在容器创建或销毁时都能够更容易地配置容器网络。在本文中,作者将带领大家理解典型网络插件地工作原理、掌握 CNI 插件的使用。
从零开始入门 K8s | 理解 CNI 和 CNI 插件
|
监控 Java 中间件
8 个线程池最佳实践和坑!使用不当直接生产事故!
你好,我是 Guide。这篇文章我会简单总结一下我了解的使用线程池的时候应该注意的坑以及一些优秀的实践。拿来即用,美滋滋!
|
存储 Kubernetes 监控
K8s技术全景:架构、应用与优化
K8s技术全景:架构、应用与优化
920 0