Kubernetes—它是什么

概述

随着现代web服务的发展,我们希望可以对外提供24×7的应用服务。并且开发者希望一天可以部署多次新版本的应用程序。容器化有助于实现这个目标,它可以让应用程序在不下线的情况下发布新版本。kubernetes可以帮助我们确保这些容器化应用程序在你想要的时间及地点运行,并且帮助这些容器应用找到它们所需要的资源及工具。kubernetes是一个可用于生产环境,开源的容器化的编排平台。

Kubernetes是一个可移植的,可扩展的,开源的平台,由于声明式的配置及自动化的加持,为管理容器化的工作负载及服务提供了极大的便利。它是一个很大的,快速增长的生态体系。

Kubernetes的名称来源于西腊语,意思是舵手或领航员。K8s是一个缩写词,是因为在首字符K与最后一个字母s之间正好为8个字符(ubernete),因此称为K8s。

回顾

让我们回顾一下,软件研发及部署的三个阶段。

传统部署阶段:早期,运行应用程序是在物理服务器上的。在物理服务器上是没有办法为应用程序定义资源边界的,这就导致了资源分配的问题。例如,如果在一台物理服务器上运行多个应用程序,在某些情况下,一个应用程序可以会消耗更多的资源,必然会导致其他应用程序相对的资源减少。要想解决这个问题,可以每一台服务器只部署一个应用程序。但是,这种方式不值得推广,因为某些服务器上的资源并没有得到充分的利用,并且对于一个组织来说,购买及维护更多的服务器是不划算的。

虚拟化部署阶段:在传统部署阶段中,物理机部署带来的诸多问题,所以人们引用了虚拟化技术。它允许我们在一个单个物理服务器的CPU上运行多个虚拟机(Virtual Machines—VMs)。虚拟化允许应用程序在VM之间进行隔离,并且为其提供一定的安全级别,因为一个应用程序的信息不能被其他应用程序随意访问。

虚拟化可以更好的利用物理服务器的资源,并且更易于扩展,可以更容易的添加或更新应用程序,避免资源浪费等等。利用虚拟化你可以将一组物理资源视为一个可以被任意分配的虚拟机集群。

每一个虚拟机都是一个完整的机器,用于运行所有组件。包括它自己的操作系统,底层的虚拟化硬件。

容器化部署阶段:容器和虚拟机(VMs)是类似的。但是它们的隔离特性是相对宽松的,它们在应用程序之间共享着操作系统。因此,容器被认为是轻量级的。与虚拟机类似,一个容器有其自己的系统,共享CPU、内存、进程空间等等。因为它们与底层架构进行分离,因此它们可以跨云及操作系统进行分布。

由于其提供的架构优势,容器化的应用越来越广泛。

  • 敏捷式的应用开发与部署:更易于增加应用。创建容器镜像的复杂度比使用虚拟机镜像更低。
  • 持续开发、交付与部署:通过提供可靠并且频繁的容器镜像构建与发布,更易于快速高效的回滚(由于构建完的镜像是不变的,因此可以快速回滚到之前的版本)。
  • 开发与运维在关注点上进行分离:创建应用容器镜像是在构建/发布时间而不是开发时间,从而将应用程序与基础框架进行解耦。
  • 可观测性:不仅能够观测到操作系统级的信息与指标,还可以监控应用程序的健康度及其他指标。
  • 跨开发、测试与生产环境的不致性:在笔记本电脑上运行与在云端运行是一致性。
  • 云与操作系统发布的可移植性:运行在Ubuntu、RHEL、CentOS、或者公有云都是一样的。
  • 以应用为中心的管理:提高了抽象化的级别。抽象层从运行在虚拟硬件上的操作系统,到运行在逻辑资源的操作系统上的应用程序。
  • 松耦合、分布式、弹性的、微服务:应用程序可以被分解的很小,独立的单元,便于动态的部署与管理。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用率:高效率。

为什么需要Kubernetes以及它能做什么

绑定与运行应用程序最好的办法就是容器。在生产环境中,你需要管理这些运行着应用程序的容器,确保它们持续服务。例如,一个容器退出,其他的容器需要启动。如果这项工作由一个系统来解决不是更容易吗?

Kubernetes提供给你一个弹性的,以分布式方式运行的框架。它负责对你的应用程序进行扩展和故障转移,提供部署模式等等。例如,Kubernetes可以很容易为你的系统提供金丝雀部署管理。

  • 服务发现与负载均衡 通过使用DNS名称或IP地址,Kubernetes可以对外暴露容器。如果一个容器的流量过高,Kubernetes可以均衡分布网络流量,以便使应用程序更加稳定。
  • 存储编排 Kubernetes可以根据我们的选择自动挂载存储系统,公有云提供者或其他存储系统。
  • 自动推送与回滚 你可以使用Kubernstes描述你所需要发布的容器的理想化运行状态,Kubernetes可以通过控制相应的资源以使容器的运行达到其理想化的状态。例如,你可以让Kubernetes自动的为你的部署创建新的容器,删除已经存在的容器并且释放其所持有的所有资源。
  • 自动装箱 Kubernetes可以根据容器的需要分配所使用的CPU及内存的大小,Kubernetes就可以根据你的需要将容器分配到适当的集群中节点中,以便使容器更好的运行。
  • 自我修复 容器失败后,Kubernetes会自动重启该容器,或者替换容器;或者根据用户自定义的健康检查规则,杀掉那些没有应答的容器,直到这些容器可以对外服务后才会被Kuberntes暴露给最终用户,以保证服务对用户的有效性。
  • 密钥及配置管理 Kubernetes让我们存储和管理敏感信息,比如密钥、OAuth的Token及SSH密钥等。你可以部署和更新密钥或者应用配置,而不需要重新编译容器镜像,而不会在你的配置中暴露自己的密钥等敏感信息。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注