kubescheduler调度扩展

Kubernetes 自带了一个默认调度器kube-scheduler,其内置了很多节点预选和优选的调度算法,一般调度场景下可以满足要求。但是在一些特殊场景下,默认调度器不能满足我们复杂的调度需求。我们就需要对调度器进行扩展,以达到调度适合业务场景的目的。 背景 中间件redis容器化后,需要两主不能在同一个节点上,一对主从不能在同一节点上;elasticsearch容器化后,两个data实例不能在同一节点上。在这类场景下,默认调度器内置的预选、优选算法不能满足需求,我们有以下三种选择: 将新的调度算法添加到默认调度程序中,并重新编译镜像,最终该镜像运行的实例作为kubernetes集群调度器; 参考kube-scheduler实现满足自己业务场景的调度程序,并编译镜像,将该程序作为独立的调度器运行到kubernetes集群内,需要用该调度器调度的pod实例,在spec.schedulerName里指定该调度器; image实现“调度扩展程序“:默认调度器kube-scheduler在进行预选时会调用该扩展程序进行过滤节点;在优选时会调用该扩展程序进行给节点打分,或者在bind操作时,调用该扩展器进行bind操作。 对上述三种方式进行评估: 第一种:将自己的调度算法添加到默认调度器kube-scheduler中,对原生代码侵入性较高,而且随着kubernetes版本升级,维护成本也较高; 第二种:默认调度器里内置了很多优秀调度算法,如:检查节点资源是否充足;端口是否占用;volume是否被其他pod挂载;亲和性;均衡节点资源利用等,如果完全使用自己开发的调度器程序,可能在达到了实际场景调度需求同时,失去更佳的调度方案,除非集成默认调度器中的算法到自己独立调度程序中,但这无疑是不现实的; 第三种:通过启动参数的policy配置,选用某些默认调度器中的预选、优选调度算法的同时,也可以调用外部扩展调度程序的算法,计算得到最优的调度节点,无需修改kube-scheduler代码,只需要在启动参数中增加配置文件即可将默认调度程序和扩展调度程序相互关联。 可以参考: https://github.com/kubernetes... 故采用第三种:实现扩展调度程序的方案。 整体架构 imagekube-scheduler在调度pod实例时,首先获取到Node1、Node2、Node3三个节点信息,进行默认的预选阶段,筛选满足要求的节点,其次再调用扩展程序中的预选算法,选出剩下的节点,假设预选阶段Node3上资源不足被过滤掉,预选结束后只剩Node1和Node2;Node1和Node2进入kube-scheduler默认的优选阶段进行节点打分,其次再调用扩展调度程序中的优选算法进行打分,kube-scheduler会将所有算法的打分结果进行加权求和,获得分数最高的节点作为pod最终bind节点,然后kube-scheduler调用apiserver进行bind操作。 实现步骤 实现扩展调度程序代码 编写扩展调度器程序代码,根据实际业务调度场景编写预选逻辑、优选逻辑: image实现预选接口,入参为schedulerapi.ExtenderArgs,出参为schedulerapi.ExtenderFilterResult: image实现优选接口,入参为schedulerapi.ExtenderArgs,出参为schedulerapi.HostPriorityList: image暴露http接口: image参考: https://github.com/ll83744879... 默认调度器部署 由于kubernetes集群内已经有了一个名为default-scheduler的默认调度器,为了不影响集群正常调度功能,下面会创建一个名为my-kube-scheduler的调度器,这个调度器和default-scheduler除了启动参数不一样外,镜像无差别。 1、创建一个名为my-scheduler-config的configmaps,data下的config.yaml文件指定了调度器的一些参数,包括leader选举,调度算法策略的选择(指定另一个configmaps),以及指定调度器的名称为my-kube-scheduler。 相应的创建一个my-scheduler-policy的configmaps,里面指定了选择哪些预选、优选策略,以及外部扩展调度程序的urlPrefix、扩展预选URI、扩展优选URI、扩展pod优先级抢占URI、扩展bind URI、扩展优选算法的权重等。 以保证my-kube-scheduler和扩展调度程序的通信。 apiVersion: v1kind: ConfigMapmetadata: name: my-scheduler-config namespace: kube-systemdata: config.yaml: | apiVersion: kubescheduler.config.k8s.io/v1alpha1kind: KubeSchedulerConfigurationschedulerName: my-kube-scheduleralgorithmSource: policy: configMap: namespace: kube-system name: my-scheduler-policyleaderElection: leaderElect: false lockObjectName: my-kube-scheduler lockObjectNamespace: kube-systemapiVersion: v1kind: ConfigMapmetadata: name: my-scheduler-policy namespace: kube-systemdata: policy.cfg : | { "kind" : "Policy","apiVersion" : "v1","predicates" : [ {"name" : "PodFitsHostPorts"}, {"name" : "PodFitsResources"}, {"name" : "NoDiskConflict"}, {"name" : "MatchNodeSelector"}, {"name" : "HostName"}],"priorities" : [ {"name" : "LeastRequestedPriority", "weight" : 1}, {"name" : "BalancedResourceAllocation", "weight" : 1}, {"name" : "ServiceSpreadingPriority", "weight" : 1}, {"name" : "EqualPriority", "weight" : 1}],"extenders" : [{ "urlPrefix": "http://10.168.107.12:80/scheduler", "filterVerb": "predicates/always_true", "prioritizeVerb": "priorities/zero_score", "preemptVerb": "preemption", "bindVerb": "", "weight": 1, "enableHttps": false, "nodeCacheCapable": false}],"hardPodAffinitySymmetricWeight" : 10}2、在my-kube-scheduler yaml文件中将configmaps:my-scheduler-config以文件的形式挂载到容器内/my-scheduler目录下,并在启动参数中指定--config=/my-scheduler/config.yaml,使用和默认调度器一样的镜像。 ...

April 30, 2019 · 1 min · jiezi

CNCF案例研究:蚂蚁金服

蚂蚁金服利用Kubernetes的高速增长策略公司:蚂蚁金服地点:中国杭州行业:金融服务挑战蚂蚁金服于2014年10月正式成立,源自2004年推出的全球最大的在线支付平台支付宝。该公司还利用技术创新提供众多其他服务。随着支付宝处理其全球9亿多用户(通过其本地和全球合作伙伴)的交易量 - 在2017年双十一的高峰期每秒256,000笔交易,以及2018年双十一的总商品价值310亿美元 - 更不用说其他服务,蚂蚁金服面临着“全新的数据处理挑战”,负责存储和计算产品管理的Haojie Hang说。“我们看到了在这种规模下运营的三个主要问题:如何提供实时计算、存储和处理能力,例如为欺诈检测提供实时建议;如何在这些数据之上提供智能,因为数据太多,我们没有获得足够的洞察力;以及如何在应用程序级别,中间件级别,系统级别甚至芯片级别提供安全性。”为了向其客户提供可靠和一致的服务,蚂蚁金服在2014年初拥抱了容器,很快就需要为数据中心的数万个节点集群提供一个编排解决方案。解决方法在调查了几项技术后,该团队选择了Kubernetes作容器编排,以及其他一些CNCF项目,包括Prometheus、OpenTracing、etcd和CoreDNS。“2016年底,我们认为Kubernetes将成为事实上的标准,”Haojie说。“回顾过去,我们在合适的技术上做出了正确的选择。但是,我们需要将生产工作量从遗留基础设施转移到最新的Kubernetes平台,这需要一些时间,因为我们在可靠性和一致性方面非常谨慎。”所有核心财务系统都在2017年11月容器化,正在迁移到Kubernetes。影响“我们已经看到使用云原生技术在运营方面至少提高了十倍,这意味着你的产出可以增加十倍,”Haojie说。蚂蚁也为全球的业务合作伙伴提供完全集成的金融云平台,希望通过在服务创新和技术专业知识方面的丰富经验为下一代数字银行提供支持。Haojie表示,该团队还没有开始关注优化Kubernetes平台:“因为我们还处于超高速增长阶段,我们还没有采用节约成本的模式。”“2016年底,我们认为Kubernetes将成为事实上的标准。回顾过去,我们在合适的技术上做出了正确的选择。” - Haojie Hang,产品管理,蚂蚁金服作为跨国集团阿里巴巴的分拆公司,蚂蚁金服拥有1500亿美元的估值以及相匹配的规模。该金融科技创业公司于2014年成立,由全球最大的在线支付平台支付宝以及利用技术创新的众多其他服务组成。 支付宝为全球超过9亿用户(通过其本地和全球合作伙伴)处理的交易量惊人:2017年双11高峰期每秒256,000次,2018年双11总商品价值310亿美元。蚂蚁金服以“为世界带来更多平等的机会”为使命,致力于通过技术创新创建开放、共享的信用体系和金融服务平台。再加上其他业务的运营 - 如花呗在线信贷系统、借呗贷款服务以及3.5亿用户的蚂蚁森林绿色能源移动应用程序 - 蚂蚁金服面临着“全新的数据处理挑战”,负责存储和计算产品管理的Haojie Hang说。“我们看到了在这种规模下运营的三个主要问题:如何提供实时计算、存储和处理能力,例如为欺诈检测提供实时建议;如何在这些数据之上提供智能,因为数据太多,我们没有获得足够的洞察力;以及如何在应用程序级别,中间件级别,系统级别甚至芯片级别提供安全性。”为了应对这些挑战,为其客户提供可靠和一致的服务,蚂蚁金服在2014年采用了Docker容器化。但他们很快意识到需要为公司数据中心的数万个节点集群提供编排解决方案。“在今年的双11上,我们有很多节点运行Kubernetes,但与基础设施的整体规模相比,这仍然在进行中。” - Ranger Yu,全球技术合作伙伴关系与发展,蚂蚁金服该团队研究了几种技术,包括Docker Swarm和Mesos。“我们做了很多POC,但我们在生产系统方面非常谨慎,因为我们希望确保不会丢失任何数据。”Haojie说。“你不能让服务停工一分钟,甚至一秒钟也会产生非常非常大的影响。我们每天都在为中国和全球的消费者和企业提供可靠、一致的服务的前提下运营。”最终,Haojie说蚂蚁选择了Kubernetes,因为它满足了所有需求方框:一个强大的社区、“将在未来三到五年内是相关的技术”,以及与公司工程人才的良好匹配。“2016年底,我们认为Kubernetes将成为事实上的标准。”Haojie说。“回顾过去,我们在合适的技术上做出了正确的选择。但是,我们需要将生产工作量从遗留基础设施转移到最新的Kubernetes平台。我们花了很多时间学习,然后培训我们的员工在Kubernetes上很好地构建应用程序。”所有核心财务系统都在2017年11月进行了容器化,正在迁移到Kubernetes。蚂蚁的平台还利用了许多其他CNCF项目,包括Prometheus、OpenTracing、etcd和CoreDNS。“在今年的双11,我们有很多节点运行Kubernetes,但与基础设施的整体规模相比,这仍然在进行中。”全球技术合作伙伴关系与发展的Ranger Yu说。“我们非常感谢CNCF和这项令人惊叹的技术,这是我们在全球不断扩展所需要的。我们肯定会在未来更拥抱社区和开源。” - Haojie Hang,产品管理,蚂蚁金服这已经产生了影响。“云原生技术使我们在效率方面受益匪浅。”Haojie说。“总的来说,我们希望确保我们的基础设施敏捷和灵活,足以应对明天可能发生的工作。这就是目标。借助云原生技术,我们已经看到运营改进至少十倍,这意味着您可以将产出提高十倍。假设您正在一个人操作10个节点。使用云原生,明天你可以有100个节点。”蚂蚁也为世界各地的合作伙伴提供其金融云平台,希望通过在服务创新和技术专业知识方面的丰富经验为下一代数字银行提供支持。Haojie说团队还没有开始专注于优化Kubernetes平台,“因为我们还处于超高速增长阶段,我们还没有采用节约成本的模式。”在蚂蚁金服迁移到云原生期间,CNCF社区也是一项宝贵的资产。“如果你正在应用一项新技术,那么有一个社区与其他用户讨论技术问题是非常好的。”Haojie说。“我们非常感谢CNCF和这项令人惊叹的技术,这是我们在全球不断扩展所需要的。我们肯定会在未来更拥抱社区和开源。”“在中国,我们是金融和其他相关服务创新方面的北极星。我们肯定希望通过我们对技术的投资,确保在未来5到10年内保持领先地位。” - Haojie Hang,产品管理,蚂蚁金服事实上,该公司已经开始开源一些云原生中间件。“我们将非常积极主动,”Ranger说。“CNCF提供了一个平台,让每个人都可以加入或贡献组件。这是非常好的开源治理。”展望未来,蚂蚁团队将继续评估许多其他CNCF项目。该团队在中国建立了服务网络社区,汇集了许多中国公司和开发者,共同探讨该技术的潜力。“对于中国开发者和最终用户来说,服务网络非常吸引,因为我们现在有很多遗留系统在运行,它是一个理想的中间层,可以将所有内容粘合在一起,包括新旧系统。”Haojie说。“对于新技术,我们会密切关注它们是否会持久。”在蚂蚁,Kubernetes以优异的成绩通过了测试,团队希望其他公司也会效仿。“在中国,我们是金融和其他相关服务创新方面的北极星。”Haojie说。“我们肯定希望通过我们对技术的投资,确保在未来5到10年内保持领先地位。”KubeCon + CloudNativeCon中国论坛提案征集(CFP)2月22日截止KubeCon + CloudNativeCon 论坛让用户、开发人员、从业人员汇聚一堂,面对面进行交流合作。与会人员有 Kubernetes、Prometheus 及其他云原生计算基金会 (CNCF) 主办项目的领导,和我们一同探讨云原生生态系统发展方向。Open Source Summit中国提案征集(CFP)2月22日截止在Open Source Summit中国,与会者将共同合作及共享信息,了解最新和最有趣的开源技术,包括Linux、IoT、区块链、AI、网络等;并获得如何在开源社区中导向和引领的信息。大会日期:提案征集截止日期:太平洋标准时间 2 月 22 日,星期五,晚上 11:59提案征集通知日期:2019 年 4 月 8 日会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日提醒:这是一场社区会议。因此,让我们尽量避开公然推销产品和/或供应商销售宣传。KubeCon + CloudNativeCon和Open Source Summit赞助方案出炉KubeCon + CloudNativeCon和Open Source Summit多元化奖学金现正接受申请KubeCon + CloudNativeCon和Open Source Summit即将首次合体落地中国 ...

February 14, 2019 · 1 min · jiezi

CNCF案例研究:奇虎360

公司:奇虎360地点:中国北京行业:计算机软件挑战中国软件巨头奇虎360科技的搜索部门,so.com是中国第二大搜索引擎,市场份额超过35%。该公司一直在使用传统的手动操作来部署环境,随着项目数量的不断增加,管理层希望提高服务器资源的利用率。“我们希望解决为大量项目构建运营环境的效率问题。”搜索云平台项目发起人之一郭少巍说。解决方法大约三年前,360开始规划容器云服务。该公司现在拥有完整的PaaS解决方案,该解决方案围绕Kubernetes编排、Prometheus监控、gRPC、CoreDNS和Harbor仓库,此外还使用Wayne(开源)部署项目。“我们主要在搜索部门的开发和交付过程中推广容器技术,以提供业务效率和服务质量。”郭说。影响自从切换到由Kubernetes管理容器,开发者开始编写新项目的业务需求代码的设置时间从2-6小时减少到10-30分钟。将应用程序部署到容器云环境后,服务器成本是最初在360使用的物理机解决方案的55%,以及之前传统虚拟化解决方案(VPS)的82%,同时确保相同的性能和可用性。此外,最近在一个小时内完成了大规模的计算机房迁移,这个迁移以前需要一周才能完成。“Kubernetes提供了完整和高度集成的功能组件,我们只需少量的开发工作即可满足业务需求。”郭少巍,奇虎360搜索云平台项目发起人中国软件巨头奇虎360科技的搜索部门,so.com是中国第二大搜索引擎,市场份额超过35%。 该公司一直在使用传统的手动操作来部署环境,随着项目数量的不断增加,管理层希望提高服务器资源的利用率。“我们希望解决为大量项目构建运营环境的效率问题。”搜索云平台项目发起人之一郭少巍说。大约三年前,360开始规划容器云系统。“我们评估了三种编排技术,最终选择了Kubernetes,因为它提供了完整和高度集成的功能组件,”郭说,“我们只需要少量的开发工作就能满足业务需求。”“将服务容器化并投入我们的云平台之后,完成两个计算机房的迁移只需一个小时左右,这是效率的极大提升。”郭少巍,奇虎360搜索云平台项目发起人该公司现在拥有完整的PaaS解决方案,该解决方案围绕Kubernetes编排、Prometheus监控、Harbor仓库和Wayne(开源)部署项目构建。该平台在很大程度上依赖于开源组件,包括CNCF项目gRPC和CoreDNS,以及InfluxDB、Kafka和Ceph。“我们主要在搜索部门的开发和交付过程中推广容器技术,以提供业务效率和服务质量。”郭说。事实上,这些云原生技术带来了更高的效率。自从切换到由Kubernetes管理容器,开发者开始编写新项目的业务需求代码的设置时间已从2-6小时减少到10-30分钟。应用程序部署到容器云环境后,服务器成本是最初在360使用的物理机解决方案的55%,以及之前传统虚拟化解决方案(VPS)的82%,同时确保相同的性能和可用性。“过去两年,我们的部门经历了两次大规模的计算机房迁移。过去,对于运营和开发而言,这是非常痛苦的,因为他们必须密切合作一周左右才能完成整个在线服务的迁移。”郭少巍,奇虎360搜索云平台项目发起人此外,最近在一个小时内完成了大规模的计算机房迁移,这个迁移以前需要一周才能完成。“我们的部门在过去两年里经历了两次大规模的计算机房迁移,”郭说。“过去,对于运营和开发而言,这是非常痛苦的,因为他们必须密切合作一周左右才能完成整个在线服务的迁移。但是,在将服务容器化并投入云平台之后,完成两个房间的迁移只需要一个小时左右,这是效率的极大提升。”云平台仍处于早期阶段。“我们仍在推动FaaS的实施和业务应用,预计将有10-20%的业务迁移到平台。”郭说。“对于初创公司或技术实力较弱的公司,我认为选择成熟的开源解决方案将使公司能够专注于业务需求,避免在基本平台开发的早期投入太多资源。”郭少巍,奇虎360搜索云平台项目发起人最后,该公司开源其平台项目Wayne。Wayne基于Kubernetes,以满足企业管理需求。该团队也非常乐意与其他想要沿着云原生路径前进的组织分享其经验和建议。“对于创业公司或技术实力较弱的公司,我认为选择成熟的开源解决方案将使公司能够专注于业务需求,避免在基本平台开发的早期投入太多资源,”郭说。最终,努力是值得的。对于360,“业务效率大大提高。”KubeCon + CloudNativeCon中国论坛提案征集(CFP)2月22日截止KubeCon + CloudNativeCon 论坛让用户、开发人员、从业人员汇聚一堂,面对面进行交流合作。与会人员有 Kubernetes、Prometheus 及其他云原生计算基金会 (CNCF) 主办项目的领导,和我们一同探讨云原生生态系统发展方向。中国开源峰会提案征集(CFP)2月22日截止在中国开源峰会上,与会者将共同合作及共享信息,了解最新和最有趣的开源技术,包括Linux、IoT、区块链、AI、网络等;并获得如何在开源社区中导向和引领的信息。大会日期:提案征集截止日期:太平洋标准时间 2 月 22 日,星期五,晚上 11:59提案征集通知日期:2019 年 4 月 8 日会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日提醒:这是一场社区会议。因此,让我们尽量避开公然推销产品和/或供应商销售宣传。KubeCon + CloudNativeCon + Open Source Summit赞助方案出炉啦KubeCon + CloudNativeCon + Open Source Summit多元化奖学金现正接受申请

February 11, 2019 · 1 min · jiezi