1-Overview-(概述 What is Kubernetes)

k8s 是什么

kubernetes是一个可移植的、可扩展的、开放源码的平台,用于管理容器化的工作负载和服务,它有利于声明性配置和自动化。它有一个巨大的,快速增长的生态系统。kubernetes服务、支持和工具是广泛可用的。
kubernetes这个名字来源于希腊语,意思是舵手或飞行员。谷歌在2014年开放了kubernetes项目。kubernetes建立在google在大规模运行生产工作负载方面的15年经验的基础上,结合来自社区的最佳想法和实践。

going-back-in-time 时光倒流

让我们回顾一下为什么kubernetes如此有用。

应用部署变更

软件部署主要经过了几个周期: 传统部署,虚拟化部署,容器化部署

传统部署时代: 一台服务器上运行一个或者多个程序,没有优雅的方法对资源进行资源隔离限制,可能出现一个程序占用大部分的资源,其他程序没有分配到可用的资源; 如果资源不足扩展很不方便,维护成本高

虚拟化部署时代: 单台服务器可以创建多个虚拟机(vm), 通过虚拟机进行资源隔离,安全性有一定提高(程序不能互相访问);虚拟化更好的利用物理服务器资源,可以轻松更新扩展程序,每个vm都是一个完整的机器,在虚拟化硬件之上运行所有的组件,包括自己的os

容器部署时代:容器类似于vm,但它们具有宽松的隔离属性,以便在应用程序之间共享操作系统(os)。因此,容器被认为是轻量级的。与vm类似,容器有自己的文件系统、cpu、内存、进程空间等等。由于它们与底层基础设施分离,因此可以跨云和操作系统分布进行移植。

使用容器部署好处:

敏捷的应用程序创建和部署:与vm映像的使用相比,容器映像的创建更加容易和高效。

持续开发、集成和部署:提供可靠和频繁的容器映像构建和部署,并提供快速和轻松的回滚(由于映像的不变性)。

开发和操作关注点分离:在构建/发布时而不是部署时创建应用程序容器映像,从而将应用程序与基础架构分离。

可观测性不仅显示操作系统级的信息和度量,还显示应用程序的运行状况和其他信号。

跨开发、测试和生产的环境一致性:在笔记本电脑上运行与在云中运行相同。

云和操作系统分布的可移植性:运行在ubuntu、rhel、coreos、prem、google kubernetes引擎和其他任何地方。

以应用程序为中心的管理:将抽象级别从在虚拟硬件上运行操作系统提升到使用逻辑资源在操作系统上运行应用程序。

松散耦合、分布式、弹性、自由的微服务:应用程序被分解成更小的、独立的部分,可以动态部署和管理,而不是运行在一台大型单用途机器上的单一堆栈。

资源隔离:可预测的应用程序性能。

资源利用:高效密集

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

容器是打包和运行应用程序是一种比较优雅方式。在生产环境中,你怎样管理应用程序,应用发布更新且在不停机的状态下进行, 扩展应用程序等.
k8s是这样解决! kubernetes为您提供了一个框架来弹性地运行分布式系统。它可以满足您的扩展需求、故障转移、部署模式等。例如,Kubernetes可以轻松的实现金丝雀部署.

Kubernetes为您提供:

  • 服务发现和负载平衡: Kubernetes 可以使用DNS名称或使用它们自己的IP地址公开容器。如果到容器的流量很高,kubernetes能够平衡负载并分配网络流量,从而使部署稳定。
  • 存储业务流程: kubernetes允许您自动挂载您选择的存储系统,如本地存储、公共云提供商等。
  • 自动展开和回滚: 您可以使用k8s描述部署容器的期望状态,并且它可以以受控速率将实际状态更改为期望状态。例如,可以自动化Kubernetes为部署创建新容器,删除现有容器并将所有资源都采用新容器。
  • 自动装箱: kubernetes允许您指定每个容器需要多少cpu和内存(ram)。当容器具有指定的资源请求时,Kubernetes可以做出更好的决策来管理容器的资源。
  • 自愈: kubernetes重新启动失败的容器,替换容器,杀死不响应用户定义的运行状况检查的容器,并且在客户机准备好服务之前不向客户机公布这些容器。
  • 机密和配置管理: kubernetes允许您存储和管理敏感信息,如密码、oauth令牌和ssh密钥。您可以部署和更新秘密和应用程序配置,而不必重建容器映像,而不会在堆栈配置中公开秘密。

k8s 不可为之

kubernetes不是一个传统的、包罗万象的paas(平台即服务)系统。由于kubernetes是在容器级别而不是硬件级别运行的,因此它提供了一些paas提供的通用特性,如部署、扩展、负载平衡、日志记录和监视。但是,kubernetes不是单一的,这些默认解决方案是可选的和可插入的。kubernetes为构建开发人员平台提供了构建块,但在重要的地方保留了用户选择和灵活性。

不限制支持的应用程序类型。kubernetes旨在支持各种各样的工作负载,包括无状态、有状态和数据处理工作负载。如果应用程序可以在容器中运行,那么它应该在Kubernetes上运行得很好。
不部署源代码,也不生成应用程序。持续集成、交付和部署(ci/cd)工作流由组织文化和偏好以及技术要求决定。
不提供应用程序级服务,例如中间件(例如,消息总线)、数据处理框架(例如,SPARK)、数据库(例如,MySQL)、缓存或群集存储系统(例如,CEPH)作为内置服务。这样的组件可以在Kubernetes上运行,和/或可以通过诸如开放服务代理之类的便携机制在KubNeNETs上运行的应用程序访问。
不要求记录、监视或警报解决方案。它提供了一些集成作为概念的证明,以及收集和导出度量的机制。
不提供或强制要求配置语言/系统(例如,jsonnet)。它提供了一个声明性api,可以由任意形式的声明性规范作为目标。
不提供或采用任何全面的机器配置、维护、管理或自愈系统。
此外,k8s不仅仅是一个编曲系统。事实上,它消除了编排的需要。编排的技术定义是执行已定义的工作流:首先执行a、b、c。相反,kubernetes包含一组独立的、可组合的控制过程,这些过程不断地将当前状态驱动到所提供的所需状态。从A到C应该不重要,也不需要集中控制。这使得系统更易于使用、更强大、更健壮、更具弹性和可扩展性

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!