Kubernetes 联邦机制介绍
Federation(联邦)
此页面解释了为什么以及如何使用联邦来管理多个Kubernetes集群。
- Why federation
- Setting up federation
- API resources
- Cascading deletion
- Scope of a single cluster
- Selecting the right number of clusters
- What’s next
为什么联邦
联合可以轻松管理多个群集。 它通过提供2个主要构件来实现:
-
跨群集同步资源:联邦可以使多个群集中的资源保持同步。 例如,可以确保多个群集中部署相同的程序。
-
跨群集发现:联邦提供了自动配置DNS服务器和负载均衡器与所有群集后端的功能。例如,您可以确保可以使用全局VIP或DNS记录来访问多个群集的后端。
联邦的一些其它用处如下:
- 高可用:通过在群集之间传播负载并自动配置DNS服务器和负载平衡器,联邦会将群集故障的影响降至最低。
- 避免提供者锁定(lock-in):通过更轻松地跨群集迁移应用程序,联邦会阻止群集提供者锁定(lock-in)。
除非有多个集群,否则联邦并没有任何用。你可能需要多个集群的一些原因有:
- 低延迟:让多个区域中的集群通过向距离它们最近的集群提供服务来最大限度地减少延迟。
- 故障隔离:最好有多个小型集群而不是一个单独人大型集群来进行故障隔离(例如:云提供商的不同可用区域中有多个集群)。
- 可扩展性:单个kubernetes集群具有可扩展性限制(大多数用户不应该这样做,更多详情请参阅Kubernetes Scaling和Performance Goals)。
- 混合云:可以在不同的云提供商或本地数据中心上拥有多个群集。
注意事项
虽然联邦有很多有吸引力的用处,但也有一些注意事项:
- 增加网络带宽和成本:联邦控制台监视所有群集以确保当前状态符合预期。如果集群在云提供商或不同云提供商的不同区域(regions)运行,这可能会导致显着的网络成本。
- 减少跨群集隔离:联邦控制台中的错误可能影响所有群集。通过将联邦控制台中的逻辑保持最简,可以缓解这一问题。 只要可能,它大部分都会委托给控制台的kubernetes集群中。 设计和实施也在安全方面做了很多考虑,并避免发生错误时多集群停机。
- 成熟度:联邦项目相对较新,不太成熟。 并非所有资源都可用,许多资源仍然是alpha状态。 Issue 88列举了团队忙于解决的系统已知问题。
混合云功能
Kubernetes集群联邦可以运行在不同云提供商(例如Google Cloud,AWS)和本地(例如OpenStack)中的集群。 Kubefed是部署联邦集群的推荐方式。
此后,您的API资源可以跨越不同的集群和云提供商。
设置联邦
为了能够联合多个集群,首先需要设置联邦控制台。按照设置指南进行设置。
API 资源
一旦设置了控制台,就可以开始创建联邦API资源。 以下指南详细解释了一些资源:
- Cluster
- ConfigMap
- DaemonSets
- Deployment
- Events
- Hpa
- Ingress
- Jobs
- Namespaces
- ReplicaSets
- Secrets
- Services
API参考文档列出了联邦apiserver支持的所有资源。
级联删除
Kubernetes 1.6版支持级联删除联邦资源。当从联邦控制台中删除资源时,还会删除所有基础集群中的相应资源。
在使用REST API时,级联删除在默认情况下不会启用。要启用它,请在使用REST API从联邦控制台中删除资源时设置DeleteOptions.orphanDependents=false选项。 使用kubectl delete可以在默认情况下启用级联删除。还可以通过运行kubectl delete --cascade=false来禁用它
注意:Kubernetes版本1.5包括对联邦资源子集的级联删除支持。
单个群集的范围
在诸如Google Compute Engine或Amazon Web Services之类的IaaS供应商中,虚拟机存在于zone 或AZ中。 我们建议Kubernetes集群中的所有虚拟机应位于相同的可用区域中,因为:
- 与具有单个全局Kubernetes集群相比,单点故障的数量更少。
- 与跨越可用区域的集群相比,更容易推断单区域群集的可用性属性。
- 当Kubernetes开发人员正在设计系统时(例如对延迟,带宽或相关故障进行假设),他们假设所有机器都位于单个数据中心或连接非常近。
建议在每个可用区域运行更少的虚拟机群集; 但可以在每个可用区域运行多个群集。
选择每个可用区域较少群集的理由是:
- 在某些情况下,在一个群集中有更多节点(更少的资源),可以改进Pod的装箱包装。
- 降低了运维开销(尽管随着操作工具和流程的成熟,优势没那么明显了)。
- 降低每个集群固定资源花费的成本,例如, apiserver虚拟机(但对于大中型集群整体集群成本的比例很小)。
有多个集群的原因包括:
- 严格的安全策略要求将一类工作与另一类工作隔离(但请参阅下面的分区集群)
- 测试群集canary 到新Kubernetes版本或其他群集软件。
选择正确数量的集群
选择Kubernetes集群的数量一般是不会变的,只是偶尔会重新审视(revisited occasionally)。 相比之下,集群中的节点数量和服务中的pod数量可能会随着负载和业务增长频繁变化。
要选择集群数量,首先需要确定您需要在哪些区域(region)进行部署,以便在Kubernetes上运行的服务为所有最终用户提供最低的延迟,(如果使用内容分发网络,则CDN- 托管内容不需要考虑)。 法律问题也可能会对此产生影响。 例如,一家拥有全球客户群的公司可能会决定在美国,欧盟,美联社和南非地区拥有集群。需要使用的区域的数量为R。
其次,确定在不影响整体业务的情况下,最多可以容忍有多少个群集同时不可用。将不最多不可用集群数量设为U.如果您不确定,那么U=1是一个不错的选择。
如果允许负载平衡在发生集群故障时将流量引导至任何区域,则至少需要较大的R或U + 1集群。 如果不是(例如,如果要确保发生群集故障时所有用户的延迟较低),则需要具有R *(U + 1)群集(每个R区域中的U + 1)。 无论如何,尝试将每个集群放入不同的区域。
最后,如果需要构建一个比Kubernetes的最大建议节点数量多的集群,则可能需要多个群集。 Kubernetes v1.3支持最多1000个节点的群集。 Kubernetes v1.8支持多达5000个节点的集群。
本文转移开源中国-Kubernetes 联邦机制介绍
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
文档解读 | K8S中的Pod和容器配置(三)
默认情况下,pod运行没有任何CPU和内存的限制,这意味着系统中的pod可以尽可能多的消耗CPU和内存在pod执行的节点。 基于多种原因,用户可能希望对系统中的单个pod的资源使用量进行限制。 例如: 集群中的每个节点都有2GB内存。集群管理员不同意pod需要超过2GB的内存,因为这个集群里面没有节点可以支持这个需求。为了预防pod永久不能调度到一个节点上,管理员拒绝超过2GB的pod。 在一个组织中两个团体分享一个集群,分别运行开发和生产工作负载。生产工作负载消耗8G内存,但是开发工作负载消耗512MB内存。管理员给每一个工作负载建立分离的命名空间,并且给每个命名空间限制。 用户可以创建一个资源消耗刚刚低于机器资源容量的pod。可用的剩余空间太小,但是每个节点都是如此对于整个集群是很昂贵的浪费。因此,集群管理员希望设置限制pod必须消耗其平均节点大小至少20%内存和CPU,为了提供统一的调度和限制浪费。 这个例子演示如何限制应用于一个Kubernetes命名空间控制每个pod最大/最小资源限制。此外,这个例子演示了在没有最终用户指定值的情况下如何将默认资源限制应用于pod。 有关详细...
- 下一篇
CentOS7配置Kubernetes(K8S)集群
1.物理环境 两台CentOS7机器,地址为192.168.0.51和192.168.0.61 1.1 机器信息 192.168.0.51 Master/etcd 192.168.0.61 Node 2. 部署主机 2.1 部署etcd yum -y install etcd yum安装的etcd默认配置文件在/etc/etcd/etcd.conf。编辑配置文件,更改为: # [member] ETCD_NAME=master ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_COUNT="10000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" #ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" #ETCD_MAX_SNAPSHOTS="5"...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8