忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 477 | 回复: 0

[Docker] 深度解析容器云之 Kubernetes 应用与实践 [复制链接]

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:42:01IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:41:40每日论坛发贴之星
日期:2015-12-09 06:20:00
发表于 2017-09-10 17:44 |显示全部楼层

Kubernetes 开源以来,受到了越来越多企业及开发者的青睐,随着 Kubernetes 社区及各大厂商的不断改进发展,Kuberentes 有望成为容器管理领域的领导者。
今天和大家分享的内容就是青云QingCloud 推出的容器云服务以及基于 Kubernetes 的应用与实践。
乱花渐欲迷人眼,容器太多怎么选
容器技术目前的市场现状是一家独大、百花齐放。容器的解决方案非常多,以 Docker 为首占据了大部分的市场,此外还有各种解决方案如 Rocket、Mesos Universal container、LXC、Hyper Container 等。
各种容器的实现,容器的外延非常广范,用户选型时经常会迷惑,应该选择什么?大家讨论的时候容易产生分歧,因为大家都在说容器,但各自的角度不同,表达的具体内容也完全不一样。
总结来看容器有两个视角,一是资源,二是应用。
一是从资源隔离的角度。容器技术经常被拿来跟虚拟化技术作对比,从技术角度来说,容器是一种跟 VM 类似的资源隔离技术,它比 VM 的资源损耗小,但隔离性和安全性不如 VM ,等等。
二是从应用封装的角度。Docker 之所以兴起,原因在于其重点关注应用的标准化,而不是资源的隔离。Docker 的镜像机制提供了一种更高级的通用的应用制品包,也就是大家说的集装箱能力。原来各种操作系统或编程语言都有各自己的制品机制,各自的依赖管理,制品库都不相同。应用从源码打包,分发到制品库,再部署到服务器,很难抽象出一种通用的流程和机制。
而有了 Docker 的镜像以及镜像仓库标准之后,这个流程终于可以标准化了。同时 Docker 将进程的管理,比如启动停止也标准化了。类似杯子、筐、集装箱都是容器,它们的共同特点是能把杂物打包,标准化,方便运输和定价。在此之上,容器可以做更高级的逻辑分装和调度。
柳暗花明又一村,青云方案解你愁
从资源视角和应用视角分析一下青云QingCloud 提供的容器解决方案。
一是容器主机。
就资源视角来说,用户希望 VM 能像 Docker 一样,可对标准进程进行封装,使得 VM 也是一个完整的操作系统。为延续用户对 VM 的操作体验,青云QingCloud 在统一的 IaaS 平台上同时支持 VM(Virtual Machine 虚拟主机)与 CM(Container Machine 容器主机),使得用户对虚拟化的部署习惯得以沿袭,同时还可享受容器资源轻量隔离的特点。
一是应用服务。
就应用视角来说,青云QingCloud 支持容器编排系统,体现在三方面:
  • 一是 AppCenter 应用支持 Docker 镜像;

  • 二是容器编排系统可以作为一个应用放在 AppCenter 上;

  • 三是容器可以在 VM 之上部署集群,Mesos、Kubernetes、Swarm 也可以作为云应用放在 AppCenter 之上,让用户可以自主选择。现在有已经有合作伙伴把自己的容器编排系统放在 AppCenter 上。QingCloud 目前也提供 Kubernetes 应用作为容器编排系统给用户使用。

为什么是 Kubernetes ?
为什么是 Kubernetes?我们做一个选择时,总有各种选择的理由。选择 Kubernetes 主要从这几个方面来看。
一是 Kubernetes 本身部署困难
这不仅仅是 Kubernetes 本身的复杂性带来的困难,还因为众所周知的原因,国外某著名公司的服务在国内都无法访问,这可能是很多人试用 Kubernetes 的第一道坎。
二是微服务的需求
微服务和容器,是当前服务架构领域最热门的技术。如果不谈微服务,都会感觉自己过时了。它的敏捷交付、伸缩等优势我不再多说,但微服务架构给我们带来最大的挑战是如何管理这么多服务。
原来人工编排的方式难以管理这么多微服务。如果你能管理,说明你的微服务不够多,拆分的还不够细、或是规模还不够大。在这种情况下,Kubernetes 本身提供的对服务规范的定义、Deployment 的滚动升级,以及 DNS 服务发现的支持,都非常好的支持了微服务,这是我们选择它的另一个理由。
三是与云互补
IaaS 更关注于资源层面,而 Kubernetes 更关注应用层面,所以这两者的结合是互补的结果。
目前 QingCloud 已经支持用户一键部署 Kubernetes 集群,不仅解决了用户很大的痛点,同时也验证了 AppCenter 支持应用的广泛性。
Kubernetes 服务背后的五个难题
接下来将会从容器调度系统的网络、数据本地存储的读取、容器平台与负载均衡器集成、实现 Kubernetes 应用的弹性伸缩能力以及集成服务五个方面跟大家介绍青云的 Kubernetes 应用,分享我们整个过程中做的事情,也让大家更容易在我们平台上使用 Kubernetes。
网络
首先是网络。这应该是除部署外,大家使用 Kubernetes 时遇到的第二个槛。因为 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 本身的负载均衡器提供了一种插件,让云服务商实现插件和 IaaS 层整合。因为最终用户暴露的时候需要一个公网 IP,这个实现和各云厂商的服务是息息相关的,而 Kubernetes 自己比较难直接提供这样的服务,所以它就提供插件让云服务商去实现。
但是云厂商的负载均衡器只能感知到节点主机这一层,对主机里面的容器是无感的,所以大多数情况下只能把 Kubernetes 集群下所有的节点都挂载到 LoadBalancer之后。前面讲到 Service 时说到,Kubernetes 为每一个 Service 都在所有主机上监听一个随机的端口,也就是 NodePort,这个请求会转发到主机的随机端口上,由随机端口转发到 ClusterIP 上,再由 ClusterIP 转发到后面的容器,可以看出,这样就多了几层转发。
如果负载均衡器能感知到容器的网络,就可以直接透传请求到容器中。我们的负载均衡器后面直接挂在的是容器网卡,这样就省去了几层转发。同时我们的支持公网和私网两种 Load Balancer。因为一般不可能把所有的服务迁到 Kubernetes,有一部分迁进去了,有一部分服务可能在外面。这种情况下外部服务访问不了 Kubernetes Service 的 Cluster IP 和 DNS ,这个时候需要私网的 Load Balancer 去转发这种请求。
弹性伸缩
Kubernetes 提供了本身一种机制,通过相应命令可自动增加 Pod 的节点数。但光有这一层伸缩是不够的,部署 Kubernetes 集群的时候,节点数是提前规划好的。当自动伸缩使Kubernetes容量达到上限的时候,就无法伸缩了。这个时候集群本身需要有自动伸缩的功能,当前只有谷歌云实现了集群的伸缩能力。
当 Kubernetes 集群的资源不够了,它会触发一个事件,IaaS 层监听这个事件,收到事件请求之后增加集群的节点。这样就实现了业务应用层的自动伸缩以及 Kubernetes 资源池的伸缩。
集成服务
Kubernetes 本身提供一种扩展机制,可以把一些服务内置在里面。
我们现在主要内置了 DNS,主要用于微服务的应用发现。如果没有这种 DNS 服务发现,应用配置文件会跟具体资源相关联,比如数据库 IP,当我们的应用从不同环境迁移时,比如从测试环境迁移到生产环境,我们的配置是就会是异构的。而有 DNS 机制,配置文件就可以完全保持一致。
另外一个是 Kubernetes 本身的一个 Dashboard,还有日志与监控服务。这个服务从日志监控数据收集、存储、展示是一体化的,应用无须关心这些事情。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

10张SACC2017门票等你来拿~

在数字化转型时代,云已成为万物智能的数字化大脑。而随着大数据应用、人工智能、移动互联网等技术的飞速发展,“智慧 +” 的概念正在深入到各行各业,提升企业效率,释放商业潜能,创造全新机遇。作为国内顶级技术盛会之一,2017 中国系统架构师大会(SACC2017)将于 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。今年,大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年10月19日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP