K8S是什么
- 生产级别的容器编排系统
- 自动化的容器部署、扩展和管理
- Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统。
- 它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。
- Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳 创意和实践。
特性
Endpoint Slices
Kubernetes 集群中网络端点的可扩展跟踪。
服务发现与负载均衡
无需修改您的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载平衡。
自动装箱
根据资源需求和其他约束自动放置容器,同时不会牺牲可用性,将任务关键工作负载和尽力服务工作负载进行混合放置,以提高资源利用率并节省更多资源。
IPv4/IPv6 双协议栈
Allocation of IPv4 and IPv6 addresses to Pods and Services
Service 拓扑
基于集群拓扑的服务流量路由。
自我修复
重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。
自动化展开和回滚
Kubernetes 会逐步推出针对应用或其配置的更改,确保在监视应用程序运行状况的同时,不会终止所有实例。如果出现问题,Kubernetes 会为您回滚更改。充分利用不断成长的部署解决方案生态系统。
水平伸缩
使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行伸缩。
运维部署的时代变迁
传统部署时代:
早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高。
虚拟化部署时代:
作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。
因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。
每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
容器部署时代:
容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进行移植。
容器因具有许多优势而变得流行起来。下面列出了容器的一些好处:
1、 敏捷应用程序的创建和部署:与使用VM镜像相比,提高了容器镜像创建的简便性和效率;
2、 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),提供可靠且频繁的容器镜像构建和部署;
3、 关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像,从而将应用程序与基础架构分离;
4、 可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号;
5、 跨开发、测试和生产的环境一致性:在便携式计算机上与在云中相同地运行;
云和操作系统分发的可移植性:
可在 Ubuntu、RHEL、CoreOS、本地、Google Kubernetes Engine 和其他任何地方运行。
6、 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行OS到使用逻辑资源在OS上运行应用程序;
7、 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理-而不是在一台大型单机上整体运行;
8、 资源隔离:可预测的应用程序性能;
9、 资源利用:高效率和高密度;