在Google Kubernetes Engine和Amazon Web Services上部署Kubernetes集群
一、Google Kubernetes Engine(GKE)部署
-
前端部署与服务启动
- 当Redis启动并运行后,需要启动前端部署和服务。可以使用以下命令:
$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/frontend-deployment.yaml
$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/frontend-service.yaml
- 几分钟后,运行以下命令获取刚启动服务的信息:
$ kubectl get service frontend
- 该命令的输出会给出一个外部IP地址,将此IP地址复制到浏览器中(使用`http://EXTERNAL - IP`,因为留言簿应用监听的是80端口而非443端口),就能看到简单的留言簿应用。
-
探索Google Cloud Console
- 查看工作负载 :在Google Cloud Console中,点击Kubernetes Engine部分左侧菜单中的“Workloads”链接,可以看到列出的三个部署,以及它们所在的命名空间和所属集群。如果有多个集群、命名空间和部署,可以使用过滤器深入查看GKE工作负载。
-
深入查看前端部署
:点击前端部署,可以通过部署名称下方的标签进一步深入了解部署信息:
- OVERVIEW :提供所选工作负载的概述,包括CPU、内存和磁盘利用率等信息。
- DETAILS :列出有关环境和工作负载本身的更多信息,如创建时间、注释、标签、副本详细信息、更新策略和Pod信息。
- OBSERVABILITY :查看工作负载基础设施的所有指标。
- REVISION HISTORY :列出所有工作负载修订版本,对于频繁更新的部署很有用。
- EVENTS :列出所有事件,如扩展、Pod可用性和其他错误,用于排查问题。
- LOGS :可搜索的所有运行Pod的容器日志列表。
- APP ERRORS :列出任何应用程序错误。
- YAML :可导出包含完整部署配置的YAML文件。
-
网关、服务和入口
-
点击“Gateways, Services and Ingress”,首次进入时默认显示“GATEWAYS”标签,由于未启动网关,需点击“SERVICES”标签。此时会看到列出的三个服务,其中前端服务有外部负载均衡器类型和公共IP地址,而
redis - leader和redis - follower服务只有集群IP。这是因为只有前端服务需要公开访问,它使用了两个Redis服务。 -
点击运行中的服务,会显示以下信息:
- OVERVIEW :提供服务配置和利用率的摘要。
- DETAILS :提供服务的更多详细信息和查看在Google Cloud项目中启动的负载均衡器资源的链接。
- EVENTS :列出影响服务的任何事件,用于故障排除。
- LOGS :与工作负载部分显示的日志重复。
- APP ERRORS :列出任何应用程序错误。
- YAML :可将完整的服务配置导出为YAML文件。
-
点击“Gateways, Services and Ingress”,首次进入时默认显示“GATEWAYS”标签,由于未启动网关,需点击“SERVICES”标签。此时会看到列出的三个服务,其中前端服务有外部负载均衡器类型和公共IP地址,而
-
其他GKE功能
-
标准功能
:
- Clusters :管理集群,可以看到使用GCP CLI启动的集群,并可使用引导式Web界面创建更多集群。
- Workloads :查看部署到集群的工作负载。
- Applications :显示从市场部署的任何应用程序。
- Secrets and ConfigMaps :安全管理机密和配置映射。
- Storage :查看配置的任何持久存储声明并管理存储类。
- Object Browser :可看作K8s和GCP API的资源管理器,点击可查看所有可能的API和端点以及当前部署的对象/资源。
-
引入Google原生服务的功能
:
- Backup for GKE :使用GCP的备份服务备份GKE托管的工作负载和应用程序。
- Gateways, Services and Ingress :前面已介绍。
- Network Function Optimizer :将GKE工作负载链接到其他GCP资源的专用网络,扩展集群网络,使集群资源可以私下访问Google Cloud数据库等服务。
- Marketplace :找到可在GKE集群中运行的预打包应用程序,由各种软件供应商发布,包括免费和商业产品。
- 企业版功能 :企业版引入了企业部署Kubernetes可能需要的额外功能,如托管服务网格、安全、合规性和基于角色的访问控制选项,但需要额外付费,适用于在更多受监管行业工作的大型组织。
-
标准功能
:
-
删除集群
- 完成集群使用后,运行以下命令删除集群:
$ kubectl delete service frontend
$ gcloud container clusters delete myfirstgkecluster --zone=us - central1 - a
- 删除集群需要几分钟时间,请确保等待该过程完成。使用`--zone`标志启动的集群使用上述命令删除,使用`--region`标志启动的集群,使用以下命令删除:
$ gcloud container clusters delete myfirstgkecluster --region=us - central1
-
集群节点相关
-
区域和可用区
:
- Region :区域由多个可用区组成,同一区域内的可用区之间具有低延迟的网络连接,可用于部署高可用性、始终在线、容错的工作负载。
- Availability zone :可用区可看作区域内的独立数据中心,具有不同的网络和电源。如果单个可用区出现问题,在多个可用区运行工作负载不会受到影响。需要注意的是,并非所有机器类型在一个区域的所有可用区内都可用,部署工作负载前需检查。
-
多可用区部署集群
:
- 最初使用以下命令在单个可用区启动两个节点的集群:
-
区域和可用区
:
$ gcloud container clusters create myfirstgkecluster --num - nodes=2 --zone=us - central1 - a
- 使用`--region`标志启动集群:
$ gcloud container clusters create myfirstgkecluster --num - nodes=2 --region=us - central1
- 启动后运行`kubectl get nodes`,会发现每个可用区有两个节点,总共六个节点,因为默认情况下定义区域时,集群会分布在三个可用区。可以使用`--node - locations`标志覆盖此默认设置,例如:
$ gcloud container clusters create myfirstgkecluster --num - nodes=2 --region=us - central1 --node - locations us - central1 - a,us - central1 - b,us - central1 - c,us - central1 - f
- 如果已有运行的集群,可使用以下命令更新集群,添加新的可用区和两个新节点:
$ gcloud container clusters update myfirstgkecluster --min - nodes=2 --region=us - central1 --node - locations us - central1 - a,us - central1 - b,us - central1 - c,us - central1 - f
以下是一个简单的mermaid流程图,展示在GKE上部署应用的主要步骤:
graph LR
A[启动Redis] --> B[启动前端部署和服务]
B --> C[获取服务信息]
C --> D[在浏览器访问应用]
D --> E[探索Google Cloud Console]
E --> F[查看工作负载]
E --> G[查看网关、服务和入口]
F --> H[深入查看前端部署]
G --> I[查看服务详细信息]
总的来说,Google在简化复杂基础设施配置的部署和维护方面做得很好,部署工作负载后,可以像在其他地方部署集群一样进行管理。
接下来我们将介绍在Amazon Web Services上使用Amazon Elastic Kubernetes Service(EKS)部署Kubernetes集群的相关内容。
二、Amazon Web Services和Amazon Elastic Kubernetes Service
-
Amazon Web Services概述
- Amazon Web Services(AWS)是最早的公共云提供商之一,截至2024年6月,拥有31%的市场份额,位居第一,微软Azure以25%位居第二,GCP以11%位居第三。
- AWS由亚马逊拥有和运营,其起源于2000年亚马逊为零售合作伙伴开发和部署应用程序编程接口(APIs)的云服务实验。基于此工作,亚马逊意识到需要构建一个更好、更标准化的基础设施平台,以托管开发的服务并确保能快速扩展。
- 2003年Chris Pinkham和Benjamin Black撰写的白皮书在2004年得到Jeff Bezos的批准,描述了一个可以以编程方式部署计算和存储资源的基础设施平台。
- 2004年末首次公开提及AWS,但当时该术语用于描述允许第三方与亚马逊零售产品目录交互的工具和API集合,与现在的含义不同。
- 2006年重新品牌化的AWS正式推出,3月首先推出了Simple Storage Service(S3),允许开发人员使用Web API读写单个文件。随后推出了Amazon Simple Queue Service(SQS),这是一个分布式消息系统,开发人员可以使用API进行控制和消费。最后在2006年推出了Amazon Elastic Compute Cloud(Amazon EC2)的测试版,仅限于现有AWS客户使用,同样可以使用亚马逊开发的API启动EC2资源。至此,AWS成为一个可以不仅为自身零售平台服务,还能向其他公司和公众出售空间的公共云平台。
-
使用注意事项
- 按照相关说明操作会产生费用,使用完资源后必须终止。书中提到的价格截至写作时是正确的,建议在启动任何资源之前查看当前成本。
以下是一个表格,对比GKE和AWS EKS的部分特点:
| 特点 | GKE | AWS EKS |
| — | — | — |
| 市场份额 | 相对较小(截至2024年6月为11%) | 最大(截至2024年6月为31%) |
| 节点部署管理 | Google负责节点部署和管理计划 | 提供托管的Kubernetes服务 |
| 功能 | 有标准版和企业版功能 | 提供丰富的云服务生态系统 |
| 多可用区部署 | 可方便地跨多个可用区部署 | 支持跨可用区部署,结合AWS其他服务 |
后续我们将详细介绍如何设置AWS账户、安装支持工具集,以及如何启动和与Amazon EKS集群进行交互。
在Google Kubernetes Engine和Amazon Web Services上部署Kubernetes集群
三、准备本地环境以使用Amazon Elastic Kubernetes Service(EKS)
-
必备条件
- 若要按照后续步骤操作,需要一个绑定有效支付方式的AWS账户。
-
安装支持工具集
- macOS :可通过Homebrew等包管理器安装必要工具,如AWS CLI、kubectl等。以安装AWS CLI为例,在终端运行以下命令:
brew install awscli
- **Windows**:可以从AWS官方网站下载AWS CLI的Windows安装程序进行安装,kubectl也可从Kubernetes官方网站下载对应的Windows版本进行安装。
- **Linux**:以Ubuntu为例,可使用以下命令安装AWS CLI:
sudo apt-get update
sudo apt-get install awscli
安装kubectl可参考Kubernetes官方文档提供的方法。
四、启动Amazon Elastic Kubernetes Service集群
-
创建EKS集群
-
可以使用AWS Management Console、AWS CLI或者AWS CloudFormation等方式创建EKS集群。以下是使用AWS CLI创建EKS集群的步骤:
- 配置AWS凭证,运行以下命令:
-
可以使用AWS Management Console、AWS CLI或者AWS CloudFormation等方式创建EKS集群。以下是使用AWS CLI创建EKS集群的步骤:
aws configure
按照提示输入AWS Access Key ID、AWS Secret Access Key、默认区域名称和默认输出格式。
- 创建EKS集群,运行以下命令:
eksctl create cluster --name myekscluster --region us - west - 2 --nodegroup - name standard - nodes --nodes 3
此命令将在`us - west - 2`区域创建一个名为`myekscluster`的EKS集群,并创建一个包含3个节点的节点组。
-
验证集群创建
- 运行以下命令查看集群状态:
eksctl get cluster --name myekscluster --region us - west - 2
当集群状态显示为`ACTIVE`时,表示集群创建成功。
五、部署工作负载并与集群交互
-
部署工作负载
- 可以使用kubectl命令部署工作负载,例如部署一个简单的Nginx应用:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
此命令将从指定的URL下载部署配置文件并应用到集群中。
-
查看工作负载状态
- 运行以下命令查看部署的工作负载状态:
kubectl get deployments
可以看到部署的名称、可用副本数、就绪副本数等信息。
-
与集群交互
- 可以通过创建服务来暴露工作负载,例如创建一个NodePort类型的服务:
kubectl expose deployment nginx - deployment --type=NodePort --port=80
运行以下命令查看服务信息:
kubectl get services
可以获取服务的IP地址和端口号,通过浏览器访问该地址和端口即可访问部署的应用。
六、删除Amazon Elastic Kubernetes Service集群
-
删除工作负载和服务
- 运行以下命令删除部署的工作负载和服务:
kubectl delete deployment nginx - deployment
kubectl delete service nginx - service
-
删除EKS集群
- 使用eksctl命令删除EKS集群:
eksctl delete cluster --name myekscluster --region us - west - 2
删除集群需要一定时间,请耐心等待。
以下是一个mermaid流程图,展示在AWS EKS上部署应用的主要步骤:
graph LR
A[准备本地环境] --> B[创建EKS集群]
B --> C[验证集群创建]
C --> D[部署工作负载]
D --> E[查看工作负载状态]
E --> F[创建服务暴露工作负载]
F --> G[与集群交互]
G --> H[删除工作负载和服务]
H --> I[删除EKS集群]
综上所述,无论是在Google Kubernetes Engine还是Amazon Elastic Kubernetes Service上部署Kubernetes集群,都有各自的特点和优势。GKE提供了便捷的多可用区部署和丰富的管理功能,而AWS EKS依托于AWS强大的云服务生态系统,具有广泛的市场份额和丰富的服务选择。用户可以根据自身需求和场景选择合适的云服务提供商来部署Kubernetes集群。
超级会员免费看

被折叠的 条评论
为什么被折叠?



