k8s是一个便携、可扩展、开源的用来管理容器化的工作负载和服务,并有利于声明式配置和自动化,他有一个大的、快速发展的生态系。
服务部署历史:
传统部署:更早前,服务部署在物理机上,无法为每个应用定义资源量,资源边界就变成了问题。如果多个应用运行在机器上,某个应用占用太多资源,其他应用不能良好运行。解决方法只有把应用部署到不同物理机,但是难扩展且维护机器成本高
虚拟化部署:作为上面的解决方案,运行多个虚拟机在一个物理机上,虚拟机保证应用之间的隔离,并提供一定的安全性因为各应用间不应该自由访问。虚拟部署更好的利用物理机资源和更好的可扩展性,因为应用可以轻松的添加和更新,并降低了成本等。虚拟机是通过虚拟化技术运行在物理机器上的完整的计算机(包括硬件)。
容器部署:容器是轻量级的,比VM更简单,但在隔离性方面很宽松,因为共享操作系统。一个容器有自己的文件系统、CPU、内存、进程空间,他们与底层基础架构分离时可以在云上移植和扩展。
容器的流行因为下列好处:
- 敏捷应用的创建和部署:与VM镜像相比,增加简易型和效率
- 持续开发、集成和部署:通过快速简单的回滚来提供可靠和频繁的容器镜像创建
- Dev和Ops分离的顾虑:创建应用容器镜像在编译的时间大于部署时间,从而将应用程序与基础设施隔离
- 不仅观测操作系统级别的信息和指标,还有应用程序的健康和信号
5.开发、测试和生产环境一致性:在电脑上和在云上运行一致。云上不同OS分发一致性 - 提高抽象层 从在虚拟hardware上运行一个os 到 在一个os使用逻辑资源上运行一个应用
- 低耦合、分布式、弹性、解放微服务:应用程序被分解的更小,独立的部分,可以动态部署和管理,而不是在一个机器上运行单独的栈。
- 资源隔离:可预测的应用程序性能
- 资源利用:高效率和高密度
为什么需要k8s以及他能做什么
容器能很好的管理你的应用,但是在生产环境,如果你的服务挂掉,要怎样保证再创建一个新的? 这就要用到k8s, k8s提供了一个弹性分布式系统框架,他关注你的扩缩请求,故障转移、部署模式等,例如可以简单的进行金丝雀发布,
提供:
1. 服务分发和负载均衡:k8s通过DNSname或自己的IP去暴露容器服务,如果容器流量过高,将做负载均衡、分发流量,所以deployment是稳定的
2. 存储编排:允许自动挂载存储系统。比如本地存储或远程存储
3. 自动部署和回滚:为你的任务定义期望状态,它可以以受控速率将实际状态改变为所需状态,例如可以自动创建新的容器或移除已存在容器,将资源用于新容器
4. 自动装箱:可以为容器自定义所需的CPU、MEM资源,如果指定了,K8S可以更好的分发管理容器资源
5. 自恢复:将重启失败的容器,kill掉不响应healthCheck的容器,在ready前不像client通知
6. 秘钥和配置管理:K8s支持存储和管理敏感信息,你可以不重新编译镜像并不暴露秘钥和配置而部署更新秘钥和管理配置。
k8s不是什么
- 不限定支持的应用程序类型,k8s旨在支持各种各样的工作负载,包括无状态,有状态和数据处理工作负载。如果一个应用可以跑在容器上,那一定可以在k8S上
- 不部署源代码,不编译你的代码
- 不提供应用层的service,比如中间件,数据处理框架(Spark),数据库(Mysql), 缓存,也不是集群存储系统(Ceph),这些组件可以运行在K8s上并通过便携式机制(开放式服务代理)被K8s上的应用访问
- 不提供日志、监控等方案,只提供一些集成、收集和导出指标的机制。
- 不提供授权或配置语言系统,提供了一个声明性API,可以通过任意形式的声明性规范来实现
- 不提供或采用任何全面的机器配置,维护,管理或自我修复系统
结语
k8s不仅仅是容器编排系统,他消除了编排的需要。编排的技术定义是执行已定义的工作流程(step1,step2,step3)。而K8s由一组独立、可组合的控制流程构成,并去不断的驱使当前状态变成期望状态,集中控制也是非必须的,这使得系统更易于使用,功能更强大,更具弹性,并且可扩展。
网友评论