📜  侧重于 AWS Elastic Kubernetes 服务的 Kubernetes 集群组件

📅  最后修改于: 2021-10-21 04:59:08             🧑  作者: Mango

云原生计算基金会一年两次的调查中,十分之四的企业报告称,他们正在生产环境中运行 Kubernetes。

随着越来越多的组织转向使用容器的微服务和云原生架构,他们正在寻找强大的、经过验证的平台。从业者正在转向 Kubernetes。借助 Kubernetes,您可以采取切实措施提高 IT 安全性。

不可否认,Kubernetes 风靡一时,风靡全球。但是,作为一个探索不断扩大的云计算领域的外行,您有没有想过 Kubernetes 是什么?它有什么作用,它是如何构建的?本文旨在简要回答上述问题,并为 Kubernetes 集群的各种组件奠定坚实的基础。它还包含由流行的云服务提供商(如 Amazon Web Services (EKS))提供的 Kubernetes 服务。

什么是容器?

传统上,由锡或塑料制成的物理容器可存放饼干、干果和其他可食用用具的混合物。他们将食物与外在环境隔离开来,并将其锁在气密、防水的环境中。这可以防止它们变得陈旧和变软。

DevOps 容器在后一种功能上有所不同。它们是标准化的软件包,可压缩应用程序的代码及其特定于环境的依赖项(如运行时、系统工具和设置),以便应用程序具有平稳可靠的跨平台执行。传统的有形容器将内容与外部环境隔离开来,而基于云的容器则复制了以平台为中心的依赖关系,以实现多平台实施并减少跨平台的矛盾。操作系统因此被虚拟化,并且可以仅在一个操作系统实例上为多个工作负载优化解决方案。

什么是 Kubernetes?

Kubernetes 是一个用于容器和容器化应用程序的开源编排系统。它促进了他们的自动化部署、扩展和管理。它由谷歌创建,现在归云原生计算基金会所有。

通俗地说,Kubernetes 就像一个管理者,通过消除最初用于扩展和部署的手动方法来监督容器操作的计算机化。需要注意的重要一点是,Kubernetes 不仅仅是一个普通的编排系统,坚持执行规定的、机械化的工作流。它是可理解的、独立的控制过程的构成,将系统的现有状态驱动到预定的期望状态。 Amazon Web Services 等各种公共云提供商为 Elastic Kubernetes Services (EKS) 提供动态灵活性,以在云中或本地启动、运行和扩展 Kubernetes 应用程序。

另一个花絮是,当我们谈论 Kubernetes(K8s)时,我们指的是 Kubernetes 集群。 Kubernetes 集群是一组运行和指导容器化应用程序的工作和管理单元(节点)。在集群内,容器可以跨多个环境运行。 AWS EKS Distro 可用于创建强大而健全的 Kubernetes 集群。我们现在将讨论 Kubernetes 集群的架构框架及其中的组件。

                                

Kubernetes 集群的框架

通过检查上述信息图,您可以推断出典型的 K8s 集群分为 2 个主要单元:控制平面和数据平面。让我们深入研究每个单元的细节以及每个单元中嵌入的各种组件。

控制平面

控制平面作为 K8s 集群的大脑。它为集群做出全局决策并响应集群事件。它也被称为主节点。这是因为,在 AWS EKS 等云服务提供商中,控制平面会调节在其下注册的各种工作节点的工作流程。 Kubernetes 在独特的虚拟私有云(VPC)中提供灵活的网络接口,以将控制平面连接到工作节点。EKS 控制平面还允许将审计和诊断日志从控制平面记录到 CloudWatch 日志以进行更好的备份。控制平面有 5主要子单位。

1.库贝API服务器– API是一个应用程序编程接口,其允许两个应用程序相互通信和共享数据。 API 服务器无需自定义应用程序开发即可公开 API 数据,从而促进数据流动。 Kube API 服务器通过验证和组织状态(数据)为集群提供前端。在确定状态或请求的有效性后,Kube API 服务器对其进行处理并允许经过身份验证的用户、外部组件和集群组件相互交互。

2. ETCD-发音为’ET-CEE-DEE’,这是一个开放源码的键值(分层组织的)存储。它是一种强大且可靠的方式来存储集群要使用的数据。 ETCD 允许用户使用简单的 HTTP 工具(如 curl)读写代码。需要注意的重要一点是,如果 K8s 集群使用 ETCD 作为其主要后备存储,则必须制定完善的备份计划。这是因为所有 K8s 对象都存储在 ETCD 中,并且如果在灾难性情况下丢失集群,则需要定期的死锁来恢复集群。 ETCD 内置快照和卷快照是 ETCD 集群备份的 2 个广泛范围。在 AWS 中,ETCD 完全由 EKS 管理。 EKS 为每个集群运行定制的专用 ETCD,并提供灵活性和可扩展性。

3.库贝控制器管理器-控制器管理器运行控制器处理。这就像一个典型的项目经理。由它执行的控制(非终止)循环使用 API 检查数据流和集群的共享状态。 AWS EKS 控制器管理器调节控制器进程以实现所需的里程碑。通常在集群中运行各种控制器。但为了简化工作流程,所有控制器都被编译到一个进程中。

4. Kube Scheduler – EKS Kube Scheduler 是一个将 pod 分配给节点的过程。它在评估它们的配置、原型和目的时,决定哪个节点是有问题的 pod 的有效手段。然后它将每个 pod 分配到其各自的节点并链接它们。当我们深入研究数据平面的组件时,我们将详细讨论 pod。

5. 云控制器管理器——云控制器管理器运行 CSP 特定的控制器。 AWS EKS Cloud Controller Manager 创建和管理 AWS 负载均衡器和节点的生命周期。这意味着本地 Kubernetes 集群不需要它们。就像 Kube 控制器管理器一样,云控制器管理器也将控制循环编译到一个文件中。它们的主要函数是将集群链接到电信运营商的API和过滤仅与集群交互的组件。

数据平面

数据平面充当典型 Kubernetes 集群的主体。它从大脑(控制平面)接收请求和指令,并在充当器官的各种工作节点中执行所需的过程。数据平面提供内存、网络和存储等服务,以允许对基准状态进行灵活和动态的处理。数据平面最初由多个工作节点(虚拟机)组成,以简化状态的可用性并提高性能。我们现在将讨论常规工作节点的各种组件。

1.波德-甲荚是Kubernetes群集内最小的,基本部署对象。如果再次查看信息图,您可以看到一个 pod 包含一个 Docker 容器(或任何容器)。 Pod 为容器创建一个运行环境层,以抽象容器运行时以允许用户界面。简单来说,它是一个包含单个或多个 dockers/containers 的抽象,其中包含特定于容器的资源,如网络、共享卷等。一个 pod 通常只支持一个应用程序的执行,但它也可以运行多个应用程序。

2.服务-就像每个网站都有一个URL来标识,每个吊舱分配一个IP地址,以方便沟通。由于 pod 容易受到损坏并且可能由于服务故障而崩溃,因此它们可以轻松复制并在以后分配新的 IP 地址。但是,IP 地址的差异会危及集群组件的交互。服务是分配给每个 Pod 的永久 IP 地址。因此,即使 pod 崩溃并在其位置创建了一个新的 pod,它也将拥有与之前的 pod 相同的服务。

3.容器运行时-容器运行时是运行容器所需的软件。在 AWS EKS 中,集群中使用的容器运行时甚至可能随时间而变化。但这不会影响 Docker 的实现。

4. Kubelet -一个Kubelet是像本地经理的节点。它会检查以确保容器在其各自的 pod 中运行。 Kubelet 不对非 Kubernetes 创建的容器负责。 AWS EKS 中最新版本的 AWS Fargate pod 部署的 kubelet 版本与更新后的集群控制平面中的 kubelet 版本相同。

5.库贝代理– Kube酒店代理是一个交警人员俯瞰拜中的节点网络规则。保证数据流量的畅通。 Kube 代理是一个附加组件,但对核心服务非常重要。在 AWS EKS 中,Kube 代理查看每个 EC2 实例节点上的网络规则。它们未部署在 Fargate 节点上。

参考:

  1. https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html
  2. https://kubernetes.io/docs/concepts/overview/components/#node-components
  3. https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/
  4. https://docs.aws.amazon.com/eks/latest/userguide/managing-kube-proxy.html