容器云平台和Kubernetes之间不得不说的那些事

前言
我们知道,传统的应用部署方式是将应用直接部署于单独的物理机或虚拟机中。但是在企业数字化转型的浪潮下,如何满足日益丰满的业务需求,如何高效践行敏捷研发,如何更好的将应用落地实施于客户现场,保障稳定高可用并利于维护,是传统企业不得不面对并解决的问题。

  用友云技术中台为助力企业数字化转型提供了大量利器,比如本文将着重提及的容器云平台,就是其中之一。

  容器云平台,是基于容器的运行时引擎,利用Kubernetes等容器调度方案,用以解决开发、测试、运行环境统一,服务快速部署,运行期服务管理、调度等问题而建设的平台。

  那么,容器云平台到底是如何建设的呢?利用了容器技术的哪些优势呢?又是如何利用Kubernetes实现对外提供服务的呢?最后,容器云平台到底有什么能力,为企业提供了哪些价值呢?

  本文将就这这些疑问,为您一一解答。相信您读过之后,一定会了解到关于容器云和Kubernetes之前更多的秘密。

一、容器云平台的技术选型

容器化技术——Docker

  Docker 是使用 Go 语言进行开发,基于 Linux 内核的 cgroup、Namespace 等技术,对应用的进程进行封装隔离,最终在操作系统层面实现的虚拟化技术。Docker无疑是目前最受欢迎的开源容器引擎,它采用了集装箱搬运的思想,可以将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器,为应用提供了一个基于容器的标准化运输系统。使用Docker技术,可以彻底释放计算虚拟化的威力,提高应用的可维护性,降低云计算应用开发的成本。可以说Docker技术的出现,让应用的部署、测试和分发都变得前所未有的高效和轻松。

  具体来说,使用Docker容器技术,可以为容器云平台带来以下技术优势:

  1) 支持跨平台适配

  容器带来的最大好处之一就是其适配性,越来越多的云平台都支持容器,用户再也无需担心应平台的捆绑,同时也能让应用多平台混合部署成为可能。目前支持容器的IaaS平台包括但不限于亚马逊平台(AWS)、Google云平台(GCP)、微软云平台(Azure)、OpenStack等,还包括如Chef、Puppet、Ansible等配置管理工具。

  2) 优化持续部署与测试过程

  容器消除了线上线下的环境差异,保证了应用生命周期内环境的一致性和标准化。开发人员使用镜像实现标准开发环境的构建,开发完成后通过封装着完整环境和应用的镜像进行迁移操作。由此,测试和运维人员可以直接部署应用镜像来进行测试和发布,大大简化了持续集成、测试和发布的过程。

  3) 环境标准化和版本控制

  基于容器提供的环境一致性和标准化,你可以使用Git等工具对容器镜像进行版本控制。相比于代码的版本控制来说,你甚至能够对整个应用运行环境实现版本控制,一旦出现故障可以执行快速回滚操作。相比以前的虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通应用一样快速。

  4) 高资源利用率与隔离

  容器没有管理程序的额外开销,与底层共享操作系统,因此其性能更加优良,系统负载更低,在同等条件下可以更充分地利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU和内存等资源,防止应用间相互影响。

  5) 具备容器跨平性

  Linux容器虽然早在Linux 2.6版本内核已经存在,但是缺少容器的跨平台性,难以推广。容器在原有Linux容器的基础上大胆革新,为容器设定了一整套标准化的配置方法,将应用依赖的运行环境打包成镜像,真正实现了“构建一次,到处运行”的理念,大大提高了容器的跨平台性。

  6) 应用镜像仓库

  Docker官方构建了一个镜像仓库,组织和管理形式类似于GitHub,其上已累积了成千上万的镜像。因为Docker具有跨平台适配性,它为用户提供了一个非常有用的应用商店,所有人都可以自由地从其中下载镜像做为服务组件。这为开发者提供了巨大便利。

容器服务编排技术——Kubernetes

 Kubernetes(k8s)是一个基于容器技术的分布式架构解决方案。它是用于自动部署,扩展和管理容器化应用程序的开源系统。它在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能。同时,Kubernetes还提供了完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。可以说利用Kubernetes,可以提高大规模容器集群管理的便捷性。

  将Kubernetes容器编排系统作为容器云平台的底层技术支撑,可以带来如下特性:

  1) 自动包装

  根据资源需求和其他约束自动放置容器,同时不会牺牲可用性,混合关键和最大努力的工作负载,以提高资源利用率并节省更多资源。

  2) 自我修复

  重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。

  3) 横向缩放

  使用简单的命令或 UI,或者根据 CPU 的使用情况自动调整应用程序副本数。

  4) 服务发现和负载均衡

  不需要修改应用程序来使用不熟悉的服务发现机制,为容器提供自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。

  5) 自动部署和回滚

  支持灰度、滚动式部署应用程序,并支持对其配置进行更改。同时监控应用程序运行状况,以确保它不会同时终止所有实例。当出现问题,自动触发服务自愈功能恢复应用。

  6) 密钥安全性保证

  部署和更新密钥和应用程序配置,不会重新编译您的镜像,不会在堆栈配置中暴露密钥(secrets)。

  7) 批处理

  可以批量管理资源池节点机,可以根据需要自动替换出现故障的容器。

应运而生的容器云平台

  传统企业在转型过程中遇到的种种问题,不断地推进着系统架构的演变。传统的物理机及虚拟机部署方式已经不能满足企业现代化系统建设的需求。而随之到来的,是向以容器为核心的基础设施的转变。但是,这个转变并不是一次温和的改革,而是涵盖了对网络、存储、调度、操作系统、分布式原理等各个方面的容器化理解和改造。企业级应用开发更是需要基于容器技术,实现支持多人协作的CI/CD平台。

  因此,企业迫切需要一套具有完备功能的容器云平台,以使原有的基于虚拟机的部署方案,彻底转变为更加灵活和轻量的“容器+编排调度”应用落地方案。

  用友云技术中台的容器云平台,经过严谨的技术选型,天生继承了选用技术的优良基因。在经过技术过硬的研发团队集成、适配、打磨、优化、扩展后,推出了功能强大的完美适配企业转型需求的容器云产品。

二、利用容器部署应用,对外提供服务过程详解
  在之前的技术文章中我们提到,Kubernetes中的Pod是部署应用的最小单位。一个Pod封装一个应用容器,存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。业务涉及到的所有应用均运行在容器云平台所管理的一个个的Pod当中。

  当应用的Pod创建好之后,就要考虑建立完整的访问链路系统,最终实现对外提供服务的能力。建立网络访问的第一步,是实现各个Pod在所依赖宿主机——利用Kubernetes搭建的集群间内部的联通和访问。

集群内部Pod访问逻辑

  实现集群内部访问有两种方案,分别如下:

  1) 直接使用docker分配的IP地址

  在Pod运行时,docker会为其分配一个独立的IP地址。拼接这个IP地址和服务的端口号,即可直接访问此Pod中的服务。但是这种方式有一个巨大的问题,即Pod在重启或销毁重建后,将会分配新的IP地址。

  2) 通过ClusterIP方式访问

  Pod的IP 地址实际存在于某个物理网卡或虚拟网卡上 ,而ClusterIP是创建Service的时候,由系统内部分配的一个全局唯一的虚拟IP.这个虚拟IP在网络中是无法寻址到的,它没有绑定到任何网卡设备上。这增加了它的访问的灵活性。我们可以通过服务的ClusterIP加应用容器的服务端口号来进行访问。

Service的业务入口访问机制

  当Pod的访问有优选方案之后,我们接下来面临了下一个问题:Pod的IP和ClusterIP都是在每次创建后随之变化的,如何在应用的Pod重启后,保证服务的可访问性呢?此时,k8s中的Service可以解决此问题,它为应用的访问提供了一套业务的入口机制。

  Service为k8s系统提供了容器集群负载均衡功能,并开放式地支持了用户所需要的各种负载均衡方案和使用场景。逻辑层面上,Service被认为是真实应用的一个抽象,每一个service关联着一系列的Pod,根据LabelSeletor来刷选Pod进行关联,对外表现为一个单一的入口,依托于Proxy转发到Pod内部。实际上来说,k8s在Service和Pod之间是通过Endpoints衔接的,这个Endpoint由根据关联到Pod 的IP信息组合而成。

  简单来说,Service就是一个把所有Pod都池化为一个组,然后对外统一固定成一个IP.Pod可以通过Deployment中所选择的Label来进行设置,最终可以按照对应的配置访问。

集群外访问逻辑

  一般来说,服务对外访问有这几种常见的模式:HostNetwork-true、Nodeport、ingress、Loadbalancer等几种。

  1) HostNetwork-true模式

  这种方式顾名思义,就是将业务中的端口直接暴露在宿主机上。业务中监听的端口在宿主机中通过netstat命令就可以直接看到。宿主机所在的局域网上所有网络接口都可以访问到该应用程序。

  2) Loadblancer模式

  在这种方式下,kubernetes可以请求底层云平台创建一个负载均衡器,将每个Node作为后端,进行服务分发。

  3) Nodeport模式

  在此模式下,系统会在每一个节点机上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。这种模式下启动的Pod会生成一个名为nodePort的附加端口,用于指定在节点上打开端口。如果不指定,这个端口将随机生成。我们一般建议将端口设定在一定的范围内,如30000-32767.这种访问方式可以在Service指定好Nodeport的Type之后,通过何一台Node的IP+nodePort就可以对业务发起访问。但是,NodePort这种方式有个弊端,它会在集群中的任何一台机器上起动一个端口进行监听,即便工作负载从未在这个节点上部署过。这势必造成一些端口的浪费。

  4) ingress模式

  随着后期的发展,理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然后根据域名或者服务名向后面的Service ip转发请求。Ingress模式就是实现这种方案的模式。

  Ingress包含了两大主件Ingress Controller和Ingress.k8s的 Ingress 对象提供了另一种服务暴露的方法,它只占用一台主机的 HTTP 端口,通过虚拟主机或者虚拟目录的方式为K8S上的所有HTTP服务提供暴露服务,还能实现 HTTPS、负载均衡、状态统计等功能。

容器云平台的技术落地方式

  在之前的介绍中可以看到,ingress模式是最理想的实现方案。因此,容器云平台采用以Ingress为主的入口方式。

  在 Kubernetes 集群中,Ingress 是入站连接到达集群服务的规则集合,可提供七层负载均衡能力,用户可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。在实际的项目中,应用容器数可能是几十个容器,有的已经达到几百个规模。这其中,有的是部署的业务应用数目少,但是容器副本多;有的则是部署的业务就达到百个。面对不同的实际业务场景,我们要对链路进行更好的规划,使其稳定性得到保障。在给客户制定部署方案的时,需要将泛域名解析这一容器云平台中已有的链路环节拆分出来。在访问应用的时候,通过Nginx入口后,跳过统一泛域名解析跳转这一环节,直接将Nginx的请求转发到Ingress当中,这样能够减少链路层的数据传递,使系统更加稳定高效。

三、容器云平台的能力和价值
  开发者中心提供的容器云平台,是一个致力于打造以应用为中心的容器管理平台。目前,其提供了极具特色的核心竞争力,如完备容器云服务:提供多数据中心、多租户、多环境、多资源池能力,可以根据需求随意定义;如全面支撑微服务应用:从服务定义、服务拆分、服务扩展、服务编排、服务运行形成完整的理论和实践。

  举例来说,它提供了以下能力,经过长时间的线上实践,在客户的落地使用中为客户提供了巨大的价值。

  1) 资源的逻辑管理能力

  主要实现对主机、存储和网络的集中管理,对租户提供资源的统一分配及应用的统一部署,实现与IaaS资源的互动,动态替换和补充资源。

  2) 弹性伸缩和扩容缩容能力

  能够快速实现资源动态调度和扩缩容,能够定义动态弹性伸缩策略,应用容量可根据策略自动进行服务的动态扩展。支持水平和垂直,手工与自动等方式;基于业务运行态动态调整,提供不同场景化产品需求能力

  3) 支撑微服务治理能力

  一款支撑微服务架构应用全生命周期管理的平台,为开发者提供从开发到运维、运营的一系列开发套件和服务,包含RPC框架、配置中心、注册中心、服务链路追踪、服务限流、服务熔断、服务统计、服务评价等组件和服务。

  4) 统一的运营监控能力

  提供可视化、自助式运维工具,实现对所有产品线、产品、租户、集群、资源、应用、容器等企业数字化资源进行集中式运维和监控。

四、容器云平台对企业的价值

企业为什么需要容器云平台

  企业数字化转型,使得众多企业不断创新、顺应趋势、改变思路,开始尝试或采用容器化技术,根据业务特性选择适合的业务,通过逐步推进来建设自己的企业级容器云平台。

  容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建,发布和运行分布式应用的平台。当容器云专注于资源共享与隔离、容器编排与部署时,它更接近传统的IaaS(基础设施即服务);当容器云***到应用支撑与运行时环境时,它更接近于传统的PaaS(平台即服务)。

  容器云平台推进了软件开发、测试、部署、运维和运营模式的创新,承载了企业和IT基础设施和基础技术服务,为企业业务应用的建设和发展提供了强有力的支撑,同时促进了与产业链生态环境中上下游系统的高效对接和协同创新。

企业需要什么样的容器云平台

  用友云平台技术中台——开发者中心是集容器云平台、DevOps平台、微服务治理平台于一体的综合性企业级应用托管PaaS平台。开发者中心是企业IT信息化建设的基础设施平台,并对微服务进行集中管控、智能运维和容器云全生命周期等运营管理。

  在开发者中心的集中管控框架下,可以对主机、网络、存储、应用环境、开发、部署、集成、运维等过程进行分析和规划;以资源的集中管理及应用的统一快速部署、不中断业务的灰度发布;方便快捷的操作管控及更智能的运维监控为核心目标,构建一个高可用、高性能、高扩展的综合性托管企业级应用的PaaS平台,并为企业解决统一规范管理产品。使用开发者中心,还可以提高资源利用率,降低IT成本,解决运维困难成本高,产品更新效率低。微服务实施困难。大数据环境复杂等日常运维中遇到的痛点问题。

  开发者中心还提供了多云的接入能力,可以对接阿里云、华为云、AWS等多家云厂商,同时支持VMWare、Openstack、BareMetal等操作系统。在IaaS基础上提供容器支撑服务和安全机制;在容器支撑服务上提供DevOps能力、AI能力、微服务架构能力、中间件服务能力、大数据分析能力等。平台支持多种语言运行环境如Java、Node.js、Golang、Python、静态网站等,或使用Dockerfile构建应用。

  开发者中心以容器云为基础设施,不仅提供轻量便捷的公有云产品形态,也提供带有企业特色的专属云形态;不仅提供all-in-one的简化部署方式,也提供Multi-node的分布式部署方式,为企业提供更多选择,更适合企业建设的PaaS基础平台。

原文地址:https://blog.51cto.com/14084875/2411232

时间: 2024-10-10 21:59:18

容器云平台和Kubernetes之间不得不说的那些事的相关文章

浅谈如何打造一个安全稳定高效的容器云平台

本文介绍了容器的现状和发展趋势,容器集群编排引擎选型,跨主机网络通信,定制化方案,公有云,私有云及混合云的场景及实现等内容,说明如何打造简单而强大的容器云平台. 1. 容器技术现状及发展趋势 什么是容器? 我们可以将容器理解为一种沙盒,每个容器具有独立的操作系统资源,不同的容器之间相互隔离,也可以建立通信,应用跑在各自的容器中,避免了环境中有冲突的资源使用,做到一次封装,到处运行. 那容器与虚拟机的区别在哪? 容器可以看做轻量的虚拟机,虚机启动可能需要数分钟或者更长,而容器只需几十毫秒.传统虚拟

【重磅】完美融合Kubernetes,Ghostcloud企业级容器云平台EcOS率先实现双容器调度

前言 给大家报道一个最新重磅消息:最新版Ghostcloud企业级容器云平台EcOS(Enterprise Container Operation System)已完美支持容器市场最主流的调度引擎Kubernetes,并于今日正式上线啦!内置自研容器调度框架Newben和开源引擎Kubernetes,意味着EcOS平台率先实现了双容器调度引擎的融合.(新平台EcOS-Kubernetes现已开放试用申请,请至文末扫码申请.) EcOS平台是Ghostcloud推出的企业级容器云PaaS/CaaS

【转载】基于Docker的CaaS容器云平台架构设计及市场分析

[转自]http://www.cnblogs.com/darkprince/p/5115739.html 基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交付持续化,业务服务化. 容器将成为新一代应用的标准交付件,容器云将帮助企业用户构建研发流程和云平台基础设施.缩短应用向云端交付的周期,降低运营门槛.加速企业向互联网技术和业务的双转型. 容器云将

【原创】基于Docker的CaaS容器云平台架构设计及市场分析

基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交付持续化,业务服务化. 容器将成为新一代应用的标准交付件,容器云将帮助企业用户构建研发流程和云平台基础设施.缩短应用向云端交付的周期,降低运营门槛.加速企业向互联网技术和业务的双转型. 容器云将对接各类代码托管库,实现自动化持续集成和DOCKER镜像构建,为新一代应用交付和开发运维一体化奠定了基础.

网易容器云平台的微服务化实践(一)

作者:冯常健来自: 网易云-共创云上精彩世界 摘要:网易云容器平台期望能给实施了微服务架构的团队提供完整的解决方案和闭环的用户体验,为此从 2016 年开始,我们容器服务团队内部率先开始进行 dogfooding 实践,看看容器云平台能不能支撑得起容器服务本身的微服务架构,这是一次很有趣的尝试. 一旦决定做微服务架构,有很多现实问题摆在面前,比如技术选型.业务拆分问题.高可用.服务通信.服务发现和治理.集群容错.配置管理.数据一致性问题.康威定律.分布式调用跟踪.CI/CD.微服务测试,以及调度

容器云平台在传统企业落地的一些思考和探索

本文内容是我今天在一个云原生论坛上演讲的材料,加上一些备注,现在分享给大家. 从应用的承载和部署方式这一角度看,一共经历了传统的物理机架构.虚拟化架构.和现在的容器化三种架构.但是,容器并不是一种虚拟化技术,它与虚拟机有实质性区别. 虽然把云分为IaaS.PaaS 和 SaaS 已经好多年了,但是,它们只有的差别,一直是想得出但摸不到.对我个人来说,只有在搞了OpenStack 后才算了解了一些IaaS,只有在用了 OpenShift 后才算了解了一些PaaS.这两个产品,对我都有云启蒙性的帮助

重磅!F5携手BoCloud博云,提供更安全、稳定的容器云平台

在大数据与移动互联网下,信息服务面临数据规模巨大.用户访问突发性强.数据服务实时性高等技术挑战,传统的应用架构.构建模式及运维管理体系都需要进行技术创新,以实现智能.弹性.可扩展的云应用架构与运营保障能力建设.微服务思想与 DevOps 理念在新一代面向云应用架构与运维管理体系建设上提出了全新的思路,而支撑微服务架构与 DevOps 思想的就是现在业界关注度和接受度都很高的 Docker 容器技术. 容器技术在带来如弹性伸缩.轻量部署.快速部署等等诸多好处,并成为云计算领域的趋势之一时,随着容器

博云 x 某股份制银行信用卡中心,容器云平台建设项目最佳实践

近期,BoCloud博云收到了一封感谢信: 由BoCloud博云(全称:苏州博纳讯动软件有限公司)承建的某大型股份制银行信用卡中心(以下简称:卡中心)容器管理平台建设项目,在面对工期紧.任务重.要求高等诸多困难和压力下,我司高度重视与配合,在项目组全体成员的共同努力下,扎扎实实.勤勤恳恳.严谨负责.保质保量地完成了阶段性建设目标,为该卡中心应用的容器化工作提供了有力的技术支持与保障. 数字化转型发展到今天,其核心是促进业务变革与创新.伴随互联网+对银行业的深度渗入,使得To C场景与互联网的结合

魅族容器云平台自动化运维实践

魅族容器云平台主要是基于 k8s 的技术.将从以下六个方面介绍魅族容器云的实践过程,分别是基本介绍.k8s 集群.容器网络.外部访问4/7层负载均衡.监控/告警/日志.业务发布/镜像/多机房. 1.基本介绍 魅族云平台的定位是私有云平台,主要是用于支撑在线业务,用以替换传统的虚拟化方式.目前现状是2017年完成全国三个数据中心的建设,年内完成90%业务的迁移. 我们是以小团队紧跟 k8s 社区步伐,快速迭代.低成本试错的方式来构建我们的平台的.同时,针对一些我们遇到的问题,做一些局部创新,在保证