前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes是如何工作

Kubernetes是如何工作

作者头像
CNCF
发布2019-12-04 16:38:16
1.4K0
发布2019-12-04 16:38:16
举报
文章被收录于专栏:CNCF

来自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/

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

本文分享自 CNCF 微信公众号,前往查看

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

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

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