k8s与云原生
一, 云原生
从字面意思上来看可以分成云和原生两个部分。
云是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。
原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性和分布式优势。
那具体要怎么利用呢,请参考下图:
微服务
微服务解决的是我们软件开发中一直追求的低耦合+高内聚, 微服务可以解决这个问题,微服务的本质是把一块大饼分成若干块低耦合的小饼,比如一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操作,小饼可以进一步拆分,比如负责接收外部数据的小饼可以继续分成多块负责接收不同类型数据的小饼,这样每个小饼出问题了,其它小饼还能正常对外提供服务。
DevOps
DevOps的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。我们现在开发和运维已经是一个团队了,但是运维方面的知识和经验还需要持续提高。
持续交付
持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。我们现在两周一个版本,每次上线之后都会给不同的用户造成不同程度的影响。
容器化
容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是docker和k8s。
所以你也可以简单地把云原生理解为:云原生 = 微服务 + DevOps + 持续交付 + 容器化
二, Docker
Docker 提供了一个可以运行你的应用程序的容器,它可以将应用以及依赖包到一个可移植的容器中,然后发布到任何 Linux机器上.Docker 扩展了 Linux 容器(Linux Containers)通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境,有点类似虚拟机的概念
虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。
优势总结:
敏捷的应用创建与部署:相比虚拟机镜像,容器镜像的创建更简便、更高效。
持续的开发、集成,以及部署:在快速回滚下提供可靠、高频的容器镜像编译和部署(基于镜像的不可变性)。
开发与运营的关注点分离:由于容器镜像是在编译/发布期创建的,因此整个过程与基础架构解耦。
跨开发、测试、产品阶段的环境稳定性:在笔记本电脑上的运行结果和在云上完全一致。
在云平台与 OS 上分发的可转移性:可以在 Ubuntu、RHEL、CoreOS、预置系统、Google 容器引擎,乃至其它各类平台上运行。
以应用为核心的管理: 从在虚拟硬件上运行系统,到在利用逻辑资源的系统上运行程序,从而提升了系统的抽象层级。
松散耦联、分布式、弹性、无拘束的微服务:整个应用被分散为更小、更独立的模块,并且这些模块可以被动态地部署和管理,而不再是存储在大型的单用途机器上的臃肿的单一应用栈。
资源隔离:增加程序表现的可预见性。
资源利用率:高效且密集。
三, 云原生核心–kubernetes
docker只是解决服务下层的问题,服务上层建筑如容器编排,服务发现等问题已经超越了docker的管辖。kubernetes应运而生了。
Kubernetes提供的编排和管理功能,轻松完成大规模容器部署,借助k8s的编排功能,用户可以构建跨多个容器的应用服务,实现跨集群调度,扩展容器,以及长期持续管理这些容器的健康状况等,并整合网络,存储,安全性,监控及其他服务,提供全面的容器基础架构
Kubernetes 满足了一系列产品内运行程序的普通需求,诸如:
协调辅助进程,协助应用程序整合,维护一对一“程序 – 镜像”模型。
挂载存储系统
分布式机密信息
检查程序状态
复制应用实例
使用横向荚式自动缩放
命名与发现
负载均衡
滚动更新
资源监控
访问并读取日志
程序调试
提供验证与授权
以上兼具平台即服务(PaaS)的简化和基础架构即服务(IaaS)的灵活,并促进了在平台服务提供商之间的迁移
k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行. k8s其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。那么,问题来了,要运维何用?这也就是云原生的devops概念吧