在IT项目的运行过程中,部署是必不可少的环节。在运维的方面,我们也经历了好几个阶段,例如:
一、传统部署阶段
在这个阶段的时候,服务器就那么一台或几台,没有资源划分的概念,所有需要安装部署的组件和服务全部向这个服务器上进行部署即可,有rmp安装,有tar包安装等。久而久之我们能发现每一台服务器上的组件和服务增长越来越来,梳理起来也越来越困难。往往一个服务或者组件占用CPU或者内存或者硬盘太多的话,就会影响到其他的服务。
二、虚拟化部署阶段
为了解决一台服务器上的服务和组件乱七八糟,从而进入了虚拟化部署阶段,也就是传统的一台服务器,我们在这台服务器上安装多组虚拟机操作系统,然后进行分类,例如A组虚拟机部署缓存和持久化等服务与组件,B组虚拟机部署web服务等。这样子可以达到资源分离,同时由于业务上来看分的比较开,部署比较单纯。但是这样子在服务器上还是会出现资源利用不合理,我们需要经常手动调整虚拟机的配置
三、容器化部署阶段
近年来,随着docker的流行,运维部署逐渐进入到了容器化部署阶段,在这个阶段里面部署非常简单,只需要启动一个对应的docker容器即可。以前部署一个服务可能需要10分钟,使用docker的部署可能1分钟不到就能搞定。
那么进入到容器化阶段的时候,我们又会遇到新的难题,例如:
1、一台服务器的docker服务太多,杂乱无章 2、所有的docker容器没有充分利用好服务器的资源。 3、没有地方统一管理和可视化观察docker的运行情况。
要解决以上的问题,后来市场上就出现了mesos和docker swarm。2014年谷歌利用自己的技术优势,使用go语言重写了Brog系统并且进行开源,以此命名为:Kubernetes。从此Kubernetes就诞生了。
那么什么是kubernetes呢?
官方的解释是: Kubernetes是一个可以移植、可扩展的开源平台,使用声明式的配置并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中(类似的还有 docker swarm / mesos等),Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。
那么kubernetes提供哪些特性呢?
1、服务发现和负载均衡
Kubernetes 可以通过 DNS 名称或 IP 地址暴露容器的访问方式。并且可以在同组容器内分发负载以实现负载均衡
2、存储编排
Kubernetes可以自动挂载指定的存储系统,例如 local stroage/nfs/云存储等
3、自动发布和回滚
您可以在 Kubernetes 中声明您期望应用程序容器应该达到的状态,Kubernetes将以合适的速率调整容器的实际状态,并逐步达到最终期望的结果。
4、Kubernetes提供如下自愈能力:
1、重启已经停机的容器 2、替换、kill 那些不满足自定义健康检查条件的容器 3、在容器就绪之前,避免调用者发现该容器
5、密钥及配置管理
Kubernetes可以存储和管理敏感信息(例如,密码、OAuth token、ssh密钥等)。您可以更新容器应用程序的密钥、配置等信息,而无需: 1、重新构建容器的镜像 2、在不合适的地方暴露密码信息
这里补充下:
1、kubernetes的运行依赖docker容器,所以kubernetes的运行是在容器层面,不是在硬件方面。 2、kubernetes提供统一的服务资源管理,可以指定为某些服务分配cpu和内存等,同时还可以管理容器运行的资源限制。 3、kubernetes不限制运行程序的类型。包括不仅限于:有状态、无状态等应用 4、在CI/CD的流程里面,kubernetes仅提供部署,不提供镜像的构建和分发。 5、kubernetes部署的服务不限制程序开发语言,例如:java、go、php、.net等开发语言都可以用 6、kubernetes仅提供容器级别的修复,不提供服务器级别的修复。因为他仅仅是管理资源。不参与服务器操作系统及硬件的管理。
还没有评论,来说两句吧...