AWS EKS:架构与监控
首先
AWS弹性容器服务(ECS)是一个专为运行重量级和变动工作负载的大规模集群而优化的托管型Kubernetes服务。由于在AWS中账户权限的运作方式,EKS的架构稍微复杂,并且在监控策略上存在一些小差异。然而,总体而言,可以说它与您所了解的Kubernetes是相同的。
Kubernetes集群架构
Kubernetes 的架构由控制平面和数据平面组成。控制平面包含了 Kubernetes 管理节点所需的服务,主要包括 kube-apiserver(主要由 kubectl 使用)、controller-manager 和 kube-scheduler。这些服务通常在集群中的一个或多个主节点上运行。主节点可以进行复制以实现容错性,但控制平面组件也可以作为 Pod 部署在 Kubernetes 内部。这在开发时例如使用 minikube 时会显示出来。
数据平面由运行kubelet服务和kube-proxy的服务器节点或VM节点组成,可以适应Kubernetes配置的变化。kubelet还管理和驱动容器实例的Pod API和Node API,类似于Kubernetes的所有API,可以作为工具和扩展的基础进行展示和使用。
在集群中,每个节点都运行etcd,并且可以通过整个集群来调整集群的状态。当对kube-apiserver发出更改集群状态的请求时,kube-apiserver会更新etcd中的对象,并将其传播到整个集群。然后,Kubelet将这些更改实施到每个节点上。
当主节点宕机时,节点组实际上不再是一个集群,但应用程序通常可以继续正常运行,即使没有主节点。当重新启动节点时,可能会在DNS路由中出现问题,直到主节点被备份为止,但通常短暂停机不会产生大的影响。
EKS的控制平面
EKS 是一种托管的 Kubernetes 服务,在账户和 AWS 之间共同承担两个平面的责任。由于它是由 Kubernetes 和所有相同的可动组件构成的,因此可以通过 kubectl 和 api-server 完全控制集群,但是主节点和控制平面由 AWS 在其独立的账户下进行管理和维护。此外,云控制器管理守护程序会处理与 AWS 资源的交互。提供了与 kube-apiserver 连接的本地 kubectl 的详细配置,并授予 AWS 账户访问在账户上充当集群内节点的实例的权限。
要设定此项,需要满足一些要求。
-
- Kubernetesマスターノードには、各ノードのkubeletのAPIへのフルアクセスが必要です。 各kubeletは、見返りにマスターにアクセスする必要があります。
-
- Cloud-controller-managerはあなたのアカウントにアクセスする必要があります。
-
- etcdは、両方のアカウントのノード間で同期できる必要があります。 そして
- ノードとポッドは、相互に通信するために、静的なDNSで検出可能なIPアドレスを維持できる必要があります。
设置EKS后,您将被要求提供IAM角色,以允许从AWS账户访问节点。您还需要提供安全组,以允许访问Kubernetes特定的端口。您还需要提供一个VPC(虚拟私有云),用于提供用于互相发现的静态(内部)地址,供Pod和节点使用。
由于VPC地址空间的大小限制,可能限制了可以运行的Pod数量,请选择一个足够大的范围。例如,/ 24子网只提供了254个地址,而且每个节点也需要地址。这将导致可用于Pod的总数减少。此外,基于网络接口数量和每个接口可以维护的IP数量,也有限制每个节点可以分配的IP数量。
为了简化EKS群集的启动和管理过程,AWS提供了一个名为eksctl的小型命令行实用工具。该实用工具可以使用awscli保存的身份验证信息来代表用户创建集群节点和角色。所需的控制集群的凭证将自动导出到kubectl中。
EKS的服务
一旦启动服务,Kubernetes的云控制器管理器会根据服务类型选择适当的AWS资源。在EKS中,NodePort或ClusterIP服务通常与常规的Kubernetes设置相同,但LoadBalancer或Ingress服务类型将触发两种AWS资源的创建。
-
- デフォルトでは、LoadBalancerサービスタイプは、AWSによって作成された元のロードバランサーであるClassic Elastic LoadBalancerを作成します。このタイプのロードバランサーは、実際には、ラウンドロビンアプローチを使用して定義されたエンドポイントにリクエストをルーティングする小さなインスタンスで構成されています。
-
- または、プロトコル、送信元IP /ポート、宛先IP /ポート、およびTCPシーケンス番号に基づいてハッシュマップを作成することにより、要求をさまざまなエンドポイントにルーティングするネットワークロードバランサーを使用できます。 1つの- TCP接続のすべてのトラフィックは、同じエンドポイントに転送されます。サービスにアノテーションを設定することで、クラシックロードバランサーの代わりにネットワークロードバランサーを使用するようにKubernetesに指示できます:service.beta.kubernetes.io/aws-load-balancer-type:nlb
- Ingressサービスタイプは、要求された宛先URL(レイヤー7ルーティング)に基づいてトラフィックを異なるポッドに分散し、複数の宛先のトラフィックを同じIPアドレスに送信できるようにします。サービスは、URLに基づいて異なるポッドセットにトラフィックを送信します。実際に使用されました。 EKSの場合、このタイプのサービスは、AWS独自のレイヤー7ルーティングLBであるApplication LoadBalancerによって処理されます。
在本页面中,我们会详细介绍AWS的各种负载均衡器如何进行流量路由的过程。
EKS卷积
Kubernetes 支持多种存储类型,其中最简单的是 emptyDir。emptyDir 是一个在 Pod 中容器重启期间保持持续性的卷,与连接的 Pod 一起持续存在。默认情况下,emptyDir 卷会在节点的磁盘空间上创建。在 EKS 中,节点是 EC2 实例,因此用于 emptyDir 的实际存储类型通常是 Elastic Block Storage(EBS)卷。EC2 还提供了临时的本地存储,称为实例存储,但由于其临时性质,默认情况下已不再使用。
由於Kubernetes直接支持使用EBS卷作為存儲,因此可以在Pod之間創建持久的卷。作為選項,還可以預加載Pod需要訪問的數據到EBS卷中。EBS卷只能掛載到一個EC2實例上,這是為了Pod能夠訪問所必需的。
EKS 监控
在通常的Kubernetes设置中,监控最重要的事情之一是主节点。如果没有主节点,Kubernetes集群将不再是集群。在EKS中,主节点和大部分控制平面由AWS管理,并且它们位于无法访问的位置。您可能可以获取有关整个集群的指标,但无法获取实际的主节点。
Kubernetes的任务之一是处理节点和容器的停止问题,因此作为自定义监控配置的一部分,它内置了可访问的监控。Kubelet收集与节点、Pod和容器(内嵌cAdvisor)状态相关的数据,并在容器出现问题并需要重新启动时进行通知。指标可以从指标服务器获取。指标服务器是一个非常轻量级的服务,带有短期存储,用于根据请求捕捉Kubernetes资源的当前状态。要以时间序列方式捕捉指标并将其用作图形,需要使用另外的工具。
AWS已经提供了对保存在CloudWatch中的EC2实例进行监控的功能。同时还提供了名为Container Insights的服务。Container Insights是一个作为DaemonSet在EKS集群中运行的代理程序,它可以获取有关节点、Pod和容器的指标,并以自定义指标的形式发送回CloudWatch。
然而,在CloudWatch中,自定义指标的成本相对较高。每个在添加警报之前的指标需要0.30美元。更常见的方法是使用Prometheus来监控集群。由于Kubernetes原生支持Prometheus格式的指标,因此可以轻松启动和运行。您还可以选择设置Helm作为Kubernetes包管理器。这样一来,不仅会安装和配置Prometheus,还会安装和配置所有支持服务,如Alert Manager、PushGateway、Node和非导出程序等。
AWS CloudWatch提供API访问指标,中间点存在于将CloudWatch的指标提取并使其可在Prometheus中使用的PrometheusCloudWatch导出程序中。您可以使用Helm安装,或直接从GitHub安装。
在Prometheus中,您可以选择在哪里存储要获取的度量数据。 Prometheus pod持续存在的emptyDir类型的存储卷(如上所述)可以用来存储,但不提供冗余能力。单独的EBS卷是一个安全的选项,因为它们存在于节点和容器之外,并且可以根据需要调整大小。然而,由于有最小大小限制,如果不需要全部存储,可能会浪费存储空间。远程存储可以提供冗余能力,并且可以在集群外部创建警报和仪表板(例如,MetricFire的Hosted Prometheus服务)。
EKS是一项适用于大规模跨可用区(AZ)部署的最佳服务,它是Kubernetes最擅长的服务。然而,很容易花费不必要的巨额费用于昂贵的EC2实例,所以监控依然是必不可少的。确保集群容量与资源消耗量相匹配非常重要,适当的监控可以帮助实现这一目标。
如果您想要详细了解最佳实践的监控和当前存在的问题,并且预订MetricFire提供的Prometheus-as-a-service和Graphite-as-a-service演示,您还可以直接咨询适合您的监控解决方案。