ARTIFACTORY:在AWS、Azure和GCP上运行Kubernetes

JFrog支持
2023-01-22 11:06

在EC2上运行自己的集群

在AWS云中运行Kubernetes的一种方法是使用EC2(AWS的虚拟机IaaS服务),然后将这些虚拟机作为Kubernetes集群的节点提供给您自己设置和管理的集群。
如果你现在想在云中运行Kubernetes,你有很多选择。事实上,部署基于云的Kubernetes有很多方法,很难决定哪种方法最适合您。

这就是为什么我们准备了这篇指南,它介绍了Kubernetes在“三大”公共云——亚马逊网络服务(AWS)、微软Azure和谷歌云平台(GCP)上的所有部署选项。该指南解释了每种云支持哪些Kubernetes服务和部署模型,并描述了如何开始使用每种云。

正如您将了解到的,没有哪个云Kubernetes选项一定比其他的更好。但是,通过了解现有的许多解决方案以及它们之间的比较,您可以对如何在云中运行Kubernetes做出明智的选择。

什么是云Kubernetes?

在深入研究主要公共云上的Kubernetes部署选项之前,让我们先弄清楚“云Kubernetes”是什么意思。

我们指的是使用公共云基础设施托管的任何Kubernetes环境。正如我们将解释的那样,一些云Kubernetes部署依赖于托管服务,这些服务本质上是云提供商开发的Kubernetes SaaS产品。另一些则要求用户使用基于云的基础设施设置自己的Kubernetes控制平面。

无论哪种方式,您都可以获得在云中运行的Kubernetes环境,但是环境的定价、工作量、安全性和可管理性可能会因其托管方式而有所不同。

如何在AWS云中运行Kubernetes

导航AWS云支持的各种Kubernetes部署方法可以说比理解如何在其他公共云中部署Kubernetes要复杂得多。这是因为,尽管AWS只支持两种主要的Kubernetes部署模型——EC2上的自管理集群或使用EKS服务的AWS管理集群——但后一种方法有多种变体。

让我们来看看这些不同的选项,看看它们之间的比较。

为此,首先需要创建至少一个EC2 VM实例。(如果你想要一个多节点的Kubernetes集群,你需要为每个节点提供一个单独的实例。)您可以在以下站点的AWS控制台中创建EC2实例https://console.aws.amazon.com/ec2.节点应该运行某种版本的Linux(您可以在Kubernetes中使用基于windows的vm作为工作节点,但这种情况不太常见,并且主节点必须基于Linux)。

然后,登录到您想要作为主节点的EC2实例,在其上安装Kubernetes发行版并启动该发行版。这里要遵循的确切过程取决于你使用的Kubernetes发行版;但是,作为一个基本示例,下面是如何设置和运行Minikube分布Linux环境下:curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
安装minikube-linux-amd64 /usr/local/bin/minikube
minikube开始

此时,您的EC2实例将作为主节点启动并运行。如果希望将其他节点加入到集群中,则必须在每个节点上重复设置过程。

请注意,当您自己在EC2上运行Kubernetes时,由您来管理虚拟基础设施以及Kubernetes环境。您必须手动添加更多节点,并且可能需要根据工作负载的需求更改分配给每个节点的资源。2022世界杯阿根廷预选赛赛程您还将完全自己负责保护和升级Kubernetes控制平面。

这种方法的好处是,它使您可以最大限度地控制Kubernetes集群的运行方式。您可以选择任何您想要的发行版,并且可以按照您想要的方式配置它。您的总操作成本也将低于使用AWS EKS,后者对您使用的底层EC2实例收费,并按小时收取每个集群的费用。

在EKS上运行Kubernetes

在Amazon云中运行Kubernetes的另一种主要方式是使用AWS弹性Kubernetes服务或的。EKS是一项由亚马逊运营的托管服务。EKS依赖于EC2实例作为Kubernetes节点;但是,EKS会为您设置和管理这些节点,这是这种方法不同于在EC2上运行自我管理的Kubernetes集群的部分原因。此外,当您选择EKS时,Amazon会自动管理Kubernetes控制平面的某些方面。

EKS的主要优点是,使用它比设置自己的集群更容易。如果您是Kubernetes的新手,那么它是理想的选择。与您自己管理集群的所有方面相比,EKS提供的配置选项更少,对底层基础设施的控制也更少。此外,如上所述,使用EKS需要支付更高的费用。

要使用EKS创建Kubernetes集群,请导航到https://console.aws.amazon.com/eks/home#/clusters在AWS控制台中,并选择Create cluster按钮。或者,您可以通过eksctl (AWS用于与EKS交互的CLI工具)使用如下命令来设置集群:创建集群
——name my-cluster
——1.21版本
——without-nodegroup

集群启动通常需要几分钟的时间,所以如果它看起来像是挂起了,不要感到惊讶。它不是;几分钟后应该会有反应。一旦集群完全可以运行,您就可以开始使用kubectl(标准的Kubernetes CLI管理工具)管理它并部署工作负载。
但是,请注意,在集群开始承载工作负载之前,需要创建一个节点组(如下所述)。

它的变体:Nodegroups和Fargate

在上一节中,我们使用EKS创建了最简单的Kubernetes集群。然而,如果你想自动化基础设施管理,甚至更多,你可能希望利用EKS中的两个可选特性:Nodegroups和Fargate。

当您使用节点组时,EKS会自动供应和管理EC2实例的生命周期。要使用这个特性,你必须在创建EKS集群之前创建一个节点组,使用如下命令:

Eksctl create nodegroup -cluster =cluster_name -name =nodegroup_name

然后,使用eksctl create cluster命令创建集群,确保不要指定-without-nodegroup参数。

减少管理EKS集群的EC2基础设施所需工作量的第二种方法是使用Fargate模式.使用Fargate,节点基本上完全从用户中抽象出来。您可以简单地将容器部署到集群中,然后EKS自动决定如何以完全透明的方式将它们分配给节点。

要使用Fargate模式,只需在创建集群时指定它:

创建cluster -fargate

通过指定该选项,您的集群将自动以Fargate模式运行。

请注意,Fargate在大多数(但不是全部)AWS区域可用,而且有关Fargate可用性的详细信息会不时更改。因此,在选择此选项之前,请务必确认AWS在您希望托管集群的区域中支持Fargate。

EKS Anywhere和EKS via Outposts

Kubernetes在亚马逊云中的另一个细微差别是,EKS可以扩展到支持混合云环境,这意味着EKS集群中的所有或部分节点都是托管在AWS公共云之外的服务器。您可以使用任意一种方法创建这种类型的环境的任何地方AWS前哨

EKS Anywhere是一个更简单的选择,因为它不需要您从AWS购买硬件。安装过程可能因混合云的设置方式而异,但一般来说,它归结为在希望加入到EKS Anywhere环境的服务器上安装EKS Anywhere代理。你可以在Linux上这样做:Curl "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" \
——无声——位置\
| tar xz -C /tmp
执行命令mv /tmp/eksctl /usr/local/bin/
export EKSA_RELEASE="0.7.0" OS="$(uname -s | tr A-Z -z)"RELEASE_NUMBER = 5
curl "https://anywhere-assets.eks.amazonaws.com/releases/eks-a/${RELEASE_NUMBER}/artifacts/eks-a/v${EKSA_RELEASE}/${OS}/amd64/eksctl-anywhere-v${EKSA_RELEASE}-${OS}-amd64.tar.gz" \
——无声——位置\
| tar xz ./eksctl-anywhere
/eksctl-anywhere /usr/local/bin/

如何在Azure中运行Kubernetes

在Azure上,您还可以选择使用自己管理的虚拟机实例或通过托管的Kubernetes服务来部署Kubernetes。

Azure虚拟机上的自管理集群

要使用前一种方法,您需要使用Azure虚拟机服务。同样,在大多数情况下,您的实例应该是基于linux的。您可以在Azure门户中创建实例https://portal.azure.com

然后,登录到想要用作主节点的实例,并在其上安装Kubernetes。与EC2上的Kubernetes一样,您可以使用任何您想要的发行版。使用MicroK8s作为一个例子,您只需运行:

Sudo snap安装microk8s -经典
启动集群。
(您可能希望运行额外的命令来打开重要的集群特性;请参阅MicroK8s文档了解详细信息。)重复该过程以设置工作节点。

在AKS上设置Kubernetes

在Azure上运行云Kubernetes的第二种方法是使用Azure Kubernetes服务AKS是Azure的托管Kubernetes服务。AKS类似于EKS,因为它自动化了管理底层基础设施以及Kubernetes控制平面所需的大部分工作。

要在AKS中创建Kubernetes集群,使用Azure的CLI工具az运行如下命令:

Az aks create \
——资源组myResourceGroup
——name myAKSCluster
——节点计数2 \
——generate-ssh-keys \
——attach-acr < acrName >
与EKS一样,集群创建过程可能需要几分钟。一旦集群启动并运行,就可以开始使用kubectl与它进行交互。

总的来说,AKS比EKS简单,部分原因是它没有那么多可选功能。在AKS上,不存在等同于节点组或Fargate模式的细微差别。

另一方面,AKS的可扩展性不如EKS。在AKS中可以运行的最大节点数是1000个,而在EKS中只能运行3000个。对于大多数用例来说,这个限制可能无关紧要,但是如果您计划一个非常大的部署,那么考虑这个限制是很重要的。

EKS和AKS的定价大致相似;然而,AKS的成本可能更低,因为您不必为您的集群支付每小时的费用。AKS中存在这样的费用(目前的价格恰好与EKS的价格相同——每个集群每小时0.10美元),但是您可以选择放弃AKS中内置的正常运行时间保证,从而在ASK中退出此费用。所以,如果你想降低你的AKS成本,你可以同意降低可靠性。EKS没有这样的选择。

AKS和Azure Arc

与EKS Anywhere和EKS on Outposts一样,AKS也可以扩展到混合云环境中。要做到这一点,与Azure Arc一起部署AKSAzure的混合云框架。

如何在GCP中运行Kubernetes

在谷歌云平台中,您也可以通过自己设置或使用来自云提供商的托管服务来运行Kubernetes。

GCP虚拟机实例上的自管理集群

要采用自管理路由,首先在GCP的虚拟机服务Compute Engine中创建一个或多个VM实例。您可以在GCP控制台中执行此操作https://console.cloud.google.com/compute/instancesAd

然后,设置并运行您选择的Kubernetes发行版。对于本例,让我们使用K3s,这是另一个易于部署的Kubernetes发行版。

您可以通过下载并在VM实例中运行安装脚本来设置K3s:

curl - sfl https://get.k3s.io | sh -

与其他云一样,您需要在希望用作工作节点的任何VM实例上重复此过程。
在GKE上设置Kubernetes

在GKE上设置Kubernetes

如果您希望在GCP中使用托管Kubernetes服务来操作集群,请使用谷歌Kubernetes引擎,或GKE。

使用如下命令创建GKE集群:

Gcloud容器集群创建hello-cluster -num-nodes =1

与其他云一样,设置过程可能需要一些时间。一旦完成,就可以使用kubectl与集群进行交互。

GKE在大多数方面与AKS和EKS相似。在某些方面,GKE默认内置了更多的自动化;例如,它自动缩放节点,而使用EKS,您必须自己设置自动缩放。GKE的定价也与EKS和AKS相当;GKE的集群管理费为每小时0.10美元。

关于安多斯的笔记

虽然GKE是在GCP中部署托管Kubernetes集群的主要服务,但谷歌也提供Anthos.Anthos本质上是GKE的扩展,它允许您部署和管理托管在谷歌云之外的基础设施上的集群。因此,如果您试图设置混合云环境,例如,您的Kubernetes节点是在您自己的数据中心中运行的虚拟机,但通过GKE进行管理,那么Anthos是一个不错的选择。

Anthos的设置过程非常复杂,并且根据您使用的基础设施类型而有所不同。详细信息请参见Anthos文档

如果你只是想在谷歌Cloud中使用谷歌Cloud基础设施运行Kubernetes,你不需要Anthos。在这种情况下,按照上面描述的过程使用标准GKE。

选择你的方法

在云中运行Kubernetes的一个好处是有很多方法可以实现。如果您想要最大程度的控制和灵活性,请选择使用基于云的vm自己设置和管理Kubernetes环境的方法。为了获得更简单的体验,可以选择像EKS、AKS或GKE这样的托管Kubernetes服务,但要确保做好功课,了解与这些服务相关的各种部署模式和选项,以及它们不同的定价模型。