前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes炼气期之掌握Kubernetes的背景

kubernetes炼气期之掌握Kubernetes的背景

作者头像
公众号: 云原生生态圈
发布2020-06-15 16:55:32
5950
发布2020-06-15 16:55:32
举报
文章被收录于专栏:云原生生态圈云原生生态圈
kubernetes背景

Kubernetes[1],又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是一种可自动实施 Linux 容器[2]操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云[3]私有云[4]混合云[5]部署主机。Kubernetes 是理想的托管平台。

Kubernetes 最初由 Google 的工程师开发和设计。Google 是最早研发 Linux 容器技术的企业之一(组建了cgroups)[6],曾公开分享介绍 Google 如何将一切都运行于容器之中[7](这是 Google 云服务背后的技术)。Google 每周会启用超过 20 亿个容器——全都由内部平台 Borg[8] 支撑。Borg 是 Kubernetes 的前身,多年来开发 Borg 的经验教训成了影响 Kubernetes 中许多技术的主要因素。

红帽是第一批与 Google 合作研发 Kubernetes 的公司之一,作为 Kubernetes 上游项目的第二大贡献者,我们甚至在这个项目启动之前就已参与其中。2015 年,Google 将 Kubernetes 项目捐赠给新成立的云原生计算基金会[9]

Kuberneters(k8s)是谷歌使用了将近20年的一个云产品,是Borg的一个开源版本。Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数中心的资源利用率的最大化。十几年来,谷歌一直通过 Borg 系统管理着数量庞大的应用程序集群。由于谷歌员工都签署了保密协议,即便离职也不能泄露Borg的内部设计,所以外界一直无法了解关于它的更多信息。直到2015年4月,传闻许久的 Borg 论文伴随 Kuberneters 的高调宣传被谷歌首次公开,大家才得以了解它的更多内幕。正是由于站在 Borg 这个前辈的肩膀上,吸取了 Borg 过去十年间的经验与教训,所以 Kubernetes 一经开源就一鸣惊人,并迅速称霸了容器技术领域。

Kubernetes 拥有一个庞大且快速增长的生态系统。因为它是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 的服务、支持和工具广泛可用。

Kubernetes 源于希腊语,意为 "舵手" 或 "飞行员"。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践。

kubernetes时代

通过对比来看一下为什么我们需要kubernetes,为什么新时代需要kubernetes:

传统部署时代: 早期,将单一的应用服务运行在物理服务器上,无法给服务器的应用程序进行资源的限制,导致物理服务器之间的资源负载使用不均衡,就导致了服务器上的应用程序的性能下降,物理服务器的维护成本变得很高。

虚拟化部署时代: 作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机VM。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。

容器部署时代: 容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统OS。因此,容器被认为是目前最轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进行移植。而在容器时代,Docker容器引擎是最流行的一个。

容器因具有许多优势而变得流行起来。下面列出了容器的一些好处:

  • 应用程序的构建和部署:与传统部署时代对比,容器镜像创建显得更简便性、效率更高。
  • 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),提供可靠且频繁的容器镜像构建和部署。
  • 开发与运维分离:在build/deploy而不是在deploy时创建应用程序容器,从而将应用程序与基础架构分离。
  • 可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序容器的运行状况其他指标信息。
  • 能保证开发、测试和生产的环境一致性:即使在便携式的计算机上也能与云上保持相同地运行。
  • 应用服务可以运行在任何支持容器引擎的平台上。
  • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:高效率和高密度。
为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的最好的一种方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统能够自动的处理这种行为,你觉得会不会是更方便。

这就是 Kubernetes 的救援方法!Kubernetes 为您提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足您的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松地实现金丝雀canary发布。

  • 基于容器的应用部署、维护、滚动升级: 不断的将服务运行为按照用户定义服务运行的期望状态
  • 通过service资源对象自实现负载均衡和服务发现: 当出现流量负载的时候,service会将流量按照一定的均衡算法调度到对应的资源组
  • 实现跨机器和跨地域的集群调度: 可以按照用户定义的资源调度方式进行自动化的资源调度
  • 根据资源负载情况实现服务自动伸缩: 获取服务运行负载指标,通过HPA实现服务的自动扩容与伸缩
  • 实现多种类型服务负载,比如有状态和无状态类型服务: 支持例如nginx、filebeat等这种无状态以及MYSQL,Mongodb,Elasticsearch等有状态的集群服务
  • 支持多种类型的存储插件,比如s3,ceph,nfs,glusterfs...
  • 插件机制保证扩展性:通过在不修改源代码的情况下增加类似如CNI、CRI、CSI、Device Plugin、CRD等扩展来解决越来越多的个性化需求
  • 自身有安全防护和资源的准入机制:k8s的一套安全策略,通过用户或组与k8s上一些资源角色绑定从而实现在单一范围内有权限执行动作
  • 实现多租户应用的支撑力:k8s本身具有多层资源隔离的条件例如集群本身、命令空间、节点、pod与容器
  • 透明的服务注册和服务发现机制: 通过k8s的service资源对象与label资源对象实现基本的服务注册与发现
  • 轻松实现服务版本迭代和金丝雀发布:因为k8s本身的特性,实现canary显得非常简单
  • 实现服务在线扩容能力: k8s通过自身的resize功能结合一些存储卷实现不丢失原来数据的情况下进行在线扩容
  • 多粒度细粒度的实现配额管理能力
  • 支持自定义扩展(核心+外围扩展)API
  • ...
Kubernetes 不是什么

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。由于 Kubernetes 在容器级别而不是在硬件级别运行,因此它提供了 PaaS 产品共有的一些普遍适用的功能,例如部署、扩展、负载均衡、日志记录和监视。但是,Kubernetes 不是单一的,默认解决方案是可选和可插拔的。Kubernetes 提供了构建开发人员平台的基础,但是在重要的地方保留了用户的选择和灵活性。

Kubernetes:

  • Kubernetes 不限制支持的应用程序类型。Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。
  • Kubernetes 不部署源代码,也不构建您的应用程序。持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求。
  • Kubernetes 不提供应用程序级别的服务作为内置服务,例如中间件消息中间件、数据处理框架Spark、数据库mysql、缓存、集群存储系统Ceph。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制开放服务代理[10]来访问。
  • Kubernetes 不提供日志记录、监控或警报解决方案。它提供了一些集成作为概念证明,并提供了收集和导出指标的机制。
  • Kubernetes 不提供或不要求配置语言/系统,它提供了声明性 API,该声明性 API 可以由任意形式的声明性规范所构成。
  • Kubernetes 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
  • 此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。相比之下,Kubernetes 包含一组独立的、可组合的控制过程,这些过程连续地将当前状态驱动到所提供的所需状态。从 A 到 C 的方式无关紧要,也不需要集中控制,这使得系统更易于使用且功能更强大、健壮、弹性和可扩展性
支持的云厂商
  • 华为云CCE
  • 阿里云ACK
  • 腾讯云TKE
  • 谷歌云GCE

参考资料

[1]kubernetes官网: https://kubernetes.io

[2]Linux容器: https://www.redhat.com/zh/topics/containers/whats-a-linux-container

[3]公共云: https://www.redhat.com/zh/topics/cloud-computing/what-is-public-cloud

[4]私有云: https://www.redhat.com/zh/topics/cloud-computing/what-is-private-cloud

[5]混合云: https://www.redhat.com/zh/topics/cloud-computing/what-is-hybrid-cloud

[6]cgroup: https://zh.wikipedia.org/wiki/Cgroups

[7]all in container: https://speakerdeck.com/jbeda/containers-at-scale

[8]Borg: http://blog.kubernetes.io/2015/04/borg-predecessor-to-kubernetes.html

[9]CNCF: https://www.cncf.io/

[10]开发服务代理: https://openservicebrokerapi.org/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • kubernetes背景
  • kubernetes时代
  • 为什么需要 Kubernetes,它能做什么?
  • Kubernetes 不是什么
  • 支持的云厂商
  • 参考资料
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档