云原生生态周报 Vol. 40:API Server 负载均衡问题被解决

前言

《云原生生态周报》由阿里云容器平台联合蚂蚁金服共同发布,每周一期。众多一线社区专家与您一起“跟踪动态,读懂社区”,分享云原生社区项目进展、活动发布、精选博客等信息。以下是第四十期云原生生态周报的内容。

业界要闻

  1. CNCF 宣布 2020 年中国 KubeCon 取消

由于新冠疫情影响,外国企业、开发者到访中国存在不确定性,加上召集演讲人、赞助商及参会者所遇到的困难,CNCF 宣布原定于 2020 年 7 月在上海举办的 KubeCon + CloudNativeCon + 开源峰会取消。

同时,原计划于 3 月 30 日 - 4 月 2 日在荷兰阿姆斯特丹举办的 KubeCon + CloudNativeCon 峰会欧洲场也因疫情影响,被推迟到 2020 年 7 月或 8 月举行。而 KubeCon + CloudNativeCon North America 2020 则将按计划在 2020 年 11 月 17 日至 20 日在波士顿举行。

  1. Kubeflow 1.0 发布

可以基于 Kubernetes 高效地构建、训练和部署AI应用。此次发布中包括的核心组件如下:

  • Jupyter Notebook controller: 用户可以方便使用 Jupyter Notebook 开发工具来开发新的机器学习模型;

  • TFJob and PyTorch Operator:用于模型训练;

  • kfctl:用于部署和管理 Kubeflow;

  • KFServing:机器学习模型的部署和管理;

  • Kubeflow UI:集中仪表板。

  1. 阿里云 ACK 1.16 版本正式灰度上线

阿里云 ACK 整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。Gartner 竞争格局国内唯一入选,Forrester 报告国内排名第一。欢迎试用!欢迎广大读者前来试用!

上游重要进展

Kubernetes

  1. 阿里经济体工程师解决困扰 K8s 社区多年的 API Server 负载均衡问题

由于 API Server 和 client 是使用 HTTP2 协议连接,HTTP2 的多个请求都会复用底层的同一个 TCP 连接并且长时间不断开。而在 API Server 发生 RollingUpdate 或者某个 API Server 实例重启时,又或者 API Server 使用 MaxSurge=Replica 方式升级后, Load Balance 没有及时的将所有副本挂载完毕,client 能敏感的感知到连接的断开并立刻发起新的请求,这时候很容易引起较后启动(或者较后挂载 Load Balance)的 API Server 没有一点流量,并且可能永远都得不到负载均衡。

蚂蚁金服的同学对这个问题做了修复,增加了一种通用的 HTTP filter,API Server 概率性(建议 1/1000)的随机关闭和 Client 的链接(向 Client 发送 GOAWAY)。关闭是优雅的关闭,不会影响 API Server 和 client 正在进行中的长时间请求(如 Watch 等),但是收到 GOAWAY 之后,client 新的请求就会重新建立一个新的 TCP 链接去访问 API Server 从而能让 Load Balance 再做一次负载均衡。

这个修复增加了通用的 HTTP filter,能轻易的 port 回老版本的 Kubernetes,其它 HTTP2 server 也有类似问题也可以快速 port 这个通用的 filter(只依赖较新版本 golang.org/x/net package)。

  1. add KEP for cgroups v2 support

给 kubelet 增加 cgroups v2 的支持。

  1. Disable HTTP2 while proxying a “Connection: upgrade” request

针对 proxy connection upgrade 请求,强制采用 http1.1 协议。

  1. Fix ExternalTrafficPolicy support for Service ExternalIPs

Service ExternalIPs 遵守 ExternalTrafficPolicy=local 规则,从而达到保留 Client 源 IP 目的。

  1. Allow signing controller to return intermediate certs

由于 kubelet 证书轮转机制要求给 kubelet 返回签发的证书时,同时也带上签发者的 CA 信息,用于解决 kube-controller-manager 和 kube-apiserver 的 CA 配置不一致的问题。该 PR 只解决 kube-controller-manager 这块的问题,后续 kubelet 还需要配合修改。

  1. Use ip address from CNI output

目前主要从容器的 eth device 获取容器 IP 信息,但是针对只使用 lo 和非 device(如: unix domain socket file)的容器当前的实现无法 cover,该 PR 利用 cni ADD 命令结果中返回的容器 IP 信息,而不从容器 eth device 获取 IP 信息。

Knative

  1. Knative Functions 支持

Knative 当前轻松支持基于 HTTP 和事件驱动的容器扩缩容,但是为什么不往前一步支持 FaaS 呢? 别急,Knative 社区已经开始计划支持通过 Events 和 HTTP 触发“function”。

开源项目推荐

  1. apiserver-network-proxy

基于 grpc 的隧道实现,用于定制 kube-apiserver 的 proxy 请求转发。

  1. kubectl-debug

新启动一个容器和目标 Pod 共享 pid/network/user/ipc 命名空间的方式,在新启动容器为目标 pod 定位问题。该工具可以以 kubectl plugin 方式运行。

本周阅读推荐

  1. 《Bring your ideas to the world with kubectl plugins》

推荐使用 kubectl-plugin 的方式往 kubectl 扩展用户的需求和功能。

  1. 《When You Do (and Don’t Need) a Service Mesh》

从微服务数量、导入的紧迫性以及时机等方面分析是否需要使用 Service Mesh。

  1. 《从零开始入门 K8s | Kubernetes 网络模型进阶》

本文将基于之前介绍的基本网络模型,进行了更深入的了解,希望给予读者一个更广更深的认知。

  1. 《Kubernetes 1.16 与 1.14 性能对比》

本文主要从三个方面对 Kubernetes 1.16 与 1.14 的性能进行了对比,分析了 1.16 版本和 1.14 版本的区别。

  1. 《Kubernetes Release Note 解读(1.15, 1.16)》

Kubernetes 1.16 版本相较于 1.14 版本有着众多演进和增强,本文对其一一进行了解读。

相关阅读

云原生生态周报 Vol. 39:Golang 1.14 发布
云原生生态周报 Vol. 38:Apache Flink 1.10.0 发布
云原生生态周报 Vol. 37:国内首个 Kubernetes SIG-Cloud-Provider 子项目揭秘
云原生生态周报 Vol. 36:CNCF 公布 2020 年 TOC 选举结果
云原生生态周报 Vol. 35:Falco 进入 CNCF Incubator 项目
云原生生态周报 Vol. 34:VMware 完成 27 亿美元的 Pivotal 收购
云原生生态周报 Vol. 33:CNCF 宣布 TUF 毕业
云原生生态周报 Vol. 32:Istio 1.5 版本开发中
云原生生态周报 Vol. 31:Kubernetes v1.17 版本解读
云原生生态周报 Vol. 30:Rancher 新版本默认支持 Kubernetes 1.16
云原生生态周报 Vol. 29:Kubernetes 拟支持 Cgroup v2
云原生生态周报 Vol. 28:Mirantis 收购 Docker 企业业务
云原生生态周报 Vol. 27:Helm 3 发布
云原生生态周报 Vol. 26:2019 年容器生态统计报告发布
云原生生态周报 Vol. 25:Canonical 开源 MicroK8
云原生生态周报 Vol. 24:Ubuntu 19.10 发布
云原生生态周报 Vol. 23:全球首个开放应用模型 OAM 开源
云原生生态周报 Vol. 22:Knative 暂时不会捐给任何基金会
云原生生态周报 Vol. 21:Traefik 2.0 正式发布
云原生生态周报 Vol. 20:Kubernetes v1.16 发布
云原生生态周报 Vol. 19:Helm 推荐用户转向 V3
云原生生态周报 Vol. 18:独家解读 etcd 3.4 新特性
云原生生态周报 Vol. 17 :Helm 3 发布首个 beta 版本
云原生生态周报 Vol. 16:CNCF 归档 rkt,容器运行时“上古”之战老兵凋零
云原生生态周报 Vol. 15:K8s 安全审计报告发布
云原生生态周报 Vol. 14:K8s CVE 修复指南
云原生生态周报 Vol. 13 | Forrester 发布企业级容器平台报告
云原生生态周报 Vol. 12 |K8s 1.16 API 重大变更
云原生生态周报 Vol. 11 | K8s 1.16 早知道
云原生生态周报 Vol. 10 | 数据库能否运行在 K8s 当中?
云原生生态周报 Vol. 9 | K8s 1.15 后的性能提升
云原生生态周报 Vol. 8 | Gartner 发布云原生趋势
云原生生态周报 Vol. 7 | Docker 再爆 CVE
云原生生态周报 Vol. 6 | KubeCon EU 亮点汇总
云原生生态周报 Vol. 5 | etcd 性能知多少
云原生生态周报 Vol.4 | Twitter 从 Mesos 全面转向 Kubernetes
云原生生态周报 Vol. 3 | Docker Hub 遭入侵,Java 8 开始提供良好的容器支持
云原生生态周报 Vol. 2 | Godaddy 开源 KES、CNCF 提供免费云原生课程
云原生生态周报 Vol. 1 | Google 发布 Cloud Run,开源项目 Kubecost 让 K8s 花费一目了然

本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章