揭开面纱:Kubernetes架构详解

简介: 本文讲的是揭开面纱:Kubernetes架构详解如果你正在实现容器的落地,你需要一个容器管理平台。假如你正在阅读本文,那你很有可能已经考虑了Kubernetes的优势。
【编者的话】 本文介绍了Kubernetes中的主要组件和各个组件的工作模式。

入门导论:Kubernetes组件和组件之间如何协同工作

本文讲的是揭开面纱:Kubernetes架构详解如果你正在实现容器的落地,你需要一个容器管理平台。假如你正在阅读本文,那你很有可能已经考虑了Kubernetes的优势。

什么是Kuberbetes?这个异常火爆的容器编排引擎的内在到底是些什么?它们如何一同为处理生产环境中的容器化应用提供一个面向未来的、可靠的、可伸缩的潜在方案?(请注意这里故意使用了“潜在”这一词,稍后我们会解释为什么要用这个词)。

本文中,我们将讨论Kubernetes是如何工作的,以及它为什么具有支持企业级软件/容器管理的可能性(又有了这个词)。

Kubernetes是什么?

Kubernetes(通常简称为K8S),是一个用于管理在容器中运行的应用的容器编排工具。

Kubernetes不仅有你所需要的用来支持复杂容器应用的所有东西,它还是市面上最方便开发和运维的框架。

Kubernetes的工作原理是通过将容器分组来把一个应用程序拆分成多个逻辑单元,以方便管理和发现。它对由小且独立的服务组成的微服务应用特别有用。

尽管Kubernetes运行在Linux上,他其实是平台无关的,可以在裸机、虚拟机、云实例或OpenStack上运行。

面纱之下是什么?

为了理解Kubernetes的工作原理,让我们先来剖析下Kubernetes的结构。

Kubernetes 的主节点(Master Node)

让我们先来谈谈 主节点(Master) 。这是Kubernetes的控制面板或控制平面。这里是制定有关集群的决策的地方,例如调度,以及对集群事件的探测/响应。主节点的组件可以在集群中的任何节点上运行。下面是主节点的关键组件的分解:
  • API服务器(API Server):这是Kubernetes控制面板中唯一带有用户可访问API以及用户可交互的组件。API服务器会暴露一个restful的Kubernetes API并使用JSON格式的清单文件(manifest files)。
  • 集群的数据存储(Cluster Data Store):Kubernetes使用“etcd”。这是一个强大的、稳定的、高可用的键值存储,被Kubernetes用于长久储存所有的API对象。可以认为它就是集群的“真相之源”。
  • 控制管理器(Controller Manager):被称为“kube-controller
    manager”,它运行着所有处理集群日常任务的控制器。包括了节点控制器、副本控制器、端点(endpoint)控制器以及服务账户和令牌控制器。每一个控制器都独立工作以维护其所需的状态。
  • 调度器(Scheduler):调度器会监控新建的pods(一组或一个容器)并将其分配给节点。
  • 仪表板(Dashboard)(可选):Kubernetes提供网页UI来简化用户与API服务器(API Server)的交互。

Kubernetes的工作节点(Worker Node)

Kubernetes中第二重要的部分就是 工作节点 。鉴于主节点负责管理集群,工作节点就负责运行容器,并提供Kubernetes的运行环境。

工作节点包含了一个kubelet。它是主节点代理(primary node agent)。它会监控已被分配给该节点的pods中的API服务器。Kuberet执行任务并维护一个将pod状态报告给主节点的渠道。

每个pod里都有容器,kubelet通过Docker(拉取镜像、启动和停止容器等)来运行这些容器。它还会定期执行被请求的容器的健康探测程序。除了Docker之外,Kubernetes也支持RKT,此外社区也正在积极努力的支持OCI。

工作节点里的另一个组件是kube-proxy。它负责节点的网络,在主机上维护网络规则并执行连接转发。它还负责对正在服务的pods进行负载平衡。

Kubernetes的Pods

正如前文所说,一个pod就是一个或一组共享网络/存储的容器(比如Docker容器)。每个pod包含有关如何运行容器的信息。可以将pods看作是一个用于运行容器的闭包环境。

Pods也是做弹性伸缩时的基本单位。如果你需要对一个应用的组件做伸缩,可以通过添加和移除pod来实现。

如果容器间紧密的耦合,就可以在一个pod里运行多个容器(每个容器都共享同样的IP和挂载的卷)。

Pods被部署在单独的节点上,并有一个给定的生命周期。他们可能处于pending、running、succeeding或failing的状态,但是pod一旦销毁,就永远不会被复原。如果一个pod被销毁,你只能通过副本控制器或其他控制器来创建一个新的pod。

各组件之间如何协同工作?

现在你已经了解了Kubernetes的面纱下面有些什么,再看看它们是如何对容器化应用的部署、扩展和操作实现自动化。

就像所有好用的自动化工具一样,Kubernetes使用了对象说明或蓝图来管理系统该如何运行。你只需告诉Kubernetes你想要发生些什么事,其他的事情它自己就会处理。就好比是雇佣一个承包商来翻修你的厨房。你并不需要知道他们具体在做什么。您只需指定好结果,批准施工蓝图就可以让他们去处理剩下的部分。Kubernetes也以同样的方式工作。Kubernetes的操作基于声明式模型,在清单文件(manifest file)中定义的对象说明表明了集群该怎么运行。用不到使用一堆的命令,Kubernetes会做所需要的事情来完成给定的目标。

构造你的蓝图

Kubernetes的蓝图由多个模块组成。用这些模块就可以组合出你的蓝图,然后交由Kubernetes去按图施工。模块里包含了该如何设置容器的说明,你也可以修改已运行的Apps的说明, Kubernetes会调整你的系统以符合给出的要求。

这是一场革命。正如云技术革新了基础设施的管理一样,kubernetes和其他编排系统正如风暴般席卷了应用开发领域。如今,DevOps团队有这个潜力(再次出现这个词)来轻松地部署、管理和操作应用程序。你只需通过主节点上的控制器的API接口将您的蓝图发送到Kubernetes即可。

一些已有模块能帮助你定义蓝图,其中比较重要的如下所示:
  • Pods– 用于描述一组需要运行在一起的容器
  • 服务(Service)– 描述了一组提供了有效服务的pods. 服务通常都被用来定义pods的集群。
  • 持久卷(Persistent Volumes)– Kubernetes对持久存储的抽象定义。Kubernetes支持许多类型的卷,比如NFS、Ceph、GlusterFS、本地目录等等。
  • 命名空间(Namespaces)– 这是一个用来分组、分离和隔离对象的工具。名称空间用于访问控制、网络访问控制、资源管理和引用。
  • 入口规则(Ingress rules)– 制定了如何将进入的网络流量路由到服务和pods上。
  • 网络规则(Network policies)– 定义了集群中pods之间的网络访问规则。
  • 配置和密钥(ConfigMaps and secrets)– 用于把配置信息从应用程序中分离出来。
  • 操作器(Controllers)– 实现了不同的自动化管理pods的策略。可分为三种类型:
    1.部署(Deployment)– 负责维护并运行一组相同类型的pods。
    2.守护进程设置(DaemonSet)– 根据条件在每个节点上运行特定类型的pod。
    3.状态设置(StatefulSet)– 当同类型的多个pods需要并行运行时,而且每个pod都需要有一个特定的身份时,可以使用该操作器。

Kubernetes自身是如何防止攻击的

Kubernetes可以同时在虚拟机或物理机上运行和控制一组节点,并通过在每个节点上运行代理来实现这第一点。该代理通过用于将蓝图发送给Kubernetes的API来与主节点通信。代理被注册在主节点上,并为Kubernetes提供关于节点的信息。通过API,代理确定哪些容器需要在相应的节点上运行以及如何配置它们。

主节点上运行了多个Kubernetes的组件。这些组件一同决定了容器分配以及配置的控制策略。

此外,主节点和代理也可以与云服务提供商交互,并管理额外的云资源,如负载平衡器、持久卷、持久块存储、网络配置和实例。主节点也可以是运行了Kubernetes组件的单个实例,或是一组实例来确保高可用性。主节点还可以作为一个工作节点来运行容器(在某些配置中),尽管这种配置不推荐用于生产。

意识到Kubernetes真正带来的潜力

作为容器管理工具的领头羊,Kubernetes拥有为企业级生产化容器应用提供坚实的基础架构和伸缩性所需的所有组件。作为一个开源项目,kubernetes拥有开放标准和一个庞大的社区,它还保证了相当的灵活性以便快速适应当今不断变化的IT环境。但是回想一下我们在开头有关Kubernetes的“可能性”的陈述。虽然它能兑现许多承诺,但每个企业都应该注意到其中还有许多障碍还未被攻克。

尽管深受人们喜爱,但管理Kubernetes还是一个耗时的过程,需要技能熟练的员工和高额的资金投入。为了应对这些挑战,每天都有Kubernetes的管理工具涌现,但是找到正确的,并能适应不断变化的IT环境的工具还是一个难题。

【作者语】 说到容器管理工具,Kubernetes当属第一梯队。本文助你熟悉Kubernetes的部件以及它们之间如何协同工作。

原文链接:Under the Hood: An Intro to Kubernetes Architecture(翻译:马申君)

原文发布时间为:2017-09-29

本文作者:望出扶风

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:揭开面纱:Kubernetes架构详解

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
运维 Kubernetes Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
284 2
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
11月前
|
Kubernetes Devops API
从零到面试高手:每个 DevOps 专业人士都必须知道的 20 个 Kubernetes 架构问答
Kubernetes 是当前 DevOps、云原生和 SRE 领域的关键技能。本文总结了 20 个高频面试问题,涵盖架构组件、工作原理及核心概念,助你轻松掌握 Kubernetes 基础,提升面试与实战能力。
530 2
|
边缘计算 Kubernetes 物联网
Kubernetes 赋能边缘计算:架构解析、挑战突破与实践方案
在物联网和工业互联网快速发展的背景下,边缘计算凭借就近处理数据的优势,成为解决云计算延迟高、带宽成本高的关键技术。而 Kubernetes 凭借统一管理、容器化适配和强大生态扩展性,正逐步成为边缘计算的核心编排平台。本文系统解析 Kubernetes 适配边缘环境的架构分层、核心挑战与新兴解决方案,为企业落地边缘项目提供实践参考。
999 0
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
768 82
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
799 60
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?