跳转到主要内容

热门内容

今日:


总体:


最近浏览:


Chinese, Simplified

category

了解Kubernetes体系结构的关键组件,并对其进行优化以增强操作。

Kubernetes已经成为许多公司的讨伐者,消除了微服务实现复杂API结构可能带来的无政府状态。

然而,就像每一个披着斗篷的十字军战士一样,Kubernetes也有它的缺点。这就是理解Kubernetes体系结构图变得至关重要的地方。

它使您能够理解Kubernetes体系结构的关键组件,并对其进行优化以实现高效操作。不可否认,Kubernetes支持自动化功能,从而简化了应用程序的管理和部署。但是,为了高效地部署Kubernetes,您需要正确的工具和技术来确保更好的ROI。

本文将重点介绍Kubernetes体系结构图、其组件以及帮助您优化部署的工具。

高效的Kubernetes体系结构对于增强应用程序部署至关重要,并提供了竞争优势。Simform可以通过可靠的容器化和编排服务帮助您优化Kubernetes架构,以提高性能。请联系我们,了解有关集装箱化和编排服务的更多详细信息。

什么是Kubernetes?


Kubernetes是一个容器编排系统,有助于实现应用程序部署、扩展和管理的自动化。它将容器分组为逻辑单元,使管理它们变得更容易。Kubernetes提供了自动扩展、负载平衡、自我修复和服务发现等功能。它最初由谷歌构建,目前由云原生计算基金会维护。

什么是Kubernetes架构?


Kubernetes体系结构是一组分布在不同服务器或集群中的组件,它们协同工作,以确保为容器化工作负载提供可靠且适应性强的环境。

每个Kubernetes集群都由控制平面节点和工作节点组成。让我们详细了解Kubernetes体系结构图中的这些和其他关键元素。

Kubernetes架构


Kubernetes架构组件


Kubernetes体系结构遵循主-工作者模型,其中被称为控制平面的主节点管理工作者节点。另一方面,容器(封装在pod中)在工作节点中部署和执行。这些节点可以具有虚拟机(本地或云上)或物理服务器。

让我们分解一下此体系结构的关键组件:

控制平面


控制平面负责容器编排并维护集群的状态。

Kubernetes控制平面组件


Kubernetes控制平面由几个组件组成,每个组件负责一个特定的任务(如下所述)。这些组件协同工作以确保每个Kubernetes集群的状态与预定义的期望状态相匹配。

kube apiserver


kube-API服务器帮助用户和其他组件轻松地与集群进行通信。一些监控系统和第三方服务也可能(很少)使用它与集群进行交互。当使用像kubectl这样的CLI来管理集群时,可以使用HTTPRESTAPI与API服务器进行通信。

API服务器组件


来源:DevOps Cube博客作者:Bibin Wilson

然而,内部集群组件(如调度程序和控制器)使用gRPC进行此通信。

API服务器对其与其他组件的通信进行加密,以通过TLS确保安全。其主要功能是管理API请求、验证API对象的数据、验证和授权用户,以及协调控制平面和工作节点组件之间的过程。

API服务器仅与etcd配合使用,并包含内置的bastionapiserver代理,允许外部访问ClusterIP服务。

etcd


etcd是一种用于以分布式方式存储键值数据的有用工具。它是为存储有关Kubernetes集群的数据而设计的,例如有关pod、它们的状态和名称空间的信息。etcd只能从API服务器访问以维护安全性。

etcd架构
来源:DevOps Cube博客作者:Bibin Wilson

Kubernetes使用etcd通过gRPC管理其密钥值API。所有对象都以键值格式存储在/registry目录项下。

Kubernetes的api服务器使用etcd的监视功能来监视对对象状态的任何修改。作为控制平面中唯一的Statefulset组件,etcd是Kubernetes的优秀数据库。

kube调度器


在Kubernetes集群中部署pod时,kube调度器会确定满足pod要求的最佳工作节点,如CPU、内存和亲和力。识别后,它会将吊舱安排在右侧节点上。

这一过程之所以成为可能,是因为etcd在存储Kubernetes平稳运行所需的重要信息方面发挥了作用。每当向Kubernetes发出请求时,必要的信息都会存储在etcd文件柜中。

Kubernetes使用多种技术调度pod。

首先,它过滤所有可用的节点,为pod找到最好的节点。然后,它根据调度插件为每个节点分配一个分数。调度器选择最好的节点并将pod绑定到它。这个过程确保高优先级的pod获得应有的优先级,并且可以很容易地将自定义插件添加到混合中。这是管理Kubernetes pod的一种创新且高效的方式。

kube控制器经理


kube控制器管理器处理不同的控制器,这些控制器有助于创建容器的副本,并确保集群保持在所需的状态。


来源:DevOps Cube博客作者:Bibin Wilson

例如,当您创建一个清单YAML文件来指定部署(两个副本、一个卷装载、配置映射等)时。使用内置的部署控制器,部署将始终保持在所需状态。

kube控制器管理器管理的控制器有几种类型:

  • 部署控制器(Deployment controllers)处理在容器内运行的应用程序的多个副本的部署。
  • 复制控制器(Replication controllers)确保特定数量的pod复制副本始终在运行。如果pod出现故障,复制控制器将创建一个新的pod来代替
  • StatefulSet(StatefulSet controllers)控制器提供了有用的功能,如持久存储、唯一的网络标识以及部署和扩展应用程序的受控方式。
  • DaemonSet控制器(DaemonSet controllers )确保特定pod在集群中的每个节点上运行,或者仅在基于特定标签的选定节点上运行。


云控制器管理器


在云环境中部署Kubernetes时,桥接云平台API和Kubernete集群至关重要。这可以使用云控制器管理器来完成,它允许核心Kubernetes组件独立工作,并允许云提供商使用插件与Kubernete集成。


来源:DevOps Cube博客作者:Bibin Wilson

如果您使用的是AWS,云控制器管理器会很有帮助。它作为Kubernetes控制平面和AWS API之间的中介。它提供了额外的功能并与AWS服务集成,如EC2实例、弹性负载均衡器(ELB)和弹性块存储(EBS)卷。

工作节点


工作节点是Kubernetes体系结构中的关键组件,因为它们有助于运行容器化应用程序。

Kubernetes工作节点组件


工作节点是Kubernetes集群中运行实际工作负载的主要执行单元。每个工作节点可以承载多个pod,每个pod包含一个或多个在其中运行的容器。每个工作节点由三个组件组成,负责调度和管理这些pod:

kubelet


kubelet是运行在Kubernetes集群中每个节点上的重要组件。它充当一个代理,负责向API服务器注册工作节点,并主要从API服务器使用podSpec。

kubelet为pod创建、修改和删除容器。此外,它还处理活动性、就绪性和启动探测。它还通过读取pod配置并通过调用API服务器创建报告Nodepod状态的相应目录来装载卷。

CNI组件
来源:DevOps Cube博客作者:Bibin Wilson

kubelet可以接受来自各种来源的podSpec,包括文件、HTTP端点和HTTP服务器。它还使用节点的容器运行时来提取图像、运行容器等。

Kubelet在引导控制平面的同时,将api服务器、调度器和控制器管理器作为静态pod启动。kubelet在管理容器和确保吊舱处于所需状态方面至关重要。

kube代理


要了解Kube代理,您必须了解Kubernetes服务和端点对象。服务对象向流量公开pod,端点对象包含pod的IP地址和端口。Kube代理是一个实现Services for pod的组件。

当您使用服务公开pod时,Kube代理会创建网络规则,将流量发送到分组在Service对象下的pod。Kube代理代理UDP、TCP和SCTP协议,但不代理HTTP,并作为守护程序集在每个节点上运行。

CNI组件
来源:DevOps Cube博客作者:Bibin Wilson

Kube-proxy与API服务器通信,以获取有关服务及其各自的pod IP和端口的详细信息。它监视服务更改和端点,然后使用各种模式创建或更新将流量路由到服务后面的pod的规则。

这些模式包括IPTables、IPVS、Userspace和Kernelspace。当使用IPTables模式时,Kube代理使用IPtable规则处理流量,并随机选择一个后端pod进行负载平衡。

容器运行时


就像运行Java程序需要Java Runtime(JRE)一样,容器运行时对于运行容器也是必不可少的。容器运行时负责各种任务,例如从容器注册表中提取图像,为容器分配和隔离资源,以及管理主机上容器的整个生命周期。

Kubernetes通过容器运行时接口(ContainerRuntimeInterface,CRI)与容器运行时交互,该接口定义了用于创建、启动、停止和删除容器以及管理映像和容器网络的API。

容器体系结构
来源:DevOps Cube博客作者:Bibin Wilson

开放容器倡议(OCI)是一套容器格式和运行时的标准。Kubernetes支持多个符合CRI的容器运行时,如CRI-O、Docker Engine和containerd。

kubelet代理使用CRI API与容器运行时交互,以管理容器的生命周期,并将所有容器信息提供给控制平面。

Kubernetes集群加载项组件


为了保证Kubernetes集群的完整功能,必须将补充的附加组件与主要组件结合在一起。附加组件的选择很大程度上取决于您的项目需求和用例。

集群上可能需要的一些流行插件组件包括用于网络的CNI插件、用于DNS服务器的CoreDNS、用于资源度量的Metrics server以及用于通过Web UI管理对象的Web UI。

通过启用这些附加组件,您可以极大地提高Kubernetes集群的性能和功能。

CNI插件


容器网络接口(CNI)是为容器创建网络连接的一种方式,它可以与许多不同的编排工具一起使用,而不仅仅是Kubernetes。组织对容器网络有不同的需求,比如安全性和隔离性。

许多不同的公司都使用CNI为这些需求创建了解决方案。这些解决方案被称为CNI插件,您可以根据自己的需求选择一个。

CNI插件
来源:DevOps Cube博客作者:Bibin Wilson

这就是在Kubernetes中使用CNI插件时的操作方式:每个pod(一个容器或一组容器)都有一个唯一的IP地址。然后,CNI插件将吊舱连接在一起,无论它们位于何处。这意味着即使pod位于不同的节点上,它们也可以相互通信。

存在许多不同的CNI插件,包括流行的插件,如Calico、Flannel和Weave Net。根据您的具体需求选择合适的是至关重要的。容器网络是一项巨大的责任,但CNI插件使管理更容易。

顶级Kubernetes工具


Kubernetes工具有助于自动化容器部署、扩展和操作。它们还监视应用程序的运行状况,以防止所有实例同时被销毁。我们将根据以下分类讨论这些工具,

Kubernetes CLI工具

  • kubectl:Kubernetes的主要CLI工具;它允许管理应用程序和集群。使用Kuectl,您可以检查集群资源、创建、更新、删除组件等等。
  • Helm:一个简化Kubernetes应用程序安装和管理的Kubernete包管理器。它通过Helm Charts管理Kubernetes应用程序,Helm Chart定义、安装和升级复杂的Kubernete应用程序。
  • Skafold:一个命令行工具,用于促进Kubernetes应用程序的持续开发。它自动化了构建、推送和部署应用程序的工作流程。
    自定义:Kubernetes本机配置管理工具允许在不需要模板引擎的情况下进行自定义的Kubernets部署。它支持多种构建策略,如战略合并补丁、JSON 7001补丁等。
  • Kubeval:一个验证Kubernetes配置文件的工具,确保它们有效且格式正确。它可以在本地和CI/CD中运行,确保在部署之前配置正确。


Kubernetes监控工具

  • Sematext Monitoring:针对部署在Kubernetes上的传统和基于微服务的应用程序的实时监控解决方案,具有可定制的警报、分析报告和仪表板。它还提供了Kubernetes Audit集成和基础设施映射。
  • Kubernetes Dashboard:一个用于Kubernete集群的简单的基于web的UI插件,它提供了与节点间内存和CPU使用统计信息相关的基本指标,并能够监控工作负载的运行状况。
  • Prometheus:普罗米修斯是一种流行的用于监控Kubernetes的开源工具,它利用了强大的多维数据模型、灵活的查询语言(PromQL)和内置的实时警报机制。它遵循度量的拉动模型。
  • Grafana:它通常与普罗米修斯一起用于监视和可视化度量。它为您的Kubernetes集群数据提供了强大的可视化选项。
    Jaeger:您可以跟踪和监控复杂的面向微服务的体系结构。它有助于对系统中的瓶颈进行故障排除和查找。
     

Kubernetes安全工具

  • 开放策略代理(OPA):一个通用的策略引擎,用于强制执行上下文感知的安全策略,填补了Kubernetes的Pod安全策略被弃用后留下的空白。
  • KubeInter:一个静态分析工具,根据最佳实践扫描Kubernetes YAML文件和Helm图表,重点关注安全性和生产准备情况,并识别潜在的错误配置。
  • Kube bench:一个Go编写的工具,根据CIS Benchmark for Kubernetes中建议的安全检查来审计Kubernete设置,方便用于自我管理的控制平面。
  • Kube-hunter:一种安全工具,旨在识别Kubernetes集群中可利用的弱点,具有利用漏洞寻找进一步可能利用的独特功能
  • Terrascan:一个使用OPA的基础设施即代码静态代码分析器,提供500多个安全最佳实践策略,并在配置基础设施之前识别漏洞。

Kubernetes部署工具

  • Jenkins:虽然搜索结果中没有明确引用,但Jenkins是一个开源的自动化工具,为构建、部署和自动化项目提供插件。它支持为Kubernetes实现连续集成或连续交付(CI/CD)管道。
  • Spinnaker:它是一个支持部署到Kubernetes、AWS、GCP等的多云连续交付平台。它支持高级部署策略,如金丝雀和蓝/绿部署,以获得更高的可用性。
  • io:一个强大的Kubernetes CD工具,可以自动将服务部署到Kubernete。它检测新的映像,观察映像存储库,更新配置,并确保每个更新都正确地部署到集群中。


Kubernetes架构最佳实践


Kubernetes体系结构有几个组件,使容器管理更容易。优化这些组件并提高部署效率需要应用Kunernetes体系结构的最佳实践,如包含名称空间、使用安全策略和监控集群策略。

  • 拥抱命名空间:使用命名空间在用户或团队之间逻辑地划分集群资源。这提高了资源隔离和系统的安全性。
  • 利用就绪状态和活跃度探测器:这些探测器可以监测容器运行状况,检查就绪状态,并在需要时重新启动,从而提高可用性。
  • 设置资源请求:定义容器的资源请求和限制,以确保有足够的资源以最佳方式运行。
  • 选择高级部署对象:使用Deployments、DaemonSets、ReplicaSets或StatefulSets等应用程序部署pod。这些抽象有助于扩展、滚动更新和自我修复机制。
  • 在多个节点上部署:将工作负载分布到多个节点,以增强可用性和可扩展性。
  • 实施基于角色的访问控制(RBAC):通过基于特定用户角色和权限限制对资源的访问,实施RBAC策略以增强安全性。
  • 选择外部托管的云服务:考虑使用可靠的云服务从外部托管您的Kubernetes集群。云服务有助于提高可扩展性,并具有内置的安全功能。
  • 定期更新到最新的Kubernetes版本:使用最新的库伯内特版本更新您的系统,以利用安全补丁、错误修复和新功能。
  • 监控集群资源和审核策略日志:实施监控工具来跟踪集群资源,以进行故障排除和优化。此外,启用对策略日志的审核,以确保法规遵从性并增强安全性。
  • 对配置文件采用版本控制:使用版本控制系统来管理Kubernetes配置文件。这样可以方便地跟踪更改,促进团队协作,并确保版本控制。
  • 使用标签进行资源组织:将标签附加到Kubernetes资源上,以进行有效的组织和逻辑分组。
  • 指定稳定的API版本:在定义配置时,始终指定最新的稳定的API版本,以确保兼容性和稳定性。
     

关键要点

  • Kubernetes是一个编排平台,可自动化容器部署、扩展和管理,简化复杂的应用程序部署并实现无缝扩展。
  • Kubernetes体系结构由控制平面节点和工作节点组成。当容器在工作节点上执行时,控制平面管理容器编排。
  • Kubernetes控制平面的关键组件:kube apiserver等,kube调度器,kube控制器管理器和云控制器管理器(CCM)。
  • 工作节点组件:kubelet、kube proxy和容器运行时(例如CRI-O、Docker Engine)。
  • Kubernetes集群附加组件增强了集群功能,包括用于网络的CNI插件、用于DNS服务器的CoreDNS、用于资源度量的Metrics server和用于对象管理的Web UI。
  • 顶级Kubernetes工具:用于管理应用程序和集群的kubectl,用于通过Helm Charts管理Kubernete应用程序的Helm,用于持续开发的Skafold,自定义以进行自定义部署,Kubeval用于验证配置文件。
  • Kubernetes监控工具:用于实时监控、可视化和跟踪的Sematext monitoring、Kubernets Dashboard、Prometheus、Grafana和Jaeger。
  • Kubernetes安全工具:开放策略代理(OPA)、KubeInter、Kube bench、Kube hunter和Terrascan,用于执行安全策略、审核设置和识别漏洞。
  • Kubernetes部署工具:Jenkins、Spinnaker和Fluxcd.io,用于自动化和连续交付,支持高级部署策略以获得更高的可用性。
     

结论


有效地实现Kubernetes需要一个健全的体系结构,所有组件都同步工作。Kubernetes体系结构最重要的是它对应用程序部署的影响。正确部署不仅有助于改善用户体验,还可以确保您拥有竞争优势。

本文地址
最后修改
星期二, June 4, 2024 - 22:02
Tags
 
Article