如何使用kubernetes (kubernetes集群搭建虚拟机准备)

Elastic Kubernetes Service (EKS) 是托管在 AWS 上的托管 Kubernetes 服务。

使用 EKS 的主要原因是为了 减轻 管理 pod、节点等的负担,在 AWS 中运行 Kubernetes 目前需要大量的技术专长,并且往往超出许多组织的控制范围,使用 EKS,所需的基础设施由亚马逊的“内部”团队管理,为用户提供完全托管的 Kubernetes 引擎,可以通过 API 或标准 kubectl 工具使用。

EKS 将支持所有 Kubernetes 功能,包括命名空间、安全设置、资源配额和容忍度、部署策略、自动缩放器等。EKS 将允许您运行自己的控制平面,而且还与 AWS IAM 集成,因此您可以维护自己对 API 的访问控制。

EKS 建立在 Amazon 现有的“ Kubernetes 即服务 ”解决方案之上,称为 Elastic Container Service for Kubernetes (EKS) 是一项 AWS 托管服务,可简化 AWS 云中 Kubernetes 集群的部署、管理和操作。

如果您在 AWS 上运行 Kubernetes,您负责管理控制平面(即主节点和工作节点)。您还必须确保 api-server 具有高可用性和容错性等。

EKS 将管理控制平面的负担从您身上移开,通过这样做,您现在可以专注于运行您的 Kubernetes 工作负载。它最常用于微服务等无状态应用程序,因为控制平面由 Amazon (EKS) 管理。

在本文中,我们将学习如何使用 EKS 在 AWS 上创建 Kubernetes 集群,您将学习如何为您的 Kubernetes 集群创建管理用户,您还将学习如何将应用程序部署到集群。最后,您将测试您的集群以确保一切正常。

让我们开始吧!

先决条件

  • 一个 AWS 账户。
  • 本文假设您熟悉 Kubernetes 和 AWS,如果您不是,请在开始本指南之前花一些时间阅读两者的文档。

创建具有权限的管理员用户

让我们从为您的集群创建一个管理员用户开始。

  1. 登录您的 AWS 控制台并转到 IAM,单击用户>添加用户。

kubernetes集群应用小技巧,aws如何搭建高速网络

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,提供一个用户名,例如admin。选择 访问密钥 - 编程访问。点击上下一步:权限

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,选择直接附加现有策略。单击管理员访问。单击下一步:标签。

该AdministratorAccess政策是一个内置的亚马逊弹性容器服务(ECS)政策,它提供对所有 ECS 资源和 ECS 控制台中所有操作的完全访问权限,此策略的主要好处是我们不需要创建或管理具有额外权限的额外用户来访问 AWS EKS 服务。

您的管理员用户可以创建 EC2 实例、CloudFormation 堆栈、S3 存储桶等,您应该非常小心您授予谁这种访问权限。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,单击Next : Review

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,单击创建 用户。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,您将收到一条绿色的成功消息。访问密钥 ID和秘密访问密钥也显示在此屏幕中。稍后您将需要这些键来配置您的 CLI 工具,因此请记下这些键到其他地方。

kubernetes集群应用小技巧,aws如何搭建高速网络

创建 EC2 实例

现在您已经创建了管理用户,让我们创建一个 EC2 实例以用作您的 Kubernetes 主节点。

  1. 在搜索框中输入 EC2,单击 EC2 链接。单击 启动实例。

kubernetes集群应用小技巧,aws如何搭建高速网络

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 为您的 EC2 实例选择Amazon Linux 2 AMI (HVM)。我们将使用这个 Amazon Linux AMI 来轻松安装 Kubernetes 和其他需要的工具,例如:kubectl!、docker 等。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,单击下一步:配置实例 详细信息。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,启用自动分配公共 IP选项。由于服务器位于私有子网内,因此无法从外部访问。

您可以通过将弹性 IP 地址与实例关联来为您的服务器提供公共 IP 地址。通过这样做,您的 EC2 和 ELK 就可以访问了。单击 下一步:存储。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,单击下一步:添加标签>下一步:配置安全组。

kubernetes集群应用小技巧,aws如何搭建高速网络

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,单击 Review and Launch > Launch 。

kubernetes集群应用小技巧,aws如何搭建高速网络

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 将出现一个密钥对对话框。点击Create a new key pair。为其命名,然后*载下** .pem 文件并将其存储在安全位置。单击启动 实例。

配置命令行工具

现在您已经创建了一个 EC2 实例,您需要为其安装客户端。在 AWS 术语中,客户端是允许您管理云对象的命令行工具。在本节中,您将学习如何配置命令行界面 (CLI) 工具。

  1. 导航到您的 EC2 仪表板。您应该会看到新的 EC2 实例正在运行。如果没有,您的实例可能会首次启动,请等待 5 分钟,然后重试。实例运行后,单击Connect。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 在下一个屏幕上,单击连接。

kubernetes集群应用小技巧,aws如何搭建高速网络

您将被带到浏览器上的交互式 SSH 会话。SSH 允许您安全地连接并在远程服务器上操作。交互式 SSH 会话将让我们将 EKS 和 Kubernetes 的命令行工具直接安装到您的 EC2 实例上。

kubernetes集群应用小技巧,aws如何搭建高速网络

登录 SSH 会话后,您需要做的第一件事是检查您的 aws-cli 版本。这是为了确保您使用的是最新版本的 AWS CLI。AWS CLI 用于配置、管理和使用您的集群。

如果您的版本过时,您可能会在集群创建过程中遇到一些问题和错误。如果您的版本低于 2.0,则需要升级它。

  1. 运行以下命令检查您的 CLI 版本。
aws --version

正如您在下面的输出中看到的,我们正在运行版本1.18.147的aws-cli,它已经非常过时了。让我们将 CLI 升级到最新的可用版本,在撰写本文时它是 v2+。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行以下命令将最新可用版本的 AWS CLI *载下**到您的 EC2 实例。curl 将从给定的 url *载下**您的文件,-o 将根据您的选择命名,“awscli-exe-linux-x86_64.zip”是要*载下**的文件
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. *载下**完成后,运行以下命令将*载下**文件的内容解压缩到当前目录。
unzip awscliv2.zip

  1. 接下来,运行 which aws 命令为最新版本的 AWS CLI 设置链接。此命令将让您知道在环境的 PATH 中可以找到它,以便您可以从任何目录运行它。
which aws

正如您在下面的输出中看到的那样,过时的 AWS CLI 位于/usr/bin/aws。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 现在您需要通过运行带有一些参数的更新命令来配置您的 aws-cli。

第一个参数./aws/install 将帮助我们将 AWS CLI 安装到当前目录。第二个参数 --bin-dir 告诉您 AWS CLI 在您的环境的 PATH 中的位置,第三个参数 --install-dir 是相对于 bin-dir 的路径。此命令将确保您的所有路径都是最新的。

sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update

  1. 重新运行 aws --version 命令以确保您使用的是最新版本。
aws --version

您应该会看到当前安装的 AWS CLI 版本。正如您在下面的输出中看到的,我们现在使用的是 v2.4.7 的 AWS CLI。这是最新版本,在配置后续步骤时不会给您带来任何问题。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 现在您的环境已正确配置,是时候配置您希望通过 AWS CLI 与哪个 AWS 账户进行通信了。运行以下命令以列出您当前配置的帐户环境变量以及要与其一起使用的别名。
aws configure

这将显示您当前配置的所有 AWS 账户环境变量。您应该在下面的输出中看到类似的内容。您需要设置一些配置参数,以便 AWS CLI 与您的必要账户进行通信。运行以下命令,这将引导您通过配置向导来设置您的 AWS 账户。

  • AWS 访问密钥 ID [无]:输入您之前记下的 AWS 访问密钥。
  • AWS 秘密访问密钥 [无]:输入您之前记下的AWS 秘密访问密钥。
  • 您还需要指定 EKS 集群所在的默认区域名称。您应该选择所需的 EKS 集群所在的 AWS 区域,并且该区域离您最近。在本教程中,我们选择了 us-east-1,因为它的地理位置离我们很近,并且在教程的后续步骤中易于使用。
  • 默认输出格式[None]:输入json作为你的默认输出格式,因为它对我们以后查看配置文件非常有用。

kubernetes集群应用小技巧,aws如何搭建高速网络

现在您已经设置了 AWS CLI 工具。是时候在您的环境中配置名为 kubectl 的 Kubernetes CLI 工具了,以便您可以与 EKS 集群进行交互。

Kubectl 是 Kubernetes 的命令行界面。使用 Kubectl,您可以管理在 Kubernetes 集群上运行的应用程序。Linux 和 MacOS 系统上默认不安装 Kubectl。您可以按照 Kubernetes 网站上的说明在其他系统上安装 Kubectl。

  1. 运行以下命令*载下** kubectl 二进制文件,二进制文件是扩展名为“.bin”的计算机文件,只能在某些类型的计算机上执行。

这是不同类型的计算机共享文件的简便方法。我们使用 kubectl 二进制文件,因为 kubectl 二进制文件与平台无关。它适用于任何可以运行类 Unix 操作系统的系统,包括 Linux 和 Mac OS。

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.8/2020-04-16/bin/linux/amd64/kubectl

  1. 运行下面的 chmod 命令使 kubectl 二进制可执行。chmod 命令是用于更改文件或目录访问权限的 Unix 和 Linux 命令。Linux chmod 命令使用八进制数字系统来指定每个用户的权限。现在可以在本地机器上使用 Kubectl。
chmod +x ./kubectl

  1. 运行以下命令在 文件夹中创建目录,并将二进制文件复制到其中。HOME/bin 命令在您的主目录中创建一个 bin 子目录。

mkdir 命令用于创建新目录或文件夹。-p 选项告诉 mkdir 命令自动为新目录创建任何必要的父目录。$HOME/bin 是一个环境变量,用于存储您的主目录路径。

每个 Linux 用户的文件系统中都有 $HOME/bin 目录。&& 结构称为逻辑 AND 运算符。它用于将命令组合在一起,以便一次执行多个命令。&& 构造不是此命令工作所必需的,但它作为最佳实践存在。

cp ./kubectl $HOME/bin/kubectl 命令将本地 kubectl 二进制文件复制到您的 kubectl 目录中,并将文件重命名为 kubectl。

最后,export 命令执行它所说的 - 它将一个环境变量导出到 shell 的内存中,以便任何从这个 shell 运行的程序都可以使用它。

在我们的例子中,我们需要告诉 kubectl 我们的 kubectl 目录在哪里,以便它可以找到 kubectl 二进制文件。

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin

  1. 运行下面的 kubectl version 命令来验证 kubectl 是否安装正确。kubectl version --short --client 命令以格式良好、人类可读的 Kubernetes REST API 响应输出 kubectl 版本的缩短版本。

--client 选项让 kubectl 打印 Kubernetes 的 REST API 响应的格式化版本,这在版本之间是一致的。

--short 选项告诉 kubectl 以紧凑的形式提供基本信息,浮点数保留一位小数,缩写时间格式与 --format 相同。您应该会看到如下所示的输出。这个输出告诉我们我们已经成功安装了 kubectl,并且它使用了正确的版本。

kubernetes集群应用小技巧,aws如何搭建高速网络

在本部分中您需要做的最后一件事是配置 eksctl cli 工具以使用您的 Amazon EKS 集群。

eksctl cli 工具是一个命令行界面,可以管理 Amazon EKS 集群。它可以生成集群凭证、更新集群规范、创建或删除工作节点以及执行许多其他任务。

  1. 运行以下命令以安装 eksctl cli 工具并验证其版本。
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp && sudo mv /tmp/eksctl /usr/bin

eksctl version

kubernetes集群应用小技巧,aws如何搭建高速网络

预配 EKS 集群

现在您拥有 EC2 和 AWS CLI 工具,现在可以预置您的第一个 EKS 集群。

  1. 运行下面的 eksctl create cluster 命令,在 us-east-1 区域配置一个名为 dev 的集群,其中包含一个主节点和三个核心节点。
eksctl create cluster --name dev --version 1.21 --region us-east-1 --nodegroup-name standard-workers --node-type t3.micro --nodes 3 --nodes-min 1 --nodes-max 4 --managed

eksctl create cluster 命令使用 Amazon 为该特定配置推荐的默认值在 us-east-1 区域创建 EKS 集群,并相应地以引号 ( " ) 或变量 ( ${ } ) 传递所有参数。

name 参数用于定义此 EKS 集群的名称,为方便起见,它只是一个友好的标签。version 是您希望集群使用的版本,对于本示例,我们将坚持使用 Kubernetes v1.21.2,但也可以随意探索其他选项。

nodegroup-name 是该集群用于管理工作节点的节点组的名称。

在此示例中,您将保持简单并仅使用标准工作程序,这意味着您的工作程序节点默认具有一个 vCPU 和 3GB 内存。

节点是您希望集群中的核心工作节点总数。在此示例中,请求了三个节点。nodes-min 和 nodes-max 控制集群中允许的最小和最大节点数。在此示例中,将创建至少一个但不超过四个工作节点。

  1. 您可以导航到 CloudFormation 控制台以监控配置进度。

kubernetes集群应用小技巧,aws如何搭建高速网络

如下所示,您可以看到您的开发堆栈正在创建中。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 单击开发堆栈超链接 >事件。您将看到与创建过程相关的事件列表。等待配置过程完成 - 这可能需要 15 分钟,具体取决于您的具体情况 - 并在 CloudFormation 控制台中检查堆栈的状态。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 等待堆栈完成配置后,导航到 CloudFormation 控制台,您将看到 CREATE_COMPLETE 的开发堆栈状态。

检查您的开发堆栈状态

现在,导航到您的 EC2 控制台。您将在 EC2 仪表板中看到一个主节点和三个核心节点。此输出确认您已成功设置 EKS 集群。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行下面的 eksctl 命令以获取开发集群的详细信息,例如集群 ID 和区域。
eksctl get cluster

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行下面的 aws eks update 命令以获取远程工作程序节点凭据。

必须在要连接到集群的任何计算机上执行此命令。它会为您的 kubectl *载下**凭证,以便远程访问 EKS Kubernetes 集群,而无需使用 AWS 访问密钥。

aws eks update-kubeconfig --name dev --region us-east-1

kubernetes集群应用小技巧,aws如何搭建高速网络

在 EKS 集群上部署您的应用程序

现在您已配置 EKS 集群。让我们在您的 EKS 集群上部署您的第一个应用程序。

在本节中,您将学习如何将 nginx Web 服务器和负载均衡器一起部署为示例应用程序。

  1. 运行以下命令在您的系统上安装 git。您将需要 git 从 GitHub 克隆 nginx Web 服务器代码。
sudo yum install -y git 

  1. 运行下面的 git clone 命令,将 nginx Web 服务器代码从 github 克隆到你的当前目录。
git clone https://github.com/ata-aws-iam/htf-elk.git

3、运行cd htf-elk命令,将工作目录切换到nginx配置文件目录。

cd htf-elk

  1. 运行 ls 命令列出当前目录下的文件。
ls

您将在 nginx 目录中看到以下文件。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行下面的 cat 命令打开 nginx-deployment.yaml 文件,您将看到该文件中存在以下内容。
cat nginx-deployment.yaml

kubernetes集群应用小技巧,aws如何搭建高速网络

  • apiVersion:apps/v1 是核心 Kubernetes API
  • kind:部署是将为此文件创建的资源类型。在 Deployment 中,每个容器都会创建一个 Pod。
  • metadata:指定创建对象时要使用的元数据值
  • name:nginx-deployment 是此部署的名称或标签。如果它没有值,则部署名称取自目录名称。
  • labels:为应用程序提供标签。在这种情况下,它将用于通过 Elastic Load Balancing (ELB) 进行服务路由
  • env:dev 描述了一个由字符串值定义的环境变量。这就是您可以向容器提供动态配置数据的方式。
  • spec:是您定义要创建多少副本的地方。您可以指定希望每个副本所基于的属性。
  • replicas: 3 将在您的集群上创建此 pod 的三个副本。这些将分布在与标签选择器匹配的可用工作节点上。
  • containerPort: 80 会将容器中的一个端口映射到主机上的一个端口。在这种情况下,它将容器上的端口 80 映射到本地计算机的端口 30000。

6、 运行下面的cat命令打开服务文件nginx-svc.yaml。您将在该文件中看到以下内容。

cat nginx-svc.yaml

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行下面的 kubectl apply 命令在您的 Kubernetes 集群中创建 nginx 服务。EKS 集群需要几分钟才能为该服务配置 ELB。
kubectl apply -f ./nginx-svc.yaml

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行下面的kubectl get service,获取刚刚创建的nginx服务的详细信息。
kubectl get service

您将获得以下输出。ClusterIP 是分配给该服务的内部 kubernetes IP。LoadBalancer ELB 名称是此服务的唯一标识符。它将自动在 AWS 上创建一个 ELB 并为此服务预置一个公共端点,您可以通过您选择的服务(例如 Web 浏览器(域名)或 API 客户端)访问该端点。它可以通过您选择的 IP 地址访问。

名称为 a6f8c3cf0fe3a468d8828db6059ef05e-953361268.us-east-1.elb.amazonaws.com 的负载均衡器 ELB 具有端口 32406,该端口将映射到容器端口 80。从输出中记下负载均衡器 ELB 的 DNS 主机名;您稍后将需要它来访问该服务。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行下面的 kubectl apply 命令为您的集群应用部署。
kubectl apply -f ./nginx-deployment.yaml

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行 kubectl get deployment 以获取有关您刚刚创建的 nginx 部署的详细信息。
kubectl get deployment

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行以下命令,通过负载均衡器访问您的 nginx 应用程序。您将在终端/控制台中看到来自 nginx 的欢迎页面,它确认您的 nginx 应用程序正在按预期工作。将 <LOAD_BALANCER_DNS_HOSTNAME> 替换为您在上面提到的负载均衡器的 DNS 主机名。
curl "<LOAD_BALANCER_DNS_HOSTNAME>"

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 您还可以通过浏览器访问您的 nginx 应用程序,方法是将负载均衡器 DNS 主机名复制并粘贴到浏览器中。

通过浏览器访问您的 nginx 应用程序

验证集群的高可用性 (HA) 功能

现在您已成功创建集群,您可以测试 HA 功能以确保它按预期工作。

Kubernetes 使用特殊控制器支持多节点部署,这些控制器协同工作以构建和管理复制的 Pod 或服务。其中一些控制器是 Deployments、ReplicationController、Job 和 DaemonSet。

部署控制器用于控制 pod 或服务级别的复制。当您的 Pod 资源不足时,它将删除该复制控制器的所有 Pod(除了在主节点上运行的 Pod)并创建该 Pod 的新副本。这将帮助您在应用程序中获得非常高的正常运行时间。

  1. 导航到您的 EC2 仪表板并停止所有三个工作节点。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 运行以下命令检查您的 pod 的状态。

您将获得不同的状态:所有 pod 的Terminating、Running和Pending。因为一旦您停止了所有工作节点,EKS 将尝试重新启动所有工作节点和 Pod。您还可以看到一些新节点,您可以通过其年龄(50 岁)来识别这些节点。

kubectl get pod

kubernetes集群应用小技巧,aws如何搭建高速网络

启动新的 EC2 实例和 Pod 需要一些时间。启动所有工作程序节点后,您将看到所有新的 EC2 实例都恢复为运行状态。

kubernetes集群应用小技巧,aws如何搭建高速网络

  1. 再次重新运行 kubectl get service。

您可以看到 ESK 将为您的负载均衡器创建一个新的 nginx 服务和一个新的 DNS 名称。

kubectl get service 

kubernetes集群应用小技巧,aws如何搭建高速网络

将新的DNS复制并粘贴 到浏览器中。您将再次从 Nginx 页面获得欢迎。此输出确认您的 HA 按预期工作。

kubernetes集群应用小技巧,aws如何搭建高速网络

结论

在本文中,介绍了如何设置 EKS 集群,通过停止所有工作节点并检查 pod 的状态来验证高可用性功能是否有效,您现在应该能够使用 kubectl 创建和管理 EKS 集群。