为什么要用容器云

为什么要用容器云

  • 容器云与虚拟机云的对比
  • 容器云是怎么实现的
    • k8s的架构
    • k8s的核心概念
      • pod
      • volume
      • deployment
      • service
      • namespace
      • k8s的API
  • 行业云-凤皇云
    • 凤皇云相对于其他云平台的核心优势

容器云与虚拟机云的对比

云的好处就不多说了:节约资源、实现备份。。。
容器云相对于虚拟机云来说的好处:
1.低成本与轻量化:虚拟机云是以操作系统为中心,在虚拟主机上控制业务应用;而容器云是是以应用为核心,在宿主机操作系统上直接控制业务应用,从而避免控制很多个虚拟主机。占用的资源变少了,成本自然就降低了。
2.持续部署与测试,更轻量,移植性更强:容器云消除了线上与线下环境的差异,开发完成后通过封装着的完整环境和应用的镜像进行迁移,测试部署人员可以直接对此镜像进行操作,且容器构建速度更快,资源消耗更少
3.高可用以及抗毁接替:容器的环境比较标准和一致,所以一旦版本出现故障可以快速回滚。
4.适配性:容器最大的好处就是适配性,很多的云平台都支持容器。
5.高资源利用率与隔离:在性能方面容器云接近原生,在隔离方面虚拟机属于系统级隔离,而容器云属于进程级隔离,更加精准,避免浪费其他资源。

容器云是怎么实现的

我们常用的容器就是docker,通过docker可以做到开发环境无缝迁移到生产环境。在生产环境中经常做的就是部署成千上万的服务,然后在这个基础上做负载均衡之类的事情,有了docker就能通过部署对应服务的容器镜像完成。有了docker还不够,因为我们需要管理成千上万的容器,于是就有了容器调度工具比如k8s之类的,我们可以做到监控容器运行状态,然后自动重启一些坏掉的容器,相当于做了热备份。把容器和容器调度跑到云端,这样结合起来的服务就是容器云。
容器云是 PaaS 层的云交付模式。
所以容器云服务最核心的一个功能是kubernetes,也就是k8s。它有哪些功能呢?
1.自动化容器的部署和复制。
2.随时扩展或收缩容器规模,简单来说就是弹性扩缩容。
3.将容器组织成组,并且提供容器间的负载均衡。
4.应用程序容器的新版本易升级。
所以它能解决的也是关于容器的问题:
1.容器调度,也就是容器应该在那个机器上运行。
2.容器的生命周期和健康情况,保证容器在无错的条件下运行
3.容器服务的发现,容器在哪,怎样与它通信。
4.对容器进行监控,查看容器运行是否正常。
5.容器聚合,将多个容器合并成一个单元。

k8s的架构

为什么要用容器云_第1张图片
k8s分为master节点和minion节点(或者node节点)
master节点中有四个核心组件:
APIserver:用来进行API操作的,k8s中的所有组件都会和APIserver进行连接,k8s中组件一般不会和组件进行独立连接,都是通过APIserver进行消息传送。
Controller:是控制器,完成对集群状态的管理,k8s的负载均衡和高可用都是通过这个实现的。
Scheduler:调度器就是用户提交了一个container,然后这个组件根据资源消耗情况等把这个container放在合适的节点上。
etcd:是一个分布式的存储系统,APIserver所需要的这些原信息都被放置在etcd中,etcd本身是一个高可用系统,通过etcd保证整个k8s的master节点高可用性。
为什么要用容器云_第2张图片
node节点是真正运行业务负载的,每个业务负载以pod的形式运行,一个pod中运行一个或多个容器,真正运行pod组件的是kubelet,它通过APIserver接收到所需要的pod的运行状态,然后提交到node节点中的container runtime这个组件中。
为什么要用容器云_第3张图片
这就是容器调度的一个例子。

k8s的核心概念

pod

pod是最小的调度以及资源单元,由一个或者多个容器组成,在pod里面我们也可以去定义容器所需要运行的方式。比如运行容器的command或者环境变量等。pod与pod之间是互相隔离的。

volume

卷,用来管理k8s的存储的,声明在pod中的容器可访问的文件目录,可以被挂载在pod中一个(或者多个)容器的制定路径下。支持多种后端存储如本地存储、分布式存储、云存储等。

deployment

deployment是在pod这个抽象上更为上层的一个抽象,它可以定义一组pod的副本数目、版本。一般大家用deployment这个抽象来做应用的真正管理,而pod是组成deployment最小的单元。k8s通过controller维护pod的数目,它也会去帮助deployment自动恢复失败的pod。当一个pod失败了,controller就会监测到,会重新把deployment中的pod数目从一个恢复成两个,并且可以进行滚动升级、重新生成、回滚等。

service

service提供了一个或者多个pod实例的稳定访问地址。把所有的pod访问能力抽象成一个第三方的一个IP地址,实现这个的k8s的抽象就叫service。实现service有多种方式,k8s支持clusterIP。kuber-proxy的组网,也支持nodeport、loadBalancer等其他的一些访问能力。

namespace

用来做一个集群内部的逻辑隔离,包括鉴权、资源管理等。k8s的每个资源如pod、deployment、service都属于一个namespace,同一个namespace中的资源需要命名的唯一性,不同的namespace中的资源可以重名,

k8s的API

API是由HTTP+JSON组成的,用户访问的API中content的内容是JSON格式的,kubectl直接与k8s沟通也是使用的这种HTTP+JSON形式。举个例子,http访问pod的路径:API->APIversion->namespace及pod资源,最终是podname。
API-label是一组key:value;可以被selector所查询;资源集合的默认表达形式。

行业云-凤皇云

现在云平台厂商很多,阿里云、腾讯云、京东云都是互联网云,也就是商业云。而我们的凤皇云是一个行业云、领域云,针对一种特殊的领域,感兴趣的可以联系我。

凤皇云相对于其他云平台的核心优势

我自己再学习一下。
本文参考链接:https://www.infoq.cn/article/KNMAVdo3jXs3qPKqTZBw

你可能感兴趣的:(云计算相关技术,docker,kubernetes,容器)