作者 | 汤志敏、谢瑶瑶
会议完整视频回顾:https://www.bilibili.com/video/av88668762
2 月 12 日,阿里云和 CNCF 联合举办了线上研讨会,首次完整介绍了阿里云对 Kubernetes 社区的布局,包括了 10 个类别,20 多个开源项目,提供了完整的 Kubernetes 生命周期管理。本文汇集了此次会议完整视频回顾及资料下载,并整理了会议上未能及时回答的问题,希望能够对大家有所帮助~
关注“阿里巴巴云原生”公众号,后台回复 “会议” 即可下载 PPT。
什么是 SIG Cloud Provider
随着时间的发展,越来越多的企业在生产环境使用 Kubernetes。Kubernetes 被广为接受,离不开其良好的设计和繁荣的社区。目前围绕着 Kubernetes 已经有 20 个左右的兴趣小组(SIG),SIG Cloud Provider 则是 Kubernetes 的重要兴趣小组之一,致力于推动所有云厂商以标准的能力提供 Kubernetes 服务。
SIG-Cloud-Provider-Alibaba 是 SIG Cloud Provider 在国内唯一的子项目。
Cloud Provider SIG 是 Kubernetes 的云厂商兴趣小组,致力于让 Kubernetes 的生态系统往厂商中立的方向演进,他会负责协调不同厂商尽可能以统一的标准来满足开发者的需求。目前加入 Cloud Provider SIG 包括了 7 家云厂商,包括 AWS、GCP、阿里云、IBMCloud 等。
为什么阿里云要加入 SIG Cloud Provider
1.和全球云厂商共同推动多云的标准,将阿里云的优秀实践反哺社区
在全面上云的时代,云已经重塑了企业IT架构。云原生计算就是一组最佳实践和方法论,如何在公共云、专有云、多云环境中,构建可伸缩、健壮、松耦合的应用,可以更快速的创新和低成本的试错。
阿里云作为国际有影响力的云厂商,也希望能够推动Kubernetes的进一步标准化,并进一步和横向云厂商如AWS、Google、Azure进行技术协同,优化云和Kubernetes连接,并统一不同组件的模块化和标准化协议。
2.对阿里云的 Kubernetes 开发者带来透明可控、共建协同、平滑演进的能力
对于 Kubernetes 的开发者和用户,我们希望基于阿里云打造 Kubernetes 的最佳运行环境,并将围绕在 Kubernetes 的阿里云插件开源出来。而阿里云容器服务 ACK 也会尽量复用这些组件。
- 透明可控:对于研究性质的开发者,可以基于这些插件自行搭建 Kubernetes 集群;对于容器服务 ACK 的用户,也可以更加透明的了解相关实现;
- 共建协同:如果对阿里云上使用 Kubernetes 的计算、网络、存储等领域有需求的开发者,可以提 Issue 或参与到开源组件开发中一起贡献,并参与 RoadMap 的制定;
- 平滑演进:阿里云 Kubernetes 开源插件提供了 Day 1 的部署能力,但是对企业的运维、升级、稳定性掌控等提出了更高的要求。如果需要 Day 2 的持续升级、高可用保障、纠错推荐等专家服务,可以平滑演进到容器服务 ACK。
SIG Cloud Provider Alibaba的运作机制
- Slack
- 双月度会议
- 会议内容纪要:
Google Docs、
YouTube
- 会议语言:中文、英文
阿里云 Kubernetes 产品家族简介
阿里云 Kubernetes 开源套件 全家福
Kubernetes 作为云原生时代的应用操作系统,已经成为事实上的标准。阿里云在 Kubernetes 实践的过程中开源了众多的项目,如位于底层的计算、存储、网络、安全等相关的 5 个大的类别和上层领域相关的 AI、应用管理、迁移、Serveless 等 5 个大的类别,为用户应用提供全栈式生命周期管理。
SIG-Cloud-Provider-Alibaba 为 K8s 在阿里云上的云原生最佳实践提供一个沟通的桥梁,通过兴趣小组的方式让所有参与的个人、组织理解 CloudProvider 的原理并运用到生产实践中,实现其业务价值。
详见下文。
CloudController
网络
存储
弹性
安全
迁移
AI
ServiceBroker
Serverless
应用管理
部分开源组件简介
CloudController
CloudController 指 K8s 的 cloud-controller-manager 组件(简称 CCM), 提供 Kubernetes 与各个云厂商基础服务的对接能力(包含网络负载均衡,VPC 路由,ECS,DNS 等)。主要由 NodeController、ServiceController、RouteController、PVLController 四大控制器实现。
NodeController 实现了计算节点的管理,例如 ECS 节点生命周期管理,给节点打上可用区、Region、hostname 等标识,为编排系统在计算池上调度工作负载提供全方位的信息。同时定期轮询 ECS 的 IP 地址及检测 ECS 资源状态(是否被释放)等,动态更新节点信息,确保编排系统及时响应计算节点事件。
ServiceController 实现了应用负载均衡管理,通过监视 Kubernetes Service 对象的变化,自动的为应用配置并管理云上负载均衡服务(SLB 配置,监听配置,虚拟服务器组配置),根据应用副本变化动态的调整负载均衡的后端服务器组,无需人工干预。在此基础上,我们定义了一组丰富的 Annotation,用以自定义应用负载均衡的配置,同时我们同社区积极合作,共同推进配置的标准化,同时在 K8s 原因的服务发现模型上扩展了弹性网卡直通模式,减少了服务发现的网络层级,整体提升了 10% 的应用网络性能。
高性能网络组件 Terway
Terway 实现了 Kubernetes CNI 规范,专为阿里云环境优化,并支持丰富的企业特性,支持 VPC 路由模式,ENI 模式、ENI 多 IP 等多种模式等,性能优秀,ENI 模式相比原生 VPC 提升 10% 左右。
Terway 和阿里云底层 IAAS 网络深度整合,让 Pod 作为云网络一等公民无缝使用 CEN、SLB 等网络产品,使用弹性网卡让网络性能 0 损失,使容器化的过程没有体验和性能的降级。同时支持 Kubernetes 网络策略,Qos 流控等高级功能。
高性能容器存储 CSI
阿里云 CSI 插件实现了在 Kubernetes 中对容器存储卷的生命周期管理,支持动态创建、挂载、使用云数据卷。 当前的 CSI 实现基于 K8S 1.14 以上的版本;支持的阿里云存储:云盘、NAS、CPFS、OSS、LVM 等。
高性能日志采集 LogPilot
Log-Pilot 是一个高效的智能容器日志采集工具,其不仅能够便捷地采集容器的标准输出日志,同时还能够动态地发现采集容器内部的日志文件;其完全采用声明式的配置方式,能够自动地感知集群中容器的状态来动态地配置容器日志采集,同时其还具备很多高级特性,诸如日志的自动 CheckPoint 及句柄保持机制、支持自动日志数据打标以及自定义 Tag 等机制,可灵活地将日志数据采集到多种不同的日志存储后端,比如 ElasticSearch、Kafka、Logstash、Redis,Graylog 等。
机器学习轻量级解决方案 Arena
Arena 是基于 Kubernetes 的机器学习轻量级解决方案,支持数据准备,模型开发,模型训练,模型预测的完整生命周期,提升数据科学家工作效率。方便数据科学家和算法工程师快速开始利用阿里云的资源(包括 ECS 云服务器、GPU 云服务器、分布式存储 NAS、CPFS、 对象存储 OSS、Elastic MapReduce、负载均衡等服务)执行数据准备、模型开发、模型训练、评估和预测等任务。并能够方便地将深度学习能力转化为服务 API,加速与业务应用的集成。在提升数据科学家效率的同时,通过 GPU 资源的可视化管理和设备的共享调度提升集群 GPU 资源的利用率。
欢迎大家参加 SIG Cloud Provider
本次线上研讨会首次介绍了阿里云在 Kubernetes 的社区布局。受限于时间和篇幅,并不能介绍完所有开源组件的详细信息,而希望可以授之以渔,让对 Kubernetes 感兴趣的开发者找到对应的开源项目。我们欢迎更多的开发者一起来参与共建,无论是提 PR 或 Issue,还是对 Roadmap 提出建议。后续,SIG Cloug Provider Alibaba 也会针对具体的组件分享原理、最佳实践。
Q & A
Q1:阿里云 K8s 的 Cloud Provider 能否针对每个功能点添加参数来开关吗?
A1:可以通过配置annotation实现具体功能点,具体可以参考文档。
Q2:如果我们要在阿里 CCM上的基础上修改的话,是不是有 K8s 的版本问题,因为我们想用自己的 Kubernetes 特定版本。
A2:可以,CCM 不依赖于 K8s 版本。
Q3:阿里云各个基于 Kubernetes 的容器服务是否直接使用的开源 CCM? 如果是,内部在上线前做了哪些调整?另外,provider_id 格式具体是什么?
A3:是的,完全基于开源版本的 CCM。provider_id 格式为 ${regionid}.${nodeid}。
Q4:CCM 必须要 K8s 的 nodename 和阿里云的实例 id 一样吗?之前运维说必须一样,但这样没有意义的 nodename 用起来很恶心。
A4:不需要。目前只需要配置 providerid 参数即可。
Q5:terway 底层如何加速?kernel level 还是 dpdk?
A5:terway 分为不同的网络模式,不同模式的网络配置不通。
- 独占 ENI 的模式直接使用 IAAS 层的网卡作为 Pod 的网卡,host 上不涉及虚拟化,用户 Pod 中可以使用 DPDK来加速应用网络。节点外依赖于阿里云自研的高性能 IAAS 网络;
- 共享 ENI 模式中使用 Ipvlan 的轻量级虚拟化方案作为节点内虚拟化的手段,性能相对 Host 网络性能损失极低。
Q6:POD 底层的内核参数允许 namespace 化么?
A6:POD 底层的内核参数是否允许 namespace 化依赖于内核的支持情况,一般在较新的内核上比如 Aliyun Linux2 中的 4.19 的内核,大部分内核参数都允许在 Pod 上指定和修改的。
Q7:在安全容器方面,阿里现在有什么产品?
A7:目前阿里云的容器服务已经提供了安全沙箱作为用户的可选容器引擎,并且部分阿里云 Serverless 形态的产品如 SAE、ECI 也是构建在安全容器之上。
Q8:Arena 支持多租户和虚拟 GPU 吗?
A8:Arena 重用 Kubernetes 的现有用户授权和多租户工作机制,不同用户可以分配不同的 kubeconfig,并利用其进行认证,同时通过 namespace 进行资源隔离和共享。而站在 Arena 的角度,用户只能看到本 namespace 的训练和推理任务,其他 namespace 下的任务并不可见。
这里的虚拟 GPU,指的是英伟达的虚拟 GPU 技术,目前针对于阿里云上已经支持 P4 的虚拟 GPU,并且已经和阿里云容器服务 Kubernetes 完成了集成,在阿里云的容器服务上就能体验。而在 Arena 的角度来说虚拟 GPU 并不是特殊的 GPU 资源,是可以实现对于该资源的调度和编排的。
Q9:多容器共享 GPU 方案支持资源隔离吗?能限制住显存吗?
A9:首先感谢您关注我们的 GPU 共享方案,阿里云容器服务贡献了业界目前唯一的开源 GPU 共享方案。目前我们的方案还是在调度层面实现多容器的 GPU 共享,并且可以和 TensorFlow 等框架相结合实现应用层面的 GPU 资源限制。可以通过我们的文档了解目前的使用方式。
但是我们也在和阿里云的底层团队研发安全和高性能的 GPU 隔离方案,相信在不久的未来,大家能够体验到从 GPU 共享调度到隔离的完整方案。
Q10:ExternalDNS 目前支持 alicloud 的 DNS 服务吗,支持程度如何?
A10:目前是支持 alicloud 的 DNS 服务 privatezone 的,支持同步 K8s 集群的服务 / Pod 等解析到 DNS 服务中,降低集群内部署的 coredns 造成的损耗。
Q11:阿里版本的 nginx ingress 与社区官方版的主要区别是什么呢?
A11:阿里云在社区的基础上实现了更加高级的功能,诸如 NGINX Server 配置的动态更新,支持基于 Header、Cookie 和请求参数以及权重的混合灰度发布策略等。
Q12:阿里云 Kubernetes 以及这些开发的套件的发布周期是什么样的?
A12:对于 K8s 大版本的支持力度是半年更新一个稳定版本。同时会不定期做 Bugfix 和安全修复。
Q13:问问边缘版 ACK@Edge 商用稳定版本已经发布了么,有相关用户在用么
A13:ACK@Edge 已经可以用于生产环境,目前已经有在线教育、视频、IoT、CDN 等领域和行业的用户在使用,商业版预计 2020.6 月前推出。
Q14:宿主 WORKER 节点是否遇到过 cGroup 内存泄漏, 导致 POD cannot allocatie memory 的问题? 如果有如何解决的?
A15:容器服务采用的 cgroup driver 是 systemd cgroup driver,目前没有遇到这个问题。
Q15:POD 的CPU 内存资源是否和宿主是隔离的?如何隔离的?
A15:可以通过 kubelet 为宿主机预留资源的方式,这样 Pod 的资源就会被限制在剩余的资源空间内来实现隔离。
Q16:aws 有 eckctl,aliyun 有对应的工具吗?叫 ackctl ?
A16:可以参见文档。
Q17:请问阿里云对 Windows 容器的支持程度如何?
A17:目前支持 Window 1809,即将支持 1903。并支持 Linux 集群添加 Windows 节点。
Q18:可以单独使用某一个开放组件集成到现有的 K8s 集群吗?
A18: 可以。现有的 K8s 集群完全是满足 K8s Conformance 测试的。
“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”