一文理解 Kubernetes 是什么?

作者 : 开心源码 本文共6099个字,预计阅读时间需要16分钟 发布时间: 2022-05-12 共160人阅读

一文理解 Kubernetes 是什么?

这是一篇 Kubernetes 的概览。 Kubernetes 是一个自动化部署、伸缩和操作应用程序容器的开源平台。 — Kubernetes.io

本文导航

  • -为什么选择容器? …… 10%

  • -为什么我需要 Kubernetes,它能做什么? …… 37%

  • -Kubernetes 是一个什么样的平台? …… 56%

  • -Kubernetes 不是什么? …… 70%

  • -Kubernetes 这个单词的含义?k8s? …… 93%

编译自: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

作者: Kubernetes.io

译者: songshuang00

这是一篇 Kubernetes 的概览。

Kubernetes 是一个自动化部署、伸缩和操作应用程序容器的开源平台[1]。

使用 Kubernetes,你可以快速、高效地满足客户以下的需求:

  • 快速精准地部署应用程序

  • 即时伸缩你的应用程序

  • 无缝展示新特征

  • 限制硬件用量仅为所需资源

我们的目标是培育一个工具和组件的生态系统,以减缓在公有云或者私有云中运行的程序的压力。

Kubernetes 的优势

  • 可移动: 公有云、私有云、混合云、多态云

  • 可扩展: 板块化、插件化、可挂载、可组合

  • 自修复: 自动部署、自动重启、自动复制、自动伸缩

Google 公司于 2014 年启动了 Kubernetes 项目。Kubernetes 是在 Google 的长达 15 年的成规模的产品级任务的经验下[2]构建的,结合了来自社区的最佳创意和实践经验。

为什么选择容器?

想要知道你为什么要选择使用 容器[3]?

一文理解 Kubernetes 是什么?

程序部署的传统方法是指通过操作系统包管理器在主机上安装程序。这样做的缺点是,容易混淆程序之间以及程序和主机系统之间的可执行文件、配置文件、库、生命周期。为了达到精准展示和精准回撤,你可以搭建一台不可变的虚拟机镜像。但是虚拟机体量往往过于庞大而且不可转移。

容器部署的新的方式是基于操作系统级别的虚拟化,而非硬件虚拟化。容器彼此是隔离的,与宿主机也是隔离的:它们有自己的文件系统,彼此之间不能看到对方的进程,分配到的计算资源都是有限制的。它们比虚拟机更容易搭建。并且因为和基础架构、宿主机文件系统是解耦的,它们可以在不同类型的云上或者操作系统上转移。

正由于容器又小又快,每一个容器镜像都可以打包装载一个程序。这种一对一的“程序 – 镜像”联络带给了容器诸多便捷。有了容器,静态容器镜像可以在编译/发布时期创立,而非部署时期。因而,每个应用不必再等待和整个应用栈其它部分进行整合,也不必和产品基础架构环境之间进行妥协。在编译/发布时期生成容器镜像建立了一个持续地把开发转化为产品的环境。类似地,容器远比虚拟机更加透明,尤其在设施监控和管理上。这一点,在容器的进程生命周期被基础架构管理而非被容器内的进程监督器隐藏掉时,尤为明显。最终,随着每个容器内都装载了单一的程序,管理容器就等于管理或者部署整个应用。

容器优势总结:

  • 敏捷的应用创立与部署:相比虚拟机镜像,容器镜像的创立更简便、更高效。

  • 持续的开发、集成,以及部署:在快速回滚下提供可靠、高频的容器镜像编译和部署(基于镜像的不可变性)。

  • 开发与经营的关注点分离:因为容器镜像是在编译/发布期创立的,因而整个过程与基础架构解耦。

  • 跨开发、测试、产品阶段的环境稳固性:在笔记本电脑上的运行结果和在云上完全一致。

  • 在云平台与 OS 上分发的可转移性:可以在 Ubuntu、RHEL、CoreOS、预置系统、Google 容器引擎,乃至其它各类平台上运行。

  • 以应用为核心的管理: 从在虚拟硬件上运行系统,到在利用逻辑资源的系统上运行程序,从而提升了系统的笼统层级。

  • 松散耦联、分布式、弹性、无拘束的微服务[4]:整个应用被分散为更小、更独立的板块,并且这些板块可以被动态地部署和管理,而不再是存储在大型的单用途机器上的臃肿的单一应用栈。

  • 资源隔离:添加程序体现的可预见性。

  • 资源利用率:高效且密集。

为什么我需要 Kubernetes,它能做什么?

至少,Kubernetes 能在实体机或者虚拟机集群上调度和运行程序容器。而且,Kubernetes 也能让开发者斩断联络着实体机或者虚拟机的“锁链”,从以主机为中心的架构跃至以容器为中心的架构。该架构最终提供给开发者诸多内在的优势和便利。Kubernetes 提供给基础架构以真正的以容器为中心的开发环境。

Kubernetes 满足了一系列产品内运行程序的普通需求,诸如:

  • 协调辅助进程[5],协助应用程序整合,维护一对一“程序 – 镜像”模型。

  • 挂载存储系统[6]

  • 分布式机密信息[7]

  • 检查程序状态[8]

  • 复制应用实例[9]

  • 使用横向荚式自动缩放[10]

  • 命名与发现[11]

  • 负载均衡[12]

  • 滚动升级[13]

  • 资源监控[14]

  • 访问并读取日志[15]

  • 程序调试[16]

  • 提供验证与受权[17]

以上兼具平台即服务(PaaS)的简化和基础架构即服务(IaaS)的灵活,并促进了在平台服务提供商之间的迁移。

Kubernetes 是一个什么样的平台?

尽管 Kubernetes 提供了非常多的功能,总会有更多受益于新特性的新场景出现。针对特定应用的工作流程,能被流水线化以加速开发速度。特别的编排起初是可接受的,这往往需要拥有健壮的大规模自动化机制。这也是为什么 Kubernetes 也被设计为一个构建组件和工具的生态系统的平台,使其更容易地部署、缩放、管理应用程序。

标签label[18]可以让客户按照自己的喜好组织资源。 注释annotation[19]让客户在资源里增加用户信息,以优化工作流程,为管理工具提供一个标示调试状态的简单方法。

此外,Kubernetes 控制面板[20]是由开发者和客户均可使用的同样的 API[21] 构建的。客户可以编写自己的控制器,比方 调度器scheduler[22],使用可以被通用的命令行工具[23]识别的他们自己的 API[24]。

这种设计[25]让大量的其它系统也能构建于 Kubernetes 之上。

Kubernetes 不是什么?

Kubernetes 不是传统的、全包容的平台即服务(Paas)系统。它尊重客户的选择,这很重要。

Kubernetes:

  • 并不限制支持的程序类型。它并不检测程序的框架 (例如,Wildfly[26]),也不限制运行时支持的语言集合 (比方, Java、Python、Ruby),也不仅仅迎合 12 因子应用程序[27],也不区分 应用与 服务 。Kubernetes 旨在支持尽可能多种类的工作负载,包括无状态的、有状态的和解决数据的工作负载。假如某程序在容器内运行良好,它在 Kubernetes 上只可能运行地更好。

  • 不提供中间件(例如消息总线)、数据解决框架(例如 Spark)、数据库(例如 mysql),也不把集群存储系统(例如 Ceph)作为内置服务。但是以上程序都可以在 Kubernetes 上运行。

  • 没有“点击即部署”这类的服务市场存在。

  • 不部署源代码,也不编译程序。持续集成 (CI) 工作流程是不同的客户和项目拥有其各自不同的需求和体现的地方。所以,Kubernetes 支持分层 CI 工作流程,却并不监听每层的工作状态。

  • 允许客户自行选择日志、监控、预警系统。( Kubernetes 提供少量集成工具以保证这一概念得到执行)

  • 不提供也不论理一套完整的应用程序配置语言/系统(例如 jsonnet[28])。

  • 不提供也不配合任何完整的机器配置、维护、管理、自我修复系统。

另一方面,大量的 PaaS 系统运行在 Kubernetes 上,诸如 Openshift[29]、Deis[30],以及 Eldarion[31]。你也可以开发你的自己设置 PaaS,整合上你自选的 CI 系统,或者者只在 Kubernetes 上部署容器镜像。

由于 Kubernetes 经营在应用程序层面而不是在硬件层面,它提供了少量 PaaS 所通常提供的常见的适用功能,比方部署、伸缩、负载平衡、日志和监控。然而,Kubernetes 并非铁板一块,这些默认的处理方案是可供选择,可自行添加或者删除的。

而且, Kubernetes 不只是一个编排系统 。事实上,它满足了编排的需求。 编排 的技术定义是,一个定义好的工作流程的执行:先做 A,再做 B,最后做 C。相反地, Kubernetes 囊括了一系列独立、可组合的控制流程,它们持续驱动当前状态向需求的状态发展。从 A 到 C 的具体过程并不唯一。集中化控制也并不是必需的;这种方式更像是编舞。这将使系统更易用、更高效、更健壮、复用性、扩展性更强。

Kubernetes 这个单词的含义?k8s?

Kubernetes 这个单词来自于希腊语,含义是 舵手 或者 领航员 。其词根是 governor 和 cybernetic[32]。 K8s 是它的缩写,用 8 字替代了“ubernete”。


via: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

作者:kubernetes.io[33] 译者:songshuang00 校正:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

  • [1]: 自动化部署、伸缩和操作应用程序容器的开源平台 – http://www.slideshare.net/BrianGrant11/wso2con-us-2015-kubernetes-a-platform-for-automating-deployment-scaling-and-operations

  • [2]: Google 的长达 15 年的成规模的产品级任务的经验下 – https://research.google.com/pubs/pub43438.html

  • [3]: 容器 – https://aucouranton.com/2014/06/13/linux-containers-parallels-lxc-openvz-docker-and-more/

  • [4]: 微服务 – https://martinfowler.com/articles/microservices.html

  • [5]: 协调辅助进程 – https://kubernetes.io/docs/concepts/workloads/pods/pod/

  • [6]: 挂载存储系统 – https://kubernetes.io/docs/concepts/storage/volumes/

  • [7]: 分布式机密信息 – https://kubernetes.io/docs/concepts/configuration/secret/

  • [8]: 检查程序状态 – https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

  • [9]: 复制应用实例 – https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

  • [10]: 使用横向荚式自动缩放 – https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

  • [11]: 命名与发现 – https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/

  • [12]: 负载均衡 – https://kubernetes.io/docs/concepts/services-networking/service/

  • [13]: 滚动升级 – https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/

  • [14]: 资源监控 – https://kubernetes.io/docs/tasks/debug-application-cluster/resource-usage-monitoring/

  • [15]: 访问并读取日志 – https://kubernetes.io/docs/concepts/cluster-administration/logging/

  • [16]: 程序调试 – https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application-introspection/

  • [17]: 提供验证与受权 – https://kubernetes.io/docs/admin/authorization/

  • [18]: 标签 – https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

  • [19]: 注释 – https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/

  • [20]: Kubernetes 控制面板 – https://kubernetes.io/docs/concepts/overview/components/

  • [21]: API – https://kubernetes.io/docs/reference/api-overview/

  • [22]: 调度器 – https://git.k8s.io/community/contributors/devel/scheduler.md

  • [23]: 命令行工具 – https://kubernetes.io/docs/user-guide/kubectl-overview/

  • [24]: 他们自己的 API – https://git.k8s.io/community/contributors/design-proposals/extending-api.md

  • [25]: 设计 – https://github.com/kubernetes/community/blob/master/contributors/design-proposals/principles.md

  • [26]: Wildfly – http://wildfly.org/

  • [27]: 12 因子应用程序 – https://12factor.net/

  • [28]: jsonnet – https://github.com/google/jsonnet

  • [29]: Openshift – https://www.openshift.org/

  • [30]: Deis – http://deis.io/

  • [31]: Eldarion – http://eldarion.cloud/

  • [32]: cybernetic – http://www.etymonline.com/index.php?term=cybernetics

  • [33]: kubernetes.io – https://kubernetes.io/

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 一文理解 Kubernetes 是什么?

发表回复