传统的部署方式,虚拟化部署方式和容器部署方式。
容器的优势如下:
1.敏捷的应用程序创建和部署:与VM映像的使用相比,容器映像的创建更加容易和高效。
2.持续开发、集成和部署:提供可靠和频繁的容器映像构建和部署,并提供快速和轻松的回滚(由于映像的不变性)。
3.跨开发、测试和生产的环境一致性:在笔记本电脑上运行与在云中运行相同。
4.开发和操作关注点分离:在构建/发布时而不是部署时创建应用程序容器映像,从而将应用程序与基础架构分离。
5.可观测性不仅显示操作系统级的信息和度量,还显示应用程序的运行状况和其他信号。
6.云和操作系统分布的可移植性:运行在Ubuntu、RHEL、CoreOS、prem、Google Kubernetes引擎和其他任何地方。
7.以应用程序为中心的管理:将抽象级别从在虚拟硬件上运行操作系统提升到使用逻辑资源在操作系统上运行应用程序。
8.松散耦合、分布式、弹性、*的微服务:应用程序被分解成更小的、独立的部分,可以动态部署和管理,而不是运行在一台大型单用途机器上的单一堆栈。
9.资源隔离:可预测的应用程序性能。
10.资源利用:效率高、密度大。
k8s可以做什么?
服务发现和负载平衡
Kubernetes可以使用DNS名称或使用自己的IP地址公开容器。如果到容器的流量很高,Kubernetes可以负载平衡并分配网络流量,从而使部署稳定。
存储编排
Kubernetes允许您自动挂载您选择的存储系统,例如本地存储,公共云提供商等。
自动部署和回滚
您可以使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化Kubernetes来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
-
自动垃圾箱包装
您为Kubernetes提供了一个节点集群,可用于运行容器化任务。您告诉Kubernetes每个容器需要多少CPU和内存(RAM)。 Kubernetes可以将容器安装到您的节点上,以充分利用您的资源。 -
自我修复
Kubernetes重新启动出现故障的容器,替换容器,杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不会将其通告给客户端。 -
机密和配置管理
Kubernetes允许您存储和管理敏感信息,例如密码,OAuth令牌和ssh**。您可以部署和更新机密和应用程序配置,而无需重建容器映像,也无需在堆栈配置中公开机密。
k8s不做什么?
Kubernetes不是一个传统的,包罗万象的PaaS(平台即服务)系统。由于Kubernetes在容器级别而不是在硬件级别运行,因此它提供了PaaS产品共有的一些普遍适用的功能,例如部署,扩展,负载平衡,日志记录和监视。但是,Kubernetes并不是单片的,并且这些默认解决方案是可选的和可插入的。 Kubernetes提供了构建开发人员平台的基础,但是在重要的地方保留了用户的选择和灵活性。
Kubernetes:
不限制支持的应用程序类型。 Kubernetes旨在支持极其多种多样的工作负载,包括无状态,有状态和数据处理工作负载。如果应用程序可以在容器中运行,那么它应该可以在Kubernetes上很好地运行。
不部署源代码,也不构建您的应用程序。持续集成,交付和部署(CI / CD)工作流取决于组织的文化和偏好以及技术要求。
不提供应用程序级别的服务,例如中间件(例如,消息总线),数据处理框架(例如,Spark),数据库(例如,mysql),缓存或群集存储系统(例如,Ceph)作为内置服务。这样的组件可以在Kubernetes上运行,和/或可以由Kubernetes上运行的应用程序通过可移植机制(例如Open Service Broker)进行访问。
不指示日志记录,监视或警报解决方案。它提供了一些集成作为概念证明,并提供了收集和导出指标的机制。
不提供也不要求配置语言/系统(例如jsonnet)。它提供了一个声明性API,可以通过任意形式的声明性规范作为目标。
不提供也不采用任何全面的机器配置,维护,管理或自我修复系统。
另外,Kubernetes不仅仅是一个编排系统。实际上,它消除了编排的需要。编排的技术定义是执行定义的工作流程:首先执行A,然后执行B,然后执行C。相反,Kubernetes包含一组独立的,可组合的控制过程,这些过程连续地将当前状态驱动到提供的所需状态。从A到C的方式无关紧要。也不需要集中控制。这使得系统更易于使用,并且功能更强大,更健壮,更具弹性和可扩展性。