摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。
在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这些基础设施服务。
由于K8s是基于Cattle引擎来部署,所以在K8s在部署完成之后,我们可以通过Link Graph来很清晰的看到整体的部署情况。
整个服务基于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等,我们可以用一张图来形象得描述一下应用视图结构。
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就应运而生了。
诸如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 等功能。
所有的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完成负责均衡功能。
以目前K8s社区的火热势头,Rancher应该会持续跟进并不断更新功能优化架构,待到Rancher1.2发布之后,CNI的支持会是一个里程碑,到那时Kubernetes in Rancher也会更加成熟,一起向着最好用Kubernetes发行版大踏步的前进。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/33022.html
摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。 在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境...
摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。 在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境...
摘要:组件会给每个分配一个,则替代了的来实现服务发现,在的容器内部依然可以访问服务来获取元数据信息。的需要在中实现一个,目前只有,而则维护了自己的版本在其中提供了。 在Rancher 1.0版本开始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多编排引擎的支持,很多朋友就此产生了疑惑,诸如Cattle引擎和这几个之间到底什么关系?每种引擎是如何支持的?自家的业务环境...
摘要:年月日,企业级管理平台以下简称宣布与英国芯片设计公司合作,以满足客户对物联网和边缘计算的部署需求。此次发布的用于物联网平台和边缘节点的平台包含年月推出的端口以及。和为物联网边缘计算数据中心节点创建了一个基于的计算平台。 2018年12月11日,企业级Kubernetes管理平台Rancher Labs(以下简称Rancher)宣布与英国芯片设计公司Arm合作,以满足客户对物联网和边缘计...
摘要:年月日,业界领先的容器管理软件提供商以下简称宣布推出轻量级发行版,这款产品专为在资源有限的环境中运行的研发和运维人员设计。此次发布的项目,将满足在边缘计算环境中运行在和处理器上的小型易于管理的集群日益增长的需求。2019年2月26日,业界领先的容器管理软件提供商Rancher Labs(以下简称Rancher)宣布推出轻量级Kubernetes发行版K3s,这款产品专为在资源有限的环境中运行...
阅读 3733·2021-10-15 09:42
阅读 2592·2021-09-03 10:50
阅读 1626·2021-09-03 10:28
阅读 1788·2019-08-30 15:54
阅读 2509·2019-08-30 12:46
阅读 401·2019-08-30 11:06
阅读 2817·2019-08-30 10:54
阅读 521·2019-08-29 12:59