专栏首页kubernetes中文社区Kubernetes是什么以及你为什么选择它?

Kubernetes是什么以及你为什么选择它?

Kubernetes是什么以及如何使用它

Kubernetes是一个用于容器编排的开源系统,支持自动化应用程序部署,扩展以及管理。阅读这篇博客文章,从商业视角了解下Kubernetes。我将简要介绍虚拟化方法,构建Kubernetes的关键概念以及它在运行容器化应用程序时如何帮助您的业务。

首先,让我们来看看采用Kubernetes的市场数据。根据Cloud Native Computing Foundation进行的一项调查,Kubernetes是容器管理工具的领导者。在调查中,83%的受访者使用Kubernetes(2018年7月的数据,比2017年12月的77%),而58%的人在生产环境使用它,42%仍然在评估它。大多数受访者是企业公司(5000多名员工),其中40%的人正在生产环境中使用Kubernetes。

根据2019年的RightScale云状态报告,Kubernetes的使用正在飙升。它在所有公司中的总体采用率从2018年的27%增加到2019年的48%,大型企业(1,000多名员工)甚至达到60%。2019年的十大趋势报告预测,应用程序开发的云原生方法(包括容器和Kubernetes)将获得更多的支持,因为许多企业正计划采用这种方法。451 Research公司估计,到2020年,容器市场将从2016年的7.62亿美元增长到27亿美元。

鉴于过去几十年中已经浮出的IT系统技术术语和命名法,从实现和性能的角度来看,准确掌握新技术所带来的内容往往令人难以招架。因此,在深入探讨为什么要考虑部署Kubernetes之前,我将帮助您了解这项技术的用途以及它的工作原理。

虚拟化的旧方法

在早期,使用更多计算能力的唯一方法是在物理意义上添加更多硬件(因此旧的名称为“服务器群”)。然后,虚拟机(VM)被引入,虚拟化的概念诞生了。在过去近20年中,这一概念一直在发挥着越来越大的作用。这种软件引入了虚拟硬件抽象层(HAL),这反过来使得可以在父OS的相同底层硬件上运行多个操作系统(OS)和应用程序。虽然这种方法确实在当前的IT基础架构领域具有优势,特别是在涉及特定的复杂软件的情况下,并且确实保持市场份额的大本营,但它并非没有缺陷。

虚拟机的完全实现(为了进行比较我们称为虚拟化2.0)可以迅速成为系统资源,因此需要更快,更昂贵的硬件。在混合设置中尤其如此,由于必须运行的应用程序的阵列和性质,同一台计算机上需要多个竞争操作系统(并非所有应用程序始终在同一操作系统上可用)。因此,VMM(虚拟机监视器或虚拟机管理程序)软件变得必要,使系统更加复杂。一旦设置完成,VM实施就是重量级且不灵活。毕竟,为了运行应用程序,每个VM不仅必须包含操作系统本身的完整空间,还包括整个堆栈(操作系统,设备驱动程序,应用程序等)的所有库和依赖项(Libs / Bins)。每个VM还必须模拟底层硬件的虚拟版本,因此不会直接调用IRQ(中断请求),而是通过软件代理来进一步阻碍性能。将此结合在一个真实世界的云场景中,适用于大型或严格的业务目标要求的组织,所有这些最终转化为实施流失,软件复杂性,有限的可移植性,浪费的CPU周期和GB,以及硬件和人工的显着更多美元从IT管理的角度来看。虚拟化既不便宜也不易实现。所有这些最终转化为实施流失,软件复杂性,有限的可移植性,浪费的CPU周期和GB,以及从IT管理角度来看,硬件和劳动力的显着增加。虚拟化既不便宜也不易实现。所有这些最终转化为实施流失,软件复杂性,有限的可移植性,浪费的CPU周期和GB,以及从IT管理角度来看,硬件和劳动力的显着增加。虚拟化既不便宜也不易实现。

新的虚拟化方法

虚拟化3.0,即容器化时代。容器并不是一个全新的解决方案,因为这个概念已经存在了大约二十年。但是,在2004 - 2008年,Solaris引入了Solaris Zones并创建了独立的应用程序环境,而Google则突破性地使用到了生成环境业务。与此同时,Linux发布了内核编译2.6.24,后来成熟为LXC(Linux容器)。到了2013年及以后:容器形式的虚拟化,而不仅仅是虚拟机,不断瘦到认可,并且有充分的理由。Kubernetes项目最初由谷歌设计和创建,谷歌于2014年开源。它于2015年发布了1.0版,并与Linux基金会合作组建云原生计算基金会负责Kubernetes项目。

容器对于VM来说就像是芭蕾舞者相比于相扑选手,你很快就会明白为什么。如果您的组织需要非常特定的虚拟化实施形式,这可能是由于多种原因(即运行复杂的软件环境),那么VM可能仍然是您的可行性途径。对于其他人来说,容器至少在初期是最佳选择。关键的区别在于容器全部运行在同一主机操作系统上,因此无需像每个虚拟机那样复制操作系统。此外,容器通过直接API调用来利用主机操作系统的Libs和Bins,并且仅在其本地模块中封装一些额外的Libs和Bins,这些Libs和Bins特定于它们运行的应用程序。出于这些原因,容器同样轻巧且便携,并且远远少于您可能运行的任何VM的资源。

这些节省下来的CPU周期和GB可用于两种不同的方案:运行具有更高系统性能和响应时间的同一组容器应用程序,或通过运行更多容器应用程序来更好地利用底层硬件。如果您需要在软件故障或安全更新后重新启动容器应用程序,那么您只需几秒钟 - 与在相同方案中引导VM相差甚远,更不用说混合VM配置了。容器式虚拟化当然伴随着它自己的极少 - 可以说是不那么极端的缺点。

首先,容器应该是轻便的,便携的并且易于管理。但是,如果您的业务依赖于复杂的应用程序,则需要运行多个容器。这将增加多样性,并最终导致性能瓶颈,因为容器争夺对系统资源(操作系统和硬件)的受保护访问。其次,容器默认不如VM安全。这是因为它们提供了进程级别的安全性,而不是操作系统级别的安全性,只有一个操作系统在运行,即主机操作系统(主机操作系统的任何安全漏洞自动成为容器的威胁)。在安全性至关重要的情况下,附加软件是合理的。第三,因为在任何一个物理系统上运行整个容器集合并优化全面SaaS(软件即服务)解决方案的交付是完全合理的,所以实时管理它们不再是手动任务。实际上,它需要类似于VMM的软件,例如管理多个VM所需的软件。

Kubernetes是什么和不是什么

在这个阶段,您可能会认为Kubernetes(简称K8S)是一个允许对容器化应用程序进行分组的软件平台,但事实并非如此。Kubernetes不是关于对容器和相应应用程序进行分组,而是在它们在提供此功能的平台(例如Docker(最受欢迎的),Mesos,CoreOS rkt和LXC)中设置(和分组)之后编排它们。一旦这些设置在一对多关系类型的原理图中(即Docker配置了多个容器和群集形式的应用程序),像Kubernetes这样的软件就会出现在最前端来管理它,并使管理任务更少通过自动化的负担。实质上,Kubernetes(容器管理器,CM)是VMM运行多个虚拟机的过程 - 一个软件管理层将所有虚拟机固定在一起,并保持齿轮顺利转动。

Kubernetes就是协调和调度容器以便它们能够以最佳方式运行,并在负载全天波动时随时访问系统资源。谷歌是该领域的专家,因为它在过去二十年中部署了大量(可能是最高)的服务器和应用程序。Kubernetes的开发和设计受到Google Borg系统的高度影响,它是为管理大规模集群而创建的。Kubernetes可以在内部部署或在云中部署,使您能够跨多个物理机运行容器应用程序,并维护一个故障安全监视层,用于重新启动崩溃的容器。它还可以轻松推出包括回滚在内的更新,并根据各种性能指标自动扩展以关闭和启动容器。最后但同样重要的是,Kubernetes允许在一致的部署中运行容器化应用程序,从而通过第三方软件(如Prometheus,Jaeger,EFK(Elasticsearch,Fluentd,Kibana)堆栈或cAdvisor)监控它们变得更加容易。Kubernetes和简化的CM解决方案基本上是同义词。

选择Kubernetes的六大理由

开源的力量

在不断扩大的容器应用领域,Kubernetes已发展成为事实上的行业标准。因此,您可以选择多种服务提供商来帮助您在组织的IT基础架构中实施它。如果出现任何问题,Kubernetes开发者的开放社区可以指望做正确的事情。更重要的是,Kubernetes并不是一个开源了就不再活跃的项目,而是一个全年四次大版本更新的项目。

成本效益

容器的复杂性和占用空间都很轻,而且设置它们比设置VM要简单得多。这使得Kubernetes成为管理容器化应用程序的非常灵活的平台。Kubernetes配置可减少错误的CPU周期和GB的RAM,从而缩短响应时间,最终提高系统性能。并且由于Kubernetes的负载平衡引擎,它可以在需要时启动,停止和优先处理给定的容器 - 所有这些都可以保持性能一致。

可移植性

由于其多功能性,Kubernetes可以在您的组织内本地设置和运行在大量底层操作系统上。此外,如果您决定在整个生命周期的部署过程中迁移到备用操作系统,您可以随身携带现有工作负载,而无需重新设计应用程序或废品并重新构建基础架构。Kubernetes避免了供应商锁定,您的设置将继续标准化并随着时间的推移而简化。

可扩展性

Kubernetes从头开始设计为模块化容器管理工具(CM),您可以自由选择混合和匹配组件,实现真正的交钥匙和定制实施。使用Kubernetes,您可以决定要运行的操作系统,应用运行时(Libs / Bins),文件系统,处理器架构甚至云平台。应用程序开发人员还可以直接调用Kubernetes API(应用程序编程接口),并加强应用程序的集成,以提高性能和可管理性。

自愈

软件将不时遭受奇怪的故障,导致功能瘫痪和系统失败。然而,这些陷阱将使您成为可靠性困境的牺牲品。但不要害怕:Kubernetes能够定期监控您的完整基础设施(容器,节点,Pod,网络,硬件,操作系统)。如果软件错误导致系统的某些部分崩溃,Kubernetes将立即重启应用程序。如果错误是由于硬件故障引起的,Kubernetes将检测到它并将应用程序分布在多个pod中。在这两种情况下,应用程序停机时间都减少到最低限度。

云服务

因为Kubernetes很受欢迎,你不需要自己处理内部实现,也不需要在硬件上花钱。事实上,您可以通过注册托管的Kubernetes解决方案来外包流程:PaaS(平台即服务)或IaaS(基础架构即服务)。您的角色是专注于通过您的应用提供最佳用户体验,将负载平衡和云服务留给Kubernetes

本文分享自微信公众号 - kubernetes中文社区(DailyDev),作者:fiisio

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes 基础概述

    本互动教程介绍了Kubernetes群集编排系统的基础知识。每个模块都包含Kubernetes的主要功能、概念的一些背景介绍。使用本教程,你可以了解:

    kubernetes中文社区
  • 使Kubernetes管理更容易的7个工具

    Kubernetes是最初由Google开发的容器编排工具,已成为敏捷和DevOps团队的重要资源。作为一个开源工具,Kubernetes本身正在成为一个生态系...

    kubernetes中文社区
  • kubernetes/Docker 容器内时区不一致解决方案

    我们知道,使用 docker 容器启动服务后,如果使用默认 Centos 系统作为基础镜像,就会出现系统时区不一致的问题,因为默认 Centos 系统时间为 U...

    kubernetes中文社区
  • Kubernetes提供的和不提供的安全功能

    要说Kubernetes没有提供安全功能是错误的。Kubernetes提供了一些旨在帮助保护容器化应用程序的功能。

    CNCF
  • 应用 | 企业使用容器和 Kubernetes 构建应用程序需要考虑什么?

    虽然容器已经诞生了10多年,但在过去几年中,容器的普及和采用率仍然不断增长。根据Gartner的调查,到2025年全球超过85%的企业将在生产中运行容器化应用,...

    CloudBest
  • 如何浏览Kubernetes学习曲线【Containers】

    在“Kubernetes是一辆自卸车”中,我谈到了一种工具,它可以很好地解决其设计要解决的问题,一旦您学会了如何使用它。在本系列的第2部分中,我将更深入地了解K...

    王欣壳
  • 50个你必须了解的Kubernetes面试问题

    Kubernetes一直是当今业界的流行语,也是最好的编排工具。它吸引了许多想要提升自己职业生涯的经验丰富的专业人士。HuaWei,Pokemon,Box,eB...

    DevOps时代
  • 50 个你必须掌握的 Kubernetes 面试题

    Kubernetes 一直是当今业界的流行语,也是最好的编排工具。它吸引了许多想要提升自己职业生涯的经验丰富的专业人士。

    iMike
  • CNCF案例研究:Kubernetes如何实现宜信金融科技服务的快速迭代

    使用的CNCF项目包括:Harbor、Helm、Kubernetes、Prometheus

    CNCF
  • kubernetes炼气期之掌握Kubernetes的背景

    Kubernetes[1],又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是一种可...

    公众号: 云原生生态圈

扫码关注云+社区

领取腾讯云代金券