k8s in Rancher架构分析

本文涉及的产品
云解析 DNS,旗舰版 1个月
网络型负载均衡 NLB,每月750个小时 15LCU
全局流量管理 GTM,标准版 1个月
简介:

在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境如何选型?我们将逐步揭开这些神秘面纱,了解基础架构才能在遇到问题时进行有效的分析,进而准确的定位问题并解决问题,因为没有一种生产环境是完全可靠的。基于这个背景下,这次我们首先向大家介绍kubernetes in Rancher的架构。

 

从现在Rancher的发展节奏来看,Cattle引擎已经被定义成Rancher的基础设施引擎,而Rancher的基础设施服务都包括哪些呢?如下:

  • Networking,Rancher的统一网络服务,由rancher-net组件提供

  • Load Balancer,Rancher的负载均衡服务,目前来看套路基本上是基于Haproxy来构建

  • DNS Service,Rancher的DNS服务,主要是为了提供服务发现能力,由Rancher-DNS组件来提供

  • Metadata Service,Rancher的元数据服务,Metadata是我们通过compose编排应用时的利器,可以很灵活的像service中注入特定信息

  • Persistent Storage Service,持久化存储服务目前是由convoy来提供,而对于真正的后端存储的实现Rancher还有longhorn没有完全放出

  • Audit Logging,审计日志服务是企业场景中比较重要的一个属性,目前是集成在Cattle内部没有被完全分离出来


所以Rancher在接入任何一种编排引擎,最终都会把基础设施服务整合到该引擎中,Kubernetes in Rancher的做法正是如此。

 

Kubernetes各个组件的角色可以归为三类即Master、Minion、Etcd,Master主要是kube-apiserver、kube-scheduler、kube-controller-manager,Minion主要是kubelet和kube-proxy。Rancher为了融合k8s的管控功能,又在Master中添加了kuberctrld、ingress-controller、kubernetes-agent三个服务来打通Rancher和K8s,同时每个node上都会依赖Rancher提供的Rancher-DNS、Rancher-metadata、Rancher-net这些基础设施服务。


wKiom1h26wWRNmA2AABMf9fexjg109.jpg


由于K8s是基于Cattle引擎来部署,所以在K8s在部署完成之后,我们可以通过Link Graph来很清晰的看到整体的部署情况。


wKioL1h26xTiLBYLAAAviPtuXzQ438.jpg


整个服务基于Cattle引擎的Rancher-compose构建,新增节点后自动添加kubelet和kube-proxy服务(此处利用了Global Label的特性),各个组件都添加了health-check机制,保证一定程度的高可用。考虑到etcd最低1个最多3个节点,单台agent host就可以部署K8s,三节点agent host则更合理些。

 

K8s集群完成部署后,我们就可以在其中添加各种应用服务,目前Rancher支持管理K8s的service、pod、replication-controller等,我们可以用一张图来形象得描述一下应用视图结构。


wKioL1h26y_w7jZKAABbvG5TITw393.jpg


rancher-net组件会给每个pod分配一个IP,Rancher-DNS则替代了K8s的Skydns来实现服务发现,在pod的容器内部依然可以访问Rancher-metadata服务来获取元数据信息。除了这三个基础服务外,我们之前提到的kuberctrld、ingress-controller、kubernetes-agent也在其中扮演者重要角色。

 

无论是K8s还是Rancher,其中一些抽象对象(如Rancher的stack/service,或者K8s的serivice/pod)在属性更新时都会有events产生,在任何服务入口来更改这些抽象对象都会有events产生,所以要保证Rancher和k8s能够互相感知各自对象的更新,那么kubernetes-agent就应运而生了。


wKioL1h260jRLJp_AADHQMEY7j0964.png


诸如K8s的namespaces、services、replicationcontrollers、pods等对象的信息变更会及时通知给Rancher,而Cattle管理的Host资源出现信息变更(诸如host label的变动)也会通知给K8s。

 

简单得说kubernetes-agent是为了维护Rancher和K8s之间的对象一致性,而真正要通过Rancher来创建K8s中的service或者pod之类的对象,还需要另外一个服务来实现,它就是kubectrld,直观的讲它就是包装了kubectrl,实现了其中kubectl create/apply/get 等功能。


wKiom1h2612xUKKEAAA_-cplj3M571.jpg


所有的K8s对象创建请求都会走cattle引擎,cattle会把请求代理到kubectrld启动的一个api服务。除此之外,还会监听Rancher events来辅助实现相关对象的CRUD。

 

K8s上创建的service如需对外暴露访问,那么必然会用到LoadBalancer Type和Ingress kind,注意K8s概念下的LoadBalancer和Ingress略有不同,LoadBalancer的功能主要关注在L4支持http/tcp,而Ingrees则是要实现L7的负载均衡且只能支持http。K8s 的LoadBalancer需要在K8s中实现一个Cloud Provider,目前只有GCE,而Rancher则维护了自己的K8s版本在其中提供了Rancher Cloud Provider。对于Ingress则是提供了Ingress-controller组件,它实现了K8s的ingress框架,可以获取ingress的创建信息并执行相应的接口。当然最终这两者都会调用Cattle api来创建Rancher的负载均衡,且都是通过Haproxy完成负责均衡功能。


wKiom1h263HBUKibAADjAr72YbY688.png


以目前K8s社区的火热势头,Rancher应该会持续跟进并不断更新功能优化架构,待到Rancher1.2发布之后,CNI的支持会是一个里程碑,到那时Kubernetes in Rancher也会更加成熟,一起向着最好用Kubernetes发行版大踏步的前进。




本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1891265
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
344
分享
相关文章
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
681 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
53 19
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
浙江霖梓早期基于 Apache Doris 进行整体架构与表结构的重构,并基于湖仓一体和查询加速展开深度探索与实践,打造了 Doris + Paimon 的实时/离线一体化湖仓架构,实现查询提速 30 倍、资源成本节省 67% 等显著成效。
湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构
体育赛事即时比分 分析页面的开发技术架构与实现细节
本文基于“体育即时比分系统”开发经验总结,分享技术实现细节。系统通过后端(ThinkPHP)、前端(Vue.js)、移动端(Android/iOS)协同工作,解决实时比分更新、赔率同步及赛事分析展示等问题。前端采用 Vue.js 结合 WebSocket 实现数据推送,提升用户体验;后端提供 API 支持比赛数据调用;移动端分别使用 Java 和 Objective-C 实现跨平台功能。代码示例涵盖比赛分析页面、API 接口及移动端数据加载逻辑,为同类项目开发提供参考。
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
一文分析架构思维之建模思维
软件里的要素不是凭空出现的,都是源于实际的业务。本文从软件设计本源到建模案例系统的介绍了作者对于建模的思维和思考。
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
384 60

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等