标签:扩展 serve 要求 谷歌 在线扩容 降级 就是 持久化 日志
Kubernetes是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本,主要功能有:
Kubernetes最初源于?歌内部的Borg, 提供了?向应?的容器集群部署和管理系统。 Kubernetes的?标旨在消除编排物理/虚拟计算, ?络和存储基础设施的负担, 并使应?程序运营商和开发?员完全将重点放在以容器为中?的原语上进??助运营。 Kubernetes 也提供稳定、 兼容的基础(平台) , ?于构建定制化的workflows 和更?级的?动化任务。Kubernetes 具备完善的集群管理能?, 包括多层次的安全防护和准?机制、 多租户应??撑能?、 透明的服务注册和服务发现机制、 内建负载均衡器、 故障发现和?我修复能?、 服务滚动升级和在线扩容、 可扩展的资源?动调度机制、多粒度的资源配额管理能?。 Kubernetes 还提供完善的管理?具, 涵盖开发、 部署测试、 运维监控等各个环节。
Borg是?歌内部的?规模集群管理系统, 负责对?歌内部很多核?服务的调度和管理。 Borg的?的是让?户能够不必操
?资源管理的问题, 让他们专注于??的核?业务, 并且做到跨多个数据中?的资源利?率最?化。
Borg主要由BorgMaster、 Borglet、 borgcfg和Scheduler组成, 如下图所示:
(图片来源于网络)
borgcfg是Borg的命令行工具,用于跟Borg系统交互,一般通过一个配置文件来提交任务。
Federation提供可用去的集群
Kubernetes设计理念和功能类似Linux的分层架构,如下图:
Kubernetes系统API的设计有以下?条原则:
1、所有API应该是声明式的,声明式的操作, 相对于命令式操作,对于重复操作的效果是稳定的,这对于容易出现数据丢失或重复的分布式环境来说是很重要的。另外,声明式操作更容易被?户使?,可以使系统向?户隐藏实现的细节,隐藏实现的细节的同时,也就保留了系统未来持续优化的可能性。此外,声明式的API,同时隐含了所有的API对象都是名词性质的,例如Service、Volume这些API都是名词,这些名词描述了?户所期望得到的?个?标分布式对象。
2、API对象是彼此互补?且可组合的。 这??实际是?励API对象尽量实现?向对象设计时的要求, 即“?内聚, 松耦合”, 对业务相关的概念有?个合适的分解, 提?分解出来的对象的可重?性。 事实上, Kubernetes这种分布式系统管理平台, 也是?种业务系统, 只不过它的业务就是调度和管理容器服务。
3、?层API以操作意图为基础设计。 如何能够设计好API, 跟如何能??向对象的?法设计好应?系统有相通的地?,?层设计?定是从业务出发, ?不是过早的从技术实现出发。 因此, 针对Kubernetes的?层API设计, ?定是以Kubernetes的业务为基础出发, 也就是以系统调度管理容器的操作意图为基础设计。
4、低层API根据?层API的控制需要设计。 设计实现低层API的?的, 是为了被?层API使?, 考虑减少冗余、 提?重?性的?的, 低层API的设计也要以需求为基础, 要尽量抵抗受技术实现影响的诱惑。
5、尽量避免简单封装, 不要有在外部API?法显式知道的内部隐藏的机制。 简单的封装, 实际没有提供新的功能, 反?增加了对所封装API的依赖性。 内部隐藏的机制也是?常不利于系统维护的设计?式, 例如StatefulSet和ReplicaSet, 本来就是两种Pod集合, 那么Kubernetes就?不同API对象来定义它们, ?不会说只?同?个ReplicaSet, 内部通过特殊的算法再来区分这个ReplicaSet是有状态的还是?状态。
6、API操作复杂度与对象数量成正?。 这?条主要是从系统性能?度考虑, 要保证整个系统随着系统规模的扩?, 性能不会迅速变慢到?法使?, 那么最低的限定就是API的操作复杂度不能超过O(N), N是对象的数量, 否则系统就
设计理念不具备?平伸缩性了。
7、API对象状态不能依赖于?络连接状态。 由于众所周知, 在分布式环境下, ?络连接断开是经常发?的事情, 因此要保证API对象状态能应对?络的不稳定, API对象的状态就不能依赖于?络连接状态。
8、尽量避免让操作机制依赖于全局状态, 因为在分布式系统中要保证全局状态的同步是?常困难的。
Kubernetes指南-倪朋飞
Kubernetes-handbook-jimmysong-20181218
标签:扩展 serve 要求 谷歌 在线扩容 降级 就是 持久化 日志
原文地址:https://www.cnblogs.com/wlbl/p/10652823.html