1、开源云原生计算时代专场王思宇(酒祝)2021年07月10日本期议题:从 OpenKruise 看云原生应用负载发展趋势大纲1.云原生应用负载的定义与起源2.原生应用负载的现状与局限性3.从 OpenKruise 看未来的应用负载传统虚拟机集群1.云原生应用负载的定义与起源什么是云原生应用负载?VMVMVMVM第一代容器集群,如 Docker SwarmContainerContainerContainerContainer云原生 Kubernetes 集群PodPodPodPod操作方式:扩容几台VM部署应用依赖环境缩容哪几个VM更新哪些VM中的软件包巡检确保一致性操作方式:扩容几台容器(用某
2、个应用镜像)缩容哪几个容器升级哪些容器到某个镜像有宿主机故障,需要删除容器并重新扩一些新的实例Workload-AWorkload-B操作方式:声明:应用 A 的镜像版本、需要的机器数声明:应用 A 需要升级到某个新版本镜像声明:守护进程 B 需要部署到所有宿主机上1.云原生应用负载的定义与起源什么是云原生应用负载?PodKubernetes 终态语义:用户定义期望状态与要求(spec)组件(Controller)按用户的要求自动化地执行工作,并上报实际状态(status)应用负载 or 工作负载(Workload):一般是指用来(直接或间接)定义一组工作实例(Pod)终态运行的资源类型原生
3、Kubernetes 提供的内置 Workload 主要集中在 apps 和 batch 两个组下PodPodPodPodReplicaSetStatefulSetDaemonSetJobDeploymentCroJob第一个云原生 Workload-ReplicationController1.云原生应用负载的定义与起源Kubernetes 1.0 版本:kind:ReplicationControllerspec:replicas:1 selector:xx:xx template:#pod template for this workloadstatus:replicas:1最朴素的部署
4、需求:1.应用 Pod 模板:定义镜像、环境变量、挂载卷等2.需要的实例数量3.标签选择器最简洁的状态上报:1.当前 Pod 实例数原生 Workload 发展史2.原生应用负载的现状与局限性v1.0v1.1v1.2v1.3v1.4v1.5v1.6v1.21ReplicationController改名 ReplicaSetDeploymentJobDaemonSetPetSet改名 StatefulSetScheduledJob改名 CronJob.“保守”基础能力与“先进”生产力的矛盾2.原生应用负载的现状与局限性原生 Workload 宗旨:通用性稳定性基础部署能力不倾向于做较大改动来自
5、生产环境的需求:多样化的业务部署发布要求追求效率、性能使用上灵活可控垂直领域(游戏、直播.)的场景诉求原生 Workload 的功能迭代2.原生应用负载的现状与局限性生产需求(举例)生产需求(举例)状态状态说明说明Deployment、ReplicaSet 执行缩容时可以指定 Pod 删除Merged从 1.5 版本开始有用户提出需求,直到 1.21 版本才加入了 deletion-cost 策略(alpha)StatefulSet 支持并行发布(当前只能 one by one 串行升级)Reviewing2018.12 提出 KEP,2019.8 KEP 合并、提交代码 PR,至今仍在 re
6、viewingPod 发布支持 原地升级(in-place update)Rejectedsig/apps 评估功能上对现有 Workload API 和 controller 改动太大,且会打破 Pod 不可变2.原生应用负载的现状与局限性如何看待原生 Workload 的局限性?From Matt Farina and SIG Apps:Upstream Kubernetes wont likely accept every new type of controller.The direction is generally to have them installed as 3rd par