kubernetes支持在多种平台部署,可在私有云,公有云,混合云,openstack、openshift、VMware vSphere,VMware Workstation,虚拟机,物理机等环境部署。
拥有强大的集群扩展能力,可以根据业务规模自动增加和缩减主机节点的数量,确保服务可以承受大量并发带来的压力,保证业务稳定运行。
可以按照用户需要调度pod,例如保证Pod只在资源足够的节点上运行,会尝试把同一功能的pod分散在不同的节点上,还会尝试平衡不同节点的资源使用率等。
拥有多种灾备解决方案,支持备份和容灾,出现故障可以达到秒级切换,保证线上业务不受影响;
支持多种高可用解决方案,如keepalive+nginx,keepalived+haproxy等,可以使访问流量分发到不同的主机节点,减轻节点压力,如果某个节点出现故障,可以实现妙级切换,达到高可用,保证业务不中断。
支持多种持久化存储解决方案,保证数据可以得到很好的备份,降低用户数据丢失的风险,kubernetes中可使用的存储方案如下:
1. 本地存储:emptyDir,hostPath
2. 网络连接类存储:
1. SAN(存储局域网络):iSCSI
2. NAS(网络附加存储):nfs,cifs
3. 分布式存储:glusterfs,ceph-块级别的存储,cephfs-文件系统级别的存储
4. 云存储:Azure Disk等
通过管理kubernetes的控制器和service等,可以实现灰度发布,蓝绿部署,金丝雀发布等,达到业务的快速部署和回滚等操作,用以满足不同客户的不同升级需求。
根据访问的流量压力,可以实现pod的水平扩容和缩减,达到秒级扩容,让pod始终处于满足业务正常运行时所需的数量即可,避免了资源的浪费。
根据流量进行业务组件的扩缩容,可节省机器资源。
DevOps是一套完整的运维开发流程,可以实现快速的构建、测试和发布软件,整个流程包括敏捷开发->持续集成->持续交付->持续部署->DevOps。
通过 Kubernetes,我们可以实现容器在多个计算节点上的统一调度,可以将容器对接到持久存储、虚拟网络,还可以实现弹性伸缩等,提高了产品的迭代速度。
通过service可以实现服务发现
支持4层和7层负载均衡
支持安全可靠的https协议和证书认证签发
可实现负载均衡,自修复,自动关联
对于配置中心,K8S提供了configMap,可以在容器启动的时候,将配置注入到环境变量或者 Volume 里面。
通过控制器创建指定数量的pod副本,通过hpa可以实现pod应用的水平扩容和回收
支持容器,集群和节点级别的监控,提供全面的监控指标,多途径的报警方式及可视化的监控报表
支持节点级别的亲和性调度,支持异地数据备份和故障恢复。
Jenkins Master和Jenkins Slave以Pod形式运行在Kubernetes集群的Node上,当Jenkins Master出现故障时,Kubernetes会自动创建一个新的Jenkins Master容器,并且将Volume分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。
合理使用资源,每次运行Job时,会自动创建一个Jenkins Slave,Job完成后,Slave自动注销并删除容器,资源自动释放,而且Kubernetes会根据每个资源的使用情况,动态分配Slave到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待该节点的情况。
当Kubernetes集群的资源严重不足而导致Job排队等待时,可以很容易的添加一个Kubernetes Node到集群中,从而实现扩展。
支持公有云,私有云,混合云,多重云(multi-cloud)
可根据业务流量情况快速扩展kubernetes集群的节点数量。
自动发布
自动重启
自动复制
自动扩展
利用复合应用保证应用和容器一对一的模型。
早期,应用程序在物理服务器上运行。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且许多物理服务器的维护成本也很高。
允许你在单个物理服务器的CPU 上运行多个虚拟机(VM)。
虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。
因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。
每个VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
容器类似VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。
容器与VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和OS分发进行移植。容器因具有许多优势而变得流行起来。
敏捷应用程序的创建和部署:与使用VM镜像相比,提高了容器镜像创建的简便性和效率。
持续开发,集成和部署:通过快速简单的回滚(由于镜像不可变性),提供可靠且频繁的容器镜像构建和部署。
关注开发与运维的分离:在构建/发布时创建应用程序容器镜像,不在部署时创建应用程序容器镜像,从而将应用程序与基础架构分离。
可观察性:
跨开发,测试和生产的环境一致性:在便携式计算机上与在云中相同地运行
云和操作系统分发的可移植性:可在 Ubuntu. RHEL. CoreOS. 本地. Google Kubernetes Engine 和其他任何地方运行。
以应用程序为中心的管理: 提高抽象级别,从在虚拟硬件上运行 OS 到在 OS 上运行应用程序。
松散耦合,分布式,弹性,解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理,而不是在一台大型单机上整体运行。
资源隔离:可预测的应用程序性能
资源利用:高效率和高密度