ARTIFACTORY:在AWS、Azure和GCP上运行Kubernetes
在EC2上运行您自己的集群
在AWS云中运行Kubernetes的一种方法是使用EC2,然后将这些虚拟机作为节点发放给您自己设置和管理的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的虚拟机作为工作节点,但这种情况不太常见,而主节点必须基于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, AWS EKS对您使用的底层EC2实例以及每个集群按小时收费。
在EKS上运行Kubernetes
在亚马逊云上运行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控制台中,选择“创建集群”按钮。或者,您可以使用如下命令通过eksctl (AWS用于与EKS交互的CLI工具)设置集群:创建集群\
——命名my-cluster \
——版本1.21 \
——without-nodegroup
集群启动通常需要几分钟,所以如果它看起来像挂起了,不要感到惊讶。它不是;几分钟后就会有反应。一旦集群完全投入使用,您就可以开始使用kubectl (Kubernetes的标准CLI管理工具)管理它并部署工作负载。
但是请注意,在集群可以开始承载工作负载之前,您需要创建一个节点组(如下所示)。
EKS变体:Nodegroups和Fargate
在上一节中,我们使用EKS创建了最简单的Kubernetes集群。但是,如果您希望自动化基础设施管理,那么您可能希望利用EKS中的两个可选特性:Nodegroups和Fargate。
当您使用节点组时,EKS自动提供和管理EC2实例的生命周期。要使用此功能,您必须在使用以下命令创建EKS集群之前创建一个节点组:
然后,使用eksctl create cluster命令创建集群,确保不要指定-without-nodegroup参数。
减少管理EKS集群的EC2基础设施所需工作的第二种方法是使用Fargate模式.使用Fargate,节点本质上完全从用户抽象出来。您可以简单地将容器部署到集群中,EKS会以完全透明的方式自动决定如何将容器分配给节点。
要使用Fargate模式,只需在创建集群时指定它:
指定该选项后,集群将自动在Fargate模式下运行。
请注意,Fargate在大多数(但不是所有)AWS区域可用,关于Fargate可用性的详细信息不时发生变化。因此,在选择此选项之前,请务必确认AWS在您希望托管集群的区域中支持Fargate。
任何地方和通过前哨的EKS
Kubernetes在Amazon云中的另一个细微差别是,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”\
——silent——location \
| tar xz -C /tmp
Sudo mv /tmp/eksctl /usr/local/bin/
export EKSA_RELEASE="0.7.0" OS="$(uname -s | tr A-Z A-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”\
——silent——location \
| tar xz ./eksctl-anywhere
Sudo mv ./eksctl-anywhere /usr/local/bin/
如何在Azure中运行Kubernetes
在Azure上,您还可以选择使用自己管理的虚拟机实例部署Kubernetes,或者通过托管的Kubernetes服务部署Kubernetes。
Azure虚拟机上的自管理集群
要使用前一种方法,需要使用Azure虚拟机服务。同样,在大多数情况下,实例应该是基于linux的。您可以在Azure门户中创建实例https://portal.azure.com.
然后,登录到希望用作主节点的实例,并在其上安装Kubernetes。与EC2上的Kubernetes一样,您可以使用任何您希望使用的发行版。使用MicroK8s举个例子,你可以简单地运行:
在AKS上设置Kubernetes
在Azure上运行云Kubernetes的第二种方法是使用Azure Kubernetes服务AKS是Azure管理的Kubernetes服务。AKS与EKS相似之处在于,它自动化了管理底层基础设施以及Kubernetes控制平面所需的大部分工作。
在AKS中创建Kubernetes集群,使用Azure的CLI工具az执行如下命令:
Az aks创建\与使用EKS一样,集群创建过程可能需要几分钟。集群启动并运行后,就可以开始使用kubectl与它进行交互。
——myResourceGroup \
——命名myAKSCluster \
——node-count 2 \
——generate-ssh-keys \
——attach-acr < acrName >
总的来说,AKS比EKS简单,部分原因是它没有那么多可选功能。在AKS上,没有与节点组或Fargate模式等效的细微差别,你必须与之抗衡。
另一方面,AKS的可伸缩性不如EKS。AKS中可以运行的最大节点数是1000个,而EKS是3000个。对于大多数用例来说,这个限制可能无关紧要,但是如果您计划一个非常大的部署,那么考虑这个限制就很重要。
EKS和AKS的定价大致相似;然而,AKS可能更便宜,因为您不必为集群支付每小时的费用。AKS中存在这样的费用(目前的价格与EKS的费用相同——每个集群每小时0.10美元),但您可以在ASK中通过选择放弃AKS中内置的正常运行时间保证来选择不收取此费用。所以,如果你想降低AKS成本,你可以同意降低可靠性水平。EKS没有这样的选择。
AKS和Azure Arc
与EKS Anywhere和EKS on Outposts一样,AKS可以扩展到混合云环境中。为了做到这一点,与Azure Arc一起部署AKSAzure的混合云框架。
如何在GCP中运行Kubernetes
在谷歌云平台中,您也可以通过自己设置或使用云提供商的托管服务来运行Kubernetes。
GCP VM实例上的自管理集群
要采用自管理路由,首先在GCP的虚拟机服务Compute Engine中创建一个或多个VM实例。您可以在GCP控制台中执行此操作https://console.cloud.google.com/compute/instancesAd
然后,设置并运行您选择的Kubernetes发行版。对于这个示例,让我们使用K3s,这是另一个易于部署的Kubernetes发行版。
您可以通过下载并在虚拟机实例中运行安装脚本来设置k3:
与其他云一样,您需要在希望用作工作节点的任何VM实例上重复此过程。
在GKE上设置Kubernetes
在GKE上设置Kubernetes
如果您想在GCP中使用托管的Kubernetes服务来操作集群,请使用谷歌Kubernetes引擎或GKE。
使用如下命令创建一个GKE集群:
与其他云一样,设置过程可能需要一些时间。完成之后,就可以使用kubectl与集群交互了。
GKE在大多数方面与AKS和EKS相似。在某些方面,GKE默认内置了更多的自动化;例如,它可以自动扩展节点,而使用EKS时,您必须自己设置自动扩展。GKE的定价也与EKS和AKS相当;GKE的集群管理费为每小时0.10美元。
关于Anthos的注释
GKE是在GCP中部署托管Kubernetes集群的主要服务,谷歌也提供Anthos.Anthos本质上是GKE的扩展,允许您部署和管理托管在谷歌云之外的基础设施上的集群。因此,如果您试图建立一个混合云环境(例如,您的Kubernetes节点是运行在您自己的数据中心中的虚拟机,但通过GKE进行管理),Anthos是一个不错的选择。
Anthos设置过程相当复杂,它取决于您使用的基础设施类型。详细信息请参见Anthos文档.
如果你只是想使用谷歌云基础设施在谷歌云上运行Kubernetes,你不需要Anthos。在这种情况下,按照上面描述的过程使用标准GKE。
选择你的方法
在云中运行Kubernetes的一大好处是有很多方法可以实现。如果您希望获得最大程度的控制和灵活性,请选择使用基于云的vm自行设置和管理Kubernetes环境的方法。为了获得更简单的体验,可以选择托管的Kubernetes服务,如EKS、AKS或GKE,但请务必做好准备工作,了解与这些服务相关的各种部署模式和选项,以及它们不同的定价模型。
