深度解析容器云之 Kubernetes 应用与实践
Kubernetes 开源以来,受到了越来越多企业及开发者的青睐,随着 Kubernetes 社区及各大厂商的不断改进发展,Kuberentes 有望成为容器管理领域的领导者。
今天和大家分享的内容就是青云QingCloud 推出的容器云服务以及基于 Kubernetes 的应用与实践。
各种容器的实现,容器的外延非常广范,用户选型时经常会迷惑,应该选择什么?大家讨论的时候容易产生分歧,因为大家都在说容器,但各自的角度不同,表达的具体内容也完全不一样。
总结来看容器有两个视角,一是资源,二是应用。
从资源视角和应用视角分析一下青云QingCloud 提供的容器解决方案。
就资源视角来说,用户希望 VM 能像 Docker 一样,可对标准进程进行封装,使得 VM 也是一个完整的操作系统。为延续用户对 VM 的操作体验,青云QingCloud 在统一的 IaaS 平台上同时支持 VM(Virtual Machine 虚拟主机)与 CM(Container Machine 容器主机),使得用户对虚拟化的部署习惯得以沿袭,同时还可享受容器资源轻量隔离的特点。
一是 AppCenter 应用支持 Docker 镜像;
二是容器编排系统可以作为一个应用放在 AppCenter 上;
三是容器可以在 VM 之上部署集群,Mesos、Kubernetes、Swarm 也可以作为云应用放在 AppCenter 之上,让用户可以自主选择。现在有已经有合作伙伴把自己的容器编排系统放在 AppCenter 上。QingCloud 目前也提供 Kubernetes 应用作为容器编排系统给用户使用。
一是 Kubernetes 本身部署困难
这不仅仅是 Kubernetes 本身的复杂性带来的困难,还因为众所周知的原因,国外某著名公司的服务在国内都无法访问,这可能是很多人试用 Kubernetes 的第一道坎。
二是微服务的需求
微服务和容器,是当前服务架构领域最热门的技术。如果不谈微服务,都会感觉自己过时了。它的敏捷交付、伸缩等优势我不再多说,但微服务架构给我们带来最大的挑战是如何管理这么多服务。
原来人工编排的方式难以管理这么多微服务。如果你能管理,说明你的微服务不够多,拆分的还不够细、或是规模还不够大。在这种情况下,Kubernetes 本身提供的对服务规范的定义、Deployment 的滚动升级,以及 DNS 服务发现的支持,都非常好的支持了微服务,这是我们选择它的另一个理由。
IaaS 更关注于资源层面,而 Kubernetes 更关注应用层面,所以这两者的结合是互补的结果。
这样用户使用时会面临在众多社区解决方案中进行选型,我们可以回顾一下。Docker 为了解决应用的网络端口冲突,给每个容器分配了一个 IP。当我们的容器只和本主机容器互通时,这没有问题,但我们想通过调度系统把多台主机的容器连接在一起,就会遇到网络问题。
这时我们实际上是需要有一层 SDN 来解决问题,大多开源容器网络的解决方案,基本是比较简易的 SDN。然后我们把这层网络方案部署到云时会发现,在云之上已经有了一层 SDN。这样在 SDN 上再做一层 SDN,性能损耗会非常大。
我们的容器主机在 SDN 优化下只有 10% 左右的损耗,我们的虚拟主机可能有 25% 多一点的损耗。但是在 SDN 上再做一次 Overlay,我们会把 75% 的性能都损耗掉。
所以,我们想既然 IaaS 有 SDN,为什么不能把它穿透上来,直接提供给容器使用?这就是青云的容器网络方案,叫做 SDN Passthrough,也就是容器可以和虚拟主机共享一层网络。我们基于 Kubernetes CNI 标准做了一个插件,并且在 GitHub 上进行了开源,如果大家想部署 Kubernetes 的时候,也可以使用。
用过 Docker 的人可能都知道,使用 Docker 存储文件时,我们会映射主机目录到 Docker 容器里,然后把文件存在主机目录上。
但当我们在容器上面架一层调度系统后,调度系统会有各种各样的原因将容器迁移到其他主机上,而这种存储方案是无法支持迁移的。所以 Kubernetes 推出了自己的 Presistent Volume 标准。
但如 NFS、Ceph 等这分布式存储系统,他们最大的问题是依赖于网络,因此稳定性和性能会有一点问题。所以,我们把 IaaS 的存储硬盘映射成 Kubernetes 的持久化存储卷,当容器在我们的主机之间迁移,我们的存储卷也可以跟着迁移,解决容器状态数据存储迁移的问题。
目前已经支持性能盘和容量盘,未来也会支持 NeonSAN 分布式存储系统。当然,有人会问,如果我们用了青云的 Kubernetes,会不会导致我的应用本身迁移遇到问题,会不会绑定在上面,导致我无法在不同的 Kubernetes 发行版之间迁移。这个 Kubernetes 本身考虑到了,它提供的是存储卷声明的方式,也就是在 Image 中只是声明依赖多少存储,这个存储由谁来提供,应用不用关心,整个都是完全透明化的方式。
Kubernetes 提供了本身一种机制,通过相应命令可自动增加 Pod 的节点数。但光有这一层伸缩是不够的,部署 Kubernetes 集群的时候,节点数是提前规划好的。当自动伸缩使Kubernetes容量达到上限的时候,就无法伸缩了。这个时候集群本身需要有自动伸缩的功能,当前只有谷歌云实现了集群的伸缩能力。
我们现在主要内置了 DNS,主要用于微服务的应用发现。如果没有这种 DNS 服务发现,应用配置文件会跟具体资源相关联,比如数据库 IP,当我们的应用从不同环境迁移时,比如从测试环境迁移到生产环境,我们的配置是就会是异构的。而有 DNS 机制,配置文件就可以完全保持一致。
另外一个是 Kubernetes 本身的一个 Dashboard,还有日志与监控服务。这个服务从日志监控数据收集、存储、展示是一体化的,应用无须关心这些事情。
更多相关内容请点击阅读原文。
- FIN -
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 三个层面看我国民营经济发展前景 7962906
- 2 小伙30多万买机器人对外租8000一天 7919295
- 3 客机西安起飞后返航 引擎冒火光 7825277
- 4 产业“破题” 绘就振兴“答卷” 7702759
- 5 4人喝100瓶酒1人坠亡 KTV被判赔48万 7659360
- 6 偶像剧终于有不回避成长女主了 7573367
- 7 有商家盗版哪吒周边卖了200万元 7407912
- 8 女孩逃票进景区后坠亡 景区被判无责 7350336
- 9 8岁孩子厨房玩刀意外刺破肝脏 7232223
- 10 670万买楼王 交钱时发现采光最差 7178036