46、利用 Amazon Elastic Kubernetes Service 在 Amazon Web Services 上启动 Kubernetes 集群

利用 Amazon Elastic Kubernetes Service 在 Amazon Web Services 上启动 Kubernetes 集群

1. AWS 服务概述

从 2006 年仅有 3 项服务,到 2024 年年中,AWS 已有超过 200 项服务,这些服务运行在 39 个区域的 125 多个物理数据中心,总面积超过 3800 万平方英尺。所有 200 多项服务都遵循 2003 年白皮书提出的核心原则,每个服务都是软件定义的,开发人员只需通过简单的 API 请求即可启动、配置和使用服务,最后再通过另一个 API 请求终止服务,大大缩短了部署时间。

2. Amazon Elastic Kubernetes Service(EKS)简介

AWS 虽是主要公共云提供商中的先驱,但却是较晚推出独立 Kubernetes 服务的。Amazon EKS 于 2017 年末首次宣布,并于 2018 年 6 月在美国东部(北弗吉尼亚)和西部(俄勒冈)区域率先全面可用。

EKS 可与其他 AWS 服务和功能协同工作,具体如下:
- AWS Identity and Access Management (IAM) :可控制和管理最终用户及程序化访问其他 AWS 服务。
- Amazon Route 53 :亚马逊的域名系统(DNS)服务,EKS 可将其用作集群的 DNS 源,便于在集群内管理服务发现和路由。
- Amazon Elastic Block Store (EBS) :为 Amazon EKS 集群内运行的容器提供持久块存储,如同为 EC2 计算资源提供存储一样。
- EC2 Auto Scaling :当集群需要扩展时,使用与扩展 EC2 实例相同的技术。
- Multi - Availability Zones (AZs) :可将 Amazon EKS 管理层和集群节点配置为分布在给定区域的多个可用区,为部署带来高可用性和弹性。

AWS 服务前缀有“Amazon”和“AWS”之分,以“Amazon”开头的是独立服务,而以“AWS”开头的服务则是设计用于与以“Amazon”开头的服务配合使用的。

3. 准备本地环境

在启动 Amazon EKS 集群之前,需要下载、安装和配置一些工具。若还没有 AWS 账户,需先注册。

3.1 注册 AWS 账户

注册 AWS 账户的步骤如下:
1. 访问 https://aws.amazon.com/ ,点击页面右上角的“Create an AWS account”按钮。
2. 填写要求提供电子邮件地址的初始表单,该邮箱用于账户恢复和一些基本管理功能,同时提供所选的 AWS 账户名称,注册后可在账户设置中更改。验证电子邮件地址后,设置“根”账户的密码。
3. 输入密码后,点击“Continue”并按照屏幕上的说明操作,包括确认付款细节和通过自动电话验证身份等五个步骤。

创建并启用账户后,通常可立即使用 AWS 服务,但最长可能需要 48 小时。

3.2 安装 AWS 命令行界面(CLI)

接下来需要安装 AWS 命令行界面(CLI),针对不同操作系统的安装方法如下:

,安装 AWS CLI
使用 Homebrew 安装 AWS CLI 只需运行以下命令:

$ brew install awscli

安装完成后,运行以下命令检查版本:

$ aws –version

新用户可享受 AWS 免费套餐,该套餐对某些服务和实例大小有限制,有效期为 12 个月,详情可查看 https://aws.amazon.com/free/ 。

Linux 安装 AWS CLI
在 Linux 上,最简单的安装方法是下载并运行安装程序,具体命令如下:

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

安装完成后,运行 aws --version 命令检查版本。

Windows 安装 AWS CLI
使用 Chocolatey 安装 AWS CLI 的命令如下:

$ choco install awscli

安装完成后,运行 aws --version 命令检查版本。

这些安装说明假设你已安装 curl unzip 包,若未安装,可使用发行版的包管理器进行安装,例如在 Ubuntu 上,需运行 sudo apt - get install unzip curl

3.3 AWS CLI 配置

安装并通过 aws --version 命令检查 AWS CLI 正常运行后,需将本地 CLI 安装与 AWS 账户关联。具体操作如下:
1. 登录 AWS 控制台(http://console.aws.amazon.com/ )。
2. 在页面左上角的搜索框中输入“IAM”,点击搜索结果中的“IAM Identity Center”服务链接,进入 IAM Identity Center 页面。
3. 创建具有程序化访问权限的用户,步骤如下:
- 根据 AWS 账户的使用时长或访问级别,可能需要启用 IAM Identity Center。若账户用于个人项目,可选择仅在当前 AWS 账户中启用。
- 启用 IAM Identity Center 服务后,返回屏幕顶部菜单的搜索框,再次搜索“IAM”,选择“Manage access to AWS resources”下的“IAM”。页面加载后,点击左侧菜单“Access Management”中的“Users”,然后点击“Create user”按钮。
- 输入用户名“ekscluster”,不选择“Provide user access to the AWS Management Console – optional”选项,然后点击“Next”。
- 不创建组,直接为用户授予现有策略,选择“Attach existing policies directly”,选择“AdministratorAccess”策略,然后点击“Next”。
- 审核信息后,点击“Create user”按钮。用户创建完成后,从列表中选择“ekscluster”用户,选择“Security credentials”选项卡,在“Access keys”部分点击“Create access key”按钮,选择“Command Line Interface (CLI)”,依次点击“Next”和“Create access key”按钮创建访问密钥,创建完成后点击“Download .csv file”,最后点击“Done”按钮。

将下载的 CSV 文件妥善保存,因为其中包含访问 AWS 账户的有效凭证。若要在生产环境中部署,建议参考 AWS 文档设置正确的权限和策略。

返回终端,运行以下命令创建默认配置文件:

$ aws configure

需要输入以下信息:
- AWS access key identifier (ID) :从下载的 CSV 文件中获取的访问密钥 ID。
- AWS secret access key :从 CSV 文件中获取的密钥。
- Default region name :例如输入“us - west - 2”。
- Default output format :可留空。

运行以下命令测试配置是否正常:

$ aws ec2 describe - regions
4. 安装 eksctl

虽然可以使用 AWS CLI 启动 Amazon EKS 集群,但过程复杂且步骤繁多。Weaveworks 创建了一个简单的命令行工具 eksctl,它可以生成 AWS CloudFormation 模板并启动集群。2024 年初 Weaveworks 停止商业运营前,将该项目控制权移交给了 AWS 团队。

不同操作系统安装 eksctl 的方法如下:

macOS 安装 eksctl

$ brew install eksctl

Windows 安装 eksctl

$ choco install eksctl

Linux 安装 eksctl

$ PLATFORM=$(uname -s)_$(uname -m)
$ curl -sLO "https://github.com/eksctl - io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
$ tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
$ sudo mv /tmp/eksctl /usr/local/bin

安装完成后,运行以下命令检查版本:

$ eksctl version
5. 启动 Amazon EKS 集群

所有先决条件安装完成后,即可开始部署 Amazon EKS 集群。使用 eksctl 命令的默认设置创建一个沙盒集群,该集群具有以下属性:
- 位于“us - west - 1”区域。
- 有两个工作节点,使用“m5.large”实例类型。
- 使用官方 AWS EKS Amazon Machine Image (AMI)。
- 使用亚马逊的虚拟专用云(VPC)进行网络服务。
- 具有自动生成的随机名称。

运行以下命令启动集群:

$ eksctl create cluster

此过程可能需要长达 30 分钟,以下是运行命令时的部分输出示例:

[i]  eksctl version 0.180.0 - dev+763027060.2024 - 05 - 29T21:36:10Z
[i]  using region us - west - 2
[i]  setting availability zones to [us - west - 2d us - west - 2b us - west - 2c]
[i]  subnets for us - west - 2d - public:192.168.0.0/19 private:192.168.96.0/19
[i]  subnets for us - west - 2b - public:192.168.32.0/19 private:192.168.128.0/19
[i]  subnets for us - west - 2c - public:192.168.64.0/19 private:192.168.160.0/19
[i]  nodegroup "ng - 11c87ff4" will use "[AmazonLinux2/1.29]"
[i]  using Kubernetes version 1.29
[i]  creating EKS cluster "hilarious - wardrobe - 1717847351" in "us - west - 2" region with managed nodes
[i]  will create 2 separate CloudFormation stacks for cluster itself and the initial managed nodegroup
[i]  if you encounter any issues, check CloudFormation console or try 'eksctl utils describe - stacks --region=us - west - 2 --cluster=hilarious - wardrobe - 1717847351'
[i]  Kubernetes API endpoint access will use default of {publicAccess=true, privateAccess=false} for cluster "hilarious - wardrobe - 1717847351" in "us - west - 2"
[i]  CloudWatch logging will not be enabled for cluster "hilarious - wardrobe - 1717847351" in "us - west - 2"
[i]  you can enable it with 'eksctl utils update - cluster - logging --enable - types={SPECIFY - YOUR - LOG - TYPES - HERE (e.g. all)} --region=us - west - 2 --cluster=hilarious - wardrobe - 1717847351'
[i] 2 sequential tasks: { create cluster control plane "hilarious - wardrobe - 1717847351",2 sequential sub - tasks: {wait for control plane to become ready, create managed nodegroup "ng - 11c87ff4",}}
[i]  building cluster stack "eksctl - hilarious - wardrobe - 1717847351 - cluster"
[i]  waiting for CloudFormation stack "eksctl - hilarious - wardrobe - 1717847351 - cluster"
[i]  building managed nodegroup stack "eksctl - hilarious - wardrobe - 1717847351 - nodegroup - ng - 11c87ff4"
[i]  deploying stack "eksctl - hilarious - wardrobe - 1717847351 - nodegroup - ng - 11c87ff4"
[i]  waiting for CloudFormation stack "eksctl - hilarious - wardrobe - 1717847351 - nodegroup - ng - 11c87ff4"
[i]  waiting for the control plane to become ready

部署完成后,会下载集群凭证并配置 kubectl:

[✔]  saved kubeconfig as "/Users/russ.mckendrick/.kube/config"
[i]  no tasks
[✔]  all EKS cluster resources for "hilarious - wardrobe - 1717847351" have been created

最后等待节点准备就绪:

2024 - 06 - 08 13:03:34 [✔]  created 0 nodegroup(s) in cluster "hilarious - wardrobe - 1717847351"
2024 - 06 - 08 13:03:35 [i]  node "ip - 192.168.34.120.us - west - 2.compute.internal" is ready
2024 - 06 - 08 13:03:35 [i]  node "ip - 192.168.67.233.us - west - 2.compute.internal" is ready
2024 - 06 - 08 13:03:35 [i]  waiting for at least 2 node(s) to become ready in "ng - 11c87ff4"
2024 - 06 - 08 13:03:35 [i]  nodegroup "ng - 11c87ff4" has 2 node(s)
2024 - 06 - 08 13:03:35 [i]  node "ip - 192.168.34.120.us - west - 2.compute.internal" is ready
2024 - 06 - 08 13:03:35 [i]  node "ip - 192.168.67.233.us - west - 2.compute.internal" is ready
2024 - 06 - 08 13:03:35 [✔]  created 1 managed nodegroup(s) in cluster "hilarious - wardrobe - 1717847351"
2024 - 06 - 08 13:03:36 [i]  kubectl command should work with "/Users/russ.mckendrick/.kube/config", try 'kubectl get nodes'
2024 - 06 - 08 13:03:36 [✔]  EKS cluster "hilarious - wardrobe - 1717847351" in "us - west - 2" region is ready

集群准备就绪后,运行以下命令查看节点信息:

$ kubectl get nodes
5. 部署工作负载

使用与 Google Kubernetes Engine (GKE) 集群相同的 YAML 文件和本地 kubectl 部署工作负载,步骤如下:
1. 启动 Redis Leader 部署和服务:

$ kubectl apply - f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes - engine - samples/main/quickstarts/guestbook/redis - leader - deployment.yaml
$ kubectl apply - f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes - engine - samples/main/quickstarts/guestbook/redis - leader - service.yaml
  1. 启动 Redis Follower 部署和服务:
$ kubectl apply - f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes - engine - samples/main/quickstarts/guestbook/redis - follower - deployment.yaml
$ kubectl apply - f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes - engine - samples/main/quickstarts/guestbook/redis - follower - service.yaml
  1. 启动前端部署和服务:
$ 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
  1. 几分钟后,运行以下命令获取前端服务信息:
$ kubectl get service frontend

此时输出与在 GKE 上运行时略有不同,会得到一个 URL,将其复制到浏览器中,即可看到 Guestbook 应用程序。

现在可以在 AWS 控制台中查看集群的相关信息。

通过以上步骤,你就可以在 AWS 上成功启动 Amazon EKS 集群并部署工作负载。

利用 Amazon Elastic Kubernetes Service 在 Amazon Web Services 上启动 Kubernetes 集群

6. 探索 AWS 控制台

现在我们已经成功部署了工作负载,接下来可以深入探索 AWS 控制台,了解如何通过控制台来管理和监控我们的 Amazon EKS 集群。

6.1 访问 AWS 控制台

打开浏览器,访问 http://console.aws.amazon.com/ ,使用之前注册并配置好的 AWS 账户登录。

6.2 查找 EKS 服务

登录后,在控制台顶部的搜索框中输入“EKS”,点击搜索结果中的“Elastic Kubernetes Service”,进入 EKS 服务页面。

在 EKS 服务页面,你可以看到已创建的集群列表,找到我们之前创建的“hilarious - wardrobe - 1717847351”集群并点击进入集群详情页面。

6.3 查看集群信息

在集群详情页面,你可以查看集群的基本信息,如集群状态、版本、区域等。同时,还可以看到集群的节点组信息,包括节点数量、实例类型等。

信息类型 详情
集群状态 运行中
集群版本 1.29
区域 us - west - 2
节点数量 2
实例类型 m5.large

除了基本信息,还可以查看集群的日志、指标等监控信息。例如,点击“Monitoring”选项卡,可以查看集群的 CPU 使用率、内存使用率等指标。

6.4 管理集群资源

在控制台中,还可以对集群的资源进行管理。例如,点击“Resources”选项卡,可以查看集群中的各种资源,如部署、服务、Pod 等。

如果你需要对某个资源进行操作,如删除、修改等,只需点击相应资源的名称,进入资源详情页面,然后点击页面上的操作按钮即可。

7. 集群扩展与优化

为了满足不同的业务需求,可能需要对 Amazon EKS 集群进行扩展和优化。

7.1 水平扩展

水平扩展是指增加集群中的节点数量,以提高集群的处理能力。在 AWS 控制台中,可以通过以下步骤进行水平扩展:

  1. 进入 EKS 服务页面,找到要扩展的集群。
  2. 点击集群名称,进入集群详情页面。
  3. 点击“Node groups”选项卡,找到要扩展的节点组。
  4. 点击节点组名称,进入节点组详情页面。
  5. 点击“Edit”按钮,修改节点数量。
  6. 点击“Save changes”按钮,保存修改。
7.2 垂直扩展

垂直扩展是指增加节点的资源配置,如 CPU、内存等。在 AWS 控制台中,可以通过以下步骤进行垂直扩展:

  1. 进入 EKS 服务页面,找到要扩展的集群。
  2. 点击集群名称,进入集群详情页面。
  3. 点击“Node groups”选项卡,找到要扩展的节点组。
  4. 点击节点组名称,进入节点组详情页面。
  5. 点击“Edit”按钮,修改实例类型。
  6. 点击“Save changes”按钮,保存修改。
7.3 优化集群性能

为了优化集群性能,可以采取以下措施:

  • 合理配置资源 :根据业务需求,合理配置节点的资源,避免资源浪费。
  • 使用自动扩展 :启用 EC2 Auto Scaling 功能,根据负载自动调整节点数量。
  • 优化网络配置 :使用 Amazon VPC 优化网络性能,减少网络延迟。
8. 集群安全管理

在使用 Amazon EKS 集群时,安全是至关重要的。以下是一些安全管理的建议和操作步骤。

8.1 IAM 权限管理

确保只有授权的用户和角色可以访问集群资源。可以通过 IAM 来管理用户和角色的权限。

  • 创建 IAM 用户和角色 :在 IAM 控制台中,创建不同的用户和角色,并为其分配相应的权限。
  • 使用 IAM 策略 :使用 IAM 策略来定义用户和角色的权限范围,确保权限最小化。
8.2 网络安全

使用 Amazon VPC 和安全组来保护集群的网络安全。

  • 配置 VPC :创建和配置 Amazon VPC,确保集群的网络隔离。
  • 设置安全组 :为集群的节点和服务设置安全组规则,只允许必要的流量通过。
8.3 加密数据

对集群中的敏感数据进行加密,确保数据的安全性。

  • 使用 AWS KMS :使用 AWS Key Management Service (KMS) 来管理加密密钥。
  • 加密存储 :对 Amazon EBS 卷等存储设备进行加密。
9. 故障排查与问题解决

在使用 Amazon EKS 集群的过程中,可能会遇到各种问题。以下是一些常见问题的排查和解决方法。

9.1 集群无法启动

如果集群无法启动,可能是由于以下原因:

  • 网络问题 :检查 VPC 和安全组配置,确保网络连接正常。
  • 资源不足 :检查节点的资源使用情况,确保有足够的资源可用。
  • 配置错误 :检查集群的配置文件,确保配置正确。

解决方法:根据具体原因进行相应的调整,如修改网络配置、增加资源、修正配置文件等。

9.2 工作负载部署失败

如果工作负载部署失败,可能是由于以下原因:

  • 镜像问题 :检查镜像是否存在、是否可以正常拉取。
  • 资源请求问题 :检查工作负载的资源请求是否超过了集群的可用资源。
  • 配置错误 :检查工作负载的 YAML 文件,确保配置正确。

解决方法:根据具体原因进行相应的调整,如检查镜像仓库、调整资源请求、修正 YAML 文件等。

9.3 节点异常

如果节点出现异常,可能是由于以下原因:

  • 硬件故障 :检查节点的硬件状态,确保硬件正常。
  • 软件问题 :检查节点的操作系统、驱动程序等是否正常。
  • 网络问题 :检查节点的网络连接是否正常。

解决方法:根据具体原因进行相应的调整,如更换硬件、更新软件、检查网络配置等。

10. 总结

通过以上步骤,我们详细介绍了如何在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 启动 Kubernetes 集群,包括准备本地环境、安装必要的工具、创建集群、部署工作负载、探索 AWS 控制台、进行集群扩展与优化、安全管理以及故障排查等方面。

整个过程可以用以下 mermaid 流程图来概括:

graph LR
    A[注册 AWS 账户] --> B[安装 AWS CLI]
    B --> C[配置 AWS CLI]
    C --> D[安装 eksctl]
    D --> E[启动 Amazon EKS 集群]
    E --> F[部署工作负载]
    F --> G[探索 AWS 控制台]
    G --> H[集群扩展与优化]
    H --> I[集群安全管理]
    I --> J[故障排查与问题解决]

希望本文能帮助你顺利在 AWS 上搭建和管理 Amazon EKS 集群,为你的业务提供稳定、高效的支持。在实际使用过程中,你可以根据具体需求进行灵活调整和优化。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值