专栏首页CNCFKubernetes是如何工作

Kubernetes是如何工作

来自Jef Spaleta的客座文章,之前在Sensu博客上发表。

过去几年来,运行容器化应用程序的流行度呈爆炸式增长,这已经不是什么秘密了。能够通过代码提供应用程序的依赖项来迭代和发布应用程序是一个巨大的胜利。Gartner表示,到2022年,“超过75%的全球组织将在生产中运行容器化应用程序”。

https://www.gartner.com/smarterwithgartner/6-best-practices-for-creating-a-container-platform-strategy/

对于大规模运行的组织来说,一个Linux容器实例不足以满足其应用程序的所有需求。对于足够复杂的应用程序,例如通过微服务进行通信的应用程序,需要多个相互通信的Linux容器并不少见。该体系结构引入了一个新的扩展问题:如何管理所有这些单独的容器?开发者仍然需要安排容器在特定机器上的部署,管理它们之间的网络,增加在高负载下分配的资源等等。

来到Kubernetes,一个容器编排系统 - 一种管理容器化应用程序生命周期的方法。它是一种元过程,允许同时自动部署和扩展多个容器。运行相同应用程序的几个容器被分组在一起。这些容器充当副本(replica),并用于负载平衡传入的请求。然后,容器编排器监督这些组,确保它们正确地运行。

容器编排器本质上是负责操作一组容器化应用程序的管理员。如果需要重新启动容器或获取更多资源,则由编排器为你处理。

这是对大多数容器编排器工作原理的一个相当广泛的概述。让我们更深入地研究一下Kubernetes的所有组成部分。

Kubernetes术语和架构

Kubernetes引入了许多词汇来描述应用程序的组织方式。我们将从最小的一层开始。

Pod

Kubernetes pod是一组容器,是Kubernetes管理的最小单元。Pod有一个单独的IP地址,应用于pod中的每个容器。Pod中的容器共享相同的资源,比如内存和存储。这允许将pod内的单个Linux容器作为单个应用程序一起处理,就好像在更传统的工作负载中,所有容器化的进程都在同一主机上运行一样。当应用程序或服务是需要运行的单个进程时,只有一个容器的pod是很常见的。但是,当事情变得更加复杂,并且多个进程需要使用相同的共享数据卷共同工作以实现正确的操作时,与单独在容器之间设置共享资源相比,多容器pod简化了部署配置。

例如,如果你正在处理创建gif的图像处理服务,一个pod可能有多个容器一起工作来调整图像的大小。主容器可能运行接收请求的非阻塞微服务应用程序,然后运行一个或多个辅助(侧车)容器,运行批处理后台进程或清理存储卷中的数据构件,作为管理整体应用程序性能的一部分。

Deployment

Kubernetes deployment(部署)允许你设置希望如何在Kubernetes节点上复制pod的详细信息,从而定义希望运行应用程序的规模。Deployment描述所需运行的相同pod副本的数量,以及更新部署时使用的首选更新策略。Kubernetes将跟踪pod的健康状况,并根据需要删除或添加pod,使应用程序部署达到所需的状态。

Service

单个pod的寿命不能被依赖;从它们的IP地址到它们的存在,一切都有可能发生变化。事实上,在DevOps社区中,有一个概念是将服务器视为“宠物”(pets)或“牛”(cattle)。宠物是你需要特别照顾的东西,而牛则被认为是更值得牺牲的东西。同样,Kubernetes也没有将它的pods视为惟一的长时间运行的实例;如果pod遇到问题而死亡,Kubernetes的工作就是替换它,这样应用程序就不会经历任何停机时间。

Service是对pods的抽象,本质上是各种应用程序使用者交互的惟一接口。当pod被替换时,它们的内部名称和IP可能会发生变化。Service将单个机器名称或IP地址映射到其基础名称和编号可以是不可靠的pod。Service确保在外部网络中,一切看起来都是不变的。

Node

Kubernetes node(节点)管理和运行pod;是执行给定工作的机器(无论是虚拟的还是物理的)。就像pod收集一起操作的单个容器一样,node收集一起工作的整个pod。当你进行大规模操作时,你希望能够将工作移交给一个node,该node的pod可以接收工作。

Master server

这是管理员和用户管理各种节点的主要入口。操作通过HTTP调用,或连接到机器并运行命令行脚本发送给它。

Cluster

Cluster(集群)是将上述所有组件作为一个单元组合在一起。

Kubernetes组件

对于Kubernetes是如何组装的有了一个大致的概念,现在就来看看确保一切顺利运行的各种软件组件。主服务器和单个工作节点都有三个主要组件。

Master server组件

API Server

API服务器向Kubernetes集群暴露一个REST接口。所有针对pod、service等的操作都是通过与它提供的端点通信以编程方式执行的。

Scheduler

调度程序负责将工作分配给各个节点。它监视资源容量,并确保工作节点(Worker node)的性能处于适当的阈值之内。

Controller-manager

controller-manager负责确保集群的共享状态按预期运行。更准确地说,控制器管理器监视响应事件的各种控制器(例如,如果节点发生故障)。

Worker node组件

Kubelet

Kubelet跟踪pod的状态,以确保所有容器都在运行。它每隔几秒钟向主服务器(Master server)提供一条心跳消息。如果复制控制器(replication controller)没有接收到该消息,则节点被标记为不健康。

Kube proxy

Kube代理发送从服务进入节点的流量。它将工作请求转发到正确的容器。

etcd

etcd是一个分布式键值存储,Kubernetes使用它来共享关于集群总体状态的信息。此外,节点可以引用存储在那里的全局配置数据,以便在重新生成它们时设置它们自己。

资源:常见问题 + 进一步阅读

谈到Kubernetes,还有很多内容需要介绍。有关Kubernetes如何工作的更多信息,你可以阅读DigitalOcean的详细分析,以及CNCF的文章。此外,千万不要错过由CNCF主办,Sensu CEO Caleb Hailey关于监测Kubernetes的网络研讨会

https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes

https://www.cncf.io/newsroom/blog/

常见问题

Kubernetes是用来做什么?

Kubernetes跟踪部署到云中的容器应用程序。它重新启动孤立容器,在不使用容器时关闭容器,并在必要时自动提供内存、存储和CPU等资源。

Kubernetes是如何与Docker一起使用?

实际上,Kubernetes支持几个基本的容器引擎,Docker只是其中之一。这两种技术配合得很好,因为Docker容器是分发打包应用程序的有效方法,Kubernetes的设计目的是协调和调度这些应用程序。

如何使用Kubernetes?

如果你对试用Kubernetes感兴趣,可以将Minikube安装为本地测试环境。当你准备实际试用Kubernetes时,你将使用kubectl部署由Kubernetes管理的应用程序。

https://kubernetes.io/docs/tutorials/hello-minikube/

https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/

本文分享自微信公众号 - CNCF(lf_cncf),作者:CNCF

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

原始发表时间:2019-08-20

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes 的网络、存储和运行时该如何处理?

    技术的发展,总是解决了现有的问题,进而引入新的问题,继而继续解决,如此周而复始,Docker 公司在2013年成立,将容器的概念迅速扩散。正如当年集装箱点燃了全...

    CNCF
  • Kubernetes提供的和不提供的安全功能

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

    CNCF
  • CNCF云原生景观的初学者指南

    这个博客最初是由Ayrat Khayretdinov在CloudOps博客上发布

    CNCF
  • Kubernetes 的网络、存储和运行时该如何处理?

    技术的发展,总是解决了现有的问题,进而引入新的问题,继而继续解决,如此周而复始,Docker 公司在2013年成立,将容器的概念迅速扩散。正如当年集装箱点燃了全...

    CNCF
  • 一起使用Kubernetes和Docker的优点

    您可能会听到很多关于Kubernetes和Docker的信息 -您可能想知道哪一个更好。

    February
  • 50 个你必须掌握的 Kubernetes 面试题

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

    iMike
  • 50个你必须了解的Kubernetes面试问题

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

    DevOps时代
  • 容器只是一个起点

    容器,Docker,Kubernetes已经出现有四年了。以致于有些人甚至认为这项技术是成熟的!但是,我强烈认为,容器基础设施的构造任然处于成长阶段。

    Techeek
  • 容器将成为新的Linux

    Linux是过去二十年来彻底改变数据中心的操作系统,如今它已成为应用托管平台无可争议的领导者。很难想象将任何关键任务生产工作负载部署到Linux以外的任何其他平...

    February
  • 容器管理的8个顶级解决方案

    对于选择容器管理解决方案的组织来说,了解给定的解决方案以及提供该解决方案的供应商是很重要的。这是因为每个容器管理提供商的产品都提供了各种功能和工具,这些功能和工...

    静一

扫码关注云+社区

领取腾讯云代金券