amazon eks - 用户指南 - docs.aws.amazon.com · amazon eks 用户指南 how does amazon eks...

340
Amazon EKS 用户指南

Upload: others

Post on 18-Aug-2020

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS用户指南

Page 2: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Page 3: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Amazon EKS: 用户指南Copyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 4: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Table of ContentsAmazon EKS 是什么? ........................................................................................................................ 1

Amazon EKS 控制层面架构 .......................................................................................................... 1Amazon EKS 是如何工作的? ....................................................................................................... 1Pricing ...................................................................................................................................... 2

Amazon EKS 入门 .............................................................................................................................. 3eksctl 入门 ............................................................................................................................. 3

Prerequisites ...................................................................................................................... 3创建 Amazon EKS 集群并计算 ............................................................................................. 9后续步骤 .......................................................................................................................... 13

控制台入门 ............................................................................................................................... 13Prerequisites .................................................................................................................... 13步骤 1: 创建 Amazon EKS 集群 .......................................................................................... 22步骤 2: 创建 kubeconfig 文件 .......................................................................................... 24步骤 3: 创建计算 ............................................................................................................... 24

集群 ................................................................................................................................................ 30创建集群 .................................................................................................................................. 30

[使用 eksctl 创建集群] ..................................................................................................... 30[使用 AWS 管理控制台 创建集群] ........................................................................................ 32[使用 AWS CLI 创建集群] ................................................................................................... 34

更新 Kubernetes 版本 ................................................................................................................ 37更新现有集群 .................................................................................................................... 37Kubernetes 1.16 升级先决条件 ............................................................................................ 44

删除集群 .................................................................................................................................. 45集群终端节点访问 ...................................................................................................................... 48

修改集群终端节点访问 ....................................................................................................... 48访问私有 API 服务器 ......................................................................................................... 51

Cluster Autoscaler ..................................................................................................................... 52创建 Amazon EKS 集群 ..................................................................................................... 52Cluster Autoscaler 节点组注意事项 ...................................................................................... 53部署 Cluster Autoscaler ..................................................................................................... 54查看 Cluster Autoscaler 日志 .............................................................................................. 55

控制层面日志记录 ...................................................................................................................... 56启用和禁用控制层面日志 .................................................................................................... 56查看集群控制层面日志 ....................................................................................................... 58

Kubernetes 版本 ....................................................................................................................... 58可用的 Amazon EKS Kubernetes 版本 ................................................................................. 58Kubernetes 1.18 ............................................................................................................... 59Kubernetes 1.17 ............................................................................................................... 59Kubernetes 1.16 ............................................................................................................... 60Kubernetes 1.15 ............................................................................................................... 61Kubernetes 1.14 ............................................................................................................... 61Amazon EKS Kubernetes 版本日历 ..................................................................................... 62Amazon EKS 版本支持和常见问题 ....................................................................................... 62

平台版本 .................................................................................................................................. 63Kubernetes 版本 1.18 ........................................................................................................ 63Kubernetes 版本 1.17 ........................................................................................................ 64Kubernetes 版本 1.16 ........................................................................................................ 65Kubernetes 版本 1.15 ........................................................................................................ 66Kubernetes 版本 1.14 ........................................................................................................ 67

Windows 支持 .......................................................................................................................... 69Considerations .................................................................................................................. 69启用 Windows 支持 ........................................................................................................... 70部署 Windows 示例应用程序 ............................................................................................... 74

Inferentia 支持 .......................................................................................................................... 75

iv

Page 5: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Considerations .................................................................................................................. 76Prerequisites .................................................................................................................... 76创建集群 .......................................................................................................................... 76(可选)创建 Neuron TensorFlow Serving 应用程序映像 ............................................................. 77(可选)部署 TensorFlow Serving 应用程序映像 ........................................................................ 78(可选)根据 TensorFlow 服务进行预测 ................................................................................... 80

查看 API 服务器标记 ................................................................................................................. 81私有集群 .................................................................................................................................. 81

Requirements ................................................................................................................... 81Considerations .................................................................................................................. 82创建容器映像的本地副本 .................................................................................................... 82私有集群的 VPC 终端节点 .................................................................................................. 83

计算 ................................................................................................................................................ 84托管节点组 ............................................................................................................................... 86

托管节点组概念 ................................................................................................................. 87创建托管节点组 ................................................................................................................. 88更新托管节点组 ................................................................................................................. 91启动模板支持 .................................................................................................................... 94删除托管节点组 ................................................................................................................. 97

自管理节点 ............................................................................................................................... 97Amazon Linux .................................................................................................................. 98Tottlerkrocket (Tottlerocket) ............................................................................................... 102Windows ........................................................................................................................ 104更新 .............................................................................................................................. 108

AWS Fargate .......................................................................................................................... 115Fargate 注意事项 ............................................................................................................ 116Fargate 入门 .................................................................................................................. 116Fargate 配置文件 ............................................................................................................ 121Fargate Pod 配置 ............................................................................................................ 123用量指标 ........................................................................................................................ 124

Amazon EKS已优化AMIs .......................................................................................................... 125Amazon Linux ................................................................................................................. 125Ubuntu Linux .................................................................................................................. 141Tottlerkrocket (Tottlerocket) ............................................................................................... 141Windows ........................................................................................................................ 144

Storage .......................................................................................................................................... 154存储类 ................................................................................................................................... 154Amazon EBS CSI 驱动程序 ...................................................................................................... 155Amazon EFS CSI 驱动程序 ...................................................................................................... 159Amazon FSx for Lustre CSI 驱动程序 ......................................................................................... 163

网络功能 ........................................................................................................................................ 169为 Amazon EKS 创建 VPC ....................................................................................................... 170

为 Amazon EKS 创建 VPC ............................................................................................... 171后续步骤 ........................................................................................................................ 173

集群 VPC 注意事项 ................................................................................................................. 174VPC IP 寻址 ................................................................................................................... 174VPC 标记要求 ................................................................................................................. 175子网添加标签要求 ............................................................................................................ 175

Amazon EKS 安全组注意事项 ................................................................................................... 176集群安全组 ..................................................................................................................... 176控制层面和节点安全组 ...................................................................................................... 177

Pod 联网 (CNI) ....................................................................................................................... 178外部 SNAT ..................................................................................................................... 179Pod 的安全组 ................................................................................................................. 181CNI 自定义网络 ............................................................................................................... 191CNI 指标帮助程序 ............................................................................................................ 193CNI 配置变量 .................................................................................................................. 196

v

Page 6: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

CNI 升级 ........................................................................................................................ 201备选的兼容 CNI 插件 ....................................................................................................... 202

安装或升级 CoreDNS ............................................................................................................... 202升级 CoreDNS ................................................................................................................ 204

在 Amazon EKS 上安装 Calico .................................................................................................. 205Stars 策略演示 ................................................................................................................ 206

Applications .................................................................................................................................... 210示例部署 ................................................................................................................................ 210Vertical Pod Autoscaler ............................................................................................................ 213

安装 Metrics Server ......................................................................................................... 213部署 Vertical Pod Autoscaler ............................................................................................. 214测试 Vertical Pod Autoscaler 安装 ..................................................................................... 215

Horizontal Pod Autoscaler ........................................................................................................ 218安装 Metrics Server ......................................................................................................... 218运行 Horizontal Pod Autoscaler 测试应用程序 ...................................................................... 219

网络负载均衡 .......................................................................................................................... 221负载均衡器 – 实例目标 ..................................................................................................... 222负载均衡器 – IP 目标 ....................................................................................................... 223

应用程序负载均衡 .................................................................................................................... 227集群身份验证 .................................................................................................................................. 232

安装aws-iam-authenticator ................................................................................................ 232为 Amazon EKS 创建 kubeconfig ........................................................................................... 236

自动创建 kubeconfig ..................................................................................................... 236手动创建 kubeconfig ..................................................................................................... 237

管理集群的用户或 IAM 角色 ...................................................................................................... 240集群管理 ........................................................................................................................................ 243

安装kubectl ......................................................................................................................... 243除 中国 (宁夏) 和 中国(北京) 之外的所有区域 ................................................................... 243中国区域 ........................................................................................................................ 247

安装eksctl ........................................................................................................................... 251安装或升级 eksctl ......................................................................................................... 251

教程: 部署 Kubernetes 控制面板 ................................................................................................ 253Prerequisites .................................................................................................................. 253步骤 1: 部署 Kubernetes Metrics Server ............................................................................. 254步骤 2: 部署 Kubernetes 控制面板 ..................................................................................... 254步骤 3: 创建 eks-admin 服务账户和集群角色绑定 ............................................................... 255步骤 4: 连接到控制面板 .................................................................................................... 256步骤 5: 后续步骤 ............................................................................................................. 257

Metrics Server ........................................................................................................................ 257Prometheus 指标 ..................................................................................................................... 258

查看原始指标 .................................................................................................................. 258部署 Prometheus ............................................................................................................. 258

使用 Helm .............................................................................................................................. 261标记 资源 ............................................................................................................................... 261

有关标签的基本知识 ......................................................................................................... 262标记 资源 ....................................................................................................................... 262标签限制 ........................................................................................................................ 263通过控制台使用标签 ......................................................................................................... 263通过 CLI、API 或 eksctl 使用标签 ................................................................................... 264

服务配额 ................................................................................................................................ 265.................................................................................................................................... 266

安全性 ........................................................................................................................................... 267Identity and Access Management .............................................................................................. 267

Audience ........................................................................................................................ 268使用 身份进行身份验证 ..................................................................................................... 268使用策略管理访问权限 ...................................................................................................... 269Amazon EKS 如何与 IAM 协同工作 .................................................................................... 271

vi

Page 7: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

基于身份的策略示例 ......................................................................................................... 273使用服务相关角色 ............................................................................................................ 276集群 IAM 角色 ................................................................................................................ 279节点 IAM 角色 ................................................................................................................ 281Pod 执行角色 ................................................................................................................. 283服务账户的 IAM 角色 ....................................................................................................... 284问题排查 ........................................................................................................................ 297

日志记录和监控 ....................................................................................................................... 297合规性验证 ............................................................................................................................. 297弹性 ...................................................................................................................................... 298基础设施安全性 ....................................................................................................................... 298配置和漏洞分析 ....................................................................................................................... 299Pod 安全策略 ......................................................................................................................... 299

Amazon EKS 默认 Pod 安全策略 ....................................................................................... 299使用其他服务 .................................................................................................................................. 304

使用 AWS CloudFormation 创建 Amazon EKS 资源 ..................................................................... 304Amazon EKS 和 AWS CloudFormation 模板 ........................................................................ 304了解关于 AWS CloudFormation 的更多信息 ......................................................................... 304将 App Mesh 与 Kubernetes 结合使用 ................................................................................ 304

使用 AWS CloudTrail 记录 Amazon EKS API 调用 ....................................................................... 305CloudTrail 中的 Amazon EKS 信息 .................................................................................... 305了解 Amazon EKS 日志文件条目 ....................................................................................... 305

Amazon EKS 上的 AWS Outposts ............................................................................................. 307Prerequisites .................................................................................................................. 307Considerations ................................................................................................................ 308网络连接注意事项 ............................................................................................................ 308在 Outpost 上创建 Amazon EKS 节点 ................................................................................ 308

将 App Mesh 与 Kubernetes 结合使用 ........................................................................................ 304Amazon EKS 本地区域上的AWS ............................................................................................... 310Deep Learning 容器 ................................................................................................................. 310

问题排查 ........................................................................................................................................ 312容量不足 ................................................................................................................................ 312节点无法加入集群 .................................................................................................................... 312未经授权或访问被拒绝 (kubectl) .............................................................................................. 312未找到 aws-iam-authenticator ........................................................................................... 313hostname doesn't match ................................................................................................... 313getsockopt: no route to host ....................................................................................... 313托管节点组错误 ....................................................................................................................... 313CNI 日志收集工具 .................................................................................................................... 316容器运行时网络未准备就绪 ........................................................................................................ 317TLS 握手超时 ......................................................................................................................... 317InvalidClientTokenId ................................................................................................................. 318IAM ....................................................................................................................................... 318

AccessDeniedException ................................................................................................... 318aws-auth ConfigMap 不授予对集群的访问权限 ..................................................................... 319我无权执行 iam:PassRole ................................................................................................. 319我想要查看我的访问密钥 ................................................................................................... 319我是管理员,并且想要允许其他人访问 Amazon EKS ............................................................. 319我希望允许我的 AWS 账户之外的人员访问我的 Amazon EKS 资源 .......................................... 319

相关项目 ........................................................................................................................................ 321管理工具 ................................................................................................................................ 321

eksctl ............................................................................................................................. 321适用于 Kubernetes 的 AWS 控制器 .................................................................................... 321Flux CD (Flux CD) .......................................................................................................... 321适用于 Kubernetes 的 CDK .............................................................................................. 321

Networking ............................................................................................................................. 321Kubernetes 的 Amazon VPC CNI 插件 ............................................................................... 322

vii

Page 8: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Kubernetes 的 AWS 应用程序负载均衡器 (ALB) 入口控制器 ................................................... 322ExternalDNS ................................................................................................................... 322App Mesh 控制器 ............................................................................................................ 322

Security ................................................................................................................................. 322AWS IAM 身份验证器 ...................................................................................................... 322

机器学习 ................................................................................................................................ 323Kubeflow ........................................................................................................................ 323

Auto Scaling ........................................................................................................................... 323Cluster Autoscaler ........................................................................................................... 323Escalator ........................................................................................................................ 323

Monitoring .............................................................................................................................. 323Prometheus .................................................................................................................... 323

持续集成/持续部署 ................................................................................................................... 323Jenkins X ....................................................................................................................... 324

文档历史记录 .................................................................................................................................. 325............................................................................................................................................... cccxxxii

viii

Page 9: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 控制层面架构

Amazon EKS 是什么?Amazon EKS 是一项托管服务,可让您在 AWS 上轻松运行 Kubernetes,而无需安装、操作和维护您自己的Kubernetes 控制层面或节点。Kubernetes 是一个用于实现容器化应用程序的部署、扩展和管理的自动化的开源系统。

Amazon EKS 跨多个可用区运行 Kubernetes 控制层面实例以确保高可用性。Amazon EKS 可以自动检测和替换运行状况不佳的控制层面实例,并为它们提供自动版本升级和修补。

Amazon EKS 与许多 AWS 服务集成以便为您的应用程序提供可扩展性和安全性,包括:

• 用于容器镜像的 Amazon ECR• 用于负载分配的 Elastic Load Balancing• 用于身份验证的 IAM• 用于隔离的 Amazon VPC

Amazon EKS 运行最新版本的开源 Kubernetes 软件,因此您可以使用 Kubernetes 社区中的所有现有插件和工具。在 Amazon EKS 上运行的应用程序与在任何标准 Kubernetes 环境中运行的应用程序完全兼容,无论此类环境是在本地数据中心还是在公有云中运行都是如此。这意味着,您可以轻松地将任何标准 Kubernetes应用程序迁移到 Amazon EKS,而无需修改任何代码。

Amazon EKS 控制层面架构Amazon EKS 为每个集群运行一个单租户 Kubernetes 控制层面,控制层面基础设施不在集群或 AWS 账户之间共享。

此控制层面包含至少两个 API 服务器节点和三个跨区域内可用区的运行的 etcd 节点。Amazon EKS 会自动检测并替换运行状况不佳的控制层面实例,并根据需要跨区域中的可用区重启它们。Amazon EKS 利用AWS 区域的架构以保持高可用性。因此,Amazon EKS 能够提供确保 API 服务器终端节点可用性的 SLA。

Amazon EKS 使用 Amazon VPC 网络策略来将控制层面组件之间的流量限制到一个集群内。除非通过Kubernetes RBAC 策略授权,否则,集群的控制层面组件无法查看或接收来自其他集群或其他 AWS 账户的通信。

这个安全且高度可用的配置让 Amazon EKS 成为生产工作负载的可靠的建议配置。

Amazon EKS 是如何工作的?

1

Page 10: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pricing

Amazon EKS 入门是很轻松的:

1. 在 Amazon EKS中或使用 AWS 管理控制台 或其中一个 AWS CLI AWS 创建 SDKs 集群。2. 启动向 Amazon EKS 集群注册的托管或自管理节点。我们为您提供了一个可自动配置您的节点的 AWS

CloudFormation 模板。如果您不需要管理节点,也可以将应用程序部署到 AWS Fargate。3. 当您的集群准备就绪时,您可以配置常用 Kubernetes 工具(例如 kubectl )以与集群通信。4. 像在任何其他 Kubernetes 环境中一样在 Amazon EKS 集群上部署和管理应用程序。

要创建您的第一个集群及其关联资源,请参阅Amazon EKS 入门 (p. 3)。

Pricing集群包含控制层面以及运行 Pod 的 Amazon EKS 或 Amazon EC2 计算。AWS Fargate有关控制层面定价的更多信息,请参阅 Amazon EKS 定价。和 Amazon EC2 均提供:Fargate

• 按需实例 – 为您在使用的第二个实例付费,无需长期购买或预付款。有关更多信息,请参阅 Amazon EC2 按需定价和 AWS Fargate 定价。

• Savings Plans – 可以通过承诺在 1 年或 3 年期限内保持一致的使用量(以美元/小时为单位)来降低成本。有关更多信息,请参阅使用 Savings Plans 定价。

2

Page 11: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南eksctl 入门

Amazon EKS 入门有两个入门指南可用于在 Amazon EKS 中使用节点创建新的 Kubernetes 集群:

• eksctl 入门 (p. 3) – 此入门指南可帮助您使用 eksctl(用于在 Amazon EKS 上创建和管理Kubernetes 集群的简单命令行实用程序)来安装开始使用 Amazon EKS 所需的所有资源。在本教程结束时,您将获得一个可以将应用程序部署到的正在运行的 Amazon EKS 集群。这是开始使用 Amazon EKS 的最快、最简单的方式。

• AWS 管理控制台入门 (p. 13) – 此入门指南可帮助您创建要通过 Amazon EKS 开始使用 AWS 管理控制台 所需的所有资源。在本教程结束时,您将获得一个可以将应用程序部署到的正在运行的 Amazon EKS 集群。在本指南中,您将在 Amazon EKS 或 AWS CloudFormation 控制台中手动创建每个资源。这些过程可让您完全了解每个资源的创建方式以及资源之间如何相互交互。

eksctl 入门此入门指南可帮助您使用 Amazon EKS(用于在 eksctl 上创建和管理 Kubernetes 集群的简单命令行实用程序)创建开始使用 Amazon EKS 所需的所有资源。在本教程结束时,您将获得一个可以将应用程序部署到的正在运行的 Amazon EKS 集群。

本指南中的过程会自动为您创建几个资源,您在使用 AWS 管理控制台 创建集群时必须手动创建这些资源。如果您希望手动创建大多数资源以更好地了解它们之间的交互方式,请使用 AWS 管理控制台创建集群和计算。有关更多信息,请参阅AWS 管理控制台入门 (p. 13)。

Prerequisites本部分可帮助您安装和配置创建和管理 Amazon EKS 集群所需的以下工具。

• AWS CLI (p. 3) 用于处理 服务的命令行工具,包括 –。AWSAmazon EKS• eksctl (p. 5) 一种命令行工具,用于处理 EKS 集群,可自动执行许多单独的任务。–• kubectl (p. 6) 用于处理 Kubernetes 集群的命令行工具。–

安装AWS CLI您可以安装适用于 AWS CLImacOS、 (p. 3)Linux 或 (p. 4)Windows 的 (p. 4)的 的最新版本。

[安装适用于 AWS CLI 的macOS

1. 如果您当前已安装 AWS CLI,请确定您已安装的版本。

aws --version

2. 如果您没有安装版本 1.18.163 或更高版本或版本 2.0.59 或更高版本,请安装 AWS CLI 版本 2。有关其他安装选项或要升级当前安装的版本 2,请参阅在 macOS 上升级 AWS CLI 版本 2。

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"sudo installer -pkg AWSCLIV2.pkg -target /

如果无法使用 AWS CLI 版本 2,请确保使用以下命令安装了 AWS CLI 版本 1 的最新版本。

3

Page 12: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

pip3 install awscli --upgrade --user

[安装适用于 Linux 的AWS CLI

1. 如果您当前已安装 AWS CLI,请确定您已安装的版本。

aws --version

2. 如果您没有安装版本 1.18.163 或更高版本或版本 2.0.59 或更高版本,请安装 AWS CLI 版本 2。有关其他安装选项或要升级当前安装的版本 2,请参阅在 Linux 上升级 AWS CLI 版本 2。

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

如果无法使用 AWS CLI 版本 2,请确保使用以下命令安装了 AWS CLI 版本 1 的最新版本。

pip3 install --upgrade --user awscli

[安装适用于 Windows 的 AWS CLI]

1. 如果您当前已安装 AWS CLI,请确定您已安装的版本。

aws --version

2. 如果您没有安装版本 1.18.163 或更高版本,或者没有安装版本 2.0.59 或更高版本,请执行以下步骤来安装 AWS CLI 版本 2。有关其他安装选项或要升级当前安装的版本 2,请参阅在 Windows 上升级 AWSCLI 版本 2。

a. 下载适用于 Windows 的 AWS CLI MSI 安装程序(64 位),网址为 https://awscli.amazonaws.com/AWSCLIV2.msi

b. 运行下载的 MSI 安装程序并按照屏幕上的说明操作。默认情况下,AWS CLI 将安装到 C:\Program Files\Amazon\AWSCLIV2。

3. (可选)如果您无法使用 AWS CLI 版本 2,请确保使用以下命令安装了 AWS CLI 版本 1 的最新版本。

pip3 install --user --upgrade awscli

配置 AWS CLI 凭证eksctl 和 AWS CLI 均要求您在环境中配置 AWS 凭证。 aws configure 命令是设置 安装以供一般使用的最快方法。AWS CLI

$ aws configureAWS Access Key ID [None]: <AKIAIOSFODNN7EXAMPLE>AWS Secret Access Key [None]: <wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY>Default region name [None]: <region-code>Default output format [None]: <json>

键入该命令时,AWS CLI 会提示您输入四条信息: access key 、secret access key、AWS Region 和output format。 此信息存储在名为 default 的配置文件(一个设置集合)中。 除非您指定另一个命令,否则将在运行命令时使用此配置文件。

4

Page 13: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

有关更多信息,请参阅 AWS CLI 中的配置 AWS Command Line Interface 用户指南。

安装 eksctl您可以在 0.31.0-rc.0eksctl、Linux 或 macOSWindows (p. 5) 上安装 (p. 5) 命令行实用程序的版本 (p. 6) 或更高版本。有关更多信息,请参阅 https://eksctl.io/。

[使用 Homebrew 在 eksctl 上安装或升级macOS

开始使用 Amazon EKS 和 macOS 的最简单方法是使用 eksctlHomebrew 安装 。Homebrew 配方安装eksctl 所需的 eksctl 和任何其他依赖项,例如 Amazon EKS。kubectl 该配方还会安装 aws-iam-authenticator (p. 232),如果您没有安装 AWS CLI 版本 1.16.156 或更高版本,则这是必需的。

1. 如果您尚未在 macOS 上安装 Homebrew,请使用以下命令安装它。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

2. 安装 Weaveworks Homebrew tap。

brew tap weaveworks/tap

3. 安装或升级 eksctl。

• 使用以下命令安装 eksctl:

brew install weaveworks/tap/eksctl

• 如果已安装 eksctl,请运行以下命令进行升级:

brew upgrade eksctl && brew link --overwrite eksctl

4. 使用以下命令测试您的安装是否成功。

eksctl version

Note

GitTag 版本不得低于 0.31.0-rc.0。如果低于此版本,请检查您的终端输出是否有任何安装或升级错误,或从以下位置手动下载该版本的存档: https://github.com/weaveworks/eksctl/releases/download/0.31.0-rc.0/eksctl_Darwin_amd64.tar.gz,提取 eksctl 并执行。

[使用 eksctl 在 Linux 上安装或升级curl

1. 使用以下命令下载并提取最新版本的 eksctl。

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

2. 将提取的二进制文件移至 /usr/local/bin。

sudo mv /tmp/eksctl /usr/local/bin

3. 使用以下命令测试您的安装是否成功。

eksctl version

5

Page 14: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

Note

版本应至少为 GitTag。0.31.0-rc.0 如果没有,请检查终端输出是否有任何安装或升级错误,或将步骤 1 中的地址替换为 https://github.com/weaveworks/eksctl/releases/download/0.31.0-rc.0/eksctl_Linux_amd64.tar.gz 并再次完成步骤 1-3。

[使用 Chocolatey 在 Windows 上安装或升级eksctl

1. 如果您尚未在 Windows 系统上安装 Chocolatey,请参阅安装 Chocolatey。2. 安装或升级 eksctl 。

• 使用以下命令安装二进制文件:

chocolatey install -y eksctl

• 如果已安装,请运行以下命令进行升级:

chocolatey upgrade -y eksctl

3. 使用以下命令测试您的安装是否成功。

eksctl version

Note

GitTag 版本不得低于 0.31.0-rc.0。如果低于此版本,请检查您的终端输出是否有任何安装或升级错误,或从以下位置手动下载该版本的存档: https://github.com/weaveworks/eksctl/releases/download/0.31.0-rc.0/eksctl_Windows_amd64.zip,提取 eksctl 并执行。

安装和配置 kubectlKubernetes 使用 kubectl 命令行实用程序与集群 API 服务器进行通信。

Note

如果您使用上述的 Homebrew 说明在 eksctl 上安装 macOS,则 kubectl 已安装在您的系统上。您可以跳至创建 Amazon EKS 集群并计算 (p. 9)。

您可以安装适用于 1.18kubectl、macOSLinux (p. 6) 或 Windows (p. 7) 的 命令行实用程序的版本 (p. 8)。如果需要安装不同版本以与其他集群版本一起使用,请参阅安装kubectl (p. 243)。

[在 kubectl 上安装 macOS ]

1. 下载与集群所在的区域对应的 Amazon EKS 提供的 kubectl 二进制文件。

• 区域之外的所有区域。中国

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/kubectl

• 北京和宁夏 中国区域。

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/kubectl

2. (可选)使用 SHA-256 总和验证下载的二进制文件。

6

Page 15: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

a. 下载与集群所在的区域对应的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/kubectl.sha256

• 北京和宁夏 中国区域。

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/kubectl.sha256

b. 检查 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

chmod +x ./kubectl

4. 将 kubectl 移动到路径中的文件夹。

• 如果您还没有安装 kubectl 的版本,请将二进制文件移到 PATH 中已存在的文件夹。

sudo mv ./kubectl /usr/local/bin

• 如果您已经安装了 kubectl 版本,则建议您创建一个 $HOME/bin/kubectl 文件夹,将该二进制文件移动到该文件夹,并确保 $HOME/bin 位于 $PATH 中。

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

(可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Linux 上安装 kubectl]

1. 下载与集群所在的区域对应的 Amazon EKS 提供的 kubectl 二进制文件。

• 区域之外的所有区域。中国

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl

• 北京和宁夏 中国区域。

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/kubectl

2. (可选)使用 SHA-256 总和验证下载的二进制文件。

7

Page 16: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

a. 下载与集群所在的区域对应的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl.sha256

• 北京和宁夏 中国区域。

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/kubectl.sha256

b. 检查 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

chmod +x ./kubectl

4. 将 kubectl 移动到路径中的文件夹。

• 如果您还没有安装 kubectl 的版本,请将二进制文件移到 PATH 中的文件夹。

sudo mv ./kubectl /usr/local/bin

• 如果您已经安装了 kubectl 版本,则建议您创建一个 $HOME/bin/kubectl 文件夹,将该二进制文件移动到该文件夹,并确保 $HOME/bin 位于 $PATH 中。

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

(可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

Note

这一步假设您使用 Bash Shell;如果使用其他 Shell,请将命令更改为使用您的特定 Shell 的初始化文件。

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Windows 上安装 kubectl]

1. 打开 PowerShell 终端。2. 下载与集群所在的区域对应的 Amazon EKS 提供的 kubectl 二进制文件。

• 区域之外的所有区域。中国

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe

8

Page 17: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建 Amazon EKS 集群并计算

• 北京和宁夏 中国区域。

curl -o kubectl.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe

3. (可选)使用 SHA-256 总和验证下载的二进制文件。

a. 下载与集群所在的区域对应的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o kubectl.exe.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• 北京和宁夏 中国区域。

curl -o kubectl.exe.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

b. 检查 SHA-256 总和。

Get-FileHash kubectl.exe

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。二者应匹配,但 PowerShell输出为大写。

4. 将二进制文件复制到 PATH 中的文件夹。 如果 PATH 中有现有目录可用于命令行实用程序,请将二进制文件复制到该目录。否则,请完成以下步骤。

a. 为命令行二进制文件创建一个新目录,例如 C:\bin。b. 将 kubectl.exe 二进制文件复制到新目录。c. 编辑用户或系统 PATH 环境变量,将新目录添加到 PATH 中。d. 关闭您的 PowerShell 终端并打开一个新终端来选取新的 PATH 变量。

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

创建 Amazon EKS 集群并计算本部分帮助您使用计算选项创建 Amazon EKS 集群以运行您的应用程序。安装了 Amazon EKS 中提供的最新 Kubernetes 版本,以便您可以利用最新的 Kubernetes 和 Amazon EKS 功能。某些功能不可用于Kubernetes 的旧版本。

Important

确保已为您的账户启用集群所在区域的 AWS Security Token Service (STS) 终端节点。如果未启用终端节点,则节点在集群创建期间无法加入集群。有关更多信息,请参阅在 AWS 区域中激活和停用AWS STS。

选择以下计算选项之一。要了解有关每个选项的更多信息,请参阅Amazon EKS 计算 (p. 84)。部署完集群后,您可以选择添加其他选项。

• Fargate – Linux (p. 10) – 如果要在 AWS Fargate 上运行 Linux 应用程序,请选择此选项。• 托管节点 – Linux (p. 10) 如果要在 – 实例上运行 Amazon Linux 应用程序,请选择此选项Amazon EC2

9

Page 18: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建 Amazon EKS 集群并计算

• 自行管理的节点 – Windows (p. 11) – 如果要在 Amazon EC2 实例上运行 Windows 应用程序,请选择此选项。您也可以使用此选项运行 Linux 应用程序,因为即使您只需要运行 Windows 应用程序,您的集群仍必须至少具有一个 Linux 节点。

虽然本指南中未作介绍,但您也可以将 Bottlerocket 节点添加到您的集群。有关更多信息,请参阅启动自管理的 Tottlerocket 节点 (p. 102)。

[ Fargate – Linux ]Note

• 您只能在某些区域中将 AWS Fargate 与 Amazon EKS 结合使用。在将 Fargate 与 Amazon EKS结合使用之前,请确保支持要使用的区域。有关更多信息,请参阅通过 Amazon EKS 开始使用AWS Fargate (p. 116)。

• 不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS管理控制台 启动自管理 Windows 节点 (p. 105)。

使用以下命令通过 Fargate 支持创建 Amazon EKS 集群。您可以将 <my-cluster> 替换为您自己的值,并将<us-west-2> 替换为任何 Amazon EKS Fargate 支持的区域 (p. 115)。

我们建议您部署版本 1.18(但请先删除 <>)。如果您替换 1.18,请阅读该版本的重要 Amazon EKS 发布说明 (p. 58),并安装相应版本的 kubectl (p. 243)。

eksctl create cluster \--name <my-cluster> \--version <1.18> \--region <us-west-2> \--fargate

您的新 Amazon EKS 集群是在没有节点组的情况下创建的。Eksctl 会创建一个 Pod 执行角色、一个用于 和 Fargate 命名空间的 (p. 121) 配置文件default,并对 kube-system 部署进行修补,使其可以在coredns 上运行。Fargate有关更多信息,请参阅AWS Fargate (p. 115)。

[ 托管节点 – Linux ]您可以使用或不使用启动模板创建节点。启动模板可实现更大的自定义,从而包含部署自定义 AMI 的能力。

使用以下命令Amazon EKS创建 集群和 Linux 节点,而不 创建启动模板。将 <example values> 替换为您自己的值。您可以将 <us-west-2> 替换为任何 Amazon EKS 支持的区域。

Important

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS 管理控制台 启动自管理 Windows 节点 (p. 105)。Important

Amazon EKS 节点是标准的 Amazon EC2 实例,您需要基于常规的 Amazon EC2 实例价格为其付费。有关更多信息,请参阅 Amazon EC2 定价。

我们建议您部署版本 1.18(但首先删除 <>)。如果您替换 1.18,请阅读该版本的重要 Amazon EKS 发布说明 (p. 58),并安装相应版本的 kubectl (p. 243)。

虽然 --ssh-public-key 是可选的,不过我们强烈建议您在创建包含集群的节点组时指定该选项。通过此选项,可以对托管节点组中的节点进行 SSH 访问。启用 SSH 访问后,如果出现问题,您可以连接到实例并

10

Page 19: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建 Amazon EKS 集群并计算

收集诊断信息。在创建节点组后,将无法启用远程访问。如果您没有公有密钥,则可以为要为 指定的 创建密钥对Amazon EC2。--ssh-public-key 确保在创建集群的同一区域中创建密钥。

eksctl create cluster \--name <my-cluster> \--version <1.18> \--region <us-west-2> \--nodegroup-name <linux-nodes> \--nodes <3> \--nodes-min <1> \--nodes-max <4> \--ssh-access \--ssh-public-key <name-of-ec2-keypair> \--managed

使用Amazon EKS启动模板创建 Amazon Linux 集群和 节点。启动模板必须已存在,并且必须满足启动模板配置基础知识 (p. 94)中指定的要求。使用以下内容创建名为 <cluster-node-group-lt.yaml> 的文件,并将示例 <values> 替换为您自己的值。您在没有启动模板的情况下进行部署时指定的几个设置将移至启动模板中。如果未指定版本,则使用模板的默认版本。

---apiVersion: eksctl.io/v1alpha5kind: ClusterConfig

metadata: name: <my-cluster> region: <us-west-2> version: '<1.18>' managedNodeGroups:- name: <ng-linux> launchTemplate: id: lt-<id> version: "<1>"

使用以下命令创建集群和节点组。

eksctl create cluster --config-file <cluster-node-group-lt>.yaml

输出:

在创建集群和节点时,您将看到几行输出。输出的最后一行类似于以下示例行。

[✓] EKS cluster "<my-cluster>" in "<us-west-2>" region is ready

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。

[自行管理的节点 – Windows ]自行熟悉 Windows 支持注意事项 (p. 69),其中包括以下示例文本中对 instanceType 支持的值。将示例 <values> 替换为您自己的值。

我们建议您部署版本 1.18。 如果您必须部署早期版本,则只能将其替换为版本 1.16 或更高版本。如果更改1.18,请阅读该版本的重要 Amazon EKS 发行说明 (p. 58),并安装相应版本的 kubectl (p. 243)。

Important

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。

11

Page 20: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建 Amazon EKS 集群并计算

有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS 管理控制台 启动自管理 Windows 节点 (p. 105)。

Important

Amazon EKS 节点是标准的 Amazon EC2 实例,您需要基于常规的 Amazon EC2 实例价格为其付费。有关更多信息,请参阅 Amazon EC2 定价。

1. 将以下文本保存到名为 cluster-spec.yaml 的文件中。 配置文件用于创建具有自行管理的 Windows节点组和托管的 Linux 节点组的集群。即使您只想在集群中运行 Windows 应用程序,所有 Amazon EKS集群也必须至少包含一个 Linux 节点,不过出于可用性目的,我们建议您至少创建两个 Linux 节点。有关在 eksctl 中使用配置文件、配置文件架构和配置文件示例的更多信息,请参阅 eksctl 文档。我们建议您部署版本 1.18(但首先删除 <>)。如果您替换 1.18,请阅读该版本的重要 Amazon EKS 发布说明 (p. 58),并安装相应版本的 kubectl (p. 243)。

---apiVersion: eksctl.io/v1alpha5kind: ClusterConfig

metadata: name: <my-cluster> region: <<us-west-2> version: '<1.18>' managedNodeGroups: - name: <linux-ng> instanceType: <m5.large> minSize: <2>

nodeGroups: - name: <windows-ng> instanceType: <m5.large> minSize: <2> volumeSize: <100> amiFamily: <WindowsServer2019FullContainer>

2. 使用以下命令创建 Amazon EKS 集群以及 Windows 和 Linux 节点。

eksctl create cluster -f cluster-spec.yaml --install-vpc-controllers

Note

有关 eksctl create cluster 的可用选项的更多信息,请参阅 上的 READMEGitHub 项目或使用以下命令查看帮助页面。

eksctl create cluster --help

输出:

在创建集群和节点时,您将看到几行输出。输出的最后一行类似于以下示例行。

[✓] EKS cluster "<my-cluster>" in "<us-west-2>" region is ready

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。

集群配置通常需要 10 到 15 分钟。3. 当您的集群准备就绪时,测试您的 kubectl 配置是否正确。

kubectl get svc

12

Page 21: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南后续步骤

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

4. (仅限 Linux 加速 AMI 节点)如果您选择加速 AMI 实例类型和 Amazon EKS 优化加速 AMI,则必须使用以下命令在集群上将适用于 Kubernetes 的 NVIDIA 设备插件用作 DaemonSet。

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml

后续步骤现在,您有一个带节点的工作 Amazon EKS 集群,您已准备好开始安装 Kubernetes 插件并将应用程序部署到集群。以下文档主题可帮助您扩展集群的此功能。

• Cluster Autoscaler (p. 52) – 配置 Kubernetes Cluster Autoscaler 以自动调整节点组中的节点数。• 部署示例 Linux 应用程序 (p. 210) – 部署示例应用程序以测试您的集群和 Linux 节点。• 部署 Windows 示例应用程序 (p. 74) – 部署示例应用程序以测试您的集群和 Windows 节点。• 集群管理 (p. 243) – 了解如何使用重要工具来管理集群。

AWS 管理控制台入门此入门指南可帮助您创建要在 AWS 管理控制台中开始使用 Amazon EKS 所需的所有资源。在本指南中,您将在 Amazon EKS 或 AWS CloudFormation 控制台中手动创建每个资源。在本教程结束时,您将获得一个可以将应用程序部署到的正在运行的 Amazon EKS 集群。

本指南中的步骤可让您完全了解每个资源的创建方式以及资源之间如何相互交互。如果您希望自动为您创建大多数资源,请使用 eksctl CLI 创建集群和节点。有关更多信息,请参阅eksctl 入门 (p. 3)。

Prerequisites本部分可帮助您安装和配置创建和管理 Amazon EKS 集群所需的以下工具和资源。

• AWS CLI (p. 13) 一种用于处理 – 服务的命令行工具,包括 AWS。Amazon EKS• kubectl (p. 15) 一个用于处理 Kubernetes 集群的命令行工具。–• 集群 IAM 角色 (p. 18) 角色允许 – 管理的 Kubernetes 集群代表您调用其他 Amazon EKS 服务以管理

用于服务的资源。AWS

安装AWS CLI您可以为 AWS CLImacOS、 (p. 13)Linux 或 (p. 14)Windows 安装最新版本的 (p. 14)。

[安装适用于 AWS CLI 的macOS

1. 如果您当前已安装 AWS CLI,请确定您已安装的版本。

13

Page 22: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

aws --version

2. 如果您没有安装版本 1.18.163 或更高版本或版本 2.0.59 或更高版本,请安装 AWS CLI 版本 2。有关其他安装选项或要升级当前安装的版本 2,请参阅在 macOS 上升级 AWS CLI 版本 2。

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"sudo installer -pkg AWSCLIV2.pkg -target /

如果无法使用 AWS CLI 版本 2,请确保使用以下命令安装了 AWS CLI 版本 1 的最新版本。

pip3 install awscli --upgrade --user

[安装适用于 Linux 的AWS CLI

1. 如果您当前已安装 AWS CLI,请确定您已安装的版本。

aws --version

2. 如果您没有安装版本 1.18.163 或更高版本或版本 2.0.59 或更高版本,请安装 AWS CLI 版本 2。有关其他安装选项或要升级当前安装的版本 2,请参阅在 Linux 上升级 AWS CLI 版本 2。

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

如果无法使用 AWS CLI 版本 2,请确保使用以下命令安装了 AWS CLI 版本 1 的最新版本。

pip3 install --upgrade --user awscli

[安装适用于 Windows 的AWS CLI

1. 如果您当前已安装 AWS CLI,请确定您已安装的版本。

aws --version

2. 如果您没有安装版本 1.18.163 或更高版本,或者没有安装版本 2.0.59 或更高版本,请执行以下步骤来安装 AWS CLI 版本 2。有关其他安装选项或要升级当前安装的版本 2,请参阅在 Windows 上升级 AWSCLI 版本 2。

a. 下载适用于 Windows 的 AWS CLI MSI 安装程序(64 位),网址为 https://awscli.amazonaws.com/AWSCLIV2.msi

b. 运行下载的 MSI 安装程序并按照屏幕上的说明操作。默认情况下,AWS CLI 将安装到 C:\Program Files\Amazon\AWSCLIV2。

3. (可选)如果您无法使用 AWS CLI 版本 2,请确保使用以下命令安装了 AWS CLI 版本 1 的最新版本。

pip3 install --user --upgrade awscli

14

Page 23: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

配置 AWS CLI 凭证AWS CLI 要求您在环境中配置了 AWS 凭证。 aws configure 命令是设置 安装以供一般使用的最快方法。AWS CLI

$ aws configureAWS Access Key ID [None]: <AKIAIOSFODNN7EXAMPLE>AWS Secret Access Key [None]: <wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY>Default region name [None]: <region-code>Default output format [None]: <json>

键入此命令时,AWS CLI 会提示您输入四条信息: access key 、secret access key、AWS Region 和output format。 此信息存储在名为 default 的配置文件(一个设置集合)中。 除非您指定另一个命令,否则将在运行命令时使用此配置文件。

有关更多信息,请参阅 AWS CLI 中的配置 AWS Command Line Interface 用户指南。

安装和配置 kubectlKubernetes 使用 kubectl 命令行实用程序来与集群 API 服务器进行通信。

您可以安装适用于 1.18kubectl、macOSLinux (p. 15) 或 Windows (p. 16) 的 命令行实用程序的 (p. 17) 版本 。

[在 kubectl 上安装 macOS ]

1. 下载与集群所在的区域对应的 Amazon EKS 提供的 kubectl 二进制文件。

• 区域之外的所有区域。中国

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/kubectl

• 北京和宁夏 中国区域。

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/kubectl

2. (可选)使用 SHA-256 总和验证下载的二进制文件。

a. 下载与集群所在的区域对应的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/kubectl.sha256

• 北京和宁夏 中国区域。

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/kubectl.sha256

b. 检查 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

15

Page 24: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

chmod +x ./kubectl

4. 将 kubectl 移动到路径中的文件夹。

• 如果您还没有安装 kubectl 的版本,请将二进制文件移到 PATH 中已存在的文件夹。

sudo mv ./kubectl /usr/local/bin

• 如果您已经安装了 kubectl 版本,则建议您创建一个 $HOME/bin/kubectl 文件夹,将该二进制文件移动到该文件夹,并确保 $HOME/bin 位于 $PATH 中。

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

(可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Linux 上安装 kubectl]

1. 下载与集群所在的区域对应的 Amazon EKS 提供的 kubectl 二进制文件。

• 区域之外的所有区域。中国

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl

• 北京和宁夏 中国区域。

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/kubectl

2. (可选)使用 SHA-256 总和验证下载的二进制文件。

a. 下载与集群所在的区域对应的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl.sha256

• 北京和宁夏 中国区域。

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/kubectl.sha256

b. 检查 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

16

Page 25: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

chmod +x ./kubectl

4. 将 kubectl 移动到路径中的文件夹。

• 如果您还没有安装 kubectl 的版本,请将二进制文件移到 PATH 中的文件夹。

sudo mv ./kubectl /usr/local/bin

• 如果您已经安装了 kubectl 版本,则建议您创建一个 $HOME/bin/kubectl 文件夹,将该二进制文件移动到该文件夹,并确保 $HOME/bin 位于 $PATH 中。

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

(可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

Note

这一步假设您使用 Bash Shell;如果使用其他 Shell,请将命令更改为使用您的特定 Shell 的初始化文件。

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Windows 上安装 kubectl]

1. 打开 PowerShell 终端。2. 下载与集群所在的区域对应的 Amazon EKS 提供的 kubectl 二进制文件。

• 区域之外的所有区域。中国

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe

• 北京和宁夏 中国区域。

curl -o kubectl.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe

3. (可选)使用 SHA-256 总和验证下载的二进制文件。

a. 下载与集群所在的区域对应的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o kubectl.exe.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• 北京和宁夏 中国区域。

curl -o kubectl.exe.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

17

Page 26: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

b. 检查 SHA-256 总和。

Get-FileHash kubectl.exe

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。二者应匹配,但 PowerShell输出为大写。

4. 将二进制文件复制到 PATH 中的文件夹。 如果 PATH 中有现有目录可用于命令行实用程序,请将二进制文件复制到该目录。否则,请完成以下步骤。

a. 为命令行二进制文件创建一个新目录,例如 C:\bin。b. 将 kubectl.exe 二进制文件复制到新目录。c. 编辑用户或系统 PATH 环境变量,将新目录添加到 PATH 中。d. 关闭您的 PowerShell 终端并打开一个新终端来选取新的 PATH 变量。

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

创建您的 Amazon EKS 集群 IAM 角色您可以使用 AWS 管理控制台 (p. 18)或 AWS CloudFormation (p. 18) 创建角色。

[在 Amazon EKS 控制台中创建 IAM 集群角色]

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从服务列表中选择 EKS,为您的使用案例选择 EKS - Cluster,然后选择 Next: (下一步:)。权限。4. 选择 Next: (下一步:)。 标签。5. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南6. 选择 Next: (下一步:)。 审核。7. 对于 Role name (角色名称),输入您的角色的唯一名称,如 eksClusterRole,然后选择 Create role

(创建角色)。

[使用 Amazon EKS 创建 AWS CloudFormation 集群角色

1. 将以下 AWS CloudFormation 模板保存到本地系统中的文本文件。

---AWSTemplateFormatVersion: '2010-09-09'Description: 'Amazon EKS Cluster Role'

Resources:

eksClusterRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - eks.amazonaws.com

18

Page 27: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

Action: - sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonEKSClusterPolicy

Outputs:

RoleArn: Description: The role that Amazon EKS will use to create AWS resources for Kubernetes clusters Value: !GetAtt eksClusterRole.Arn Export: Name: !Sub "${AWS::StackName}-RoleArn"

Note

在 2020 年 4 月 16 日之前,ManagedPolicyArns 有一个 arn:aws:iam::aws:policy/AmazonEKSServicePolicy 条目。 对于 AWSServiceRoleForAmazonEKS 服务相关角色,不再需要该策略。

2. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。3. 选择创建堆栈。4. 对于指定模板,选择上传模板文件,然后选择选择文件。5. 选择您之前创建的文件,然后选择下一步。6. 对于 Stack name (堆栈名称),输入角色的名称,如 eksClusterRole,然后选择 Next (下一步)。7. 在 Configure stack options (配置堆栈选项) 页面上,选择 Next (下一步)。8. 在审核页面上,审核您的信息,确认堆栈可创建 IAM 资源,然后选择创建堆栈。

创建您的 Amazon EKS 集群 VPC本部分指导您完成使用以下任一项创建 VPC 的过程:

• 两个公有子网和两个私有子网 (p. 19)• 三个公有子网 (p. 20)• 三个私有子网 (p. 21)

创建 Amazon EKS 集群时,需要为集群指定要使用的 VPC 子网。Amazon EKS 要求指定至少两个可用区内的子网。我们建议使用同时带有公有子网和私有子网的 VPC,以便 Kubernetes 可以在公有子网中创建公有负载均衡器,进而将流量负载平衡到在私有子网中的节点上运行的 pod。

有关 VPC 类型的更多信息,请参阅为 Amazon EKS 集群创建 VPC (p. 170)。

创建带有公有子网和私有子网的集群 VPC

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 从导航栏中,选择支持 Amazon EKS 的区域。3. 依次选择 Create stack (创建堆栈) 和 With new resources (standard) (使用新资源(标准))。4. 对于选择一个模板,选择指定 Amazon S3 模板 URL。5. 将与您的集群所在的区域对应的 URL 粘贴到文本区域中,然后选择 Next (下一步):

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-vpc-private-subnets.yaml

• 北京和宁夏 中国区域。

19

Page 28: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-vpc-private-subnets.yaml

6. 在 Specify Details (指定详细信息) 页面上,相应填写参数,然后选择 Next (下一步)。

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 eks-vpc。• VpcBlock: 为您的 VPC 选择 CIDR 范围。您部署的每个工作线程节点、Pod 和负载均衡器都会从此块

中分配一个 IP 地址。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

• PublicSubnet01Block: 为公有子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PublicSubnet02Block: 指定公有子网 2 的 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet01Block: 为私有子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet02Block: 为私有子网 2 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。8. 在 Review 页面上,选择 Create 。9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。10. 记录已创建的安全组的 SecurityGroups 值。向集群添加节点时,必须指定安全组的 ID。安全组应用到在

子网中创建的跨账户弹性网络接口,这些接口允许 Amazon EKS 控制层面与节点进行通信。11. 记录已创建的 VPC 的 VpcId。您在启动节点组模板时需要此值。12. 记录已创建的子网的 SubnetIds,以及您是将它们创建为公有子网还是私有子网。向集群添加节点时,您必

须指定要将节点启动到的子网的 IDs。

创建只带有公有子网的集群 VPC

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 从导航栏中,选择支持 Amazon EKS 的区域。3. 依次选择 Create stack (创建堆栈) 和 With new resources (standard) (使用新资源(标准))。4. 对于选择一个模板,选择指定 Amazon S3 模板 URL。5. 将与您的集群所在的区域对应的 URL 粘贴到文本区域中,然后选择 Next (下一步):

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-vpc-sample.yaml

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-vpc-sample.yaml

6. 在 Specify Details (指定详细信息) 页面上,相应填写参数,然后选择 Next (下一步)。

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 eks-vpc。• VpcBlock: 为您的 VPC 选择 CIDR 块。您部署的每个工作线程节点、Pod 和负载均衡器都会从此块中

分配一个 IP 地址。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

20

Page 29: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prerequisites

• Subnet01Block: 为子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• Subnet02Block: 为子网 2 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• Subnet03Block: 为子网 3 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。8. 在 Review 页面上,选择 Create 。9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。10. 记录已创建的安全组的 SecurityGroups 值。向集群添加节点时,必须指定安全组的 ID。安全组应用到在

子网中创建的跨账户弹性网络接口,这些接口允许 Amazon EKS 控制层面与节点进行通信。11. 记录已创建的 VPC 的 VpcId。您在启动节点组模板时需要此值。12. 记录已创建的子网的 SubnetIds。向集群添加节点时,您必须指定要将节点启动到的子网的 IDs。

创建只带有私有子网的集群 VPC

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 从导航栏中,选择支持 Amazon EKS 的区域。3. 依次选择 Create stack (创建堆栈) 和 With new resources (standard) (使用新资源(标准))。4. 对于选择一个模板,选择指定 Amazon S3 模板 URL。5. 将与您的集群所在的区域对应的 URL 粘贴到文本区域中,然后选择 Next (下一步):

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-fully-private-vpc.yaml

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-fully-private-vpc.yaml

6. 在 Specify Details (指定详细信息) 页面上,相应填写参数,然后选择 Next (下一步)。

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 eks-vpc。• VpcBlock: 为您的 VPC 选择 CIDR 块。您部署的每个工作线程节点、Pod 和负载均衡器都会从此块中

分配一个 IP 地址。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

• PrivateSubnet01Block: 为子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet02Block: 为子网 2 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet03Block: 为子网 3 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。8. 在 Review 页面上,选择 Create 。9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。10. 记录已创建的安全组的 SecurityGroups 值。向集群添加节点时,必须指定安全组的 ID。安全组应用到在

子网中创建的跨账户弹性网络接口,这些接口允许 Amazon EKS 控制层面与节点进行通信。11. 记录已创建的 VPC 的 VpcId。您在启动节点组模板时需要此值。

21

Page 30: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 1: 创建 Amazon EKS 集群

12. 记录已创建的子网的 SubnetIds。向集群添加节点时,您必须指定要将节点启动到的子网的 IDs。

步骤 1: 创建 Amazon EKS 集群本部分将帮助您创建 Amazon EKS 集群。安装了 Amazon EKS 中提供的最新 Kubernetes 版本,以便您可以利用最新的 Kubernetes 和 Amazon EKS 功能。某些功能不可用于 Kubernetes 的旧版本。

Important

创建 Amazon EKS 集群后,创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(具有 system:masters 权限)。最初,仅该 IAM 用户可以使用 kubectl 调用Kubernetes API 服务器。有关更多信息,请参阅 管理集群的用户或 IAM 角色 (p. 240)。如果使用控制台创建集群,则必须确保在集群上运行 kubectl 命令时,AWS 开发工具包凭证链中具有相同的 IAM 用户凭证。如果安装和配置 AWS CLI,则可为用户配置 IAM 凭证。如果为用户正确配置了 AWS CLI 版本1.16.156 或更高版本,则 eksctl 可以找到这些凭证。有关更多信息,请参阅 AWS CommandLine Interface 用户指南 中的配置 AWS CLI。如果无法安装 AWS CLI 版本 1.16.156 或更高版本,则必须安装 aws-iam-authenticator。

使用控制台创建集群

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择 Create Cluster (创建集群)。

Note

如果 IAM 用户没有管理员特权,则必须为该用户显式添加权限以调用 Amazon EKS API 操作。有关更多信息,请参阅 Amazon EKS 基于身份的策略示例 (p. 273)。

3. 在 Configure cluster (配置集群) 页面上,填写以下字段:

• Name (名称) – 集群的独特名称。• Kubernetes version (Kubernetes 版本) – 要用于集群的 Kubernetes 的版本。• Cluster service role (集群服务角色) – 选择使用 创建您的 Amazon EKS 集群 IAM 角色 (p. 18) 创建

的 IAM 角色。• Secrets encryption (密钥加密) –(可选)选择使用 AWS Key Management Service (AWS KMS)

启用 Kubernetes 密钥的信封加密。如果启用信封加密,将使用您选择的客户主密钥 (CMK) 加密Kubernetes 密钥。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 AWS Key Management Service 开发人员指南 中的允许其他账户中的用户使用 CMK。

使用 AWS KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥。

• Tags (标签) –(可选)将任意标签添加到您的集群。有关更多信息,请参阅 标记 Amazon EKS 资源 (p. 261)。

4. 选择 Next (下一步)。5. 在 Specify networking (指定联网) 页面上,为以下字段选择值:

• VPC – 您之前在 创建您的 Amazon EKS 集群 VPC (p. 19)中创建的 VPC。您可以在下拉列表中查找您的 VPC 的名称。

• Subnets (子网) – 默认情况下,已预先选中在之前字段中指定的 VPC 中的可用子网。选择不希望托管集群资源的任何子网,例如工作线程节点或负载均衡器。

Important

Do not select a subnet in AWS Outposts, AWS Wavelength or an AWS Local Zonewhen creating your cluster. After cluster creation, you can tag the AWS Outposts AWS

22

Page 31: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 1: 创建 Amazon EKS 集群

Wavelength or AWS Local Zone subnets with the cluster name, which will then enable youto deploy self-managed nodes to the subnet. For more information, see 子网添加标签要求 (p. 175).

• Security Groups (安全组) – 您通过创建您的 Amazon EKS 集群 VPC (p. 19)生成的AWS CloudFormation 输出中的 SecurityGroups 值。此安全组具有下拉列表名称中的ControlPlaneSecurityGroup。

Important

节点 AWS CloudFormation 模板会修改您在此处指定的安全组,因此 Amazon EKS 强烈建议为每个集群控制层面使用专用安全组(每个集群一个)。如果此安全组是与其他资源共享的安全组,则可能会阻止或中断与这些资源的连接。

• (可选)如果您要指定 Kubernetes 从哪个 CIDR 块分配服务 IP 地址,请选择配置 Kubernetes 服务IP 地址范围并指定服务 IPv4 范围。CIDR 块必须满足以下要求:• 在下面的某个范围内:10.0.0.0/8、172.16.0.0.0/12 或 192.168.0.0/16。• 介于 /24 和 /12 之间。• 不与 VPC 中指定的任何 CIDR 块重叠。

我们建议您指定一个 CIDR 块,该块不与任何其他对等网络或连接到您的 VPC 的网络重叠。如果不启用此选项,则 Kubernetes 将从 10.100.0.0/16 或 172.20.0.0/16 CIDR 块分配服务 IP 地址。

Important

您只能在创建集群时指定自定义 CIDR 块,并且在创建集群后,无法更改此值。• Cluster endpoint access (集群终端节点访问) – 选择以下选项之一:

• Public (公有) – 仅允许对集群的 Kubernetes API 服务器终端节点进行公有访问。来自集群 VPC 外部的 Kubernetes API 请求将使用公有终端节点。默认情况下,允许从任何源 IP 地址访问。您可以选择限制对一个或多个 CIDR 范围(如 192.168.0.0/16)的访问,例如,通过选择 Advancedsettings (高级设置),然后选择 Add source (添加源)。

• Private (私有) – 仅允许对集群的 Kubernetes API 服务器终端节点进行私有访问。源自集群的 VPC内的 Kubernetes API 请求将使用私有 VPC 终端节点。

Important

If you created a VPC without outbound internet access, then you must enable privateaccess.

• Public and private (公有和私有) – 启用公有和私有访问。

有关以前选项的更多信息,请参阅修改集群终端节点访问 (p. 48)。6. 选择 Next (下一步)。7. 在 Configure logging (配置日志记录) 页面上,您可以选择要启用的日志类型,此操作是可选的。默认情

况下,每个日志类型均为已禁用。有关更多信息,请参阅Amazon EKS 控制层面日志记录 (p. 56)。8. 选择 Next (下一步)。9. 在 Review and create (审核和创建) 页面上,审核您在之前页面输入或选择的信息。如果需要对任

何选择进行更改,请选择 Edit (编辑)。对设置满意后,选择 Create (创建)。Status (状态) 字段显示CREATING (正在创建),直至集群配置过程完成。

Note

您可能会收到一个错误,指示请求中的可用区之一没有创建 Amazon EKS 集群的足够容量。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户所支持可用区中的子网创建集群。有关更多信息,请参阅容量不足 (p. 312)。

在配置完集群(通常在 10 到 15 分钟内完成)后,记下 API server endpoint (API 服务器终端节点) 和Certificate authority (证书颁发机构) 值。kubectl 配置中将使用这些值。23

Page 32: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 2: 创建 kubeconfig 文件

步骤 2: 创建 kubeconfig 文件在本部分中,您将使用 kubeconfig AWS CLI update-kubeconfig 命令为集群创建一个 文件。

使用 AWS CLI 创建 kubeconfig

1. 使用 AWS CLI update-kubeconfig 命令为您的集群创建或更新 。kubeconfig

• 默认情况下,生成的配置文件会在主目录的默认 kubeconfig 路径 (.kube/config) 中创建,或与该位置的现有 kubeconfig 合并。您可以使用 --kubeconfig 选项指定其他路径。

• 在发出 IAM --role-arn 命令时,您可以使用 kubectl 选项指定用于身份验证的 角色 ARN。否则,将使用默认 AWS CLI 或开发工具包凭证链中的 IAM 实体。您可以通过运行 AWS CLI aws stsget-caller-identity 命令来查看默认 或开发工具包身份。

• 有关更多信息,请参阅包含 aws eks update-kubeconfig help 命令的帮助页面,或参阅 https://docs.aws.amazon.com/cli/latest/reference/eks/update-kubeconfig.html 中的 update-kubeconfigAWSCLI Command Reference。

Note

要运行以下命令,您必须具有对指定的集群使用 eks:DescribeCluster API 操作的权限。有关更多信息,请参阅Amazon EKS 基于身份的策略示例 (p. 273)。

aws eks --region <us-west-2> update-kubeconfig --name <cluster_name>

2. 测试配置。

kubectl get svc

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

步骤 3: 创建计算选择以下计算选项之一。要了解有关每个选项的更多信息,请参阅Amazon EKS 计算 (p. 84)。部署完集群后,您可以选择添加其他选项。

• Fargate – Linux (p. 25) – 如果要在 AWS Fargate 上运行 Linux 应用程序,请选择此选项。• 托管节点 – Linux (p. 25) 如果要在 – 实例上运行 Amazon Linux 或 Windows 应用程序,请选择此选项

Amazon EC2

虽然本指南中未作介绍,但您也可以将 Bottlerocket 节点添加到集群。有关更多信息,请参阅启动自管理的Tottlerocket 节点 (p. 102)。

24

Page 33: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 3: 创建计算

[ Fargate – Linux ]Note

您只能在某些区域中将 AWS Fargate 与 Amazon EKS 结合使用。在将 Fargate 与 Amazon EKS 结合使用之前,请确保支持要使用的区域。有关更多信息,请参阅通过 Amazon EKS 开始使用 AWSFargate (p. 116)。

在创建 AWS Fargate 配置文件之前,您必须创建一个 Fargate Pod 执行角色来使用您的配置文件。

使用 AWS Fargate 创建 AWS 管理控制台 Pod 执行角色

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从服务列表中选择 EKS,为您的使用案例选择 EKS - Fargate pod,然后选择 Next: (下一步:)。权限。4. 选择 Next: (下一步:)。 标签。5. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南6. 选择 Next: (下一步:)。 审核。7. 对于 Role name (角色名称),输入您的角色的唯一名称,如

AmazonEKSFargatePodExecutionRole,然后选择 Create role (创建角色)。

您现在可以创建 Fargate 配置文件,并指定您创建的 IAM 角色。

使用 AWS 管理控制台 为集群创建 Fargate 配置文件

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择要为其创建 Fargate 配置文件的集群。3. 在 Fargate profiles (Fargate 配置文件) 下,选择 Add Fargate profile (添加 Fargate 配置文件)。4. 在 Configure Fargate profile (配置 Fargate 配置文件) 页面上,输入以下信息并选择 下一步 (Next)。

a. 在 Name (名称) 下,为 Fargate 配置文件输入唯一名称。b. 对于 Pod execution role (Pod 执行角色),选择要用于您的 Fargate 配置文件的 Pod 执行角色。将

仅显示具有 eks-fargate-pods.amazonaws.com 服务委托人的 IAM 角色。如果您未看到此处列出的任何角色,则必须创建一个角色。有关更多信息,请参阅Pod 执行角色 (p. 283)。

c. 对于 Subnets (子网),选择要用于 Pod 的子网。默认情况下,集群 VPC 中的所有子网都处于选中状态。在 Fargate 上运行的 Pod 仅支持私有子网;您必须取消选择任何公有子网。

d. 对于 Tags (标签),您可以自行选择是否为 Fargate 配置文件添加标签。这些标签不会传播到与配置文件关联的其他资源,如 Pod。

5. 在 Configure pods selection (配置 Pod 选择) 页面上,输入以下信息并选择 Next (下一步)。

a. 对于 Namespace (命名空间),输入与 Pod 匹配的命名空间,如 kube-system 或 default。b. (可选)将 Kubernetes 标签添加到指定命名空间中的 Pod 必须与选择器匹配的选择器中。例如,

您可以将标签 infrastructure: fargate 添加到选择器中,以便只有指定命名空间中也具有infrastructure: fargate Kubernetes 标签的 Pod 与选择器匹配。

6. 在Review and create (查看和创建) 页面上,查看 Fargate 配置文件的信息,然后选择 Create (创建)。

[ 托管节点 – Linux ]节点 Amazon EKS 守护程序代表您调用 kubelet AWS。APIs节点通过 IAM 实例配置文件和关联的策略接收这些 API 调用的权限。您必须先创建 IAM 角色,然后才能启动节点。您可以使用 AWS 管理控制台 (p. 26)或 AWS CloudFormation (p. 26) 创建角色。

25

Page 34: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 3: 创建计算

Note

我们建议您为每个集群创建一个新的节点 IAM 角色。否则,一个集群中的节点可以与其不属于的另一个集群进行身份验证。

在 Amazon EKS 控制台中创建 IAM 节点角色

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从 Choose a use case 下的 Common use cases 列表中选择 EC2,然后选择 Next: 权限。4. 在 Filter policies (筛选策略) 框中,输入 AmazonEKSWorkerNodePolicy。 选中

AmazonEKSWorkerNodePolicy 左侧的框。5. 在 Filter policies (筛选策略) 框中,输入 AmazonEKS_CNI_Policy。 选中 _CNI_PolicyAmazonEKS 左

侧的框。6. 在 Filter policies (筛选策略) 框中,输入 AmazonEC2ContainerRegistryReadOnly。 选中

AmazonEC2ContainerRegistryReadOnly 左侧的框。7. 选择 Next: (下一步:)。 标签。8. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南9. 选择 Next: (下一步:)。 审核。10. 对于 Role name (角色名称),输入您的角色的唯一名称,例如 NodeInstanceRole。 对于 Role

description (角色描述),请将当前文本替换为描述性文本,例如 Amazon EKS - Node Group Role,然后选择 Create role (创建角色)。

使用 Amazon EKS 创建 AWS CloudFormation 节点角色

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 选择 Create stack (创建堆栈),然后选择 With new resources (standard) (使用新资源(标准))。3. 对于 Specify template (指定模板),选择 Amazon S3 URL。4. 将与您的集群所在的区域对应的 URL 粘贴到 Amazon S3 URL 文本区域中,然后选择 Next (下一步) 两

次:

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-nodegroup-role.yaml

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-nodegroup-role.yaml

5. 在 Specify stack details (指定堆栈详细信息) 页面上,对于 Stack name (堆栈名称) 输入一个名称,如eks-node-group-instance-role ,然后选择 Next (下一步)。

6. (可选)在 Configure stack options (配置堆栈选项) 页面上,您可以选择为堆栈资源添加标签。选择下一步。

7. 在 Review (审核) 页面上,选中 Capabilities (功能) 部分中的复选框,然后选择 Create stack (创建堆栈)。

8. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。9. 记录已创建的 角色的 NodeInstanceRoleIAM 值。在您创建节点组时需要此功能。

您现在可以创建托管节点组。

26

Page 35: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 3: 创建计算

Important

Amazon EKS 节点是标准的 Amazon EC2 实例,您需要基于常规的 Amazon EC2 实例价格为其付费。有关更多信息,请参阅 Amazon EC2 定价。

使用 AWS 管理控制台 创建托管节点组

1. 等待集群状态显示为 ACTIVE。 您无法为尚未处于 ACTIVE 的集群创建托管节点组。2. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.3. 选择要在其中创建托管节点组的集群的名称。4. 在集群页面上,选择计算选项卡,然后选择添加节点组。5. 在 Configure node group (配置节点组) 页面上,填写相应参数,然后选择 Next (下一步)。

• Name (名称) – 为托管节点组输入唯一名称。• Node IAM role name (节点 IAM 角色名称) – 选择要与节点组一起使用的节点实例角色。有关更多信

息,请参阅Amazon EKS 节点 IAM 角色 (p. 281)。

Important

我们建议您使用任何自行管理节点组当前未使用的角色,或者使用您计划与新的自行管理节点组配合使用的角色。有关更多信息,请参阅删除托管节点组 (p. 97)。

• 使用启动模板 –(可选)如果要使用现有启动模板,请选择启动模板版本(可选)。如果未选择版本,则Amazon EKS 将使用模板的默认版本。启动模板允许对节点组进行更多自定义,包括允许您部署自定义 AMI。启动模板必须满足启动模板支持 (p. 94)中的要求。如果您未使用自己的启动模板,AmazonEKS API 将在您的账户中创建一个默认 Amazon EC2 启动模板,并使用默认启动模板部署节点组。

• Kubernetes labels (Kubernetes 标签) –(可选)可以选择对托管节点组中的节点应用 Kubernetes 标签。

• Tags (标签) –(可选)可以选择对 Amazon EKS 托管节点组进行标记。这些标签不会传播到节点组中的其他资源,例如 Auto Scaling 组或实例。有关更多信息,请参阅标记 Amazon EKS 资源 (p. 261)。

6. 在 Set compute and scaling configuration (设置计算和扩展配置) 页面上,相应填写参数,然后选择 Next(下一步)。

节点组计算配置

• AMI type – 为非 GPU 实例选择 Amazon Linux 2 (AL2_x86_64),为 GPU 实例选择 Amazon Linux 2GPU Enabled (AL2_x86_64_GPU),或为 Arm 选择 (AL2_ARM_64)Amazon Linux 2。

如果您要部署 Arm 实例,请确保在部署之前查看the section called “手臂” (p. 134)中的注意事项。

如果您在上一页上指定了启动模板,并在启动模板中指定了 AMI,则无法选择值。模板中的值将会显示。模板中指定的 AMI 必须满足 使用自定义 AMI (p. 97) 中的要求。

• Instance type (实例类型) – 选择托管节点组中要使用的实例类型。控制台显示一组常用的实例类型。如果您需要创建具有未显示实例类型的托管节点组,请使用 eksctl、AWS CLI、AWSCloudFormation 或开发工具包创建节点组。如果您在上一页上指定了启动模板,则无法选择值,因为必须在启动模板中指定该值。这将显示启动模板中的值。

每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),而每个 ENI 支持最大数量的 IP 地址。由于每个工作线程节点和 Pod 都分配有自己的 IP 地址,因此必须选择一种实例类型,以支持您希望在每个工作线程节点上运行的最大数量的 Pod。有关实例类型支持的 ENI 和 IP 地址数量的列表,请参阅每种实例类型、每个网络接口的 IP 地址。例如,对于工作线程节点和 Pod,m5.large实例类型最多支持 30 个 IP 地址。某些实例类型可能并非在所有区域都可用。

如果您计划使用Pod 的安全组 (p. 181),请确保指定受支持的 Amazon EC2 实例类型。有关更多信息,请参阅Amazon EC2 支持的实例和分支网络接口 (p. 184)。 如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS优化的 ArmAmazon LinuxAMIs (p. 134)中的注意事项。

27

Page 36: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 3: 创建计算

• 磁盘大小 – 输入要用于节点的根卷的磁盘大小(在 GiB 中)。

如果您在上一页上指定了启动模板,则无法选择值,因为必须在启动模板中指定该值。

节点组扩展配置

Note

Amazon EKS 不会自动扩展或缩小节点组。但是,您可以配置 Kubernetes ClusterAutoscaler (p. 52) 以执行此操作。

• Minimum size (最小大小) – 指定托管节点组可扩展到的最小节点数。• Maximum size (最大大小) – 指定托管节点组可扩展到的最大节点数。• Desired size (所需大小) – 指定托管节点组在启动时应保留的当前节点数。

7. 在 Specify networking (指定联网) 页面上,相应填写参数,然后选择 Next (下一步)。

• Subnets (子网) – 选择要在其中启动托管节点的子网。

Important

如果要使用 Kubernetes Cluster Autoscaler (p. 52) 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,则应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --balance-similar-node-groups 功能。

Important

• 如果您选择公有子网,则子网必须将 MapPublicIpOnLaunch 设置为 true,这些实例才能成功加入集群。如果子网是在不早于 eksctl 之时使用 或 Amazon EKSvended AWSCloudFormation templates (p. 170) 创建的,则此设置已设置为 true。March 26, 2020如果子网是在 March 26, 2020 之前使用 eksctl 或 AWS CloudFormation 模板创建的,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性。

• 不要在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中选择子网。您无法将托管节点部署到 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中的子网。您只能将自行管理的节点 (p. 97)部署到 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区子网。

• 允许远程访问节点(可选,但默认值)。启用 SSH 后,如果出现问题,您可以连接到实例并收集诊断信息。请完成以下步骤以启用远程访问。我们强烈建议您在创建节点组时启用远程访问。在创建节点组后,将无法启用远程访问。

如果您选择使用启动模板,则不会显示此选项。要启用对节点的远程访问,请在启动模板中指定密钥对,并确保对启动模板中指定的安全组中的节点打开适当的端口。有关更多信息,请参阅使用自定义安全组 (p. 96)。

• 对于 SSH key pair (SSH 密钥对)(可选),选择要使用的 Amazon EC2 SSH 密钥。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例)中的 Amazon EC2 密钥对。如果您选择使用启动模板,则不能选择启动模板。

• 对于 Allow remote access from (允许从),如果您希望限制对特定实例的访问,请选择与这些实例关联的安全组。如果您未选择特定安全组,则允许从 Internet 上的任何位置进行 SSH 访问 (0.0.0.0/0)。

8. 在 Review and create (审核并创建) 页面上,审核托管节点组配置并选择 Create (创建)。

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。9. 查看节点的状态并等待它们达到 Ready 状态。

kubectl get nodes --watch

10. (仅限 GPU 节点)如果您选择 GPU 实例类型和 Amazon EKS 优化加速 AMI,则必须使用以下命令在集群上将适用于 Kubernetes 的 NVIDIA 设备插件用作 DaemonSet。28

Page 37: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 3: 创建计算

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml

11. (可选)部署示例 Linux 应用程序 (p. 210) – 部署示例应用程序以测试您的集群和 Linux 节点。12. (可选)将 Linux 工作线程节点添加到集群后,请按照 Windows 支持 (p. 69)中的过程向集群添加

Windows 支持并添加 Windows 工作线程节点。所有 Amazon EKS 集群必须至少包含一个 Linux 工作线程节点,即使您只想在集群中运行 Windows 工作负载也是如此。

后续步骤现在,您有一个带节点的工作 Amazon EKS 集群,您已准备好开始安装 Kubernetes 插件并将应用程序部署到集群。以下文档主题可帮助您扩展集群的此功能。

• Cluster Autoscaler (p. 52) – 配置 Kubernetes Cluster Autoscaler 以自动调整节点组中的节点数。• 部署示例 Linux 应用程序 (p. 210) – 部署示例应用程序以测试您的集群和 Linux 节点。• 部署 Windows 示例应用程序 (p. 74) – 部署示例应用程序以测试您的集群和 Windows 节点。• 集群管理 (p. 243) – 了解如何使用重要工具来管理集群。

29

Page 38: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建集群

Amazon EKS 集群一个 Amazon EKS 集群包含两个主要组件:

• Amazon EKS 控制层面• 向控制层面注册的 Amazon EKS 节点

Amazon EKS 控制层面由运行 Kubernetes 软件(如 etcd)的控制层面节点和 Kubernetes API 服务器组成。控制层面在由 AWS 管理的账户中运行,并且 Kubernetes API 将通过与集群关联的 Amazon EKS 终端节点公开。每个 Amazon EKS 集群控制层面都是单租户而且是唯一的,它们在其自己的一组 Amazon EC2实例上运行。

etcd 节点和关联 Amazon EBS 卷存储的所有数据均使用 AWS KMS 加密。集群控制层面跨多个可用区进行配置,其前面配置了一个 Elastic Load Balancing 网络负载均衡器。Amazon EKS 还在 VPC 子网中配置弹性网络接口,以便在控制层面实例与节点之间建立连接(例如,为了支持 kubectl exec 、 logs 和 proxy数据流)。

Amazon EKS 节点在 AWS 账户中运行并通过 API 服务器终端节点和为集群创建的证书文件连接到集群的控制层面。

创建 Amazon EKS 集群本主题说明如何创建 Amazon EKS 集群。如果您是首次创建 Amazon EKS 集群,建议您按照我们的Amazon EKS 入门 (p. 3)指南之一操作。它们提供了使用节点创建 Amazon EKS 集群的完整端到端演练。

Important

创建 Amazon EKS 集群后,创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(具有 system:masters 权限)。最初,仅该 IAM 用户可以使用 kubectl 调用Kubernetes API 服务器。有关更多信息,请参阅 管理集群的用户或 IAM 角色 (p. 240)。如果使用控制台创建集群,则必须确保在集群上运行 kubectl 命令时,AWS 开发工具包凭证链中具有相同的 IAM 用户凭证。如果安装和配置 AWS CLI,则可为用户配置 IAM 凭证。如果为用户正确配置了 AWS CLI 版本1.16.156 或更高版本,则 eksctl 可以找到这些凭证。有关更多信息,请参阅 AWS CommandLine Interface 用户指南 中的配置 AWS CLI。如果无法安装 AWS CLI 版本 1.16.156 或更高版本,则必须安装 aws-iam-authenticator。

Prerequisites

您必须已安装 AWS CLI 的版本 1.16.156 或更高版本或 aws-iam-authenticator。有关更多信息,请参阅安装AWS CLI (p. 13)或安装aws-iam-authenticator (p. 232)。

您可以使用 eksctl (p. 30)、AWS 管理控制台 (p. 32) 或 AWS CLI 创建集群。 (p. 34)

[使用 eksctl 创建集群]此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

30

Page 39: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南[使用 eksctl 创建集群]

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

使用 eksctl 创建集群

1. 在您的默认区域中使用 Amazon EKS 最新 Kubernetes 版本创建集群。将 <my-cluster> 替换为您自己的值。您可以将 <1.18> 替换为任何受支持的版本 (p. 58)。

eksctl create cluster \ --name <my-cluster> \ --version <1.18> \ --without-nodegroup

Note

要查看在使用 eksctl 创建集群时可指定的大多数选项,请使用 eksctl create cluster--help 命令。要查看所有选项,您可以使用配置文件。有关更多信息,请参阅 eksctl 文档中的使用配置文件和配置文件架构。您可以在 上找到配置文件示例GitHub。Important

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用AWS 管理控制台 启动自管理 Windows 节点 (p. 105)。Warning

如果您使用带 secretsEncryption 选项的配置文件创建集群(需要现有 AWS KeyManagement Service 密钥),并且您使用的密钥会被删除,则无法恢复集群。如果启用信封加密,将使用您选择的客户主密钥 (CMK) 加密 Kubernetes 密钥。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 开发人员指南 中的允许其他账户中的用户使用 CMKAWS KeyManagement Service。使用 AWS KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本1.13 或更高版本。默认情况下,create-key 命令会创建一个具有密钥策略的对称密钥,该密钥策略向账户的根用户管理员授予对 AWS KMS 操作和资源的访问权限。有关更多信息,请参阅创建密钥。如果要缩小权限的范围,请确保允许对将调用 kms:DescribeKey API 的委托人的密钥策略执行 kms:CreateGrant 和 create-cluster 操作。Amazon EKS 不支持密钥策略条件kms:GrantIsForAWSResource。 如果此操作位于密钥策略语句中,则创建集群将不起作用。

集群预配置需要几分钟时间。在集群创建过程中,您将看到几行输出。输出的最后一行类似于以下示例行。

[✓] EKS cluster "<my-cluster>" in "<region-code>" region is ready

2. 当您的集群准备就绪时,测试您的 kubectl 配置是否正确。

kubectl get svc

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

31

Page 40: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南[使用 AWS 管理控制台 创建集群]

3. (可选)如果要在集群中的 AWS Fargate 上运行 Pod,则您必须创建 Fargate Pod 执行角色 (p. 118)和为您的集群创建 Fargate 配置文件 (p. 119)。

4. 按照启动自管理 Amazon Linux 节点 (p. 98)中的过程来将 Linux 节点添加到您的集群以支持工作负载。

5. (可选)将 Linux 节点添加到集群后,请按照Windows 支持 (p. 69)中的过程向集群添加 Windows 支持并添加 Windows 节点。所有 Amazon EKS 集群必须至少包含一个 Linux 节点,即使您只想在集群中运行Windows 工作负载也是如此。

[使用 AWS 管理控制台 创建集群]Prerequisites

• 您已创建符合 Amazon EKS 集群要求的 VPC 和专用安全组。有关更多信息,请参阅 集群 VPC 注意事项 (p. 174)和Amazon EKS 安全组注意事项 (p. 176)。AWS 管理控制台入门 (p. 13)指南创建符合要求的 VPC,您也可以按照为 Amazon EKS 集群创建 VPC (p. 170)来创建 VPC。

• 您已创建要应用于集群的 Amazon EKS 集群 IAM 角色。Amazon EKS 入门 (p. 3)指南创建服务角色,您也可以按照Amazon EKS IAM 角色 (p. 273)手动创建服务角色。

使用控制台创建集群

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择 Create Cluster (创建集群)。

Note

如果 IAM 用户没有管理员特权,则必须为该用户显式添加权限以调用 Amazon EKS API 操作。有关更多信息,请参阅 Amazon EKS 基于身份的策略示例 (p. 273)。

3. 在 Configure cluster (配置集群) 页面上,填写以下字段:

• Name (名称) – 集群的独特名称。• Kubernetes version (Kubernetes 版本) – 要用于集群的 Kubernetes 的版本。• Cluster service role – Choose the Amazon EKS cluster role to allow the Kubernetes control plane

to manage AWS resources on your behalf. For more information, see Amazon EKS 集群 IAM 角色 (p. 279).

• Secrets encryption (密钥加密) –(可选)选择使用 AWS Key Management Service (AWS KMS)启用 Kubernetes 密钥的信封加密。如果启用信封加密,将使用您选择的客户主密钥 (CMK) 加密Kubernetes 密钥。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 AWS Key Management Service 开发人员指南 中的允许其他账户中的用户使用 CMK。

使用 AWS KMS CMK 进行 Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。如果未列出任何密钥,则必须先创建一个密钥。有关更多信息,请参阅创建密钥。

Note

By default, the create-key command creates a symmetric key with a key policy thatgives the account's root user admin access on AWS KMS actions and resources. Ifyou want to scope down the permissions, make sure that the kms:DescribeKey andkms:CreateGrant actions are permitted on the key policy for the principal that will becalling the create-cluster API.Amazon EKS does not support the key policy condition kms:GrantIsForAWSResource.Creating a cluster will not work if this action is in the key policy statement.

32

Page 41: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南[使用 AWS 管理控制台 创建集群]

Warning

Deletion of the CMK will permanently put the cluster in a degraded state. If any CMKs usedfor cluster creation are scheduled for deletion, verify that this is the intended action beforedeletion. Once the key is deleted, there is no path to recovery for the cluster.

• Tags (标签) –(可选)将任意标签添加到您的集群。有关更多信息,请参阅 标记 Amazon EKS 资源 (p. 261)。

4. 选择 Next (下一步)。5. 在 Specify networking (指定联网) 页面上,为以下字段选择值:

• VPC – Select an existing VPC to use for your cluster. If none are listed, then you need to create onefirst. For more information, see 为 Amazon EKS 集群创建 VPC (p. 170).

• Subnets – By default, the available subnets in the VPC specified in the previous field arepreselected. Select any subnet that you don't want to host cluster resources, such as worker nodesor load balancers. The subnets must meet the requirements for an Amazon EKS cluster. For moreinformation, see 集群 VPC 注意事项 (p. 174).

Important

If you select subnets that were created before March 26, 2020 using one of the AmazonEKS AWS CloudFormation VPC templates, be aware of a default setting change thatwas introduced on March 26, 2020. For more information, see 为 Amazon EKS 集群创建VPC (p. 170).

Important

Do not select a subnet in AWS Outposts, AWS Wavelength or an AWS Local Zonewhen creating your cluster. After cluster creation, you can tag the AWS Outposts AWSWavelength or AWS Local Zone subnets with the cluster name, which will then enable youto deploy self-managed nodes to the subnet. For more information, see 子网添加标签要求 (p. 175).

• Security Groups (安全组) – 您通过创建您的 Amazon EKS 集群 VPC (p. 19)生成的AWS CloudFormation 输出中的 SecurityGroups 值。此安全组具有下拉列表名称中的ControlPlaneSecurityGroup。

Important

节点 AWS CloudFormation 模板会修改您在此处指定的安全组,因此 Amazon EKS 强烈建议为每个集群控制层面使用专用安全组(每个集群一个)。如果此安全组是与其他资源共享的安全组,则可能会阻止或中断与这些资源的连接。

• (可选)如果您要指定 Kubernetes 从哪个 CIDR 块分配服务 IP 地址,请选择配置 Kubernetes 服务IP 地址范围并指定服务 IPv4 范围。CIDR 块必须满足以下要求:• 在下面的某个范围内:10.0.0.0/8、172.16.0.0.0/12 或 192.168.0.0/16。• 介于 /24 和 /12 之间。• 不与 VPC 中指定的任何 CIDR 块重叠。

我们建议您指定一个 CIDR 块,该块不与任何其他对等网络或连接到您的 VPC 的网络重叠。如果不启用此选项,则 Kubernetes 将从 10.100.0.0/16 或 172.20.0.0/16 CIDR 块分配服务 IP 地址。

Important

您只能在创建集群时指定自定义 CIDR 块,并且在创建集群后,无法更改此值。• Cluster endpoint access (集群终端节点访问) – 选择以下选项之一:

• Public (公有) – 仅允许对集群的 Kubernetes API 服务器终端节点进行公有访问。来自集群 VPC 外部的 Kubernetes API 请求将使用公有终端节点。默认情况下,允许从任何源 IP 地址访问。您可

33

Page 42: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南[使用 AWS CLI 创建集群]

以选择限制对一个或多个 CIDR 范围(如 192.168.0.0/16)的访问,例如,通过选择 Advancedsettings (高级设置),然后选择 Add source (添加源)。

• Private (私有) – 仅允许对集群的 Kubernetes API 服务器终端节点进行私有访问。源自集群的 VPC内的 Kubernetes API 请求将使用私有 VPC 终端节点。

Important

If you created a VPC without outbound internet access, then you must enable privateaccess.

• Public and private (公有和私有) – 启用公有和私有访问。

有关以前选项的更多信息,请参阅修改集群终端节点访问 (p. 48)。6. 选择 Next (下一步)。7. 在 Configure logging (配置日志记录) 页面上,您可以选择要启用的日志类型,此操作是可选的。默认情

况下,每个日志类型均为已禁用。有关更多信息,请参阅Amazon EKS 控制层面日志记录 (p. 56)。8. 选择 Next (下一步)。9. 在 Review and create (审核和创建) 页面上,审核您在之前页面输入或选择的信息。如果需要对任

何选择进行更改,请选择 Edit (编辑)。对设置满意后,选择 Create (创建)。Status (状态) 字段显示CREATING (正在创建),直至集群配置过程完成。

Note

您可能会收到一个错误,指示请求中的可用区之一没有创建 Amazon EKS 集群的足够容量。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户所支持可用区中的子网创建集群。有关更多信息,请参阅容量不足 (p. 312)。

Cluster provisioning usually takes between 10 and 15 minutes.10. Now that you have created your cluster, follow the procedures in 安装aws-iam-

authenticator (p. 232) and 为 Amazon EKS 创建 kubeconfig (p. 236) to enablecommunication with your new cluster.

11. (Optional) If you want to run pods on AWS Fargate in your cluster, see 通过 Amazon EKS 开始使用AWS Fargate (p. 116).

12. After you enable communication, follow the procedures in 启动自管理 Amazon Linux 节点 (p. 98) toadd Linux worker nodes to your cluster to support your workloads.

13. (Optional) After you add Linux worker nodes to your cluster, follow the procedures in Windows 支持 (p. 69) to add Windows support to your cluster and to add Windows worker nodes. All AmazonEKS clusters must contain at least one Linux worker node, even if you only want to run Windowsworkloads in your cluster.

[使用 AWS CLI 创建集群]此过程具有以下先决条件:

• 您已创建符合 Amazon EKS 集群要求的 VPC 和专用安全组。有关更多信息,请参阅 集群 VPC 注意事项 (p. 174)和Amazon EKS 安全组注意事项 (p. 176)。AWS 管理控制台入门 (p. 13)指南创建符合要求的 VPC,您也可以按照为 Amazon EKS 集群创建 VPC (p. 170)来创建 VPC。

• 您已创建要应用于集群的 Amazon EKS 集群 IAM 角色。Amazon EKS 入门 (p. 3)指南创建服务角色,您也可以按照Amazon EKS IAM 角色 (p. 273)手动创建服务角色。

使用 AWS CLI 创建集群

1. 使用以下命令创建集群。替换您在Amazon 资源名称 (ARN)中创建的 Amazon EKS 集群 IAM 角色的创建您的 Amazon EKS 集群 IAM 角色 (p. 18),以及您在IDs中创建的 VPC 的子网和安全组 创建您的

34

Page 43: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南[使用 AWS CLI 创建集群]

Amazon EKS 集群 VPC (p. 19)。将 <my-cluster> 替换为您的集群名称,并将 <region-code> 替换为支持的区域。您可以将 <1.18> 替换为任何受支持的版本 (p. 58)。

aws eks create-cluster \ --region <region-code> \ --name <my-cluster> \ --kubernetes-version <1.18> \ --role-arn <arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR> \ --resources-vpc-config subnetIds=<subnet-a9189fe2>,<subnet-50432629>,securityGroupIds=<sg-f5c54184>

Important

不要在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中指定子网。仅在区域中指定子网。在部署集群后,使用集群名称标记 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区(要将自行管理的节点部署到的子网)。有关更多信息,请参阅子网添加标签要求 (p. 175)。

Note

如果 IAM 用户没有管理员特权,则必须为该用户显式添加权限以调用 Amazon EKS API 操作。有关更多信息,请参阅Amazon EKS 基于身份的策略示例 (p. 273)。

输出:

{ "cluster": { "name": "<my-cluster>", "arn": "arn:aws:eks:<region-code>:<111122223333>:cluster/<my-cluster>", "createdAt": <1527785885.159>, "version": "<1.18>", "roleArn": "arn:aws:iam::<111122223333>:role/eks-service-role-AWSServiceRoleForAmazonEKS-<AFNL4H8HB71F>", "resourcesVpcConfig": { "subnetIds": [ "<subnet-a9189fe2>", "<subnet-50432629>" ], "securityGroupIds": [ "<sg-f5c54184>" ], "vpcId": "<vpc-a54041dc>", "endpointPublicAccess": true, "endpointPrivateAccess": false }, "status": "CREATING", "certificateAuthority": {} }}

Note

您可能会收到一个错误,指示请求中的可用区之一没有创建 Amazon EKS 集群的足够容量。如果发生这种情况,错误输出将包含可支持新集群的可用区。再次尝试使用至少两个位于您账户所支持可用区中的子网创建集群。有关更多信息,请参阅容量不足 (p. 312)。

要使用 AWS Key Management Service (AWS KMS) 中的客户主密钥 (CMK) 加密 Kubernetes 密钥,请先使用 create-key 操作创建 CMK。

35

Page 44: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南[使用 AWS CLI 创建集群]

MY_KEY_ARN=$(aws kms create-key --query KeyMetadata.Arn —-output text)

Note

默认情况下,create-key 命令会创建一个具有密钥策略的对称密钥,该密钥策略向账户的根用户管理员授予对 AWS KMS 操作和资源的访问权限。如果要缩小权限的范围,请确保允许对将调用 create-cluster API 的委托人的密钥策略执行 kms:DescribeKey 和kms:CreateGrant 操作。Amazon EKS 不支持密钥策略条件 kms:GrantIsForAWSResource。 如果此操作位于密钥策略语句中,则创建集群将不起作用。

向 aws eks create-cluster 命令添加 --encryption-config 参数。只有在创建集群时,才能启用 Kubernetes 密钥的加密。

--encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"<$MY_KEY_ARN>"}}]'

keyArn 成员可以包含您的 CMK 的别名或 ARN。CMK 必须对称,在与集群相同的区域中创建,如果在不同的账户中创建了 CMK,则用户必须具有对 CMK 的访问权限。有关更多信息,请参阅 开发人员指南 中的允许其他账户中的用户使用 CMKAWS Key Management Service。使用 AWS KMS CMK 进行Kubernetes 密钥加密需要 Kubernetes 版本 1.13 或更高版本。

Warning

删除 CMK 会将集群永久性置于降级状态。如果计划删除用于创建集群的任何 CMKs,请在删除前确认这是预期操作。删除密钥后,将无法恢复集群。

2. 集群配置通常需要 10 到 15 分钟。可使用以下命令查询集群的状态。如果集群状态为 ACTIVE,则可继续操作。

aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.status"

3. 在完成集群配置后,使用以下命令检索 endpoint 和 certificateAuthority.data 值。您必须将这些值添加到 kubectl 配置,以便与集群进行通信。

a. 检索 endpoint。

aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.endpoint" --output text

b. 检索 certificateAuthority.data。

aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.certificateAuthority.data" --output text

4. 现已创建集群,请按照为 Amazon EKS 创建 kubeconfig (p. 236) 中的过程来启用与新集群的通信。5. (可选)如果要在集群中的 AWS Fargate 上运行 Pod,请参阅 通过 Amazon EKS 开始使用 AWS

Fargate (p. 116)。6. 启用通信后,请按照启动自管理 Amazon Linux 节点 (p. 98)中的过程向集群添加节点以支持工作负

载。7. (可选)将 Linux 节点添加到集群后,请按照Windows 支持 (p. 69)中的过程向集群添加 Windows 支持

并添加 Windows 节点。所有 Amazon EKS 集群必须至少包含一个 Linux 节点,即使您只想在集群中运行Windows 工作负载也是如此。

36

Page 45: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新 Kubernetes 版本

更新 Amazon EKS 集群 Kubernetes 版本当 Amazon EKS 中有新的 Kubernetes 版本可用时,您可以将集群更新到最新版本。

Important

我们建议您在更新到新的 Kubernetes 版本之前,可以查看Amazon EKS Kubernetes 版本 (p. 58)中的信息和本主题中的更新步骤。

新的 Kubernetes 版本引入了重大更改,因此,我们建议您先针对新的 Kubernetes 版本测试您的应用程序的行为,然后再在生产集群上执行更新。您可以通过构建持续集成工作流来端到端地测试应用程序行为,然后再移至新的 Kubernetes 版本来实现上述目的。

更新过程包含 Amazon EKS 使用更新后的 Kubernetes 版本启动新的 API 服务器节点来替换现有节点。Amazon EKS 执行标准基础设施和就绪运行状况检查,以确认这些新节点上是否有网络流量,从而验证它们是否按照预期工作。如果任意一项检查失败,Amazon EKS 将恢复基础设施部署,且您的集群保留为先前的 Kubernetes 版本。正在运行的应用程序不受影响,并且您的集群绝不会留在非确定性或不可恢复状态。Amazon EKS 定期备份托管集群,而且有机制来在必要时恢复集群。我们会不断地评估和改进我们的Kubernetes 基础设施管理流程。

为了升级集群,Amazon EKS 需要来自您在创建集群时提供的子网中的 2-3 个空闲 IP 地址。如果这些子网没有可用的 IP 地址,则升级可能会失败。此外,如果在集群创建过程中提供的任何子网或安全组已被删除,则集群升级过程可能会失败。

Note

尽管 Amazon EKS 运行高度可用的控制层面,但您可能在更新期间遇到次要服务中断。例如,如果您尝试在 API 服务器终止并由运行新版 Kubernetes 的新 API 服务器替换前后连接到 API 服务器,则可能遇到 API 调用错误或连接问题。如果出现这种情况,请重试您的 API 操作直至成功。

当您更新集群时,Amazon EKS 不修改您的任何 Kubernetes 插件。更新集群后,建议您将附加组件更新为下表中列出的您正在更新到的新 Kubernetes 版本。完成此操作的步骤包含在更新过程中。

Kubernetes 版本 1.18 1.17 1.16 1.15 1.14

Amazon VPC CNI 插件 1.7.5 1.7.5 1.7.5 1.7.5 1.7.5

DNS (CoreDNS) 1.7.0 1.6.6 1.6.6 1.6.6 1.6.6

KubeProxy 1.18.8 1.17.9 1.16.13 1.15.11 1.14.9

如果您的集群使用的是未在上表中列出的其他附加组件,请在更新集群后将这些附加组件更新为最新的兼容版本。

更新现有集群更新集群和 Kubnernetes 附加组件。

更新现有集群

1. 将集群控制层面的 Kubernetes 版本与节点的 Kubernetes 版本进行比较。

• 使用以下命令获取集群控制层面的 Kubernetes 版本。

kubectl version --short

37

Page 46: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新现有集群

• 使用以下命令获取节点的 Kubernetes 版本。

kubectl get nodes

如果您的节点比控制层面早一个 Kubernetes 次要版本,则在更新集群的 Kubernetes 版本之前,必须将节点升级到更新的 Kubernetes 次要版本。有关更多信息,请参阅 Kubernetes 文档中的 Kubernetes 版本和版本倾斜支持政策。

我们建议您在集群更新之前将节点更新为集群的当前更新前 Kubernetes 次要版本。您的节点不得运行比控制层面更高的 Kubernetes 版本。例如,如果您的控制层面运行的是版本 1.17 并且您的节点运行的是版本 1.15,请在将集群的 Kubernetes 版本更新为 1.18 之前将节点更新为版本 1.16 或 1.17(推荐)。有关更多信息,请参阅自管理节点更新 (p. 108)。

2. 在运行 Kubernetes 版本 1.13 或更高版本的 Amazon EKS 集群上启用 Pod 安全策略准入控制器。如果您要将集群升级到 Kubernetes 1.13 版或更高版本,请确保在更新之前已制定适当的 Pod 安全策略,以避免出现任何问题。您可以使用以下命令检查默认策略:

kubectl get psp eks.privileged

如果您收到以下错误,请参阅安装或恢复默认 Pod 安全策略 (p. 302),然后再继续操作。

Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found

3. 如果您最初在 Kubernetes 1.17 或更早版本上部署了集群,则可能需要从 CoreDNS 清单中删除已弃用的期限。

a. 检查 CoreDNS 清单是否具有该行。

kubectl get configmap coredns -n kube-system -o yaml |grep upstream

如果没有返回输出,则清单没有该行,您可以跳到下一步以更新集群。如果返回输出,则您需要删除该行。

b. 编辑 configmap,删除文件中包含单词 upstream 的行。请勿更改文件中的任何其他内容。在删除该行后,保存更改。

kubectl edit configmap coredns -n kube-system -o yaml

4. 使用 eksctl、AWS 管理控制台 或 AWS CLI 更新您的集群。

• eksctl – 此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的 版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

Note

此过程仅适用于使用 eksctl 创建的集群。

使用以下命令更新您的 Amazon EKS 集群 Kubernetes 版本,使用集群名称更新比当前版本高的一个次要版本,同时将 <dev> 替换为您的集群名称。由于 Amazon EKS 运行高度可用的控制层面,因此,您可以一次只更新一个次要版本。请参阅 Kubernetes 版本和版本倾斜支持政策以了解此要求背后的原理。

38

Page 47: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新现有集群

Important

您可能需要更新某些已部署的资源,然后才能更新到 1.16。有关更多信息,请参阅Kubernetes 1.16 升级先决条件 (p. 44)。如果您的任何 AWS Fargate Pod 的 kubelet 次要版本低于 1.16,将集群从 1.16 升级到 1.17 将失败。在将集群从 1.16 升级到 1.17 之前,您需要回收 Fargate Pod,以便它们的 kubelet 为 1.16,然后再尝试将集群升级到 1.17。

eksctl upgrade cluster --name <dev> --approve

此过程需要几分钟时间才能完成。• AWS 管理控制台

a. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.b. 选择要更新的集群的名称,然后选择 Update cluster version (更新集群版本)。c. 对于 Kubernetes version (Kubernetes 版本),选择您的集群要更新到的版本并选择 Update (更

新)。

Important

• 如果您的任何 AWS Fargate Pod 的 kubelet 次要版本低于 1.16,将集群从 1.16 升级到1.17 将失败。在将集群从 1.16 升级到 1.17 之前,您需要回收 Fargate Pod,以便它们的kubelet 在尝试将集群升级到 1.17 之前为 1.16。

• 您可能需要更新某些已部署的资源,然后才能更新到 1.16。有关更多信息,请参阅Kubernetes 1.16 升级先决条件 (p. 44)。

Important

由于 Amazon EKS 运行高度可用的控制层面,因此,您可以一次只更新一个次要版本。请参阅 Kubernetes 版本和版本倾斜支持政策以了解此要求背后的原理。因此,如果您的当前版本为 1.16,并且您想要升级到 1.18,则必须先将集群升级到 1.17,然后再将它从1.17 升级到 1.18。如果您尝试直接从 1.16 更新到 1.18,更新版本命令会引发错误。

d. 对于 Cluster name (集群名称),键入您的集群的名称并选择 Confirm (确认)。

Note

集群更新会在几分钟内完成。• AWS CLI

a. 使用以下 AWS CLI 命令更新集群。替换您的集群名称和所需 Kubernetes 次要版本。

Important

您可能需要更新某些已部署的资源,然后才能更新到 1.16。有关更多信息,请参阅Kubernetes 1.16 升级先决条件 (p. 44)。如果您的任何 AWS Fargate Pod 的 kubelet次要版本低于 1.16,则集群从 1.16 升级到 1.16 1.17 将失败。在将集群从 1.16 升级到1.17 之前,您需要回收 Fargate Pod,以便它们的 kubelet 为 1.16,然后再尝试将集群升级到1.17。

Important

由于 Amazon EKS 运行高度可用的控制层面,因此,您可以一次只更新一个次要版本。请参阅 Kubernetes 版本和版本倾斜支持政策以了解此要求背后的原理。因此,如果您的当前版本为 1.16,并且您想要升级到 1.18,则必须先将集群升级到 1.17,然后再将它从1.17 升级到 1.18。如果您尝试直接从 1.16 更新到 1.18,更新版本命令会引发错误。

aws eks --region <region-code> update-cluster-version --name <my-cluster> --kubernetes-version <1.18>

39

Page 48: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新现有集群

输出:

{ "update": { "id": "<b5f0ba18-9a87-4450-b5a0-825e6e84496f>", "status": "InProgress", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.18" }, { "type": "PlatformVersion", "value": "eks.1" } ],... "errors": [] }}

b. 使用以下命令通过上一命令返回的集群名称和更新 ID 监控您的集群更新的状态。当状态显示为Successful 时,您的更新将完成。

Note

集群更新会在几分钟内完成。

aws eks --region <region-code> describe-update --name <my-cluster> --update-id <b5f0ba18-9a87-4450-b5a0-825e6e84496f>

输出:

{ "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "<Successful>", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.18" }, { "type": "PlatformVersion", "value": "eks.1" } ],... "errors": [] }}

5. 修补 kube-proxy 守护程序集以使用对应于您集群的区域和当前 Kubernetes 版本的映像(在此示例中为 1.18.8)。

Kubernetes 版本 1.18 1.17 1.16 1.15 1.14

KubeProxy 1.18.8 1.17.9 1.16.13 1.15.11 1.14.9

40

Page 49: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新现有集群

a. 首先,检索您当前的 kube-proxy 映像:

kubectl get daemonset kube-proxy --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'

b. 通过从上一步中获取输出并将版本标签替换为集群的建议 kube-proxy 版本,将 kube-proxy 更新到建议的版本:

kubectl set image daemonset.apps/kube-proxy \ -n kube-system \ kube-proxy=<602401143452.dkr.ecr.us-west-2.amazonaws.com>/eks/kube-proxy:v<1.18.8>-eksbuild.1

您的账户 ID 和区域可能与上述示例不同。c. (可选)如果在同一集群中使用 x86 和 Arm 节点,并且您的集群是在 2020 年 8 月 17 日之前部署的,则

使用以下命令编辑 kube-proxy 清单以包含适用于多个硬件架构的节点选择器。这是一个一次性操作。将选择器添加到清单后,不需要在每次升级时都执行此操作。如果您的集群是在 2020 年 8 月 17日或之后部署的,则 kube-proxy 已经支持多架构。

kubectl edit -n kube-system daemonset/kube-proxy

在编辑器中将以下节点选择器添加到该文件中,然后保存该文件。有关在编辑器中包含此文本的示例,请参阅 上的 CNI 清单GitHub文件。 这使 Kubernetes 能够根据节点的硬件架构提取正确的硬件映像。

- key: "beta.kubernetes.io/arch" operator: In values: - amd64 - arm64

6. 检查集群的 DNS 提供商。使用 Kubernetes 版本 1.10 创建的集群作为默认 DNS 和服务发现提供程序随kube-dns 一起提供。如果您已将 1.10 集群更新到较新版本,并且要使用 DNS 和服务发现功能,则必须安装 CoreDNS 并删除 CoreDNS。kube-dns

要检查您的集群是否已在运行 CoreDNS,请使用以下命令。

kubectl get pod -n kube-system -l k8s-app=kube-dns

如果输出在 pod 名称中显示 coredns,则表示您已在集群中运行 CoreDNS。如果未安装,请参阅安装或升级 CoreDNS (p. 202)以在集群上安装 CoreDNS,请将其更新为建议的版本,返回此处,然后跳过步骤7-8。

7. 检查集群的 coredns 部署的当前版本。

kubectl describe deployment coredns --namespace kube-system | grep Image | cut -d "/" -f 3

输出:

coredns:v<1.1.3>

建议的对应 Kubernetes 版本的 coredns 版本如下所示:

41

Page 50: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新现有集群

Kubernetes 版本 1.18 1.17 1.16 1.15 1.14

CoreDNS 1.7.0 1.6.6 1.6.6 1.6.6 1.6.6

8. 如果当前 coredns 版本是 1.5.0 或更高版本,但早于推荐版本,请跳过此步骤。如果当前版本早于1.5.0,则需要修改 coredns 的配置映射以使用 forward 插件,而不是 proxy 插件。

a. 使用以下命令打开 configmap。

kubectl edit configmap coredns -n kube-system

b. 将以下行中的 proxy 替换为 forward。保存该文件并退出编辑器。

proxy . /etc/resolv.conf

9. 检索您当前的 coredns 映像:

kubectl get deployment coredns --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'

10. 通过获取上一步中的输出并将 <1.7.0>(包括 <>)替换为集群的建议 coredns 版本,将 coredns 更新到建议的版本:

kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=<602401143452.dkr.ecr.us-west-2.amazonaws.com>/eks/coredns:v<1.7.0>-eksbuild.1

Note

如果您要更新到最新的 Amazon EKS 1.14 版本,请从上述映像的末尾删除 -eksbuild.1。11. (可选)如果在同一集群中使用 x86 和 Arm 节点,并且您的集群是在 2020 年 8 月 17 日之前部署的,则使用

以下命令编辑 coredns 清单以包含适用于多个硬件架构的节点选择器。这是一个一次性操作。将选择器添加到清单后,不需要在每次升级时都执行此操作。如果您的集群是在 2020 年 8 月 17 日或之后部署的,则 coredns 已经支持多架构。

kubectl edit -n kube-system deployment/coredns

在编辑器中将以下节点选择器添加到该文件中,然后保存该文件。有关在编辑器中包含此文本的位置的示例,请参阅 上的 CNI 清单GitHub文件。

- key: "beta.kubernetes.io/arch" operator: In values: - amd64 - arm64

12. 检查 Kubernetes 的集群的 Amazon VPC CNI 插件版本。使用以下命令输出您集群的 CNI 版本。

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

输出:

amazon-k8s-cni:<1.6.3>

42

Page 51: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新现有集群

如果您的 CNI 版本低于 1.7.5,则使用下面的适当命令将 CNI 版本更新为最新建议版本:

• 美国西部(俄勒冈) (us-west-2)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni.yaml

• 中国(北京) (cn-north-1) 或 中国 (宁夏) (cn-northwest-1)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni-cn.yaml

• AWS GovCloud(美国东部) (us-gov-east-1)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni-us-gov-east-1.yaml

• AWS GovCloud (US-West) (us-gov-west-1)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni-us-gov-west-1.yaml

• 对于所有其他区域• 下载清单文件。

curl -o aws-k8s-cni.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni.yaml

• 在以下命令中,将 <region-code> 替换为您的集群所在的区域,然后运行修改后的命令以替换文件中的区域代码(当前为 us-west-2)。

sed -i -e 's/us-west-2/<region-code>/' aws-k8s-cni.yaml

• 将修改后的清单文件应用于集群。

kubectl apply -f aws-k8s-cni.yaml

13. (可选)如果您在升级集群之前将 Kubernetes Cluster Autoscaler 部署到了集群,请将 ClusterAutoscaler 更新为与您升级到的 Kubernetes 主版本和次版本匹配的最新版本。

Important

您不能将 Kubernetes Cluster Autoscaler 用于 Arm。

a. 在 Web 浏览器中打开 Cluster Autoscaler 版本页面,找到与您集群的 Kubernetes 主版本和次要版本相匹配的 Cluster Autoscaler。例如,如果您集群的 Kubernetes 版本是 1.18,则查找以 1.18 开头的最新 Cluster Autoscaler 版本。记录该版本的语义版本号 (<1.18.n>),以便在下一步中使用。

b. 使用以下命令,将 Cluster Autoscaler 映像标签设置为您在上一步中记录的版本。将 <1.18.n> 替换为您自己的值。可以将 us 替换为 <asia> 或 <eu>。

kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=<us>.gcr.io/k8s-artifacts-prod/autoscaling/cluster-autoscaler:v<1.18.n>

Note

根据所需的版本,您可能需要将以前的地址更改为 gcr.io/google-containers/cluster-autoscaler:v1.<n.n>。映像地址在版本页面上列出。

43

Page 52: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 1.16 升级先决条件

14. (仅限具有 GPU 节点的集群)如果您的集群具有支持 GPU 的节点组(例如,p3.2xlarge),则必须使用以下命令更新集群上的适用于 Kubernetes 的 NVIDIA 设备插件。DaemonSet

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml

15. 集群更新完成后,将节点更新到已更新集群的同一 Kubernetes 版本。有关更多信息,请参阅自管理节点更新 (p. 108)或更新托管节点组 (p. 91)。在 Fargate 上启动的任何新 pod 都将具有与您的集群版本匹配的 kubelet 版本。现有 Fargate pod 不会更改。

Kubernetes 1.16 升级先决条件如 Kubernetes 1.15 更改日志中所述,并且在 1.16 中弃用APIs: 下面是您需要了解的内容文档。如果您有现有的集群,则在将集群升级到 1.16 之前,需要对以下部署的资源进行 API 更改。

Warning

如果您在升级到 1.16 之前未更改这些 APIs,则工作负载将在升级完成后失败。

• 将不再从版本 1.16 中的 NetworkPolicy 提供 extensions/v1beta1 资源。迁移到使用networking.k8s.io/v1 API,从版本 1.8 开始提供。可以通过 networking.k8s.io/v1 API 检索现有的持久数据。

• 将不再从版本 1.16 中的 PodSecurityPolicy 提供 extensions/v1beta1 资源。迁移到 policy/v1beta1 API,从版本 1.10 开始提供。可以通过 policy/v1beta1 API 检索现有的持久数据。

• DaemonSet 、部署、StatefulSet 和 ReplicaSet 资源将不再从版本 1.16 中的 extensions/v1beta1、apps/v1beta1 或 apps/v1beta2 提供。迁移到 apps/v1 API,从版本 1.9 开始提供。可以通过 apps/v1 API 检索现有的持久数据。例如,要转换当前使用 apps/v1beta1 的 Deployment,请输入以下命令。

kubectl convert -f ./<my-deployment.yaml> --output-version apps/v1

Note

上一个命令使用的默认值可能与当前清单文件中设置的值不同。要了解有关特定资源的更多信息,请参阅 Kubernetes API 参考。

如果您最初使用 Kubernetes 版本 1.11 或更早版本创建了 Amazon EKS 集群,但尚未从 --resource-container kube-proxy 中删除 DaemonSet 标志,则更新到 Kubernetes 1.16 将导致 kube-proxy 失败。此标志在 Kubernetes 1.16 中已被弃用。有关更多信息,请参阅 Kubernetes 1.16 弃用和删除中的 kube-proxy。在更新到 Kubernetes 1.16 之前,您必须删除此标志。

升级到 1.16 之前需要执行的操作

• 更改您的 YAML 文件以引用新的 APIs。• 更新自定义集成和控制器以调用新的 APIs。• 确保您使用调用新 APIs 的任何第三方工具的更新版本,例如入口控制器、持续交付系统和其他工具。

要轻松检查集群中已弃用的 API 使用情况,请确保已启用 audit 控制层面日志 (p. 56),并指定v1beta 作为事件的筛选器。所有替换 APIs 均为高于 1.10 的 Kubernetes 版本。任何受支持 AmazonEKS 版本上的应用程序现在都可以开始使用更新的 APIs。

• 如果您的集群最初是使用 Kubernetes 1.11 或更早版本部署的,请从 --resource-container="" kube-proxy 中删除 DaemonSet 标志,或者使用 kube-proxy 配置文件(推荐)。要确定您的当前 kube-proxy 版本是否具有该标记,请输入以下命令。

44

Page 53: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南删除集群

kubectl get daemonset kube-proxy --namespace kube-system -o yaml | grep 'resource-container='

如果您未收到任何输出,则无需删除任何内容。如果您收到类似于 --resource-container="" 的输出,则您需要删除该标记。输入以下命令以编辑当前 kube-proxy 配置。

kubectl edit daemonset kube-proxy --namespace kube-system

在编辑器处于打开状态时,删除 --resource-container="" 行并保存文件。我们建议您开始使用 kube-proxy 配置文件。为此,请下载以下清单。

curl -o kube-proxy-daemonset.yaml https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2020-06-10/kube-proxy-daemonset.yaml

使用以下命令确定集群的终端节点。

aws eks describe-cluster \ --name <cluster-name> \ --region <region-code> \ --query 'cluster.endpoint' \ --output text

输出

https://<A89DBB2140C8AC0C2F920A36CCC6E18C>.sk1.<region-code>.eks.amazonaws.com

编辑您下载的 kube-proxy-daemonset.yaml 文件。在编辑器中,将 <MASTER_ENDPOINT> 替换为上一个命令的输出。将 <REGION> 替换为您的集群的区域。在同一行上,将版本替换为集群的版本(如有必要)。使用以下命令应用文件。

kubectl apply -f kube-proxy-daemonset.yaml

删除集群使用完 Amazon EKS 集群后,应删除与其关联的资源,这样一来,便不会产生任何不必要的费用。

Important

如果集群中具有与负载均衡器关联的有效服务,则必须先删除这些服务,然后再删除集群,以便正确删除负载均衡器。否则,VPC 中可能有阻止您删除 VPC 的孤立资源。

您可以使用 eksctl (p. 45)、AWS 管理控制台 (p. 46)或 AWS CLI (p. 47)来删除集群。

[使用 eksctl 删除 Amazon EKS 集群和节点]

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。Note

此过程仅适用于使用 eksctl 创建的集群。

45

Page 54: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南删除集群

1. 列出集群中运行的所有服务。

kubectl get svc --all-namespaces

2. 删除具有关联的 EXTERNAL-IP 值的任何服务。这些服务的前面配置了一个 Elastic Load Balancing 负载均衡器,您必须从 Kubernetes 中将其删除才能释放负载均衡器和关联资源。

kubectl delete svc <service-name>

3. 使用以下命令(将 <prod> 替换为您的集群名称)删除集群及其关联的节点。

eksctl delete cluster --name <prod>

输出:

[✓] using region <region-code>[✓] deleting EKS cluster "prod"[✓] will delete stack "eksctl-prod-nodegroup-standard-nodes"[✓] waiting for stack "eksctl-prod-nodegroup-standard-nodes" to get deleted[✓] will delete stack "eksctl-prod-cluster"[✓] the following EKS cluster resource(s) for "prod" will be deleted: cluster. If in doubt, check CloudFormation console

[使用 AWS 管理控制台 删除 Amazon EKS 集群]

1. 列出集群中运行的所有服务。

kubectl get svc --all-namespaces

2. 删除具有关联的 EXTERNAL-IP 值的任何服务。这些服务的前面配置了一个 Elastic Load Balancing 负载均衡器,您必须从 Kubernetes 中将其删除才能释放负载均衡器和关联资源。

kubectl delete svc <service-name>

3. 删除所有节点组和 Fargate 配置文件。

a. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.b. 在左侧导航窗格中,选择集群,然后在集群的选项卡列表中,选择要删除的集群的名称。c. 选择计算选项卡,选择要删除的节点组,选择删除,输入节点组的名称,然后选择删除。删除集群

中的所有节点组。

Note

只会列出托管节点组 (p. 86)。d. 选择要删除的 Fargate 配置文件,选择删除,输入配置文件的名称,然后选择删除。删除集群中的

所有 Fargate 配置文件。4. 删除所有自行管理的节点 AWS CloudFormation 堆栈。

a. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。b. 选择要删除的节点堆栈,然后依次选择操作和删除堆栈。c. 在 Delete Stack (删除堆栈) 确认屏幕上,选择 Yes, Delete (是,删除)。删除集群中的所有自行管理

的节点堆栈。5. 请删除集群。

a. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

46

Page 55: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南删除集群

b. 选择要删除的集群并选择 Delete (删除)。c. 在删除集群确认屏幕上,选择 Delete (删除)。

6. (可选)删除 VPC AWS CloudFormation 堆栈。

a. 选择要删除的 VPC 堆栈并选择 Actions (操作),然后选择 Delete Stack (删除堆栈)。b. 在 Delete Stack (删除堆栈) 确认屏幕上,选择 Yes, Delete (是,删除)。

[使用 AWS CLI 删除 Amazon EKS 集群]

1. 列出集群中运行的所有服务。

kubectl get svc --all-namespaces

2. 删除具有关联的 EXTERNAL-IP 值的任何服务。这些服务的前面配置了一个 Elastic Load Balancing 负载均衡器,您必须从 Kubernetes 中将其删除才能释放负载均衡器和关联资源。

kubectl delete svc <service-name>

3. 删除所有节点组和 Fargate 配置文件。

a. 使用以下命令列出集群中的节点组。

aws eks list-nodegroups --cluster-name <my-cluster>

Note

只会列出托管节点组 (p. 86)。b. 使用以下命令删除每个节点组。删除集群中的所有节点组。

aws eks delete-nodegroup --nodegroup-name <my-nodegroup> --cluster-name <my-cluster>

c. 使用以下命令列出集群中的 Fargate 配置文件。

aws eks list-fargate-profiles --cluster-name <my-cluster>

d. 使用以下命令删除每个 Fargate 配置文件。删除集群中的所有 Fargate 配置文件。

aws eks delete-fargate-profile --fargate-profile-name <my-fargate-profile> --cluster-name <my-cluster>

4. 删除所有自行管理的节点 AWS CloudFormation 堆栈。

a. 使用以下命令列出您的可用 AWS CloudFormation 堆栈。在生成的输出中查找节点模板名称。

aws cloudformation list-stacks --query "StackSummaries[].StackName"

b. 使用以下命令(将 <node-stack> 替换为节点堆栈名称)删除每个节点堆栈。删除集群中的所有自行管理的节点堆栈。

aws cloudformation delete-stack --stack-name <node-stack>

5. 使用以下命令(将 <my-cluster> 替换为您的集群名称)删除集群。

47

Page 56: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南集群终端节点访问

aws eks delete-cluster --name <my-cluster>

6. (可选)删除 VPC AWS CloudFormation 堆栈。

a. 使用以下命令列出您的可用 AWS CloudFormation 堆栈。在生成的输出中查找 VPC 模板名称。

aws cloudformation list-stacks --query "StackSummaries[].StackName"

b. 使用以下命令(将 <my-vpc-stack> 替换为您的 VPC 堆栈名称)删除 VPC 堆栈。

aws cloudformation delete-stack --stack-name <my-vpc-stack>

Amazon EKS 集群终端节点访问控制本主题可帮助您为 Amazon EKS 集群的 Kubernetes API 服务器终端节点启用私有访问,并限制或完全禁用通过 Internet 进行的公有访问。

在创建新集群时,Amazon EKS 将为您用于与集群进行通信的托管 Kubernetes API 服务器(使用Kubernetes 管理工具,如 kubectl)创建终端节点。默认情况下,此 API 服务器终端节点是对于 Internet是公有的,对 API 服务器的访问将使用 AWS Identity and Access Management (IAM) 与本机 Kubernetes 基于角色的访问控制 (RBAC) 的组合加以保护。

您可以启用 Kubernetes API 服务器的私有访问,以便节点与 API 服务器之间的所有通信都在 VPC 内。您可以限制可以从 Internet 访问 API 服务器的 IP 地址,或者完全禁用对 API 服务器的 Internet 访问。

Note

由于此终端节点用于 Kubernetes API 服务器,而不是用于与 AWS API 通信的传统 PrivateLink AWS终端节点,它不会在 Amazon VPC 控制台中显示为终端节点。

当您为集群启用终端节点私有访问时,Amazon EKS 将代表您创建一个 Route 53 私有托管区域,并将它与您的集群的 VPC 关联。这个私有托管区域由 Amazon EKS 管理,它不会出现在您的账户的 Route 53 资源中。为了使私有托管区域正确地将流量路由到您的 API 服务器,您的 VPC 必须将 enableDnsHostnames和 enableDnsSupport 设置为 true,而且为 VPC 设置的 DHCP 选项必须在其域名服务器列表中包含 AmazonProvidedDNS。有关更多信息,请参阅 https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html#vpc-dns-updating 中的更新对 VPC 的 DNS 支持Amazon VPC 用户指南。

Note

除了标准 Amazon EKS 权限外,您的 IAM 用户或角色还必须具有route53:AssociateVPCWithHostedZone 权限才能启用集群的终端节点私有访问。

您可以在创建新集群时定义 API 服务器终端节点的访问要求,并且可以随时更新集群的 API 服务器终端节点访问。

修改集群终端节点访问使用本节中的过程来修改现有集群的终端节点访问。下表显示了受支持的 API 服务器终端节点访问组合及其关联的行为。

API 服务器终端节点访问选项

终端节点公有访问 终端节点私有访问 行为

Enabled (已启用) 已禁用 • 这是新 Amazon EKS 集群的默认行为。

48

Page 57: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南修改集群终端节点访问

终端节点公有访问 终端节点私有访问 行为• 源自集群的 VPC 内的

Kubernetes API 请求(如控制层面通信的节点)离开 VPC 但不离开 Amazon 的网络。

• 集群 API 服务器可从 Internet访问。您可以选择性地限制可访问公有终端节点的 CIDR块。如果您限制对特定 CIDR块的访问,则建议您还启用私有终端节点,或确保您指定的CIDR 块包含节点和 FargatePod(如果您使用这些 Pod)从中访问公有终端节点的地址。

Enabled (已启用) Enabled (已启用) • 集群的 VPC 中的 KubernetesAPI 请求(如控制层面通信的节点)使用私有 VPC 终端节点。

• 集群 API 服务器可从 Internet访问。您可以选择性地限制可访问公有终端节点的 CIDR块。

已禁用 Enabled (已启用) • 传输到集群 API 服务器的所有流量都必须来自您的集群的VPC 或连接的网络中。

• 没有来自 Internet 的对 API服务器的公有访问。所有kubectl 命令都必须来自 VPC或连接的网络中。对于连接选项,请参阅 访问私有 API 服务器 (p. 51)。

• 公有 DNS 服务器将集群的 API服务器终端节点解析为 VPC 中的私有 IP 地址。过去,终端节点只能在 VPC 内部解析。

如果您的终端节点未解析为现有集群的 VPC 内的私有 IP 地址,您可以:• 启用公有访问,然后重新禁

用。您只需为集群执行一次该操作,终端节点就将从该时间点开始解析为私有 IP 地址。

• 更新 (p. 37)您的集群。

您可以使用 AWS 管理控制台 (p. 49)或 AWS CLI (p. 50) 修改集群 API 服务器终端节点访问。

[使用 AWS 管理控制台修改集群 API 服务器终端节点访问

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择集群的名称可以显示集群信息。3. 在 Networking (联网) 中,选择 Update (更新)。

49

Page 58: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南修改集群终端节点访问

4. 对于 Private access (私有访问),选择是启用还是禁用集群的 Kubernetes API 服务器终端节点的私有访问。如果启用私有访问,源自集群的 VPC 内的 Kubernetes API 请求将使用私有 VPC 终端节点。您必须启用私有访问以禁用公有访问。

5. 对于 Public access (公有访问),选择是启用还是禁用集群的 Kubernetes API 服务器终端节点的公有访问。如果禁用公有访问,集群的 Kubernetes API 服务器只能接收来自集群 VPC 内的请求。

6. (可选)如果您已启用 Public access (公有访问),则可以指定 Internet 中的哪些地址可以与公有终端节点通信。选择 Advanced Settings (高级设置)。输入 CIDR 块,例如 <203.0.113.5/32>。该块不能包含预留地址。您可以通过选择 Add Source (添加源) 来输入其他块。您可以指定的 CIDR 块存在最大数量限制。有关更多信息,请参阅Amazon EKS 服务配额 (p. 265)。如果未指定任何块,则公有 API 服务器终端节点将接收来自所有 (0.0.0.0/0) IP 地址的请求。如果您使用 CIDR 块限制对公有终端节点的访问,建议您还启用私有终端节点访问,以便节点和 Fargate Pod(如果您使用这些 Pod)可以与集群进行通信。在未启用私有终端节点的情况下,您的公有访问终端节点 CIDR 源必须包含来自 VPC 的出口源。例如,如果您在私有子网中有节点,该节点通过 NAT 网关与 Internet 通信,则您需要将 NAT 网关的出站 IP 地址作为公有终端节点上允许的 CIDR 块的一部分添加。

7. 选择 Update (更新) 完成操作。

[使用 AWS CLI修改集群 API 服务器终端节点访问

使用 AWS CLI 版本 1.18.163 或更高版本完成以下步骤。您可以使用 aws --version 检查当前版本。 要安装或升级 AWS CLI,请参阅安装 AWS CLI。

1. 使用下面的 AWS CLI 命令更新集群 API 服务器终端节点访问。替换您的集群名称和所需的终端节点访问值。如果设置 endpointPublicAccess=true,则可以(可选)输入单个 CIDR 块,或者输入publicAccessCidrs 的 CIDR 块的逗号分隔列表。 这些块不能包含预留地址。如果您指定 CIDR块,则公有 API 服务器终端节点将只接收来自列出的块的请求。您可以指定的 CIDR 块存在最大数量限制。有关更多信息,请参阅Amazon EKS 服务配额 (p. 265)。如果您使用 CIDR 块限制对公有终端节点的访问,建议您还启用私有终端节点访问,以便节点和 Fargate Pod(如果您使用这些 Pod)可以与集群进行通信。在未启用私有终端节点的情况下,您的公有访问终端节点 CIDR 源必须包含来自 VPC 的出口源。例如,如果您在私有子网中有节点,该节点通过 NAT 网关与 Internet 通信,则您需要将 NAT 网关的出站 IP 地址作为公有终端节点上允许的 CIDR 块的一部分添加。如果未指定任何 CIDR 块,则公有 API服务器终端节点将接收来自所有 (0.0.0.0/0) IP 地址的请求。

Note

以下命令为 API 服务器终端节点启用来自单个 IP 地址的私有访问和公有访问。将<203.0.113.5/32> 替换为要限制网络访问的单个 CIDR 块或逗号分隔的 CIDR 块列表。

aws eks update-cluster-config \ --region <region-code> \ --name <my-cluster> \ --resources-vpc-config endpointPublicAccess=<true>,publicAccessCidrs="<203.0.113.5/32>",endpointPrivateAccess=<true>

输出:

{ "update": { "id": "<e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000>", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "<true>" }, { "type": "EndpointPrivateAccess", "value": "<true>"

50

Page 59: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南访问私有 API 服务器

}, { "type": "publicAccessCidrs", "value": "[\<203.0.113.5/32>\"]" } ], "createdAt": <1576874258.137>, "errors": [] }}

2. 使用以下命令通过上一命令返回的集群名称和更新 ID 监控您的终端节点访问更新的状态。当状态显示为Successful 时,您的更新将完成。

aws eks describe-update \ --region <region-code> \ --name <my-cluster> \ --update-id <e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000>

输出:

{ "update": { "id": "<e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000>", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "<true>" }, { "type": "EndpointPrivateAccess", "value": "<true"> }, { "type": "publicAccessCidrs", "value": "[\<203.0.113.5/32>\"]" } ], "createdAt": <1576874258.137>, "errors": [] }}

访问私有 API 服务器如果您已禁用集群的 Kubernetes API 服务器终端节点的公有访问,则只能从 VPC 或连接的网络内访问 API服务器。以下是访问 Kubernetes API 服务器终端节点的部分可行方法:

• 连接的网络 – 使用 AWS Transit Gateway 或其他连接选项将您的网络连接到 VPC,然后使用所连接的网络中的计算机。必须确保您的 Amazon EKS 控制层面安全组规则允许来自您的连接网络的端口 443 上的入口流量。

• Amazon EC2 堡垒主机 – 您可以在集群的 VPC 中将 Amazon EC2 实例启动到公有子网中,然后通过 SSH登录到该实例来运行 kubectl 命令。有关更多信息,请参阅 AWS 上的 Linux 堡垒主机。必须确保您的Amazon EKS 控制层面安全组规则允许来自您的堡垒主机的端口 443 上的入口流量。有关更多信息,请参阅Amazon EKS 安全组注意事项 (p. 176)。

51

Page 60: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Cluster Autoscaler

在为堡垒主机配置 kubectl 时,请确保使用已映射到集群的 RBAC 配置的 AWS 凭证,或在删除终端节点公有访问之前添加您的堡垒将用于 RBAC 配置的 IAM 用户或角色。有关更多信息,请参阅 管理集群的用户或 IAM 角色 (p. 240)和未经授权或访问被拒绝 (kubectl) (p. 312)。

• AWS Cloud9 IDE – AWS Cloud9 是一种基于云的集成开发环境 (IDE),您只需要一个浏览器,即可编写、运行和调试代码。您可以在集群的 VPC 中创建 AWS Cloud9 IDE,然后使用 IDE 来与集群进行通信。有关更多信息,请参阅在 AWS Cloud9 中创建环境。您必须确保 Amazon EKS 控制平面安全组包含允许来自 IDE 安全组的端口 443 上的入口流量的规则。有关更多信息,请参阅Amazon EKS 安全组注意事项 (p. 176)。

在为 AWS Cloud9 IDE 配置 kubectl 时,请确保使用已映射到集群的 RBAC 配置的 AWS 凭证,或在删除终端节点公有访问之前添加您的 IDE 将用于 RBAC 配置的 IAM 用户或角色。有关更多信息,请参阅 管理集群的用户或 IAM 角色 (p. 240)和未经授权或访问被拒绝 (kubectl) (p. 312)。

Cluster AutoscalerKubernetes Cluster Autoscaler 在 Pod 由于缺少资源而无法启动时,或者在集群中的节点利用率不足使其Pod 可以重新调度到集群中的其他节点上时,自动调整集群中的节点数。

本主题介绍如何将 Cluster Autoscaler 部署到您的 Amazon EKS 集群以及如何配置它来修改 Amazon EC2Auto Scaling 组。Cluster Autoscaler 修改您的节点组,使其在您需要更多资源时扩展,在您资源利用率不足时缩减。

创建 Amazon EKS 集群本部分帮助您创建一个集群以及一个或多个节点组。如果您已有集群,则可以跳到Cluster Autoscaler 节点组注意事项 (p. 53)。

如果要使用 Kubernetes Cluster Autoscaler (p. 52) 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,则应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --balance-similar-node-groups 功能。否则,您可以创建跨多个可用区的单个节点组。

完成以下集群创建过程之一中的步骤。

[创建具有跨多个可用区的单个托管组的集群]

• 使用以下 eksctl 命令创建具有单个托管节点组的 Amazon EKS 集群。有关更多信息,请参阅创建Amazon EKS 集群 (p. 30)。将 <variable text> 替换为您自己的值。

eksctl create cluster --name <my-cluster> --version <1.18> --managed --asg-access

显示可用区的输出部分:

...[✓] using region <region-code>[✓] setting availability zones to [<region-code>a <region-code>b <region-code>c][✓] subnets for <region-code>a - public:192.168.0.0/19 private:192.168.96.0/19[✓] subnets for <region-code>b - public:192.168.32.0/19 private:192.168.128.0/19[✓] subnets for <region-code>c - public:192.168.64.0/19 private:192.168.160.0/19...[✓] nodegroup "ng-6bcca56a" has 2 node(s)[✓] node "ip-192-168-28-68.<region-code>.compute.internal" is ready[✓] node "ip-192-168-61-153.<region-code>.compute.internal" is ready[✓] waiting for at least 2 node(s) to become ready in "ng-6bcca56a"[✓] nodegroup "ng-6bcca56a" has 2 node(s)[✓] node "ip-192-168-28-68.<region-code>.compute.internal" is ready[✓] node "ip-192-168-61-153.<region-code>.compute.internal" is ready

52

Page 61: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Cluster Autoscaler 节点组注意事项

...[✓] EKS cluster "my-cluster" in "<region-code>" region-code is ready

[为每个 可用区 创建具有专用托管节点组的集群]

1. 使用以下 eksctl 命令,创建没有节点组的 Amazon EKS 集群。有关更多信息,请参阅创建 AmazonEKS 集群 (p. 30)。记录在其中创建集群的可用区。在创建节点组时,您将使用这些可用区。将红色可变文本替换为您自己的值。

eksctl create cluster --name <my-cluster> --version <1.18> --without-nodegroup

显示可用区的输出部分:

...[✓] using region <region-code>[✓] setting availability zones to [<region-code>a <region-code>c <region-code>b][✓] subnets for <region-code>a - public:192.168.0.0/19 private:192.168.96.0/19[✓] subnets for <region-code>c - public:192.168.32.0/19 private:192.168.128.0/19[✓] subnets for <region-code>b - public:192.168.64.0/19 private:192.168.160.0/19...[✓] EKS cluster "my-cluster" in "<region-code>" region is ready

此集群在下列可用区中创建:<region-code>a、<region-code>c 和 <region-code>b。2. 对于集群中的每个可用区,请使用以下 eksctl 命令创建一个节点组。将 <variable text> 替换为您自己

的值。此命令创建一个 Auto Scaling 组,最低数量为 1,最高数量为 10。

eksctl create nodegroup --cluster <my-cluster> --node-zones <<region-code>a> --name <<region-code>a> --asg-access --nodes-min <1> --nodes <5> --nodes-max <10> --managed

Cluster Autoscaler 节点组注意事项Cluster Autoscaler 需要本节中介绍的其他 IAM 和资源标记注意事项。

节点组 IAM 策略Cluster Autoscaler 需要以下 IAM 权限才能代表您调用 AWS APIs。

如果您使用前面的 eksctl 命令创建节点组,则这些权限将自动提供并附加到您的节点 IAM 角色。如果您未使用 eksctl,则必须使用以下文档创建一个 IAM 策略并将其附加到您的节点 IAM 角色。有关更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html 中的修改角色IAM 用户指南。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeTags", "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup", "ec2:DescribeLaunchTemplateVersions" ],

53

Page 62: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南部署 Cluster Autoscaler

"Resource": "*", "Effect": "Allow" } ]}

Auto Scaling 组标签Cluster Autoscaler 要求您节点组上具有以下 Auto Scaling 标签,以便能够自动发现它们。

如果您使用上一个 eksctl 命令创建您的节点组,则这些标签会自动应用。如果没有,则必须使用以下标签手动标记您的 Auto Scaling 组。有关更多信息,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html 中的标记 Amazon EC2 资源Amazon EC2 用户指南(适用于 Linux 实例)。

Key Value

k8s.io/cluster-autoscaler/<cluster-name>

owned

k8s.io/cluster-autoscaler/enabled true

部署 Cluster Autoscaler部署 Cluster Autoscaler

1. 通过完成与集群所在区域对应的选项,将清单应用于集群。

• 除 中国 (宁夏) 或 中国(北京) 之外的所有区域

kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

• 中国 (宁夏) 或 中国(北京)1. 使用下面的命令下载 清单。

curl -o cluster-autoscaler-autodiscover.yaml https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

2. 修改清单。a. 查看您下载的一个或多个清单文件,并记下映像名称。使用以下命令在本地下载映像。

docker pull image:<tag>

b. 使用以下命令标记要推送到中国区域内的 Amazon Elastic Container Registry 存储库的映像。

docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

c. 使用以下命令将映像推送到中国区域内的 Amazon ECR 存储库。

docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

d. 更新一个或多个 Kubernetes 清单文件或以引用您所在区域内的 Amazon ECR 映像 URL。3. 应用清单。

54

Page 63: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南查看 Cluster Autoscaler 日志

kubectl apply -f cluster-autoscaler-autodiscover.yaml

2. 使用以下命令将 cluster-autoscaler.kubernetes.io/safe-to-evict 注释添加到部署。

kubectl -n kube-system annotate deployment.apps/cluster-autoscaler cluster-autoscaler.kubernetes.io/safe-to-evict="false"

3. 使用以下命令编辑 Cluster Autoscaler 部署。

kubectl -n kube-system edit deployment.apps/cluster-autoscaler

编辑 cluster-autoscaler 容器命令,将 <YOUR CLUSTER NAME> 替换为您的集群名称,然后添加以下选项。

• <--balance-similar-node-groups>• <--skip-nodes-with-system-pods=false>

spec: containers: - command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=aws - --skip-nodes-with-local-storage=false - --expander=least-waste - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<<YOUR CLUSTER NAME>> - <--balance-similar-node-groups> - <--skip-nodes-with-system-pods=false>

保存并关闭该文件以应用更改。4. 在 Web 浏览器中打开 Cluster Autoscaler 版本页面,找到与您集群的 Kubernetes 主版本和次要版本相

匹配的 Cluster Autoscaler。例如,如果您集群的 Kubernetes 版本是 1.18,则查找以 1.18 开头的最新Cluster Autoscaler 版本。记录该版本的语义版本号 (1.18.<n>) 以在下一步中使用。

5. 使用以下命令,将 Cluster Autoscaler 映像标签设置为您在上一步中记录的版本。将 1.15.n 替换为您自己的值。可以将 us 替换为 asia 或 eu。

kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=<us>.gcr.io/k8s-artifacts-prod/autoscaling/cluster-autoscaler:v<1.15.n>

Note

根据所需的版本,您可能需要将以前的地址更改为 gcr.io/google-containers/cluster-autoscaler:v1.<n.n>。映像地址在版本页面上列出。

查看 Cluster Autoscaler 日志部署 Cluster Autoscaler 之后,您可以查看日志并验证它在监控您的集群负载。

使用以下命令查看您的 Cluster Autoscaler 日志。

kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler

55

Page 64: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南控制层面日志记录

输出:

I0926 23:15:55.165842 1 static_autoscaler.go:138] Starting main loopI0926 23:15:55.166279 1 utils.go:595] No pod using affinity / antiaffinity found in cluster, disabling affinity predicate for this loopI0926 23:15:55.166293 1 static_autoscaler.go:294] Filtering out schedulablesI0926 23:15:55.166330 1 static_autoscaler.go:311] No schedulable podsI0926 23:15:55.166338 1 static_autoscaler.go:319] No unschedulable podsI0926 23:15:55.166345 1 static_autoscaler.go:366] Calculating unneeded nodesI0926 23:15:55.166357 1 utils.go:552] Skipping ip-192-168-3-111.<region-code>.compute.internal - node group min size reachedI0926 23:15:55.166365 1 utils.go:552] Skipping ip-192-168-71-83.<region-code>.compute.internal - node group min size reachedI0926 23:15:55.166373 1 utils.go:552] Skipping ip-192-168-60-191.<region-code>.compute.internal - node group min size reachedI0926 23:15:55.166435 1 static_autoscaler.go:393] Scale down status: unneededOnly=false lastScaleUpTime=2019-09-26 21:42:40.908059094 ...I0926 23:15:55.166458 1 static_autoscaler.go:403] Starting scale downI0926 23:15:55.166488 1 scale_down.go:706] No candidates for scale down

Amazon EKS 控制层面日志记录Amazon EKS 控制层面日志记录将审计和诊断日志直接从 Amazon EKS 控制层面提供到您账户中的CloudWatch Logs。这些日志可让您轻松地保护和运行您的集群。您可以选择所需的确切的日志类型,日志将作为日志流发送到 CloudWatch 中的每个 Amazon EKS 集群的组。

您可以通过选择您想要为每个新的或现有 Amazon EKS 集群启用的日志类型来开始使用 Amazon EKS 控制层面日志记录。您可以使用 AWS 管理控制台、AWS CLI(版本 1.16.139 或更高版本)或通过 AmazonEKS API 按集群启用或禁用每种日志类型。启用后,日志将从 Amazon EKS 集群自动发送到同一账户中的CloudWatch Logs。

使用 Amazon EKS 控制层面日志记录时,您运行的每个集群将按标准 Amazon EKS 定价收费。对于从集群发送到 CloudWatch Logs 的任何日志,将向您收取标准 CloudWatch Logs 数据提取和存储费用。您还需要为预配置为集群一部分的任何 AWS 资源付费,如 Amazon EC2 实例或 Amazon EBS 卷。

以下集群控制层面日志类型可用。每个日志类型对应一个 Kubernetes 控制层面组件。要了解有关这些组件的更多信息,请参阅 Kubernetes 文档中的 Kubernetes 组件。

• Kubernetes API 服务器组件日志 (api) – 集群的 API 服务器是公开 Kubernetes API 的控制层面组件。有关更多信息,请参阅 Kubernetes 文档中的 kube-apiserver。

• 审计 (audit) – Kubernetes 审计日志提供单个用户、管理员或影响集群的系统组件的记录。有关更多信息,请参阅 Kubernetes 文档中的审计。

• 身份验证器 (authenticator) – 身份验证器日志对于 Amazon EKS 是唯一的。这些日志表示 AmazonEKS 用于使用 IAM 凭证的 Kubernetes 基于角色的访问控制 (RBAC) 身份验证的控制层面组件。有关更多信息,请参阅 集群身份验证 (p. 232)。

• 控制器管理器 (controllerManager) – 控制器管理器管理 Kubernetes 附带的核心控制环。有关更多信息,请参阅 Kubernetes 文档中的 kube-controller-manager。

• 计划程序 (scheduler) – 计划程序组件管理在集群中运行 Pod 的时间和位置。有关更多信息,请参阅Kubernetes 文档中的 kube-scheduler。

启用和禁用控制层面日志默认情况下,集群控制层面日志不会发送到 CloudWatch Logs。您必须单独启用每个日志类型来为集群发送日志。CloudWatch Logs 接收、存档存储和数据扫描费率适用于启用的控制层面日志。有关更多信息,请参阅 CloudWatch 定价。

56

Page 65: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启用和禁用控制层面日志

启用日志类型后,发送的日志具有详细程度级别 2。

使用控制台启用或禁用控制层面日志

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择集群的名称可以显示集群信息。3. 在 Logging (日志记录) 下,选择 Update (更新)。4. 对于每个日志类型,选择日志类型应为 Enabled (已启用) 还是 Disabled (已禁用)。默认情况下,每个日

志类型均为已禁用。5. 选择 Update (更新) 完成操作。

使用 AWS CLI 启用或禁用控制层面日志

1. 使用以下命令查看您的 AWS CLI 版本。

aws --version

如果您的 AWS CLI 版本低于 1.16.139,则必须先更新到最新版本。要安装或升级 AWS CLI,请参阅 中的安装 AWS 命令行界面。AWS Command Line Interface 用户指南

2. 使用下面的 AWS CLI 命令更新集群的控制层面日志导出配置。替换您的集群名称和所需的终端节点访问值。

Note

以下命令将所有可用日志类型发送到 CloudWatch Logs。

aws eks --region <region-code> update-cluster-config --name <prod> \--logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

输出:

{ "update": { "id": "<883405c8-65c6-4758-8cee-2a7c1340a6d9>", "status": "InProgress", "type": "LoggingUpdate", "params": [ { "type": "ClusterLogging", "value": "{\"clusterLogging\":[{\"types\":[\"api\",\"audit\",\"authenticator\",\"controllerManager\",\"scheduler\"],\"enabled\":true}]}" } ], "createdAt": 1553271814.684, "errors": [] }}

3. 使用以下命令通过上一命令返回的集群名称和更新 ID 监控您的日志配置更新的状态。当状态显示为Successful 时,您的更新将完成。

aws eks --region <region-code> describe-update --name <prod> --update-id <883405c8-65c6-4758-8cee-2a7c1340a6d9>

输出:

57

Page 66: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南查看集群控制层面日志

{ "update": { "id": "<883405c8-65c6-4758-8cee-2a7c1340a6d9>", "status": "Successful", "type": "LoggingUpdate", "params": [ { "type": "ClusterLogging", "value": "{\"clusterLogging\":[{\"types\":[\"api\",\"audit\",\"authenticator\",\"controllerManager\",\"scheduler\"],\"enabled\":true}]}" } ], "createdAt": 1553271814.684, "errors": [] }}

查看集群控制层面日志为您的 Amazon EKS 集群启用任何控制层面日志类型后,您可以在 CloudWatch 控制台上进行查看。

要了解有关在 CloudWatch 中查看、分析和管理日志的更多信息,请参阅 Amazon CloudWatch Logs UserGuide。

在 CloudWatch 控制台上查看集群控制层面日志

1. 打开 CloudWatch 控制台 (https://console.aws.amazon.com/cloudwatch/home#logs:prefix=/aws/eks)。此 URL 将显示您当前可用的日志组,并使用 /aws/eks 前缀筛选它们。

2. 选择您要查看日志的集群。日志组名称格式为 /aws/eks/<cluster-name>/cluster。3. 选择要查看的日志流。以下列表介绍了每个日志类型的日志流名称格式。

Note

随着日志流数据增加,日志流名称将轮换。当某个日志类型存在多个日志流时,您可以通过查找包含最新的上次事件时间的日志流名称来查看最新的日志流。

• Kubernetes API 服务器组件日志 (api) – kube-apiserver-<nnn...>• 审核 (audit)–kube-apiserver-audit-<nnn...>• 身份验证器 (authenticator)–authenticator-<nnn...>• 控制器管理器 (controllerManager) – kube-controller-manager-<nnn...>• 计划程序 (scheduler)–kube-scheduler-<nnn...>

Amazon EKS Kubernetes 版本该 Kubernetes 项目发展迅速,提供了新功能、设计更新和错误修复。社区将发布新的 Kubernetes 次要版本,如 1.18,一般大约每三个月提供一次,每个次要版本在发布后大约支持 12 个月。

可用的 Amazon EKS Kubernetes 版本以下 Kubernetes 版本目前可用于 Amazon EKS 中的新集群:

• 1.18.8• 1.17.9

58

Page 67: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 1.18

• 1.16.13• 1.15.11• 1.14.9

除非您的应用程序需要一个特定版本的 Kubernetes,否则我们建议您为您的集群选择 Amazon EKS 支持的最新可用 Kubernetes 版本。随着新 Kubernetes 版本在 Amazon EKS 中提供,我们建议您将集群主动更新为使用最新的可用版本。有关更多信息,请参阅更新 Amazon EKS 集群 Kubernetes 版本 (p. 37)。有关更多信息,请参阅 Amazon EKS Kubernetes 版本日历 (p. 62)和Amazon EKS 版本支持和常见问题 (p. 62)。

Kubernetes 1.18Kubernetes 1.18 现已在 Amazon EKS 中可用。有关 Kubernetes 1.18 的更多信息,请参阅官方发布公告。

在 Kubernetes 1.18 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

• 拓扑管理器已达到测试状态。此功能允许 CPU 和设备管理器协调资源分配决策,从而通过机器学习和分析工作负载优化低延迟。有关更多信息,请参阅 Kubernetes 文档中的在节点上控制拓扑管理策略。

• 服务器端应用更新为新的测试版。此功能跟踪和管理对所有新 Kubernetes 对象的字段的更改,使您可以了解哪些更改了您的资源以及何时更改。有关更多信息,请参阅 Kubernetes 文档中的什么是服务器端应用?。

• 向入口规范中添加了一个新的 pathType 字段和一个新的 IngressClass 资源。这些功能简化了自定义入口配置,并且受 ALB 入口控制器的支持。有关更多信息,请参阅 Kubernetes 文档中的 Kubernetes 1.18 中的入口 API 的改进。

Note

ALB 入口控制器中尚不支持 IngressClass。• 可配置水平 Pod 自动扩展行为。有关更多信息,请参阅 Kubernetes 文档中的支持可配置扩展行为。• Pod 拓扑分布已达到测试状态。您可以使用拓扑分布约束来控制 Pod 在故障域(如区域、区域、节点和其

他用户定义的拓扑域)之间分布在集群中的方式。这有助于实现高可用性以及有效的资源利用率。有关更多信息,请参阅 Kubernetes 文档中的 Pod 拓扑分布约束。

有关完整的 Kubernetes 1.18 更改日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md。

Kubernetes 1.17Kubernetes 1.17 现已在 Amazon EKS 中可用。有关 Kubernetes 1.17 的更多信息,请参阅官方发布公告。

Important

• EKS 未启用 CSIMigrationAWS 功能标记。这将在未来版本中启用,并提供详细的迁移说明。有关 CSI 迁移的更多信息,请参阅 Kubernetes 博客。

• 如果您的任何 AWS Fargate Pod 的 kubelet 次要版本低于 1.16,将集群从 1.16 升级到 1.17 将失败。在将集群从 1.16 升级到 1.17 之前,您需要回收 Fargate Pod,以便它们的 kubelet 在尝试将集群升级到 1.17 之前为 1.16。要回收 1.15 或更高版本集群上的 Kubernetes 部署,请使用以下命令。

kubectl rollout restart deployment <deployment-name>

现在,Kubernetes 1.17 Amazon EKS 集群中支持以下 Kubernetes 功能:

• 云提供商标签已正式发布。如果您在 Pod 规范中使用测试版标签来获取节点关联等功能,我们建议您开始将标签迁移到新的 GA 标签。有关新标签的信息,请参阅以下 Kubernetes 文档:

59

Page 68: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 1.16

• node.kubernetes.io/instance-type• topology.kubernetes.io/region• topology.kubernetes.io/zone

• ResourceQuotaScopeSelectors 功能已升级为正式发布。此功能允许您将配额支持的资源的数量限制为仅适用于与范围相关的资源。

• TaintNodesByCondition 功能已升级为正式发布。此功能允许您对具有高磁盘或内存压力等条件的节点执行 Taint 操作。

• CSI 拓扑功能已升级为正式发布,EBS CSI 驱动程序完全支持该功能。您可以使用拓扑来限制在其中预配置卷的 可用区。

• 类型为 的服务已升级为公开发布。LoadBalancer此功能可确保在关联的负载均衡器被删除之前不会完全删除服务资源。

• 自定义资源现在支持默认值。您可以在 OpenAPI v3 验证架构中指定值。• Windows 容器 RunAsUsername 功能现在处于测试版,允许您在容器中以不同于默认用户名的用户名运行

Windows 应用程序。

有关完整的 Kubernetes 1.17 更改日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md。

Kubernetes 1.16Kubernetes 1.16 现已在 Amazon EKS 中可用。有关 Kubernetes 1.16 的更多信息,请参阅官方发布公告。

Important

• Kubernetes 1.16 删除了一些已弃用的 APIs。 在将集群升级到 1.16 之前,可能需要对应用程序进行更改。升级前,请仔细遵循 1.16 升级先决条件 (p. 44)。

• 从 1.16 开始,Amazon EKS 证书颁发机构将遵守具有 SAN X.509 扩展的证书签名请求,从而解析EKS CA 应遵守来自 的 SAN x509 扩展GitHub功能请求。

在 Kubernetes 1.16 Amazon EKS 集群中,现支持以下 Kubernetes 功能:

• CSI 规范中的卷扩展已转移到测试版,这样可以调整任何 CSI 规范卷插件的大小。有关更多信息,请参阅Kubernetes CSI 文档中的卷扩展。最新版本的 EBS CSI 驱动程序 在 Amazon EKS 1.16 集群上运行时支持卷扩展。

• Windows GMSA 支持已从 Alpha 升级到测试版,现在受 Amazon EKS 的支持。有关更多信息,请参阅Kubernetes 文档中的为 Windows Pods 和容器配置 GMSA。

• 新注释: service.beta.kubernetes.io/aws-load-balancer-eip-allocations 在服务类型LoadBalancer 上可用于向网络负载均衡器分配弹性 IP 地址。有关更多信息,请参阅支持使用 AWS NLB进行 EIP 分配问题。GitHub

• 服务负载均衡器的终结器保护现在处于测试阶段,默认情况下处于启用状态。服务负载均衡器终结器保护可确保在删除服务时销毁或释放为 Kubernetes Service 对象(如 AWS 网络负载均衡器)分配的任何负载均衡器资源。有关更多信息,请参阅 Kubernetes 文档中的垃圾收集负载均衡器。

• Kubernetes 自定义资源定义和准入 Webhook 可扩展性机制都已达到通用版水平。有关更多信息,请参阅Kubernetes 文档中的自定义资源和动态准入控制。

• 服务器端应用功能已达到测试状态,默认情况下处于启用状态。有关更多信息,请参阅 Kubernetes 文档中的服务器端应用。

• 默认情况下,CustomResourceDefaulting 功能被提升为测试版,默认情况下处于启用状态。默认值可以通过 apiextensions.k8s.io/v1 API 在结构架构中指定。有关更多信息,请参阅 Kubernetes 文档中的指定结构架构。

有关完整的 Kubernetes 1.16 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.16.md。

60

Page 69: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 1.15

Kubernetes 1.15Kubernetes 1.15 现已在 Amazon EKS 中可用。有关 Kubernetes 1.15 的更多信息,请参阅官方发布公告。

Important

从 1.15 开始,Amazon EKS 不再标记包含您的集群的 VPC。

• 集群的 VPC 内的子网仍被标记。• 现有集群升级到 1.15 时,不会修改 VPC 标签。

• 有关 VPC 标记的更多信息,请参阅 VPC 标记要求 (p. 175)。

Important

Amazon EKS 已将 Pod 身份 Webhook 的重新调用策略设置为 IfNeeded。 这样,如果通过 AppMesh 附加注入器等其他转换管理 Webhook 更改了对象,则可以重新调用 Webhook。有关 AppMesh 附加注入器的更多信息,请参阅安装附加注入器。

在 Kubernetes 1.15 Amazon EKS 集群中,现支持以下功能:

• EKS 现在支持为网络负载均衡器配置传输层安全性 (TLS) 终止、访问日志和源范围。有关更多信息,请参阅上的 AWS 上的网络负载均衡器支持GitHub。

• 提高了自定义资源定义 (CRD) 的灵活性,包括在不同版本之间进行动态转换的能力。有关更多信息,请参阅 上的CustomResourceDefinitions使用 扩展 Kubernetes APIGitHub。

• NodeLocal DNSCache 对于 Kubernetes 版本 1.15 集群为测试版。此功能可以通过在集群节点上运行DNS 缓存代理作为 DaemonSet 来帮助提高集群 DNS 性能。 有关更多信息,请参阅 上的NodeLocal在Kubernetes 集群中使用 DNSCache 。GitHub

Note

在 CoreDNS 上运行 Amazon EC2 时,我们建议不要在配置中使用 force_tcp,并确保 optionsuse-vc 未在 /etc/resolv.conf 中设置。

有关完整的 Kubernetes 1.15 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.15.md。

Kubernetes 1.14Kubernetes 1.14 现已在 Amazon EKS 中可用。有关 Kubernetes 1.14 的更多信息,请参阅官方发布公告。

Important

标志已从 -allow-privileged 1.14 节点上的 kubelet 中删除。Amazon EKS如果您已修改或限制集群上的 Amazon EKS 默认 Pod 安全策略 (p. 299),则应验证您的应用程序对 1.14 节点是否拥有所需的权限。

在 Kubernetes 1.14 Amazon EKS 集群中,现支持以下功能:

• 对于 Kubernetes 1.14 版集群,Container Storage Interface 拓扑处于试用阶段。有关更多信息,请参阅Kubernetes CSI 开发人员文档中的 CSI 拓扑功能。以下 CSI 驱动程序为 Kubernetes 这样的容器编排工具提供了一个 CSI 界面,用于管理 Amazon EBS 卷的生命周期、Amazon EFS 文件系统和用于 Lustre 文件系统的 Amazon FSx:• Amazon Elastic Block Store (EBS) CSI 驱动程序• Amazon EFS CSI 驱动程序• Amazon FSx for Lustre CSI 驱动程序

61

Page 70: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS Kubernetes 版本日历

• 对于 Kubernetes 1.14 版集群,进程 ID (PID) 限制处于试用阶段。此功能允许您为一个 Pod 可以创建的进程数设置限额,这可以防止集群上其他应用程序的资源匮乏。有关更多信息,请参阅 Kubernetes 1.14 中用于稳定性改进的进程 ID 限制。

• 持久性本地卷现已全面开放,并可使本地附加的存储作为持久性卷源。有关更多信息,请参阅 Kubernetes1.14:。 本地持久性卷 GA。

• Pod 优先级和优先权现已全面开放,并允许在计划优先级级别分配 Pod。有关更多信息,请参阅Kubernetes 文档中的 Pod 优先级和优先权。

• Windows 节点支持是 Kubernetes 1.14 的 GA。

有关完整的 Kubernetes 1.14 更新日志,请参阅 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.14.md。

Amazon EKS Kubernetes 版本日历Note

仅包含月份和年份的日期是近似值,并在已知日期时用确切日期进行更新。

Kubernetes 版本 上游版本 Amazon EKS 版本 Amazon EKS 终止支持

1.14 2019 年 3 月 25 日 2019 年 9 月 4 日 2020 年 12 月 8 日

1.15 2019 年 6 月 19 日 2020 年 3 月 10 日 2021 年 5 月

1.16 2019 年 9 月 8 日 2020 年 4 月 30 日 2021 年 7 月

1.17 2019 年 12 月 9 日 2020 年 7 月 10 日 2021 年 9 月

1.18 2020 年 3 月 23 日 2020 年 10 月 2021 年 11 月

1.19 2020 年 8 月 26 日 2021 年 1 月 2020 年 2 月

Amazon EKS 版本支持和常见问题为了支持 Kubernetes 版本 Kubernetes 社区,Amazon EKS 致力于在任何给定时间支持至少四个生产就绪的Kubernetes 版本。我们将在支持结束日期前至少 60 天宣布给定 Kubernetes 次要版本的支持结束日期。由于新 Kubernetes 版本的 Amazon EKS 资格认证和发布过程,Amazon EKS 上 Kubernetes 版本的支持结束日期将在 Kubernetes 项目停止支持上游版本之日或之后。

Kubernetes 支持最多两个次要版本的控制层面与节点之间的兼容性。例如,当由 1.16 控制层面协调时,1.18节点将继续运行。有关更多信息,请参阅 Kubernetes 文档中的 Kubernetes 版本和版本倾斜支持政策。

常见问题Q: 支持 Kubernetes 版本的时间有多长?Amazon EKS

A: 首次在 Amazon EKS 上提供 Kubernetes 版本后,在 14 个月内完全支持该版本。即使上游 Kubernetes 不再支持 Amazon EKS 上可用的版本也是如此。我们向后移植适用于 Amazon EKS 上支持的 Kubernetes 版本的安全补丁。

Q: 何时支持在 Amazon EKS 上结束 Kubernetes 版本?

A: 在 Amazon EKS 上发布某个版本后大约 12 个月(通常是新版本发布时),如果账户中的任何集群在即将结束支持时运行该版本,Amazon EKS 将通过 AWS Personal Health Dashboard 发送通知。通知将包括终止支持的日期,即自通知之日起至少 60 天。

Q: 在支持期结束时会发生什么情况?

62

Page 71: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南平台版本

A: 在终止支持之日,您将无法再使用不受支持的版本创建新的 Amazon EKS 集群。现有集群将通过支持结束日期后逐步部署过程自动升级到最早的支持版本。

Q: 我的集群何时会在支持结束日期后自动升级?

答:Amazon EKS 无法提供特定的时间范围。自动升级可以在支持结束日期后随时进行。我们建议您采取主动的措施并升级集群,而不依靠 Amazon EKS 自动升级过程。

Q: 我是否可以将我的集群无限期地保留在 Kubernetes 版本上?

A: 否。出于安全考虑,Amazon EKS 不允许集群停留在已达到支持终止条件的版本上。

平台版本Amazon EKS 平台版本表示集群控制层面的功能,例如已启用哪些 Kubernetes API 服务器标志以及当前的 Kubernetes 补丁版本。每个 Kubernetes 次要版本都有一个或多个关联的 Amazon EKS 平台版本。不同Kubernetes 次要版本的平台版本是独立的。

当 Amazon EKS 中有新的 Kubernetes 次要版本可用时(例如 1.18),该 Kubernetes 次要版本的初始 AmazonEKS 平台版本从 eks.1 开始。 但是,Amazon EKS 定期发布新的平台版本以启用新的 Kubernetes 控制层面设置并提供安全修复。

当次要版本的新 Amazon EKS 平台版本可用时:

• Amazon EKS 平台版本号将递增 (eks.<n+1>)。• Amazon EKS 会自动将所有现有集群升级到其对应的 Kubernetes 次要版本的最新 Amazon EKS 平台版

本。• Amazon EKS 可能会发布具有相应修补程序版本的新节点 AMI。但是,对于给定的 Kubernetes 次要版本,所

有补丁版本在 EKS 控制层面与节点 AMIs 之间兼容。

新 Amazon EKS 平台版本不会引发破坏性的更改或导致服务中断。Note

现有 Amazon EKS 平台版本的自动升级将增量推出。推出过程可能需要一段时间。如果您即刻就需要最新的 Amazon EKS 平台版本功能,您应创建新的 Amazon EKS 集群。

集群始终使用指定 Kubernetes 版本的最新可用 Amazon EKS 平台版本 (eks.<n>) 创建。如果您将集群更新为新的 Kubernetes 次要版本,您的集群将接收所更新到的 Kubernetes 次要版本的当前 Amazon EKS 平台版本。

下列各表列出了当前和最新的 Amazon EKS 平台版本。

Kubernetes 版本 1.18Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明

1.18.8 eks.1 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,

的初始版本 Kubernetes1.18。Amazon EKS有关更多信息,请参阅Kubernetes1.18 (p. 59)。

63

Page 72: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 版本 1.17

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

Kubernetes 版本 1.17

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明

1.17.9 eks.3 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

新增了支持 Pod 的安全组 (p. 181) 的平台版本。

1.17.9 eks.2 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

具有安全修复和增强功能的新平台版本,包括在使用 NLB 时对LoadBalancer 类型的服务的 UDP 支持,并支持将 Amazon EFS 卷与Fargate Pod 结合使用。有关更多信息,请参阅 上的允许 UDP 的 AWSNLBGitHub 问题。

1.17.6 eks.1 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

的初始版本 Kubernetes1.17。Amazon EKS有关更多信息,请参阅Kubernetes1.17 (p. 59)。

64

Page 73: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 版本 1.16

Kubernetes 版本 1.16

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明

1.16.13 eks.3 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

具有安全修复和增强功能的新平台版本,包括对使用 NLB 时LoadBalancer 类型的服务的 UDP 支持。有关更多信息,请参阅 上的允许 UDP 的 AWSNLBGitHub 问题。

1.16.8 eks.2 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

新的平台版本,其中进行了安全修复。

1.16.8 eks.1 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

Amazon EKS 的Kubernetes 1.16 的初始版本。有关更多信息,请参阅Kubernetes1.16 (p. 60)。

65

Page 74: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 版本 1.15

Kubernetes 版本 1.15

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明

1.15.11 eks.4 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

具有安全修复和增强功能的新平台版本,包括对使用 NLB 时LoadBalancer 类型的服务的 UDP 支持。有关更多信息,请参阅 上的允许 UDP 的 AWSNLBGitHub 问题。

1.15.11 eks.3 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

新的平台版本,其中进行了安全修复。

1.15.11 eks.2 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

具有错误修复和增强功能的新平台版本,包括对服务器端 AWS IAM 身份验证器的更新,以及IAM 角色可追踪性改进功能。

1.15.10 eks.1 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,

Amazon EKS 的Kubernetes 1.15 的初始版本。有关更多信息,请参阅Kubernetes1.15 (p. 61)。

66

Page 75: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 版本 1.14

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy,TaintNodesByCondition,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize

Kubernetes 版本 1.14

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明

1.15.9 eks.11 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

具有安全修复和增强功能的新平台版本。

1.15.9 eks.10 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

新的平台版本,其中进行了安全修复。

1.15.9 eks.9 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

具有增强功能并支持附加功能的新平台版本。

1.15.9 eks.8 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,

新的平台版本,其中包含安全和错误修复。

67

Page 76: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 版本 1.14

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明ValidatingAdmissionWebhook,PodSecurityPolicy

1.15.9 eks.7 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

新的平台版本,其中进行了安全修复。

1.15.9 eks.6 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

新的平台版本,其中将 Amazon EKSKubernetes 1.14 集群更新到 1.14.9,进行了各种错误修复和性能改进。

1.15.8 eks.5 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

新平台版本增加了对AWS Fargate (p. 115)的支持。

1.15.8 eks.4 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

用于各种错误修复和性能改进的新平台版本。

68

Page 77: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows 支持

Kubernetes 版本 Amazon EKS 平台版本 已启用准入控制器 发行说明

1.15.8 eks.3 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

新平台版本增加了对 托管节点组 (p. 86) 的支持。

1.15.8 eks.2 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

新平台版本,将 AmazonEKS Kubernetes 1.14 集群更新到 1.14.8 以解决CVE-2019-11253。

1.15.6 eks.1 NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,PodSecurityPolicy

Amazon EKS 的初始版本 Kubernetes1.14。有关更多信息,请参阅Kubernetes1.14 (p. 61)。

Windows 支持本主题介绍如何向 Amazon EKS 集群添加 Windows 支持。

Considerations在部署 Windows 节点之前,请注意以下注意事项。

• 运行 Kubernetes 1.14 版或更高版本的 Amazon EKS 集群支持 Windows 工作负载。• Amazon EC2 实例类型 C3、C4、D2、I2、M4(不包括 m4.16xlarge)和 R3 实例不支持 Windows 工作

负载。• Windows 工作负载不支持主机网络模式。• Amazon EKS 集群必须包含一个或多个 Linux 节点,才能运行仅在 Linux 上运行的核心系统 Pod,例如coredns 和 VPC 资源控制器。

• kubelet 和 kube-proxy 事件日志将重定向到 EKS Windows 事件日志,并设置为200 MB 限制。• 您不能将 Pod 的安全组 (p. 181) 与 Windows 节点上运行的 Pod 一起使用。• Windows 节点支持每个节点一个弹性网络接口。每个 Windows 节点可以运行的 Pod 数等于每个弹性网

络接口对于节点的实例类型可用的 IP 地址数减 1。有关更多信息,请参阅 https://docs.aws.amazon.com/

69

Page 78: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启用 Windows 支持

AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)。

• 早于 1.16 的 Amazon EKS 版本不支持 Windows Pod 和容器的组托管服务账户 (GMSA)。您可以按照Kubernetes 文档中的说明,在 1.16 之前的集群上启用和测试此 Alpha 功能。

启用 Windows 支持以下步骤可帮助您为 Amazon EKS 集群启用 Windows 支持。您可以使用 eksctl (p. 70)、Windows 客户端 (p. 70)或 macOS 或 Linux 客户端 (p. 72)为集群启用 Windows 支持。

使用 eksctl 为您的集群启用 Windows 支持

此过程仅适用于使用 eksctl 创建的集群,并假定您的 eksctl 版本为 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本。

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

1. 使用以下 eksctl 命令为您的 Amazon EKS 集群启用 Windows 支持。此命令部署在 Amazon EKS 集群上运行 Windows 工作负载所需的 VPC 资源控制器和 VPC 准入控制器 Webhook。

eksctl utils install-vpc-controllers --cluster <cluster_name> --approve

2. 启用 Windows 支持后,您可以在集群中启动 Windows 节点组。有关更多信息,请参阅启动自管理Windows 节点 (p. 104)。

向集群添加 Windows 支持后,必须在应用程序上指定节点选择器,以便 Pod 位于具有相应操作系统的节点上。对于 Linux Pod,请在清单中使用以下节点选择器文本。

nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: amd64

对于 Windows Pod,请使用清单中的以下节点选择器文本。

nodeSelector: kubernetes.io/os: windows kubernetes.io/arch: amd64

使用 Windows 客户端为您的集群启用 Windows 支持

在以下步骤中,将 <region-code> 替换为您的集群所在的区域。

1. 使用与您的集群所在的区域对应的命令将 VPC 资源控制器部署到您的集群中。

• 和 中国(北京) 之外的所有区域中国 (宁夏)

kubectl apply -f https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-resource-controller/latest/vpc-resource-controller.yaml

• 中国(北京) 和 中国 (宁夏)

kubectl apply -f https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-resource-controller/latest/vpc-resource-controller.yaml

70

Page 79: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启用 Windows 支持

2. 将 VPC 准入控制器 Webhook 部署到您的集群。

a. 下载与集群所在的区域对应的所需脚本和部署文件。

• 和 中国(北京) 之外的所有区域中国 (宁夏)

curl -o vpc-admission-webhook-deployment.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml;curl -o Setup-VPCAdmissionWebhook.ps1 https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/Setup-VPCAdmissionWebhook.ps1;curl -o webhook-create-signed-cert.ps1 https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/webhook-create-signed-cert.ps1;curl -o webhook-patch-ca-bundle.ps1 https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/webhook-patch-ca-bundle.ps1;

• 中国(北京) 和 中国 (宁夏)

curl -o vpc-admission-webhook-deployment.yaml https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml;curl -o Setup-VPCAdmissionWebhook.ps1 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/Setup-VPCAdmissionWebhook.ps1;curl -o webhook-create-signed-cert.ps1 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/webhook-create-signed-cert.ps1;curl -o webhook-patch-ca-bundle.ps1 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/webhook-patch-ca-bundle.ps1;

b. 安装 OpenSSL 和 jq。c. 设置和部署 VPC 准入 Webhook。

./Setup-VPCAdmissionWebhook.ps1 -DeploymentTemplate ".\vpc-admission-webhook-deployment.yaml"

3. 确定您的集群是否具有所需的集群角色绑定。

kubectl get clusterrolebinding eks:kube-proxy-windows

如果返回的输出类似于以下示例输出,则集群具有必要的角色绑定。

NAME AGEeks:kube-proxy-windows 10d

如果输出包含 Error from server (NotFound),则集群没有必要的集群角色绑定。通过创建一个名为 eks-kube-proxy-windows-crb.yaml 且包含以下内容的文件来添加绑定。

kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: eks:kube-proxy-windows labels: k8s-app: kube-proxy eks.amazonaws.com/component: kube-proxysubjects:

71

Page 80: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启用 Windows 支持

- kind: Group name: "eks:kube-proxy-windows"roleRef: kind: ClusterRole name: system:node-proxier apiGroup: rbac.authorization.k8s.io

将配置应用于集群。

kubectl apply -f eks-kube-proxy-windows-crb.yaml

4. 启用 Windows 支持后,您可以在集群中启动 Windows 节点组。有关更多信息,请参阅启动自管理Windows 节点 (p. 104)。

向集群添加 Windows 支持后,必须在应用程序上指定节点选择器,以便 Pod 位于具有相应操作系统的节点上。对于 Linux Pod,请在清单中使用以下节点选择器文本。

nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: amd64

对于 Windows Pod,请使用清单中的以下节点选择器文本。

nodeSelector: kubernetes.io/os: windows kubernetes.io/arch: amd64

使用 macOS 或 Linux 客户端为集群启用 Windows 支持

此过程要求在客户端系统上安装 openssl 库和 jq JSON 处理器。

在以下步骤中,将 <region-code> 替换为您的集群所在的区域。

1. 使用与您的集群所在的区域对应的命令将 VPC 资源控制器部署到您的集群中。

• 和 中国(北京) 之外的所有区域中国 (宁夏)

kubectl apply -f https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-resource-controller/latest/vpc-resource-controller.yaml

• 中国(北京) 和 中国 (宁夏)

kubectl apply -f https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-resource-controller/latest/vpc-resource-controller.yaml

2. 为您的集群创建 VPC 准入控制器 Webhook 清单。

a. 为您的集群所在的区域下载所需的脚本和部署文件。

• 和 中国(北京) 之外的所有区域中国 (宁夏)

curl -o webhook-create-signed-cert.sh https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/webhook-create-signed-cert.shcurl -o webhook-patch-ca-bundle.sh https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/webhook-patch-ca-bundle.sh

72

Page 81: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启用 Windows 支持

curl -o vpc-admission-webhook-deployment.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/<region-code>/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml

• 中国(北京) 和 中国 (宁夏)

curl -o webhook-create-signed-cert.sh https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/webhook-create-signed-cert.shcurl -o webhook-patch-ca-bundle.sh https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/webhook-patch-ca-bundle.shcurl -o vpc-admission-webhook-deployment.yaml https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/manifests/<region-code>/vpc-admission-webhook/latest/vpc-admission-webhook-deployment.yaml

b. 向 Shell 脚本添加权限,以便可以执行它们。

chmod +x webhook-create-signed-cert.sh webhook-patch-ca-bundle.sh

c. 创建安全通信的密钥。

./webhook-create-signed-cert.sh

d. 验证此密钥。

kubectl get secret -n kube-system vpc-admission-webhook-certs

e. 配置 Webhook 并创建部署文件。

cat ./vpc-admission-webhook-deployment.yaml | ./webhook-patch-ca-bundle.sh > vpc-admission-webhook.yaml

3. 部署 VPC 准入 Webhook。

kubectl apply -f vpc-admission-webhook.yaml

4. 确定您的集群是否具有所需的集群角色绑定。

kubectl get clusterrolebinding eks:kube-proxy-windows

如果返回的输出类似于以下示例输出,则集群具有必要的角色绑定。

NAME AGEeks:kube-proxy-windows 10d

如果输出包含 Error from server (NotFound),则集群没有必要的集群角色绑定。通过创建一个名为 eks-kube-proxy-windows-crb.yaml 且包含以下内容的文件来添加绑定。

kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata: name: eks:kube-proxy-windows labels: k8s-app: kube-proxy eks.amazonaws.com/component: kube-proxysubjects: - kind: Group

73

Page 82: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南部署 Windows 示例应用程序

name: "eks:kube-proxy-windows"roleRef: kind: ClusterRole name: system:node-proxier apiGroup: rbac.authorization.k8s.io

将配置应用于集群。

kubectl apply -f eks-kube-proxy-windows-crb.yaml

5. 启用 Windows 支持后,您可以在集群中启动 Windows 节点组。有关更多信息,请参阅启动自管理Windows 节点 (p. 104)。

向集群添加 Windows 支持后,必须在应用程序上指定节点选择器,以便 Pod 位于具有相应操作系统的节点上。对于 Linux Pod,请在清单中使用以下节点选择器文本。

nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: amd64

对于 Windows Pod,请使用清单中的以下节点选择器文本。

nodeSelector: kubernetes.io/os: windows kubernetes.io/arch: amd64

部署 Windows 示例应用程序部署 Windows 示例应用程序

1. 使用以下内容创建名为 windows-server-iis.yaml 的文件。

apiVersion: apps/v1kind: Deploymentmetadata: name: windows-server-iisspec: selector: matchLabels: app: windows-server-iis tier: backend track: stable replicas: 1 template: metadata: labels: app: windows-server-iis tier: backend track: stable spec: containers: - name: windows-server-iis image: mcr.microsoft.com/windows/servercore:1809 ports: - name: http containerPort: 80 imagePullPolicy: IfNotPresent command:

74

Page 83: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Inferentia 支持

- powershell.exe - -command - "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; " nodeSelector: kubernetes.io/os: windows---apiVersion: v1kind: Servicemetadata: name: windows-server-iis-service namespace: defaultspec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: windows-server-iis tier: backend track: stable sessionAffinity: None type: LoadBalancer

2. 将应用程序部署到集群。

kubectl apply -f windows-server-iis.yaml

3. 获取 Pod 的状态。

kubectl get pods -o wide --watch

等待 Pod 过渡到 Running 状态。4. 在您的集群中查询这些服务并等到填充 windows-server-iis-service 服务的 External IP (外部 IP)

列。

Note

IP 地址可能需要几分钟才能变为可用。

kubectl get services -o wide

5. 在您的外部 IP 地址可用后,将 Web 浏览器指向该地址以查看 IIS 主页。

Note

DNS 传播和示例应用程序在 Web 浏览器中加载可能需要几分钟时间。

Inferentia 支持本主题介绍如何创建包含运行 Amazon EKS Inf1Amazon EC2 实例的节点的 集群并(可选)部署示例应用程序。Amazon EC2Inf1 实例由 AWS Inferentia 芯片提供支持,这些芯片由 AWS 定制构建,可在云中提供高性能和最低成本的推理。机器学习模型使用 AWS Neuron(一个专用的软件开发工具包 (SDK) 包含编译器、运行时和分析工具,用于优化 Inferentia 芯片的机器学习推理性能)部署到容器中。AWSNeuron 支持常用的机器学习框架,例如 TensorFlow、PyTorch 和 MXNet。

75

Page 84: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Considerations

Considerations• 运行 Kubernetes 版本 1.14 及更高版本的 Amazon EKS 集群支持 Inf1 实例。• Neuron 设备逻辑 IDs 必须是连续的。如果请求多个 Neuron 设备的 Pod 计划在 inf1.6xlarge 或inf1.24xlarge 实例类型(具有多个 Neuron 设备)上,则当 Kubernetes 计划程序选择不连续的设备 IDs时,该 Pod 将无法启动。 有关更多信息,请参阅 上的IDs设备逻辑 必须是连续的GitHub。

• 托管节点组当前不支持 Amazon EC2 Inf1 实例。

Prerequisites• 在计算机上安装 eksctl。如果未安装,请参阅 安装 eksctl (p. 5) 查看安装说明。• 在计算机上安装 kubectl。有关更多信息,请参阅安装kubectl (p. 243)。• (可选)在计算机上安装 python3。如果未安装,请参阅 Python 下载以查看安装说明。

创建集群创建具有 Inf1 Amazon EC2 实例节点的集群

1. 创建具有 Inf1 Amazon EC2 实例节点的集群。您可以将 <inf1.2xlarge> 替换为任意 Inf1 实例类型。eksctl 检测到您正在启动具有 Inf1 实例类型的节点组,并使用 EKS 优化的加速 AMI (p. 137) 启动节点。

Note

您不能将服务账户的 IAM 角色 (p. 284)与 TensorFlow Serving 一起使用。

eksctl create cluster \ --name <inferentia> \ --version <1.16> \ --region <region-code> \ --nodegroup-name <ng-inf1> \ --node-type <inf1.2xlarge> \ --nodes <2> \ --nodes-min <1> \ --nodes-max <4>

Note

请记住下一个输出行的值。在后面的(可选)步骤中将使用该值。

[✓] adding identity "arn:aws:iam::<111122223333>:role/eksctl-<inferentia>-<nodegroup-ng-in>-NodeInstanceRole-<FI7HIYS3BS09>" to auth ConfigMap

在启动具有 Inf1 实例的节点组时,eksctl 将自动安装 AWS Neuron Kubernetes 设备插件。此插件将 Neuron 设备作为系统资源传播到 Kubernetes 调度程序,以供容器请求。除了默认 Amazon EKS节点 IAM 策略之外,还添加了 Amazon S3 只读访问策略,以便后一个步骤中涵盖的示例应用程序可以从Amazon S3 加载训练后的模型。

2. 确保所有 pod 已正常启动。

kubectl get pods -n kube-system

输出

76

Page 85: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南(可选)创建 Neuron TensorFlow Serving 应用程序映像

NAME READY STATUS RESTARTS AGEaws-node-kx2m8 1/1 Running 0 5maws-node-q57pf 1/1 Running 0 5mcoredns-86d5cbb4bd-56dz2 1/1 Running 0 5mcoredns-86d5cbb4bd-d6n4z 1/1 Running 0 5mkube-proxy-75zx6 1/1 Running 0 5mkube-proxy-plkfq 1/1 Running 0 5mneuron-device-plugin-daemonset-6djhp 1/1 Running 0 5mneuron-device-plugin-daemonset-hwjsj 1/1 Running 0 5m

(可选)创建 Neuron TensorFlow Serving 应用程序映像Note

Neuron 很快将能预安装在 AWS Deep Learning Containers 中。有关更新,请检查 AWS Neuron。

1. 创建 Amazon ECR 存储库以存储应用程序映像。

aws ecr create-repository --repository-name tensorflow-model-server-neuron

请记下输出中返回的 repositoryUri,以便在下一个步骤中使用。2. 使用以下内容创建名为 Dockerfile.tf-serving 的 Dockerfile。Dockerfile 包含用于构建 经

Neuron 优化的 TensorFlow Serving 应用程序映像的命令。Neuron TensorFlow Serving 使用与普通TensorFlow Serving 相同的 API。唯一的区别是,必须为 Inferentia 编译保存的模型,并且入口点是其他二进制文件。

FROM amazonlinux:2

RUN yum install -y awscli

RUN echo $'[neuron] \n\name=Neuron YUM Repository \n\baseurl=https://yum.repos.neuron.amazonaws.com \n\enabled=1' > /etc/yum.repos.d/neuron.repo

RUN rpm --import https://yum.repos.neuron.amazonaws.com/GPG-PUB-KEY-AMAZON-AWS-NEURON.PUB

RUN yum install -y tensorflow-model-server-neuron

3. 将您的 Docker 客户端登录到 ECR 存储库中。

aws ecr get-login-password \ --region <region-code> \ | docker login \ --username AWS \ --password-stdin <111122223333>.dkr.ecr.<region-code>.amazonaws.com

4. 构建 Docker 映像并将它上传到上一步中创建的 Amazon ECR 存储库。

docker build . -f Dockerfile.tf-serving -t tensorflow-model-server-neurondocker tag tensorflow-model-server-neuron:latest <111122223333>.dkr.ecr.<region-code>.amazonaws.com/tensorflow-model-server-neuron:1.15.0docker push <111122223333>.dkr.ecr.<region-code>.amazonaws.com/tensorflow-model-server-neuron:1.15.0

77

Page 86: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南(可选)部署 TensorFlow Serving 应用程序映像

Note

如果您收到来自 Docker 的权限相关问题,则可能需要配置 Docker 以供非根用户使用。有关更多信息,请参阅 Docker 文档中的以非根用户身份管理 Docker。

(可选)部署 TensorFlow Serving 应用程序映像经过训练的模型必须先编译为 Inferentia 目标,才能部署在 Inferentia 实例上。要继续,您需要在 中保存的TensorFlowNeuron 优化 Amazon S3 模型。如果您没有已保存的模型,则可以按照 AWS Neuron 文档中的教程操作,创建与 Neuron 兼容的 BERT-Large 模型并将它上传到 S3。BERT 是一种常用的机器学习技术,用于理解自然语言任务。有关编译 Neuron 模型的更多信息,请参阅《AWS Deep Learning AMI 开发人员指南》中的带 DLAMI 的 AWS Inferentia 芯片。

示例部署清单管理两个容器: Neuron 运行时容器映像和 TensorFlow Serving 应用程序。有关 Neuron 容器映像的更多信息,请参阅教程:。 上的 Neuron 容器工具GitHub。 Neuron 运行时作为附加容器映像运行,并用于与节点上的 Inferentia 芯片进行交互。这两个容器通过置于共享装载卷中的 Unix 域套接字进行通信。在启动时,应用程序映像将从 Amazon S3 中提取您的模型,使用保存的模型启动 Neuron TensorFlow Serving,然后等待预测请求。

可使用 Neuron 运行时容器规范中的 aws.amazon.com/neuron 资源来调整 Inferentia 设备的数量。运行时期望每个 Inferentia 设备有 128 个 2-MB 页面,因此,hugepages-2Mi 必须设置为 256 x the numberof Inferentia devices。 为了访问 Inferentia 设备,Neuron 运行时需要 SYS_ADMIN 和 IPC_LOCK 功能,但是,在初始化时,运行时会在打开 gRPC 套接字之前删除这些功能。

1. 将 AmazonS3ReadOnlyAccess IAM 策略添加到在创建集群 (p. 76)的步骤 1 中创建的节点实例角色。必须执行此操作,示例应用程序才能从 Amazon S3 加载经过训练的模型。

aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name eksctl-<inferentia>-<nodegroup-ng-in>-NodeInstanceRole-<FI7HIYS3BS09>

2. 使用以下内容创建名为 bert_deployment.yaml 的文件。使用您的账户 ID、区域代码和已保存的模型名称和位置更新 <111122223333>、<region-code>bert/saved_model>。当客户端向 TensorFlow 服务器发出请求时,模型名称用于识别目的。此示例使用模型名称匹配将在稍后的步骤中用于发送预测请求的示例 BERT 客户端脚本。您还可以将 <1.0.7865.0> 替换为更高版本。有关最新版本,请参阅 上的Neuron 运行时发布说明GitHub或输入以下命令。

aws ecr list-images --repository-name neuron-rtd --registry-id 790709498068 --region us-west-2

kind: DeploymentapiVersion: apps/v1metadata: name: <eks-neuron-test> labels: app: <eks-neuron-test> role: masterspec: replicas: <2> selector: matchLabels: app: <eks-neuron-test> role: master template: metadata: labels: app: <eks-neuron-test>

78

Page 87: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南(可选)部署 TensorFlow Serving 应用程序映像

role: master spec: volumes: - name: sock emptyDir: {} containers: - name: <eks-neuron-test> image: <111122223333>.dkr.ecr.<region-code>.amazonaws.com/tensorflow-model-server-neuron:1.15.0 command: - /usr/local/bin/tensorflow_model_server_neuron args: - --port=9000 - --rest_api_port=8500 - --model_name=bert_mrpc_hc_gelus_b4_l24_0926_02 - --model_base_path=s3://<bert/saved_model> ports: - containerPort: 8500 - containerPort: 9000 imagePullPolicy: IfNotPresent env: - name: AWS_REGION value: "<region-code>" - name: S3_USE_HTTPS value: "1" - name: S3_VERIFY_SSL value: "0" - name: AWS_LOG_LEVEL value: "3" - name: NEURON_RTD_ADDRESS value: unix:/sock/neuron.sock resources: limits: cpu: 4 memory: 4Gi requests: cpu: "1" memory: 1Gi volumeMounts: - name: sock mountPath: /sock - name: neuron-rtd image: 790709498068.dkr.ecr.<region-code>.amazonaws.com/neuron-rtd:<1.0.7865.0> securityContext: capabilities: add: - SYS_ADMIN - IPC_LOCK volumeMounts: - name: sock mountPath: /sock resources: limits: hugepages-2Mi: 256Mi aws.amazon.com/neuron: 1 requests: memory: 1024Mi

3. 部署模型。

kubectl apply -f bert_deployment.yaml

4. 使用以下内容创建名为 bert_service.yaml 的文件。这将打开 HTTP 和 gRPC 端口以接受预测请求。

79

Page 88: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南(可选)根据 TensorFlow 服务进行预测

kind: ServiceapiVersion: v1metadata: name: <eks-neuron-test> labels: app: <eks-neuron-test>spec: type: ClusterIP ports: - name: http-tf-serving port: 8500 targetPort: 8500 - name: grpc-tf-serving port: 9000 targetPort: 9000 selector: app: <eks-neuron-test> role: master

5. 为 TensorFlow 模型 Serving 应用程序创建 Kubernetes 服务。

kubectl apply -f bert_service.yaml

(可选)根据 TensorFlow 服务进行预测1. 要在本地进行测试,请将 gRPC 端口转发到 eks-neuron-test 服务。

kubectl port-forward svc/eks-neuron-test 9000:9000 &

2. 从 Neuron GitHub 存储库下载示例 BERT 客户端。

curl https://raw.githubusercontent.com/aws/aws-neuron-sdk/master/src/examples/tensorflow/k8s_bert_demo/bert_client.py > bert_client.py

3. 运行脚本以将预测数据提交给服务。

python3 bert_client.py

输出

...Inference successful: 0Inference successful: 1Inference successful: 2Inference successful: 3Inference successful: 4Inference successful: 5Inference successful: 6Inference successful: 7Inference successful: 8Inference successful: 9...Inference successful: 91Inference successful: 92Inference successful: 93Inference successful: 94Inference successful: 95

80

Page 89: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南查看 API 服务器标记

Inference successful: 96Inference successful: 97Inference successful: 98Inference successful: 99Ran 100 inferences successfully. Latency

查看 API 服务器标记您可以使用 Amazon EKS 集群的控制层面日志记录功能查看创建集群时启用的 API 服务器标记。有关更多信息,请参阅Amazon EKS 控制层面日志记录 (p. 56)。本主题介绍如何在 Amazon CloudWatch 控制台中查看 Amazon EKS 集群的 API 服务器标记。

首次创建集群时,初始 API 服务器日志包含用于启动 API 服务器的标记。如果您在启动集群时或在之后不久启用 API 服务器日志,这些日志将被发送到 CloudWatch Logs,您可以在那里进行查看。

查看集群的 API 服务器标记

1. 为 Amazon EKS 集群启用 API 服务器标记(如果您尚未启用)。

a. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.b. 选择集群的名称可以显示集群信息。c. 在 Logging (日志记录) 下,选择 Update (更新)。d. 对于 API server (API 服务器),确保日志类型为 Enabled (启用)。e. 选择 Update (更新) 完成操作。

2. 在 Amazon EKS 控制台中,向下滚动到集群详细信息页面的 Logging (日志记录) 部分。选择CloudWatch 下的链接以打开集群日志的 CloudWatch 控制台页面。

3. 在日志流列表中,找到 kube-apiserver-<example-ID-288ec988b77a59d70ec77> 日志流的最早版本。使用 Last Event Time (上次事件时间) 列确定日志流的期限。

4. 向上滚动到最早的事件(日志流的开头)。您应该会看到集群的初始 API 服务器标记。

Note

如果您在日志流的开头未看到 API 服务器日志,有可能是因为在您在服务器上启用 API 服务器日志记录之前,API 服务器日志文件已在服务器上轮换。在启用 API 服务器日志记录之前轮换的任何日志文件都无法导出到 CloudWatch。不过,您可以使用相同的 Kubernetes 版本创建新集群,并在创建集群时启用 API 服务器日志记录。具有相同平台版本的集群会启用相同的标记,因此您的标记应该会与新集群的标记匹配。在 CloudWatch 中查看新集群的标记后,您可以删除新集群。

私有集群本主题介绍如何在没有出站 Internet 访问的情况下部署私有集群。如果您不熟悉 Amazon EKS 网络,请参阅 工作线程节点的集群联网解密Amazon EKS。

Requirements必须满足以下要求才能在无出站 Internet 访问的私有集群中运行 Amazon EKS。

• 容器映像必须位于或者复制到 Amazon Elastic Container Registry (Amazon ECR) 中,或复制到要拉取的VPC 内部的注册表中。有关更多信息,请参阅创建容器映像的本地副本 (p. 82)。

• 节点需要终端节点私有访问权限才能注册到集群终端节点。终端节点公有访问权限是可选的。有关更多信息,请参阅Amazon EKS 集群终端节点访问控制 (p. 48)。

81

Page 90: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Considerations

• 您可能需要包含在私有集群的 VPC 终端节点 (p. 83)中找到的 VPC 终端节点。• 启动自行管理的节点时,您必须在引导参数中包含以下文本。此文本绕过 Amazon EKS 自检,不需要

从 VPC 内访问 Amazon EKS API。将 <cluster-endpoint> 和 <cluster-certificate-authority> 替换为您的Amazon EKS 集群中的值。

--apiserver-endpoint <cluster-endpoint> --b64-cluster-ca <cluster-certificate-authority>

• 必须从 VPC 中创建 aws-auth ConfigMap。有关创建 aws-auth ConfigMap 的更多信息,请参阅管理集群的用户或 IAM 角色 (p. 240)。

Considerations以下是在没有出站 Internet 访问的私有集群中运行 Amazon EKS 时需要考虑的一些事项。

• AWS X-Ray 不支持私有集群。• Amazon CloudWatch Logs 支持私有集群,但您必须使用 Amazon CloudWatch Logs VPC 终端节点。有

关更多信息,请参阅私有集群的 VPC 终端节点 (p. 83)。• 支持自行管理和托管的节点 (p. 97)。节点的实例必须有权访问 VPC 终端节点。如果您创建托管节点组,

则 VPC 终端节点安全组必须允许子网的 CIDR,或者您必须将创建的节点安全组添加到 VPC 终端节点安全组。

• 支持服务账户的 IAM 角色 (p. 284)。您必须包含 STS VPC 终端节点。有关更多信息,请参阅私有集群的 VPC 终端节点 (p. 83)。

• 支持 Amazon EBS CSI 驱动程序 (p. 155)。在部署之前,必须更改 kustomization.yaml 文件,以将容器映像设置为使用与 Amazon EKS 集群相同的区域。

• 支持 Amazon EFS CSI 驱动程序 (p. 159)。在部署之前,必须更改 kustomization.yaml 文件,以将容器映像设置为使用与 Amazon EKS 集群相同的区域。

• 不支持 Amazon FSx for Lustre CSI 驱动程序 (p. 163)。• 上的应用程序负载均衡Amazon EKS (p. 227)在私有集群中不起作用。• AWS Fargate (p. 115) 支持私有集群。您必须包含 STS VPC 终端节点。有关更多信息,请参阅私有集

群的 VPC 终端节点 (p. 83)。您可以使用 AWS 负载均衡器控制器部署 AWS 应用程序负载均衡器 和 网络负载均衡器。控制器支持具有 IP 目标的网络负载均衡器,这些目标是与 Fargate 结合使用所必需的。有关更多信息,请参阅 the section called “应用程序负载均衡” (p. 227)和the section called “负载均衡器 –IP 目标” (p. 223)。

• App Mesh 在您使用 App Mesh Envoy VPC 终端节点时支持私有集群。有关更多信息,请参阅私有集群的VPC 终端节点 (p. 83)。• 支持适用于 Kubernetes 的 App Mesh 附加注入器。有关更多信息,请参阅 上的 App Mesh 附加注入器

GitHub。• 不支持适用于 Kubernetes 的 App Mesh 控制器。有关更多信息,请参阅 上的 App Mesh 控制器

GitHub。

创建容器映像的本地副本由于私有集群没有出站 Internet 访问,因此无法从 Docker Hub 等外部源提取容器映像。相反,容器映像必须本地复制到 Amazon ECR 或者复制到在 VPC 中可访问的备用注册表。容器映像可以从私有 VPC 外部复制到 Amazon ECR。私有集群使用 Amazon ECR VPC 终端节点访问 Amazon ECR 存储库。您必须在用于创建本地副本的工作站上安装了 Docker 和 AWS CLI。

创建容器映像的本地副本

1. 创建 Amazon ECR 存储库。有关更多信息,请参阅创建存储库。2. 使用 docker pull 从外部注册表中提取容器映像。

82

Page 91: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南私有集群的 VPC 终端节点

3. 通过 docker tag,使用 Amazon ECR 注册表、存储库和可选映像标签名称组合标记您的映像。4. 对注册表进行身份验证。有关更多信息,请参阅注册表身份验证。5. 使用 docker push 将映像推送到 Amazon ECR。

Note

请确保更新资源配置以使用新映像位置。

以下示例使用标签 v1.3.1-linux-amd64,从 Docker Hub 拉取 amazon/aws-node-termination-handler 映像并在 Amazon ECR 中创建本地副本。

aws ecr create-repository --repository-name amazon/aws-node-termination-handlerdocker pull amazon/aws-node-termination-handler:v1.3.1-linux-amd64docker tag amazon/aws-node-termination-handler <111122223333>.dkr.ecr.<region-code>.amazonaws.com/amazon/aws-node-termination-handler:v1.3.1-linux-amd64aws ecr get-login-password --region <region-code> | docker login --username AWS --password-stdin <111122223333>.dkr.ecr.<region-code>.amazonaws.comdocker push <111122223333>.dkr.ecr.<region-code>.amazonaws.com/amazon/aws-node-termination-handler:v1.3.1-linux-amd64

私有集群的 VPC 终端节点可能需要以下 VPC 终端节点。

• com.amazonaws.<region>.ec2

• com.amazonaws.<region>.ecr.api

• com.amazonaws.<region>.ecr.dkr

• com.amazonaws.<region>.s3 – 用于拉取容器映像• com.amazonaws.<region>.logs–适用于CloudWatch Logs• com.amazonaws.<region>.sts – 为服务账户使用 AWS Fargate 或 IAM 角色时• com.amazonaws.<region>.elasticloadbalancing – 使用 Application Load Balancer 时• com.amazonaws.<region>.autoscaling – 使用 Cluster Autoscaler 时• com.amazonaws.<region>.appmesh-envoy-management – 使用 App Mesh 时

83

Page 92: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Amazon EKS 计算您的 Amazon EKS 集群可以在 自管理节点 (p. 97)、Amazon EKS 托管节点组 (p. 86) 和 AWSFargate (p. 115) 的任意组合上计划 Pod。下表提供了在决定哪些选项最适合您的要求时要评估的多个标准。我们建议经常查看此页,因为此表中的数据在 Amazon EKS 中引入新功能时频繁更改。

标准 EKS 托管节点组 自管理节点 AWS Fargate

可以部署到 AWS Outposts 否 是 – 有关更多信息,请参阅AmazonEKS 上的 AWSOutposts (p. 307)。

可以部署到 AWS 本地扩展区 否 是 – 有关更多信息,请参阅AmazonEKS 本地区域上的AWS (p. 310)。

可以运行需要 Windows 的容器 否 是 (p. 69) 您的集群仍需要至少一个(建议使用两个,以确保可用性)Linux节点。–

可以运行需要 Linux 的容器 是 是 是

可以运行需要 Inferentia 芯片的工作负载 否 是 (p. 75) 仅限 –Amazon Linux

可以运行需要 GPU 的工作负载 是 (p. 133) 仅 –Amazon Linux 节点

是 (p. 133) 仅限–Amazon Linux

可以运行需要 Arm 处理器的工作负载 是 (p. 134) 是 (p. 134) 否

可以运行 AWS Bottlerocket 否 是 (p. 102) 无 – 没有节点。

Pod 与其他 Pod 共享内核运行时环境 是 – 每个节点上的所有 Pod

是 – 每个节点上的所有 Pod

无 – 每个 Pod 都有一个专用内核

Pod 与其他 Pod 共享 CPU、内存、存储和网络资源。

是 – 会导致每个节点上有未使用的资源

是 – 会导致每个节点上有未使用的资源

无 – 每个 Pod 都具有专用资源,并且可以独立调整大小以最大程度地提高资源利用率。

Pod 可使用的硬件和内存比在 Pod 规范中请求的多

是 – 如果 Pod 所需的资源超出请求数量,并且节点上提供了资源,则 Pod 可以使用其他资源。

是 – 如果 Pod 所需的资源超出请求数量,并且节点上提供了资源,则 Pod 可以使用其他资源。

无 – 不过,您可以使用更大的 vCPU 和内存配置重新部署Pod。

必须部署和管理 Amazon EC2 实例 是 (p. 88) 如果您部署了 – 优化AMI,则 AmazonEKS 通过 Amazon

是 – 手动配置或使用 AmazonEKS 提供的 AWSCloudFormation

84

Page 93: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

标准 EKS 托管节点组 自管理节点 AWS FargateEKS 自动执行。如果您部署了自定义AMI,则必须手动更新实例。

模板部署 Linux(x86) (p. 98)、Linux(Arm) (p. 134) 或Windows (p. 69) 节点。

必须保护、维护和修补 Amazon EC2 实例的操作系统

是 是 否

可以在部署节点时提供引导参数,例如额外 kubelet 参数。

是 – 将启动模板 (p. 94)与自定义 AMI 结合使用

是 – 有关更多信息,请查看 上的引导脚本使用信息GitHub。

无 – 没有节点。

可以从与分配给节点的 IP 地址不同的CIDR 块向 Pod 分配 IP 地址。

是 – 将启动模板 (p. 94)与自定义 AMI 结合使用

是,使用 CNI 自定义网络 (p. 191)。

无 – 没有节点。

可以 SSH 到节点 是 是 无 – 没有要通过SSH 连接到的节点主机操作系统。

可以将您自己的自定义 AMI 部署到节点 使用–启动模板是 (p. 94)

是 无 – 您不管理节点。

可以将您自己的自定义 CNI 部署到节点 是 – 将启动模板 (p. 94)与自定义 AMI 结合使用

是 无 – 您不管理节点。

必须自行更新节点 AMI 是 – 如果您部署了Amazon EKS 优化的 AMI,则当更新可用并且只需在控制台中单击一下即可在 Amazon EKS 控制台中执行更新时,您将会收到通知。如果您部署了自定义 AMI,则在有更新可用时,不会在Amazon EKS 控制台中通知您,因此必须自行执行更新。

是 - 使用 AmazonEKS 控制台以外的工具,因为无法使用 Amazon EKS 控制台管理自管理节点。

无 – 您不管理节点。

85

Page 94: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南托管节点组

标准 EKS 托管节点组 自管理节点 AWS Fargate

必须自行更新节点 Kubernetes 版本 是 如果部署了 – 优化的 AMI,则在有更新可用时,系统会在 Amazon EKS 控制台中通知您,并且只需在控制台中单击一次即可执行更新。Amazon EKS如果您部署了自定义 AMI,则在有更新可用时,不会在Amazon EKS 控制台中通知您,因此必须自行执行更新。

是 使用 – 控制台以外的工具,因为无法使用Amazon EKS 控制台管理自管理节点。Amazon EKS

无 – 您不管理节点。

可以将 Amazon EBS 存储与 Pod 结合使用

是 (p. 155) 是 (p. 155) 否

可以将 Amazon EFS 存储与 Pod 结合使用

是 (p. 159) 是 (p. 159) 是 (p. 159)

可以将 Amazon FSx for Lustre 存储与Pod 结合使用

是 (p. 163) 是 (p. 163) 否

可以将 网络负载均衡器 用于服务 是 (p. 221) 是 (p. 221) 是,在使用 thesection called “负载均衡器 – IP 目标” (p. 223) 时

Pod 可以在公有子网中运行 是 是 否

可以将不同的 VPC 安全组分配给各个Pod

是 (p. 181) 仅限– Linux 节点

是 (p. 181) 仅限– Linux 节点

可以运行 Kubernetes DaemonSets 是 是 否

在 Pod 清单中支持HostPortHostNetwork

是 是 否

区域可用性 所有 Amazon EKS支持的区域

所有 Amazon EKS支持的区域

一些 AmazonEKS 支持的区域 (p. 115)

定价 运行多个 Pod 的Amazon EC2 实例的成本。有关更多信息,请参阅Amazon EC2 定价。

运行多个 Pod 的Amazon EC2 实例的成本。有关更多信息,请参阅Amazon EC2 定价。

单个 Fargate 内存和 CPU 配置的费用。每个 Pod 都有自己的成本。有关更多信息,请参阅 AWS Fargate 定价。

托管节点组Amazon EKS 托管节点组为 Amazon EKS Kubernetes 集群自动进行节点(Amazon EC2 实例)的预配置和生命周期管理。

86

Page 95: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南托管节点组概念

Note

从 Kubernetes 版本 1.14 和平台版本 (p. 63) eks.3 开始,在 Amazon EKS 集群上支持 托管节点组 (p. 86)。现有集群可更新到版本 1.14 或更高版本来利用此功能。有关更多信息,请参阅更新Amazon EKS 集群 Kubernetes 版本 (p. 37)。

使用 Amazon EKS 托管节点组,您无需单独预配置或注册 Amazon EC2 实例以提供计算容量来运行Kubernetes 应用程序。您可以通过单个操作为集群创建、更新或终止节点。节点使用 Amazon EKS 账户中最新的经 AMIs 优化的 AWS 运行,而节点更新和终止正常耗尽节点,以确保您的应用程序保持可用状态。

所有托管节点均作为 Amazon EC2 Auto Scaling 组的一部分进行预配置,由 Amazon EKS 为您管理。所有资源(包括实例和 Auto Scaling 组在内)在您的 AWS 账户中运行。每个节点组使用 Amazon EKS 优化的Amazon Linux 2 AMI,并且可以跨您定义的多个可用区运行。

您可以使用 Amazon EKS 控制台、eksctl、AWS CLI、AWS API 或基础设施作为代码工具(包括 AWSCloudFormation)将托管节点组添加到新的或现有的集群中。 作为托管节点组的一部分启动的节点将自动被标记以供 Kubernetes Cluster Autoscaler 自动发现,您可以使用节点组将 Kubernetes 标签应用于节点并随时更新它们。

使用 Amazon EKS 托管节点组没有额外的费用,您只需为预配置的 AWS 资源付费。这包括 Amazon EC2实例、Amazon EBS 卷、Amazon EKS 集群小时数和任何其他 AWS 基础设施。无最低费用,无预先承诺。

要开始使用新 Amazon EKS 集群和托管节点组,请参阅 AWS 管理控制台入门 (p. 13)。

要将托管节点组添加到现有集群,请参阅创建托管节点组 (p. 88)。

托管节点组概念• Amazon EKS 托管节点组为您创建和管理 Amazon EC2 实例。• 所有托管节点均预配置为 Amazon EC2 Auto Scaling 组的一部分,由 Amazon EKS 为您进行管理,所有

资源(包括 Amazon EC2 实例和 Auto Scaling 组)都在您的 AWS 账户中运行。• 托管节点组的 Auto Scaling 组跨您在创建组时指定的所有子网。• Amazon EKS 标记托管节点组资源,以便将其配置为使用 Kubernetes Cluster Autoscaler (p. 52)。

Important

如果要使用 Kubernetes Cluster Autoscaler (p. 52) 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,则应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --balance-similar-node-groups 功能。

• 默认情况下,托管节点组中的实例使用最新版本的 Amazon EKS 优化的 Amazon Linux 2 AMI 作为其集群的 Kubernetes 版本。您可以在 Amazon EKS 优化的 Amazon Linux 2 AMI 的标准和 GPU 变体之间进行选择。如果您使用启动模板进行部署,也可以使用自定义 AMI。有关更多信息,请参阅启动模板支持 (p. 94)。

• Amazon EKS 在托管节点组上遵循 CVEs 和安全补丁的责任共担模式。当托管节点运行经 Amazon EKS优化的 AMI 时,Amazon EKS 负责在报告错误或问题时构建经过修补的 AMI 版本,并且我们能够发布修复。但是,您负责将这些修补的 AMI 版本部署到托管节点组。当托管节点运行自定义 AMI 时,如果报告了错误或问题,然后部署 AMI,您将负责构建 AMI 的修补版本。有关更多信息,请参阅更新托管节点组 (p. 91)。

• Amazon EKS 托管节点组既可以在公有子网也可以在私有子网中启动。如果您在不早于 April 22,2020 时启动了公有子网中的托管节点组,则子网必须将 MapPublicIpOnLaunch 设置为 true,这些实例才能成功加入集群。如果公有子网是在不早于 eksctl 之时使用 或 Amazon EKSAWSCloudFormation (p. 170) 提供的 March 26, 2020 模板创建的,则此设置已设置为 true。如果在 March 26,2020 之前创建了公有子网,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性。

• 在私有子网中使用 VPC 终端节点时,您必须为com.amazonaws.region.ecr.api、com.amazonaws.region.ecr.dkr 创建终端节点,并为 Amazon S3 创建网关终端节点。有关更多信息,请参阅 Amazon ECR 接口 VPC 终端节点 (AWSPrivateLink)。

87

Page 96: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建托管节点组

• 托管节点组无法部署到 AWS Outposts (p. 307) 上的节点,或部署到 AWS Wavelength 或 AWS 本地区域中的节点。

• 您可以在单个集群中创建多个托管节点组。例如,您可以为某些工作负载创建一个具有标准 Amazon EKS优化的 Amazon Linux 2 AMI 的节点组,为需要 GPU 支持的工作负载创建一个具有 GPU 变体的节点组。

• 如果您的托管节点组遇到运行状况问题,则 Amazon EKS 返回错误消息以帮助诊断问题。有关更多信息,请参阅托管节点组错误 (p. 313)。

• Amazon EKS 将 Kubernetes 标签添加到托管节点组实例。这些 Amazon EKS 提供的标签带有前缀eks.amazon.com。

• 在终止或更新期间,Amazon EKS 使用 Kubernetes API 自动耗尽节点。更新操作遵循您为 Pod 设置的Pod 中断预算。

• 使用 Amazon EKS 托管节点组不会产生额外费用。您只需为预配置的 AWS 资源付费。

创建托管节点组本主题可帮助您启动向 Amazon EKS 集群注册的 Linux 节点的 Amazon EKS 托管节点组。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。

从 Kubernetes 版本 1.14 和平台版本 (p. 63) eks.3 开始,在 Amazon EKS 集群上支持 托管节点组 (p. 86)。现有集群可更新到版本 1.14 或更高版本来利用此功能。有关更多信息,请参阅更新 AmazonEKS 集群 Kubernetes 版本 (p. 37)。

如果这是您首次启动 Amazon EKS 托管节点组,建议您改为遵循我们的Amazon EKS 入门 (p. 3)指南之一。这些指南提供了使用节点创建 Amazon EKS 集群的完整端到端演练。

Important

Amazon EKS 节点是标准 Amazon EC2 实例,您需要基于常规的 Amazon EC2 价格为其付费。有关更多信息,请参阅 Amazon EC2 定价。

您可以使用 eksctl (p. 88) 或 AWS 管理控制台 (p. 89) 创建托管节点组。

使用 eksctl 创建托管节点组

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS 管理控制台 启动自管理 Windows节点 (p. 105)。

您可以使用或不使用启动模板创建节点组。启动模板允许节点组进行更大的自定义,以包含部署自定义 AMI。完成以下步骤之一。如果您计划使用Pod 的安全组 (p. 181),请确保指定受支持的 Amazon EC2 实例类型。有关更多信息,请参阅Amazon EC2 支持的实例和分支网络接口 (p. 184)。 如果指定了 Arm AmazonEC2 实例类型,请在部署之前查看 Amazon EKS优化的 ArmAmazon LinuxAMIs (p. 134)中的注意事项。

1. 使用以下 命令创建不带eksctl 启动模板的托管节点组,并将 <example values>(包括 <>)替换为您自己的值。未指定自己的启动模板时,Amazon EKS API 会在您的账户中创建一个默认 Amazon EC2 启动模板,并使用默认启动模板部署节点组。

eksctl create nodegroup \ --cluster <my-cluster> \ --region <us-west-2> \ --name <my-mng> \ --node-type <m5.large> \

88

Page 97: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建托管节点组

--nodes <3> \ --nodes-min <2> \ --nodes-max <4> \ --ssh-access \ --ssh-public-key <my-public-key.pub> \ --managed

2. 使用启动模板创建托管节点组。启动模板必须已存在,并且必须满足启动模板配置基础知识 (p. 94)中指定的要求。

a. 使用以下内容创建名为 <node-group-lt.yaml> 的文件,并将 <example values>(包括 <>)替换为您自己的值。您在没有启动模板的情况下进行部署时指定的几个设置将移至启动模板中。如果未指定 version,则使用模板的默认版本。

apiVersion: eksctl.io/v1alpha5kind: ClusterConfigmetadata: name: <my-cluster> region: <region-code>managedNodeGroups:- name: <node-group-lt> launchTemplate: id: lt-<id> version: "<1>"

b. 使用以下命令部署节点组。

eksctl create nodegroup --config-file node-group-lt.yaml

使用 AWS 管理控制台 创建托管节点组

1. 等待集群状态显示为 ACTIVE。 您无法为尚未处于 ACTIVE 的集群创建托管节点组。2. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.3. 选择要在其中创建托管节点组的集群的名称。4. 在集群页面上,选择计算选项卡,然后选择添加节点组。5. 在 Configure node group (配置节点组) 页面上,填写相应参数,然后选择 Next (下一步)。

• Name (名称) – 为托管节点组输入唯一名称。• Node IAM role name (节点 IAM 角色名称) – 选择要与节点组一起使用的节点实例角色。有关更多信

息,请参阅Amazon EKS 节点 IAM 角色 (p. 281)。

Important

我们建议您使用任何自行管理节点组当前未使用的角色,或者使用您计划与新的自行管理节点组配合使用的角色。有关更多信息,请参阅删除托管节点组 (p. 97)。

• 使用启动模板 –(可选)如果要使用现有启动模板,请选择启动模板版本(可选)。如果未选择版本,则Amazon EKS 将使用模板的默认版本。启动模板允许对节点组进行更多自定义,包括允许您部署自定义 AMI。启动模板必须满足启动模板支持 (p. 94)中的要求。如果您未使用自己的启动模板,AmazonEKS API 将在您的账户中创建一个默认 Amazon EC2 启动模板,并使用默认启动模板部署节点组。

• Kubernetes labels (Kubernetes 标签) –(可选)可以选择对托管节点组中的节点应用 Kubernetes 标签。

• Tags (标签) –(可选)可以选择对 Amazon EKS 托管节点组进行标记。这些标签不会传播到节点组中的其他资源,例如 Auto Scaling 组或实例。有关更多信息,请参阅标记 Amazon EKS 资源 (p. 261)。

6. 在 Set compute and scaling configuration (设置计算和扩展配置) 页面上,相应填写参数,然后选择 Next(下一步)。

89

Page 98: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南创建托管节点组

节点组计算配置

• AMI type – 为非 GPU 实例选择 Amazon Linux 2 (AL2_x86_64),为 GPU 实例选择 Amazon Linux 2GPU Enabled (AL2_x86_64_GPU),或为 Arm 选择 (AL2_ARM_64)Amazon Linux 2。

如果您要部署 Arm 实例,请确保在部署之前查看the section called “手臂” (p. 134)中的注意事项。

如果您在上一页上指定了启动模板,并在启动模板中指定了 AMI,则无法选择值。模板中的值将会显示。模板中指定的 AMI 必须满足 使用自定义 AMI (p. 97) 中的要求。

• Instance type (实例类型) – 选择托管节点组中要使用的实例类型。控制台显示一组常用的实例类型。如果您需要创建具有未显示实例类型的托管节点组,请使用 eksctl、AWS CLI、AWSCloudFormation 或开发工具包创建节点组。如果您在上一页上指定了启动模板,则无法选择值,因为必须在启动模板中指定该值。这将显示启动模板中的值。

每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),而每个 ENI 支持最大数量的 IP 地址。由于每个工作线程节点和 Pod 都分配有自己的 IP 地址,因此必须选择一种实例类型,以支持您希望在每个工作线程节点上运行的最大数量的 Pod。有关实例类型支持的 ENI 和 IP 地址数量的列表,请参阅每种实例类型、每个网络接口的 IP 地址。例如,对于工作线程节点和 Pod,m5.large实例类型最多支持 30 个 IP 地址。某些实例类型可能并非在所有区域都可用。

如果您计划使用Pod 的安全组 (p. 181),请确保指定受支持的 Amazon EC2 实例类型。有关更多信息,请参阅Amazon EC2 支持的实例和分支网络接口 (p. 184)。 如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS优化的 ArmAmazon LinuxAMIs (p. 134)中的注意事项。

• 磁盘大小 – 输入要用于节点的根卷的磁盘大小(在 GiB 中)。

如果您在上一页上指定了启动模板,则无法选择值,因为必须在启动模板中指定该值。

节点组扩展配置

Note

Amazon EKS 不会自动扩展或缩小节点组。但是,您可以配置 Kubernetes ClusterAutoscaler (p. 52) 以执行此操作。

• Minimum size (最小大小) – 指定托管节点组可扩展到的最小节点数。• Maximum size (最大大小) – 指定托管节点组可扩展到的最大节点数。• Desired size (所需大小) – 指定托管节点组在启动时应保留的当前节点数。

7. 在 Specify networking (指定联网) 页面上,相应填写参数,然后选择 Next (下一步)。

• Subnets (子网) – 选择要在其中启动托管节点的子网。

Important

如果要使用 Kubernetes Cluster Autoscaler (p. 52) 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,则应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --balance-similar-node-groups 功能。

Important

• 如果您选择公有子网,则子网必须将 MapPublicIpOnLaunch 设置为 true,这些实例才能成功加入集群。如果子网是在不早于 eksctl 之时使用 或 Amazon EKSvended AWSCloudFormation templates (p. 170) 创建的,则此设置已设置为 true。March 26, 2020如果子网是在 March 26, 2020 之前使用 eksctl 或 AWS CloudFormation 模板创建的,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性。

• 不要在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中选择子网。您无法将托管节点部署到 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中的子网。您只能

90

Page 99: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新托管节点组

将自行管理的节点 (p. 97)部署到 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区子网。

• 允许远程访问节点(可选,但默认值)。启用 SSH 后,如果出现问题,您可以连接到实例并收集诊断信息。请完成以下步骤以启用远程访问。我们强烈建议您在创建节点组时启用远程访问。在创建节点组后,将无法启用远程访问。

如果您选择使用启动模板,则不会显示此选项。要启用对节点的远程访问,请在启动模板中指定密钥对,并确保对启动模板中指定的安全组中的节点打开适当的端口。有关更多信息,请参阅使用自定义安全组 (p. 96)。

• 对于 SSH key pair (SSH 密钥对)(可选),选择要使用的 Amazon EC2 SSH 密钥。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例)中的 Amazon EC2 密钥对。如果您选择使用启动模板,则不能选择启动模板。

• 对于 Allow remote access from (允许从),如果您希望限制对特定实例的访问,请选择与这些实例关联的安全组。如果您未选择特定安全组,则允许从 Internet 上的任何位置进行 SSH 访问 (0.0.0.0/0)。

8. 在 Review and create (审核并创建) 页面上,审核托管节点组配置并选择 Create (创建)。

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。9. 查看节点的状态并等待它们达到 Ready 状态。

kubectl get nodes --watch

10. (仅限 GPU 节点)如果您选择 GPU 实例类型和 Amazon EKS 优化加速 AMI,则必须使用以下命令在集群上将适用于 Kubernetes 的 NVIDIA 设备插件用作 DaemonSet。

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml

11. (可选)部署示例 Linux 应用程序 (p. 210) – 部署示例应用程序以测试您的集群和 Linux 节点。12. (可选)将 Linux 工作线程节点添加到集群后,请按照 Windows 支持 (p. 69)中的过程向集群添加

Windows 支持并添加 Windows 工作线程节点。所有 Amazon EKS 集群必须至少包含一个 Linux 工作线程节点,即使您只想在集群中运行 Windows 工作负载也是如此。

现在,您有一个带节点的工作 Amazon EKS 集群,您已准备好开始安装 Kubernetes 插件并将应用程序部署到集群。以下文档主题可帮助您扩展集群的此功能。

• Cluster Autoscaler (p. 52) – 配置 Kubernetes Cluster Autoscaler 以自动调整节点组中的节点数。• 部署示例 Linux 应用程序 (p. 210) – 部署示例应用程序以测试您的集群和 Linux 节点。• 部署 Windows 示例应用程序 (p. 74) – 部署示例应用程序以测试您的集群和 Windows 节点。• 集群管理 (p. 243) – 了解如何使用重要工具来管理集群。

更新托管节点组在多种情况下,更新 Amazon EKS 托管节点组的版本或配置会很有用:

• 您已更新 Amazon EKS 集群的 Kubernetes 版本,并希望更新节点以使用相同的 Kubernetes 版本。• 新 AMI 发行版本可用于您的托管节点组。有关 AMI 版本的更多信息,请参阅Amazon EKS 优化的 Amazon

Linux AMI 版本 (p. 135)。• 您希望调整托管节点组中的最少、最多或所需实例数。• 您希望对托管节点组中的实例添加或删除 Kubernetes 标签。• 您希望对托管节点组添加或删除 AWS 标签。• 您需要部署具有配置更改的启动模板的新版本,如更新的自定义 AMI。

91

Page 100: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新托管节点组

如果您的托管节点组的 Kubernetes 版本具有较新的 AMI 发行版,则可以更新节点组的版本以使用较新的 AMI版本。同样,如果您的集群运行的 Kubernetes 版本比节点组要新,则可以更新节点组以使用最新的 AMI 发行版来匹配集群的 Kubernetes 版本。

Note

您无法将节点组回滚到较早的 Kubernetes 版本或 AMI 版本。

当托管节点组中的节点因扩展操作或更新而终止时,将会先耗尽该节点中的 Pod。有关更多信息,请参阅托管节点更新行为 (p. 94)。

更新节点组版本您可以使用 AWS 管理控制台 或 (p. 92)eksctl 更新节点组版本。 (p. 93)

使用 AWS 管理控制台 更新节点组版本

1. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署向下扩展到 0 个副本以避免相互冲突的扩展操作。

kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system

2. 在 https://console.aws.amazon.com/eks/home#/clusters 处打开 Amazon EKS 控制台。3. 选择包含要更新的节点组的集群。4. 如果至少有一个使用 Amazon EKS 优化型 AMI 部署的节点组有可用的更新,您将在集群名称下看到一条

通知。通知可让您了解有多少节点组具有可用的更新。在 Compute (计算) 选项卡上的 Node Groups (节点组) 表中,您将看到以下右侧的 Update now (立即更新):

• 具有 优化 AMI 更新的每个节点组的 AMI 发行版Amazon EKS列中的值。如果使用自定义 AMI 部署节点组,则不会显示此选项。如果节点是使用自定义 AMI 部署的,则应执行以下步骤来部署新的已更新的自定义 AMI。首先,创建 AMI 的新版本,然后使用新的 AMI ID 创建新的启动模板版本,最后将节点升级到新版本的启动模板。为此,请为要更新的节点组选择 Update now (立即更新)。

• 使用启动模板部署的每个节点组的 Launch template (启动模板) 列中的值。为要更新其启动模板版本的节点组选择 Update now (立即更新)。

如果您从表中选择一个节点组,并且它有一个可用更新,您将在 Node Group configuration (节点组配置) 页面上收到一条通知。在此页面上,您可以选择 Update now (立即更新)。

5. 在 Update Node Group version (更新节点组版本) 页面上,选择:

• Update Node Group version (更新节点组版本) – 如果您部署了自定义 AMI 或者您的 EKS 优化 AMI已在集群的最新版本上,则此选项不可用。

• Launch template version (启动模板版本) – 如果节点组在没有自定义启动模板的情况下部署,则此选项不可用。您只能更新已使用自定义启动模板部署的节点组的启动模板版本。选择要将节点组更新到的版本。如果您的节点组配置了自定义 AMI,则您选择的版本还必须指定 AMI。当您升级到较新版本的启动模板时,将回收所有节点以匹配指定的启动模板版本的新配置。

6. 对于 Update strategy (更新策略),选择以下选项之一,然后选择 Update (更新)。

• 滚动更新 – 此选项遵循集群的 pod 中断预算。如果出现导致 Amazon EKS 无法正确耗尽正在此节点组上运行的 Pod 的 pod 的 pod 中断预算问题,则更新将失败。

• Force update (强制更新) – 此选项不考虑 Pod 中断预算。强制重新启动节点以进行更新,而不考虑 pod中断预算问题。

7. (可选)如果您使用 Kubernetes Cluster Autoscaler,请将部署扩展回所需数量的副本。

kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system

92

Page 101: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新托管节点组

使用 eksctl 更新节点组版本

1. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署向下扩展到 0 个副本以避免相互冲突的扩展操作。

kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system

2. 使用以下命令将托管节点组升级到节点上当前部署的相同 Kubernetes 版本的最新 AMI 版本。

eksctl upgrade nodegroup --name=<node-group-name> --cluster=<cluster-name>

Note

如果要将使用启动模板部署的节点组升级到新的启动模板版本,请将 --launch-template-<version> 添加到上述命令中。启动模板必须满足启动模板支持 (p. 94)中所述的要求。如果启动模板包含自定义 AMI,则 AMI 必须满足 使用自定义 AMI (p. 97) 中的要求。当您将节点组升级到较新版本的启动模板时,将回收所有节点以匹配指定的启动模板版本的新配置。您无法直接将在没有启动模板的情况下部署的节点组升级到新的启动模板版本。相反,您必须使用启动模板部署新的节点组,以将节点组更新为新的启动模板版本。

您可以将节点组升级到比节点组的当前 Kubernetes 版本高一个次要版本的版本,但该版本不能晚于集群的 Kubernetes 版本。例如,如果您的集群运行 Kubernetes 1.18,则可以使用以下命令将当前运行Kubernetes 1.17 的节点升级到版本 1.18。

eksctl upgrade nodegroup --name=<node-group-name> --cluster=<cluster-name> --kubernetes-version=<1.18>

3. (可选)如果您使用 Kubernetes Cluster Autoscaler,请将部署扩展回所需数量的副本。

kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system

编辑节点组配置您可以修改托管节点组的一些配置。

编辑节点组配置

1. 在 https://console.aws.amazon.com/eks/home#/clusters 处打开 Amazon EKS 控制台。2. 选择包含要编辑的节点组的集群。3. 选择要编辑的节点组,然后选择 Edit (编辑)。4. (可选)在 Edit node group (编辑节点组) 页面上,编辑 Group configuration (组配置)。

• Tags (标签) – 向节点组资源添加标签或从中删除标签。这些标签仅应用于 Amazon EKS 节点组。它们不会传播到其他资源,例如子网或节点组中的 Amazon EC2 实例。

• Kubernetes labels (Kubernetes 标签) – 向节点组中的节点添加或删除 Kubernetes 标签。此处显示的标签仅为已应用于 Amazon EKS 的标签。节点上可能存在此处未显示的其他标签。

5. (可选)在 Edit node group (编辑节点组) 页面上,编辑 Group size (组大小)。

• Minimum size (最小大小) – 指定托管节点组应保留的当前节点数。• 最大大小 – 指定托管节点组可扩展到的最大节点数。默认情况下,托管节点组最多支持 100 个节点。• Desired size (所需大小) – 指定托管节点组应保留的当前节点数。

6. 编辑完成后,选择 Save changes (保存更改)。

93

Page 102: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启动模板支持

托管节点更新行为当您将托管节点组版本更新为适用于节点组 Kubernetes 版本的最新 AMI 发行版时,或者更新到较新的Kubernetes 版本以匹配集群时,Amazon EKS 触发以下逻辑:

1. Amazon EKS 为与您节点组关联的 Auto Scaling 组创建新 Amazon EC2 启动模板。新模板使用更新的目标 AMI。

2. 对 Auto Scaling 组进行更新以使用具有新 AMI 的最新启动模板。3. 组的最大大小和所需大小以 1 为部署 Auto Scaling 组所在区域中的 可用区 数的两倍的增量增加。Auto

Scaling这是为了确保您的节点组部署到的区域中的每个 可用区 中至少有一个新实例出现。4. Amazon EKS 检查节点组中节点的 eks.amazonaws.com/nodegroup-image 标

签,并在节点组中未使用最新 AMI ID 标记的所有节点上应用 eks.amazonaws.com/nodegroup=unschedulable:NoSchedule Taint。这将防止先前失败的更新中的已更新节点。

5. Amazon EKS 随机选择节点组中的节点,并从其中移出所有 Pod。6. 移出所有 Pod 后,Amazon EKS 将封锁节点。这样做是为了使服务控制器不会向此节点发送任何新请求,并

从其运行状况良好的活动节点列表中删除该节点。7. Amazon EKS 向封送节点的 Auto Scaling 组发送终止请求。8. 重复步骤 5-7,直到节点组中没有任何使用启动模板的早期版本部署的节点。9. Auto Scaling 组的最大大小和所需大小减少 1,以返回到更新前的值。

启动模板支持托管节点组始终使用 Amazon EC2 Auto Scaling 组启动模板进行部署。如果您未指定要在创建托管节点组时使用的自己的启动模板,则 Amazon EKS API 会在您的账户中使用默认值创建启动模板。通过从该模板创建您自己的启动模板和托管节点组,可以实现在部署托管节点时比默认启动模板更大的灵活性和自定义性级别。对于最高级别的自定义,您可以使用自己的启动模板和自定义 AMI 部署托管节点。

使用您自己的启动模板部署托管节点组后,您可以使用同一启动模板的不同版本对其进行更新。当您将节点组更新为启动模板的不同版本时,该组中的所有节点都将回收以匹配指定启动模板版本的新配置。无法直接更新不使用自定义启动模板的现有节点组。相反,您必须使用自定义启动模板创建新的节点组才能执行此操作。

启动模板配置基础知识您可以使用 Amazon EC2、Auto Scaling 或 AWS 管理控制台 开发工具包创建 AWS CLI AWS 启动模板。有关更多信息,请参阅 用户指南 中的Amazon EC2为 Auto Scaling 组创建启动模板。启动模板中的一些设置与用于托管节点配置的设置类似。在使用启动模板部署或更新节点组时,必须在节点组配置或启动模板中指定一些设置,但不能同时指定两者。如果某个设置不存在,则创建或更新节点组等操作将失败。

下表列出了启动模板中禁止的设置以及托管节点组配置中需要哪些类似设置 (如果有)。列出的设置是 控制台中显示的设置。它们在 AWS CLI 和开发工具包中可能具有相似但不同的名称。

禁用启动模板– Amazon EKS 节点组配置

IAM实例配置文件在高级详细信息下 配置节点组页面上的节点组配置下的 节点 IAM 角色

Network interfaces (网络接口) 下的 Subnet (子网)(Add network interface (添加网络接口))

Specify networking (指定联网) 页面上 Node Groupnetwork configuration (节点组网络配置) 下的 Subnets (子网)

Request Spot Instances (请求 Spot 实例) 在Advanced details (高级详细信息)、Purchasingoptions (购买选项)

没有等效运算符,因为节点组中不支持 Spot 实例。

94

Page 103: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启动模板支持

禁用启动模板– Amazon EKS 节点组配置

Shutdown behavior ( 关闭行为) 和 Stop - Hibernatebehavior (停止 - 休眠行为) (位于 Advanced details(高级详细信息) 下)。在启动模板中保留两个设置的启动模板中的默认 Don't include in launch templatesetting (不包括在启动模板设置中)。

没有等效函数。Amazon EKS 必须控制实例生命周期,而不是 Auto Scaling 组。

下表列出了托管节点组配置中禁止的设置以及启动模板中需要哪些类似设置(如果有)。列出的设置是 控制台中显示的设置。它们在 AWS CLI 和开发工具包中可能具有类似的名称。

Amazon EKS 节点组配置 – 禁止 启动模板

(仅当您在启动模板中指定了自定义 AMI 时)Setcompute and scaling configuration (设置计算和扩展配置) 页面上 Node Group compute configuration(节点组计算配置) 下的 AMI type (AMI 类型) 控制台显示 –Specified in launch template (已在启动模板中指定) 和指定的 AMI ID。

如果在启动模板中未指定 AMI 类型,则可以在节点组配置中选择 AMI。

AMI 中的 Launch template contents (启动模板内容)如果您使用的是自定义 AMI,则必须指定它。–如果您指定的 AMI 不满足使用自定义 AMI (p. 97)中列出的要求,节点组部署将失败。

Set compute and scaling configuration (设置计算和扩展配置) 页面的 实例类型显示 –Specified inlaunch template (已在启动模板中指定) 以及指定的实例类型。

实例类型(位于启动模板内容下) – 您必须在启动模板版本中指定此设置,以便能够在创建节点组时选择该版本。

在 Set compute and scaling configuration (设置计算和扩展配置) 页面的 Node Group computeconfiguration (节点组计算配置) 下的 Disk size (磁盘大小) 下,– 控制台显示 Specified in launch template(在启动模板中指定)。

Size (大小) 下的 Storage (Volumes) (存储(卷))(Addnew volume (添加新卷))。您必须在启动模板中指定此项。

SSH key pair (位于 Specify Networking (指定联网) 页面的 Node Group configuration (节点组配置)下)。控制台将显示在启动模板中指定的密钥或显示–Not specified in launch template (未在启动模板中指定)。

Key pair (login) (密钥对(登录)) 下的 Key pair name(密钥对名称)。

在使用启动模板时,您无法指定允许远程访问的源安全组。

安全组 (在网络设置下),或 网络接口 (添加网络接口)下的安全组 (而不是同时对两者进行)。有关更多信息,请参阅使用自定义安全组 (p. 96)。

Note

如果您部署到节点组的任何容器使用实例元数据服务版本 2,请确保在启动模板中将 Metadataresponse hop limit (元数据响应跃点数限制) 设置为 2。有关更多信息,请参阅《 用户指南》中的实例元数据和用户数据Amazon EC2。如果您部署托管节点组而不使用自定义启动模板,则会在默认启动模板中为节点组自动设置此值。

标记 Amazon EC2 实例您可以使用启动模板的 TagSpecification 参数指定要应用于节点组中的 Amazon EC2 实例的标签。调用CreateNodegroup 或 UpdateNodegroupVersion APIs 的 IAM 实体必须具有 ec2:RunInstances 和ec2:CreateTags 的权限,并且必须将标签添加到启动模板中。

95

Page 104: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南启动模板支持

使用自定义安全组您可以使用启动模板指定要应用于节点组中的实例的自定义 Amazon EC2 安全组。这可在实例级安全组参数中,也可作为网络接口配置参数的一部分。但是,您无法创建同时指定实例级别和网络接口安全组的启动模板。考虑将自定义安全组与托管节点组一起使用时适用的以下条件:

• Amazon EKS 仅允许带单个网络接口规范的启动模板。• 默认情况下,Amazon EKS 将集群安全组应用于节点组中的实例,以便节点和控制层面之间的通信。如果您

在启动模板中使用之前提到的任一选项指定了自定义安全组,则 Amazon EKS 不会添加集群安全组。因此,您必须确保安全组的入站和出站规则允许与集群的终端节点进行通信。安全组规则不正确会导致工作线程节点无法加入集群。要了解需要应用的安全组规则,请参阅Amazon EKS 安全组注意事项 (p. 176)。

• 如果您需要对节点组中的实例进行 SSH 访问,请确保包括允许该访问的安全组。

Amazon EC2 用户数据启动实例时,您可以使用 Amazon EC2 在启动模板中提供 cloud-init 用户数据。有关更多信息,请参阅cloud-init 文档。您的用户数据可用于执行常见的配置操作。这包括以下操作:

• 包含用户或组• 安装程序包

Amazon EC2 启动模板中与托管节点组一起使用的 用户数据必须采用 MIME 分段存档格式。这是因为您的用户数据已与节点加入集群所需的 Amazon EKS 用户数据合并。请勿在用户数据中指定启动或修改kubelet 的任何命令,因为这将作为 Amazon EKS 合并的用户数据的一部分执行。某些 kubelet 参数(如在节点上设置标签)可以通过托管节点组 API 直接配置。

Note

如果您需要高级 kubelet 自定义,包括手动启动或传入自定义配置参数,请参阅使用自定义 AMI 以了解更多信息。当在启动模板中指定自定义 AMI ID 时,Amazon EKS 不会合并用户数据。

您可以将多个用户数据块合并到一个 MIME 分段文件中。例如,您可以将配置 Docker 守护程序的云 boothook与安装自定义软件包的用户数据 shell 脚本结合使用。MIME 分段文件包含以下组成部分:

• 内容类型和段边界声明 – Content-Type: multipart/mixed; boundary="==BOUNDARY=="• MIME 版本声明 – MIME-Version: 1.0• 一个或多个用户数据块,其包含以下组成部分:

• 开口边界,表示用户数据块的开头 – --==BOUNDARY==• 数据块的内容类型声明: Content-Type: text/cloud-config; charset="us-ascii"。 有关内

容类型的更多信息,请参阅 cloud-init 文档。• 用户数据的内容,例如,Shell 命令或 cloud-init 指令的列表。• 封闭边界,表示 MIME 分段文件的结尾:--==BOUNDARY==--

以下是可用于创建自己的 MIME 分段文件的示例。

MIME-Version: 1.0Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==Content-Type: text/x-shellscript; charset="us-ascii"

✓!/bin/bashecho "Running custom user data script"

--==MYBOUNDARY==--\

96

Page 105: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南删除托管节点组

使用自定义 AMI如果您的组织由于特定的安全、合规性或内部策略要求而需要运行自定义 AMI,您可以使用启动模板将此类AMIs 部署到托管节点组。有关更多信息,请参阅 中的 Amazon 系统映像 (AMI)Amazon EC2 用户指南(适用于 Linux 实例)。AMI 构建规范包含用于基于 Amazon EKS 构建自定义 Amazon EKS AMI 的资源和配置脚本。Amazon Linux 2有关更多信息,请参阅 上的 Amazon EKSAMI 生成规范。GitHub 要构建与其他操作系统一起安装的自定义 AMIs,请参阅 上的 Amazon EKS 示例自定义 AMIs。GitHub

Note

使用自定义 AMI 时,Amazon EKS 不会合并任何用户数据。相反,您负责为节点提供所需的引导命令以加入集群。如果您的节点未能加入集群,Amazon EKS CreateNodegroup 和UpdateNodegroupVersion 操作也将失败。

要将自定义 AMI 与托管节点组结合使用,请在启动模板的 imageId 字段中指定 AMI ID。要将节点组更新为自定义 AMI 的较新版本,请使用更新的 AMI ID 创建启动模板的新版本,并使用新的启动模板版本更新节点组。

将自定义 AMIs 与托管节点组结合使用的限制

• 您必须创建新的节点组,以在使用自定义 AMIs 和经 Amazon EKS 优化的 AMIs 之间切换。• 如果您使用的是自定义 AMI,则无法在 API 中设置以下字段

• amiType

• releaseVersion

• version

• 自定义 AMI 不能是 Windows,因为 Windows 不能用于托管节点组。

删除托管节点组本主题介绍如何删除 Amazon EKS 托管节点组。

在您删除托管节点组时,Amazon EKS 随机选择节点组中的节点并向 Auto Scaling 组发送终止信号。然后,Amazon EKS 发送信号以从节点耗尽 Pod。如果 Pod 在 15 分钟内没有从节点耗尽,则会删除 Pod。例如,在 Pod 中断预算限制太严格时,可能会发生这种情况。节点耗尽后,将终止节点。重复执行此步骤直到 AutoScaling 组中的所有节点已终止,然后删除 Auto Scaling 组。

Important

如果您删除的托管节点组使用了集群中任何其他托管节点组未使用的节点 IAM 角色,则该角色将从aws-auth ConfigMap 中删除此角色。 (p. 240) 如果集群中的任何自行管理的节点组使用相同的节点 IAM 角色,则自行管理的节点将移至 NotReady 状态,并且集群操作也会中断。您可以将映射添加回 ConfigMap,以最大限度地减少中断。

删除托管节点组

1. 在 https://console.aws.amazon.com/eks/home#/clusters 处打开 Amazon EKS 控制台。2. 选择包含要删除的节点组的集群。3. 在 Compute (计算) 选项卡上,选择要删除的节点组,然后选择 Delete (删除)。4. 在 Delete Node group: <node group name> (删除节点组: <节点组>) 页面上的文本字段中,键入节点组的

名称,然后选择 Delete (删除)。

自管理节点集群包含安排 Pod 的一个或多个 Amazon EC2 节点。Amazon EKS 节点在 AWS 账户中运行,并通过集群 API 服务器终端节点连接到集群的控制层面。您可以将一个或多个节点部署到节点组中。节点组是在Amazon EC2 Auto Scaling 组中部署的一个或多个 Amazon EC2 实例。节点组中的所有实例必须:

97

Page 106: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

• 使用相同的实例类型• 运行相同的 Amazon 系统映像 (AMI)• 使用相同的 Amazon EKS 节点 IAM 角色 (p. 281)

一个集群可以包含多个节点组。只要每个节点组满足上述要求,集群就可以包含包含不同实例类型和主机操作系统的节点组。每个节点组可以包含多个节点。

Amazon EKS 节点是标准 Amazon EC2 实例,您需要基于常规的 EC2 价格为其付费。有关更多信息,请参阅Amazon EC2 定价。

Amazon EKS 提供了称为 Amazon EKS 优化 AMIs 的专用 Amazon 系统映像 (AMI)。 配置为使用 AMIs,并包含 Docker、Amazon EKS kubelet 和 AWS IAM 身份验证器。还包含专用AMIs引导脚本,该脚本允许它自动发现并连接到您的集群控制层面。

如果您使用 CIDR 块限制对集群的公有终端节点的访问,建议您还启用私有终端节点访问,以便节点可以与集群进行通信。在未启用私有终端节点的情况下,您指定用于公有访问的 CIDR 块必须包含来自 VPC 的出口源。有关更多信息,请参阅Amazon EKS 集群终端节点访问控制 (p. 48)。

要向 Amazon EKS 集群添加自管理节点,请参阅后面的主题。如果您手动启动自管理节点,则必须向每个节点添加以下标签。有关更多信息,请参阅为单个资源添加和删除标签。如果您按照以下指南中的步骤操作,则会自动将所需的标签添加到节点。

Key Value

kubernetes.io/cluster/<cluster-name> owned

有关节点的更多信息 (从一般 Kubernetes 的角度看),请参阅 Kubernetes 文档中的节点。

主题• 启动自管理 Amazon Linux 节点 (p. 98)• 启动自管理的 Tottlerocket 节点 (p. 102)• 启动自管理 Windows 节点 (p. 104)• 自管理节点更新 (p. 108)

启动自管理 Amazon Linux 节点本主题帮助您启动向 Auto Scaling 集群注册的 Linux 节点的 Amazon EKS 组。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。您可以使用 Amazon Linux 2 或 eksctl (p. 98) 启动自管理 AWS 管理控制台 节点。 (p. 99)

使用 eksctl 启动自管理 Linux 节点

此过程仅适用于使用 eksctl 创建的集群。Note

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。Important

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。

98

Page 107: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS 管理控制台 启动自管理 Windows 节点 (p. 105)。

1. 以下命令假定您在 my-cluster 区域中有一个名为 us-west-2 的现有集群。对于其他现有集群,请更改这些值。如果您没有现有集群,则必须先创建集群 (p. 30)。如果要在 Amazon EC2 Arm 实例上部署,请将 t3.medium 替换为 Arm 实例类型。如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看Amazon EKS优化的 ArmAmazon LinuxAMIs (p. 134)中的注意事项。

使用以下命令创建节点组。将 <example values> 替换为您自己的值。

eksctl create nodegroup \--cluster <my-cluster> \--version auto \--name <al-nodes> \--node-type <t3.medium> \--node-ami auto \--nodes <3> \--nodes-min <1> \--nodes-max <4>

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。

输出:

创建节点时,您将看到几行输出。输出的最后一行是以下示例行。

[✓] created 1 nodegroup(s) in cluster "<my-cluster>"

2. (可选)部署示例应用程序 (p. 210)以测试您的集群和 Linux 节点。

使用 AWS 管理控制台 启动自行管理的节点

此过程具有以下先决条件:

• 满足 Amazon EKS 集群要求的现有 VPC 和安全组。有关更多信息,请参阅 集群 VPC 注意事项 (p. 174)和Amazon EKS 安全组注意事项 (p. 176)。Amazon EKS 入门 (p. 3)指南创建符合要求的VPC,您也可以按照为 Amazon EKS 集群创建 VPC (p. 170)来手动创建 VPC。

• 使用符合 Amazon EKS 集群要求的 VPC 和安全组的现有 Amazon EKS 集群。有关更多信息,请参阅创建Amazon EKS 集群 (p. 30)。

1. 等待集群状态显示为 ACTIVE。 如果您在集群处于活动状态前启动节点,则节点将无法注册到集群,您必须重新启动节点。

2. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台3. 选择创建堆栈。4. 对于 Specify template (指定模板),选择 Amazon S3 URL,复制与您的集群所在的区域对应的 URL,将其粘

贴到 Amazon S3 URL 中,然后选择 Next (下一步) 两次。

• 和 中国(北京) 之外的所有区域中国 (宁夏)

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-nodegroup.yaml

• 中国(北京) 和 中国 (宁夏)

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-nodegroup.yaml

99

Page 108: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

5. 在 Quick create stack (快速创建堆栈) 页面上,相应地填写以下参数:

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其命名为 <cluster-name-nodes>。

• ClusterName: 输入您在创建 Amazon EKS 集群时使用的名称。

Important

此名称必须与您在步骤 1: 创建 Amazon EKS 集群 (p. 22)中使用的名称完全匹配;否则,您的节点将无法加入集群。

• ClusterControlPlaneSecurityGroup: 从通过 生成的 SecurityGroups 输出中选择 AWSCloudFormation创建您的 Amazon EKS 集群 VPC (p. 19) 值。

• NodeGroupName: 输入节点组的名称。此名称稍后可用于标识为节点创建的 Auto Scaling 节点组。• NodeAutoScalingGroupMinSize: 输入节点 Auto Scaling 组可以缩减到的最小节点数。• NodeAutoScalingGroupDesiredCapacity: 输入创建堆栈时要扩展到的所需节点数。• NodeAutoScalingGroupMaxSize: 输入节点 Auto Scaling 组可扩展到的最大节点数。• NodeInstanceType: 为节点选择实例类型。在选择 Arm 实例类型之前,请确保查看Amazon EKS优化的

ArmAmazon LinuxAMIs (p. 134)中的注意事项。

Note

最新版本的 Kubernetes 的 Amazon VPC CNI 插件支持的实例类型在此处显示。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅适用于 Kubernetes的 Amazon VPC CNI 插件升级 (p. 201)。

Important

某些实例类型可能并非在所有区域都可用。• NodeImageIdSSMParam: 预填充了 Kubernetes 版本的当前推荐的经 Amazon EC2 Systems

Manager 优化的 Amazon EKS AMI ID 的 Amazon Linux 参数。如果要使用经 Amazon EKS 优化的加速 AMI,请将 amazon-linux-2 替换为 amazon-linux-2-gpu。 如果要使用经 Amazon EKS 优化的 Arm AMI,请将 amazon-linux-2 替换为 amazon-linux-2-arm64。 如果要使用 Amazon EKS支持的其他 Kubernetes 次要版本,您可以将 1.x 替换为其他支持的版本 (p. 58)。我们建议指定与集群相同的 Kubernetes 版本。

Note

Amazon EKS 节点 AMI 基于 Amazon Linux 2。您可以在 Amazon Linux 安全中心跟踪Amazon Linux 2 的安全或隐私事件,也可以订阅关联的 RSS 源。安全和隐私事件包括问题的概述、受影响的程序包以及如何更新实例以解决问题。

• NodeImageId: (可选)如果您使用自己的自定义 AMI(而不是经 Amazon EKS 优化的 AMI),请输入您的区域的节点 AMI ID。如果您在此处指定一个值,它将覆盖 NodeImageIdSSMParam 字段中的任何值。

• NodeVolumeSize: 在 GiB 中指定节点的根卷大小。• KeyName: 输入 Amazon EC2 SSH 密钥对的名称,您可使用该密钥对在节点启动后使用 SSH 连接到

节点。如果还没有 Amazon EC2 密钥对,可以在 AWS 管理控制台中创建一个。有关更多信息,请参阅Amazon EC2 中的 密钥对Amazon EC2 用户指南(适用于 Linux 实例)。

Note

如果此处不提供密钥对,AWS CloudFormation 堆栈创建将失败。• BootstrapArguments: 指定要传递给节点引导脚本的任何可选参数,例如额外的 kubelet 参数。有关

更多信息,请查看 上的引导脚本使用信息GitHub。

Note

• 如果您要在没有出站 Internet 访问的私有 VPC 中启动节点,则需要包含以下参数。100

Page 109: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

--apiserver-endpoint <cluster-endpoint> --b64-cluster-ca <cluster-certificate-authority>

• 如果要将 IP 地址分配给来自包含节点 IP 地址的块之外的其他 CIDR 块的 Pod,则可能需要向 VPC 添加 CIDR 块并指定参数以支持该功能。有关更多信息,请参阅CNI 自定义网络 (p. 191)。

• DisableIMDSv1: 默认情况下,每个节点都支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2,但您可以禁用 IMDSv1。 如果您不希望节点组中的任何节点或节点组中的节点上计划的任何 Pod 使用 ,请选择trueIMDSv1。 有关 IMDS 的更多信息,请参阅配置实例元数据服务。

• VpcId: 输入您在创建您的 Amazon EKS 集群 VPC (p. 19)中创建的 VPC 的 ID。• 子网: 选择您在创建您的 Amazon EKS 集群 VPC (p. 19)中创建的子网。如果您使用为 Amazon EKS

集群创建 VPC (p. 170)中所述的步骤创建了 VPC,请在 VPC 中仅指定私有子网以便启动节点。

Important

如果其中的任何子网是公有子网,则其必须启用自动公有 IP 地址分配设置。如果没有为该公有子网启用该设置,则您部署到该公有子网的任何节点都不会分配到公有 IP 地址,也无法与集群或其他 AWS 服务进行通信。如果子网是在March 26, 2020之前使用任一 Amazon EKSAWS CloudFormation VPC 模板 (p. 170)部署的,或者是使用 eksctl 部署的,则会为这些公有子网禁用自动公有 IP 地址分配。有关如何为子网启用公有 IP 地址分配的信息,请参阅修改子网的公有 IPv4 寻址属性。如果节点部署到私有子网,则它可以通过 NAT 网关与集群和其他 AWS 服务进行通信。

Important

• 如果子网没有 Internet 访问权限,请确保您了解私有集群 (p. 81)中的注意事项和额外步骤。

• 确保已使用集群名称标记所选子网。有关更多信息,请参阅 子网添加标签要求 (p. 175)。如果您在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中拥有子网,它们可能当前未标记。

6. 确认堆栈可创建 IAM 资源,然后选择 Create stack (创建堆栈)。7. 完成创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。8. 记录已创建的节点组的 NodeInstanceRole。您在配置 Amazon EKS 节点时需要此值。

启用节点以加入集群

Note

如果您在没有出站 Internet 访问的私有 VPC 中启动了节点,则必须允许节点从 VPC 中加入集群。

1. 下载、编辑和应用 AWS IAM 身份验证器配置映射。

a. 使用与集群所在的区域对应的命令下载配置映射:

• 和 中国(北京) 之外的所有区域中国 (宁夏)

curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/aws-auth-cm.yaml

• 中国(北京) 和 中国 (宁夏)

curl -o aws-auth-cm.yaml https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/aws-auth-cm.yaml

b. 使用文本编辑器打开文件。将 <ARN of instance role (not instance profile)> 代码段替换为您在上一过程中记录的 NodeInstanceRole 值,并保存该文件。

101

Page 110: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Tottlerkrocket (Tottlerocket)

Important

请勿修改此文件中的任何其他行。

apiVersion: v1kind: ConfigMapmetadata: name: aws-auth namespace: kube-systemdata: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes

c. 应用配置。此命令可能需要几分钟才能完成。

kubectl apply -f aws-auth-cm.yaml

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。2. 查看节点的状态并等待它们达到 Ready 状态。

kubectl get nodes --watch

3. (仅限 GPU 节点)如果选择 GPU 实例类型和 Amazon EKS 优化加速 AMI,则必须使用以下命令在集群上将适用于 Kubernetes 的 NVIDIA 设备插件用作 DaemonSet。

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml

4. (可选)部署示例应用程序 (p. 210)以测试您的集群和 Linux 节点。

启动自管理的 Tottlerocket 节点本主题帮助您启动向 Auto Scaling 集群注册的 Bottlerocket 节点的 Amazon EKS 组。Tickrocket 是一个基于Linux 的开源操作系统,由 AWS 专门构建,用于在虚拟机或裸机主机上运行容器。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。有关 Tottlerocket 的更多信息,请参阅 上的文档GitHub。

Important

Amazon EKS 节点是标准的 Amazon EC2 实例,您需要基于常规的 Amazon EC2 实例价格为其付费。有关更多信息,请参阅 Amazon EC2 定价。Important

注意事项

• 您可以部署到采用 x86 或 Arm 处理器的 Amazon EC2 实例,但不能部署到具有 GPU 或Inferentia 芯片的实例。

• 您不能部署到以下区域:中国(北京) (cn-north-1)、中国 (宁夏) (cn-northwest-1)、AWSGovCloud(美国东部) (us-gov-east-1) 或 AWS GovCloud (US-West) (us-gov-west-1)。

102

Page 111: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Tottlerkrocket (Tottlerocket)

• 您不能在托管节点上部署。• 没有可用于部署节点的 AWS CloudFormation 模板。

Important

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS 管理控制台 启动自管理 Windows 节点 (p. 105)。

使用 eksctl 启动 Bottlerocket 节点

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。Note

此过程仅适用于使用 eksctl 创建的集群。

1. 此过程假定您在 my-cluster 区域中有一个名为 us-west-2 的现有集群。对于其他现有集群,请更改这些值。如果您没有现有集群,则必须先创建集群 (p. 30)。

使用以下内容创建名为 <nodegroup.yaml> 的文件。将 <example values> 替换为您自己的值。如果更改1.17,则只能将其更改为 1.15 或更高版本。如果要在 Arm 实例上部署,请将 m5.large 替换为 Arm 实例类型。如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS优化的 ArmAmazonLinuxAMIs (p. 134)中的注意事项。如果要使用自定义 AMI 进行部署,请参阅 文档中的在 GitHub 上构建 Tottlerocket 和自定义 AMI 支持eksctl。

有关在 eksctl 中使用配置文件、配置文件架构和配置文件示例的更多信息,请参阅 eksctl 文档。

---apiVersion: eksctl.io/v1alpha5kind: ClusterConfig

metadata: name: <my-cluster> region: <us-west-2> version: <'1.18'>

nodeGroups: - name: <ng-bottlerocket> instanceType: <m5.large> desiredCapacity: <3> amiFamily: <Bottlerocket> iam: attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore ssh: allow: true publicKeyName: <YOUR_EC2_KEYPAIR_NAME>

2. 使用以下命令部署您的节点。

eksctl create nodegroup --config-file=<nodegroup.yaml>

103

Page 112: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。

输出:

创建节点时,您将看到几行输出。输出的最后一行是以下示例行。

[✓] created 1 nodegroup(s) in cluster "<my-cluster>"

3. (可选)使用 https://kubernetes.io/docs/concepts/storage/persistent-volumes/ CSI 插件在 Bottlerocket节点上创建 Kubernetes Amazon EBS持久性卷。默认 Amazon EBS 驱动程序依赖于 Tottlerocket 中未包含的文件系统工具。有关使用驱动程序创建存储类的更多信息,请参阅Amazon EBS CSI 驱动程序 (p. 155)。

4. (可选)默认情况下,kube-proxy 将 nf_conntrack_max 内核参数设置为一个默认值,该默认值可能与在启动时最初设置的值不同。如果您更愿意保留 Tottlerocket 的默认设置,请使用以下命令编辑 kube-proxy 配置。

kubectl edit -n kube-system daemonset kube-proxy

将 --conntrack-max-per-core 和 --conntrack-min 添加到 kube-proxy 参数,如以下示例所示。设置 0 意味着不进行任何更改。

containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0

5. (可选)部署示例应用程序 (p. 210)以测试您的 Bottrocket 节点。

启动自管理 Windows 节点本主题帮助您启动向 Auto Scaling 集群注册的 Windows 节点的 Amazon EKS 组。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。

Important

Amazon EKS 节点是标准的 Amazon EC2 实例,您需要基于常规的 Amazon EC2 实例价格为其付费。有关更多信息,请参阅 Amazon EC2 定价。

Important

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自行管理的节点 (p. 99) 和 使用 AWS 管理控制台 启动自管理 Windows 节点 (p. 105)。

您必须为集群启用 Windows 支持,我们建议您在启动 Windows 节点组之前查看重要的注意事项。有关更多信息,请参阅启用 Windows 支持 (p. 70)。

您可以使用 eksctl (p. 104) 或 AWS 管理控制台 (p. 105) 启动自管理 Windows 节点。

使用 eksctl 启动自管理 Windows 节点

此过程假定您已安装 eksctl,并且您的 eksctl 版本最低为 0.31.0-rc.0。 您可以使用以下命令来查看您的版本:

104

Page 113: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

Note

此过程仅适用于使用 eksctl 创建的集群。

1. 此过程假定您在 my-cluster 区域中有一个名为 us-west-2 的现有集群。对于其他现有集群,请更改这些值。如果您还没有要将 Windows 节点组添加到的 Amazon EKS 集群和 Amazon Linux 2 节点组,建议您改为遵循eksctl 入门 (p. 3)指南。本指南提供了使用 Amazon EKS 和 Windows 节点创建 AmazonLinux 集群的完整的端到端演练。

使用以下命令创建节点组。将 <example values> 替换为您自己的值。

eksctl create nodegroup \--region <us-west-2> \--cluster <my-cluster> \--name <ng-windows> \--node-type <t2.large> \--nodes <3> \--nodes-min <1> \--nodes-max <4> \--node-ami-family <WindowsServer2019FullContainer>

Note

• 如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。• 有关 eksctl 命令的可用选项的更多信息,请输入以下命令。

eksctl <command> -help

输出:

创建节点时,您将看到几行输出。输出的最后一行是以下示例行。

[✓] created 1 nodegroup(s) in cluster "<my-cluster>"

2. (可选)部署示例应用程序 (p. 74)以测试您的集群和 Windows 节点。

使用 AWS 管理控制台 启动自管理 Windows 节点

这些过程具有以下先决条件:

• 您有一个现有的 Amazon EKS 集群和一个 Linux 节点组。如果您没有这些资源,我们建议您按照我们的Amazon EKS 入门 (p. 3)指南之一创建它们。这些指南提供了使用 Linux 节点创建 Amazon EKS 集群的完整的端到端演练。

• 您已创建符合 Amazon EKS 集群要求的 VPC 和安全组。有关更多信息,请参阅 集群 VPC 注意事项 (p. 174)和Amazon EKS 安全组注意事项 (p. 176)。Amazon EKS 入门 (p. 3)指南创建符合要求的VPC,您也可以按照为 Amazon EKS 集群创建 VPC (p. 170)来手动创建 VPC。

1. 等待集群状态显示为 ACTIVE。 如果您在集群处于活动状态前启动节点,则节点将无法注册到集群,您必须重新启动节点。

2. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台

105

Page 114: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

3. 选择创建堆栈。4. 对于 Specify template (指定模板),选择 Amazon S3 URL,复制与您的集群所在的区域对应的 URL,将其粘

贴到 Amazon S3 URL,然后选择 Next (下一步) 两次。

• 和 中国(北京) 之外的所有区域中国 (宁夏)

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-windows-nodegroup.yaml

• 中国(北京) 和 中国 (宁夏)

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-windows-nodegroup.yaml

5. 在 Quick create stack (快速创建堆栈) 页面上,相应地填写以下参数:

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 <cluster-name>-nodes。

• ClusterName: 输入您在创建 Amazon EKS 集群时使用的名称。

Important

此名称必须与您在步骤 1: 创建 Amazon EKS 集群 (p. 22)中使用的名称完全匹配;否则,您的节点将无法加入集群。

• ClusterControlPlaneSecurityGroup: 从通过 生成的 SecurityGroups 输出中选择 AWSCloudFormation创建您的 Amazon EKS 集群 VPC (p. 19) 值。

• NodeGroupName: 输入节点组的名称。此名称稍后可用于标识为节点创建的 Auto Scaling 节点组。• NodeAutoScalingGroupMinSize: 输入节点 Auto Scaling 组可以缩减到的最小节点数。• NodeAutoScalingGroupDesiredCapacity: 输入创建堆栈时要扩展到的所需节点数。• NodeAutoScalingGroupMaxSize: 输入节点 Auto Scaling 组可扩展到的最大节点数。• NodeInstanceType: 为节点选择实例类型。

Note

最新版本的 Kubernetes 的 Amazon VPC CNI 插件支持的实例类型在此处显示。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅适用于 Kubernetes的 Amazon VPC CNI 插件升级 (p. 201)。

• NodeImageIdSSMParam: 预填充了当前推荐的 Amazon EC2 Systems Manager 优化 Windows 核心AMI ID 的 Amazon EKS 参数。如果要使用 Windows 的完整版本,请将 <Core> 替换为 Full。

• NodeImageId: (可选)如果您使用自己的自定义 AMI(而不是经 Amazon EKS 优化的 AMI),请输入您的区域的节点 AMI ID。如果您在此处指定一个值,它会覆盖 NodeImageIdSSMParam 字段中的任何值。

• NodeVolumeSize: 在 GiB 中指定节点的根卷大小。• KeyName: 输入 Amazon EC2 SSH 密钥对的名称,您可使用该密钥对在节点启动后使用 SSH 连接到

节点。如果还没有 Amazon EC2 密钥对,可以在 AWS 管理控制台中创建一个。有关更多信息,请参阅Amazon EC2 中的 密钥对Amazon EC2 用户指南(适用于 Windows 实例)。

Note

如果此处不提供密钥对,AWS CloudFormation 堆栈创建将失败。• BootstrapArguments: 指定要传递给节点引导脚本的任何可选参数,例如使用 kubelet 的额外 -KubeletExtraArgs 参数。

• DisableIMDSv1: 默认情况下,每个节点都支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2,但您可以禁用 IMDSv1。 如果您不希望节点组中的任何节点或节点组中的节点上计划的任何 Pod 使用 ,请选择trueIMDSv1。 有关 IMDS 的更多信息,请参阅配置实例元数据服务。

• VpcId: 选择您在创建您的 Amazon EKS 集群 VPC (p. 19)中创建的 VPC 的 ID。106

Page 115: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

• NodeSecurityGroups: 选择在创建您的 Amazon EKS 集群 VPC (p. 19)中为 Linux 节点组创建的安全组。如果您的 Linux 节点附加了多个安全组(例如,如果 Linux 节点组是使用 eksctl 创建的),请在此处指定所有安全组。

• 子网: 选择您在创建您的 Amazon EKS 集群 VPC (p. 19)中创建的子网。如果您使用为 Amazon EKS集群创建 VPC (p. 170)中所述的步骤创建了 VPC,请在 VPC 中仅指定私有子网以便启动节点。

Important

如果其中的任何子网是公有子网,则其必须启用自动公有 IP 地址分配设置。如果没有为该公有子网启用该设置,则您部署到该公有子网的任何节点都不会分配到公有 IP 地址,也无法与集群或其他 AWS 服务进行通信。如果子网是在March 26, 2020之前使用任一 Amazon EKSAWS CloudFormation VPC 模板 (p. 170)部署的,或者是使用 eksctl 部署的,则会为这些公有子网禁用自动公有 IP 地址分配。有关如何为子网启用公有 IP 地址分配的信息,请参阅修改子网的公有 IPv4 寻址属性。如果节点部署到私有子网,则它可以通过 NAT 网关与集群和其他 AWS 服务进行通信。

Important

确保已使用集群名称标记所选子网。有关更多信息,请参阅 子网添加标签要求 (p. 175)。如果您在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中拥有子网,它们可能当前未标记。

6. 确认堆栈可创建 IAM 资源,然后选择 Create stack (创建堆栈)。7. 完成创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。8. 记录已创建的节点组的 NodeInstanceRole。您在配置 Amazon EKS Windows 节点时需要此值。

启用节点以加入集群

1. 下载、编辑和应用 AWS IAM 身份验证器配置映射。

a. 使用与部署集群的区域对应的命令下载配置映射:

• 和 中国(北京) 之外的所有区域中国 (宁夏)

curl -o aws-auth-cm-windows.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/aws-auth-cm-windows.yaml

• 中国(北京) 和 中国 (宁夏)

curl -o aws-auth-cm-windows.yaml https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/aws-auth-cm-windows.yaml

b. 使用您常用的文本编辑器打开文件。将 <ARN of instance role (not instanceprofile) of **Linux** node> 和 <ARN of instance role (not instanceprofile) of **Windows** node> 代码段替换为您为 Linux 和 Windows 节点记录的NodeInstanceRole 值,并保存文件。

Important

请勿修改此文件中的任何其他行。

apiVersion: v1kind: ConfigMapmetadata: name: aws-auth namespace: kube-systemdata: mapRoles: | - rolearn: <ARN of instance role (not instance profile) of **Linux** node>

107

Page 116: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of instance role (not instance profile) of **Windows** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows

c. 应用配置。此命令可能需要几分钟才能完成。

kubectl apply -f aws-auth-cm-windows.yaml

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群 (p. 312)。2. 查看节点的状态并等待它们达到 Ready 状态。

kubectl get nodes --watch

3. (可选)部署示例应用程序 (p. 74)以测试您的集群和 Windows 节点。

自管理节点更新当发布新的经 Amazon EKS 优化的 AMI 时,您应考虑将自管理节点组中的节点替换为新 AMI。同样,如果您已更新 Amazon EKS 集群的 Kubernetes 版本,则还应更新节点以使用相同的 Kubernetes 版本。

Important

本主题介绍自管理节点的节点更新。如果您正在使用 托管节点组 (p. 86),请参阅更新托管节点组 (p. 91)。

有两种基本方法可以更新集群中自行管理的节点组以使用新 AMI:

• 迁移到新的节点组 (p. 108) – 创建新的节点组并将您的 Pod 迁移到该组。迁移到新节点组要比简单地更新现有 AWS CloudFormation 堆栈中的 AMI ID 更为正常,因为迁移过程会以 NoSchedule 形式对旧节点组执行 Taint 操作,并在新堆栈准备好接受现有 Pod 工作负载后耗尽这些节点。

• 更新现有的自行管理节点组 (p. 113) – 更新现有节点组的 AWS CloudFormation 堆栈以使用新 AMI。使用 eksctl 创建的节点组不支持此方法。

迁移到新的节点组本主题可帮助您创建新节点组,将现有应用程序正常地迁移到新组,然后从集群中删除旧节点组。您可以使用eksctl (p. 108) 或 AWS 管理控制台 (p. 109) 迁移到新的节点组。

使用 eksctl 将应用程序迁移到新节点组

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

108

Page 117: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

Note

此过程仅适用于使用 eksctl 创建的集群和节点组。

1. 检索现有节点组的名称,同时将 <my-cluster> 替换为您的集群名称。

eksctl get nodegroups --cluster=<my-cluster>

输出:

CLUSTER NODEGROUP CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE IDdefault standard-nodes 2019-05-01T22:26:58Z 1 4 3 t3.medium ami-05a71d034119ffc12

2. 使用 eksctl 通过以下命令启动新的节点组,同时将 <example> 值替换为您自己的值。

Note

有关更多可用的标签及其对应描述,请参阅 https://eksctl.io/。

eksctl create nodegroup \--cluster <my-cluster> \--version <1.18> \--name <standard-nodes-new> \--node-type <t3.medium> \--nodes <3> \--nodes-min <1> \--nodes-max <4> \--node-ami auto

3. 当上一个命令完成后,使用以下命令验证您的所有节点是否已达到 Ready 状态:

kubectl get nodes

4. 使用以下命令删除原始节点组,同时将 <example> 值替换为您的集群和节点组名称:

eksctl delete nodegroup --cluster <my-cluster> --name <standard-nodes>

使用 AWS 管理控制台 将您的应用程序迁移到新节点组

1. 按照启动自管理 Amazon Linux 节点 (p. 98)中概述的步骤启动新的节点组。2. 完成创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。3. 记录已创建的节点组的 NodeInstanceRole。您需要此值来将新的 Amazon EKS 节点添加到集群。

Note

如果您已将任何其他 IAM 策略附加到旧节点组 IAM 角色(例如为 Kubernetes ClusterAutoscaler 添加权限),则应将这些相同的策略附加到新节点组 IAM 角色以在新组上维护该功能。

4. 更新两个节点组的安全组,以便它们可以相互通信。有关更多信息,请参阅Amazon EKS 安全组注意事项 (p. 176)。

a. 记录两个节点组的安全组 IDs。这显示为 堆栈输出中的 NodeSecurityGroupAWS CloudFormation值。

109

Page 118: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

您可以使用以下 AWS CLI 命令从堆栈名称中获取安全组 IDs。在这些命令中,oldNodes 是您的较早节点堆栈的 AWS CloudFormation 堆栈名称,newNodes 是您要迁移到的堆栈的名称。

oldNodes="<old_node_CFN_stack_name>"newNodes="<new_node_CFN_stack_name>"

oldSecGroup=$(aws cloudformation describe-stack-resources --stack-name $oldNodes \--query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \--output text)newSecGroup=$(aws cloudformation describe-stack-resources --stack-name $newNodes \--query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \--output text)

b. 向每个节点安全组添加入口规则,以便它们接受彼此的流量。

以下 AWS CLI 命令向每个安全组添加入口规则,以允许来自另一个安全组的所有协议上的所有流量。此配置允许每个节点组中的 Pod 在您将工作负载迁移到新组时相互通信。

aws ec2 authorize-security-group-ingress --group-id $oldSecGroup \--source-group $newSecGroup --protocol -1aws ec2 authorize-security-group-ingress --group-id $newSecGroup \--source-group $oldSecGroup --protocol -1

5. 编辑 aws-auth configmap 以在 RBAC 中映射新的节点实例角色。

kubectl edit configmap -n kube-system aws-auth

为新的节点组添加新的 mapRoles 条目。

apiVersion: v1data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes> - rolearn: <arn:aws:iam::111122223333:role/nodes-1-16-NodeInstanceRole-U11V27W93CX5> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes

将 <ARN of instance role (not instance profile)> 代码段替换为您在上一步NodeInstanceRole中记录的 ??? (p. 109) 值,然后保存并关闭该文件以应用更新后的 configmap。

6. 查看节点的状态并等待新节点加入集群并达到 Ready 状态。

kubectl get nodes --watch

7. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署向下扩展到 0 个副本以避免相互冲突的扩展操作。

kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system

110

Page 119: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

8. 使用以下命令对要使用 NoSchedule 删除的每个节点执行 Taint 操作,以便在要替换的节点上不计划或重新计划新的 Pod:

kubectl taint nodes <node_name> key=value:NoSchedule

如果要将节点升级到新的 Kubernetes 版本,则可以使用以下代码段标识特定 Kubernetes 版本(此示例中为 1.16)的所有节点并对其执行 Taint 操作。

K8S_VERSION=<1.16>nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")for node in ${nodes[@]}do echo "Tainting $node" kubectl taint nodes $node key=value:NoScheduledone

9. 确定集群的 DNS 提供商。

kubectl get deployments -l k8s-app=kube-dns -n kube-system

输出(此集群使用的是适用于 DNS 解析的 kube-dns,但您的集群可能会改为返回 coredns):

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE<kube-dns> 1 1 1 1 31m

10. 如果您的当前部署所运行的副本少于 2 个,请将部署扩展到 2 个副本。如果上一个命令输出返回了<kube-dns>,则将 coredns 替换为 。

kubectl scale deployments/<kube-dns> --replicas=2 -n kube-system

11. 使用以下命令耗尽要从集群中删除的每个节点:

kubectl drain <node_name> --ignore-daemonsets --delete-local-data

如果要将节点升级到新的 Kubernetes 版本,则可以使用以下代码段标识并耗尽特定 Kubernetes 版本(在本例中为 1.16)的所有节点。

K8S_VERSION=<1.16>nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")for node in ${nodes[@]}do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-local-datadone

12. 在旧节点耗尽后,请撤销您之前授权的安全组入口规则,然后删除 AWS CloudFormation 堆栈以终止实例。

Note

如果您已将任何其他 IAM 策略附加到旧节点组 IAM 角色(例如,为 Kubernetes ClusterAutoscaler 添加权限),则必须先将这些附加策略与该角色分离,然后才能删除 AWSCloudFormation 堆栈。

a. 撤销您之前为节点安全组创建的入口规则。在这些命令中,oldNodes 是您的较旧节点堆栈的 AWSCloudFormation 堆栈名称,newNodes 是您要迁移到的堆栈的名称。

111

Page 120: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

oldNodes="<old_node_CFN_stack_name>"newNodes="<new_node_CFN_stack_name>"

oldSecGroup=$(aws cloudformation describe-stack-resources --stack-name $oldNodes \--query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \--output text)newSecGroup=$(aws cloudformation describe-stack-resources --stack-name $newNodes \--query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \--output text)aws ec2 revoke-security-group-ingress --group-id $oldSecGroup \--source-group $newSecGroup --protocol -1aws ec2 revoke-security-group-ingress --group-id $newSecGroup \--source-group $oldSecGroup --protocol -1

b. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。c. 选择您的旧节点堆栈。d. 选择 Actions (操作),然后选择 Delete stack (删除堆栈)。

13. 编辑 aws-auth configmap 以从 RBAC 中删除旧节点实例角色。

kubectl edit configmap -n kube-system aws-auth

删除旧节点组的 mapRoles 条目。

apiVersion: v1data: mapRoles: | - rolearn: <arn:aws:iam::111122223333:role/nodes-1-16-NodeInstanceRole-W70725MZQFF8> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <arn:aws:iam::111122223333:role/nodes-1-15-NodeInstanceRole-U11V27W93CX5> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes>

保存并关闭该文件以应用更新后的 configmap。14. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署缩减为 1 个副本。

Note

您还必须适当地标记新的 Auto Scaling 组(例如,k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<YOUR CLUSTER NAME>)并将您的 ClusterAutoscaler 部署的命令更新为指向新标记的 Auto Scaling 组。有关更多信息,请参阅 AWS 上的 Cluster Autoscaler。

kubectl scale deployments/cluster-autoscaler --replicas=1 -n kube-system

15. (可选)确认您使用的是最新版本的 Kubernetes 的 Amazon VPC CNI 插件。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅适用于 Kubernetes 的 Amazon VPC CNI 插件升级 (p. 201)。

16. 如果您的集群使用适用于 DNS 解析的 kube-dns(请参阅上一步 (p. 111)),请将 kube-dns 部署缩减为一个副本。

112

Page 121: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

kubectl scale deployments/kube-dns --replicas=1 -n kube-system

更新现有的自行管理节点组本主题帮助您使用新 AMI 更新现有 AWS CloudFormation 自管理节点堆栈。在集群更新后,您可以使用此过程将节点更新到新版本的 Kubernetes,也可以更新到现有 Kubernetes 版本的最新 Amazon EKS 优化 AMI。

Important

本主题介绍自管理节点的节点更新。如果您正在使用 托管节点组 (p. 86),请参阅更新托管节点组 (p. 91)。

最新的默认 Amazon EKS 节点 AWS CloudFormation 模板配置为在删除旧 AMI 之前使用新 AMI 在集群中启动实例,一次一个。此配置可确保您在滚动更新期间始终具有集群中 Auto Scaling 组所需的活动实例计数。

Note

使用 eksctl 创建的节点组不支持此方法。 如果您使用 eksctl 创建了集群或节点组,请参阅迁移到新的节点组 (p. 108)。

更新现有节点组

1. 确定集群的 DNS 提供商。

kubectl get deployments -l k8s-app=kube-dns -n kube-system

输出(此集群使用的是适用于 DNS 解析的 kube-dns,但您的集群可能会改为返回 coredns):

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE<kube-dns> 1 1 1 1 31m

2. 如果您的当前部署所运行的副本少于 2 个,请将部署扩展到 2 个副本。如果您的上一个命令输出返回了该项,请用 coredns 替换 kube-dns。

kubectl scale deployments/<kube-dns> --replicas=2 -n kube-system

3. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署向下扩展到 0 个副本以避免相互冲突的扩展操作。

kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system

4. 确定当前节点组的实例类型和所需的实例计数。稍后,您在更新该组的 AWS CloudFormation 模板时将输入这些值。

a. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。b. 在左侧导航窗格中选择 Launch Configurations (启动配置),然后记下现有节点启动配置的实例类型。c. 在左侧导航窗格中选择 Auto Scaling 组,并记下现有节点 组的所需Auto Scaling实例计数。

5. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。6. 选择节点组堆栈,然后选择 Update (更新)。7. 选择替换当前模板,然后选择 Amazon S3 URL。8. 对于 Amazon S3 URL,将与集群所在的区域对应的 URL 粘贴到文本区域中,以确保您使用的是节点 AWS

CloudFormation 模板的最新版本,然后选择 Next (下一步):

• 和 中国(北京) 之外的所有区域中国 (宁夏)

113

Page 122: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南更新

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-nodegroup.yaml

• 中国(北京) 和 中国 (宁夏)

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-nodegroup.yaml

9. 在 Specify stack details (指定堆栈详细信息) 页面上,填写以下参数,然后选择 Next (下一步):

• NodeAutoScalingGroupDesiredCapacity – 输入您在上一步 (p. 113)中记录的所需实例计数,或输入更新堆栈时要扩展到的新的所需节点数。

• NodeAutoScalingGroupMaxSize – 输入节点 Auto Scaling 组可扩展到的最大节点数。此值必须至少大于所需容量的一个节点,以便您在更新期间对节点执行滚动更新而不会减少节点数。

• NodeInstanceType- 选择您在上一步 (p. 113)中记录的实例类型,或者为节点选择其他实例类型。每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),而每个 ENI 支持最大数量的 IP 地址。由于每个工作线程节点和 Pod 都分配有自己的 IP 地址,因此必须选择一种实例类型,以支持您希望在每个工作线程节点上运行的最大数量的 Pod。有关实例类型支持的 ENI 和 IP 地址数量的列表,请参阅每种实例类型、每个网络接口的 IP 地址。例如,对于工作线程节点和 Pod,m5.large实例类型最多支持 30 个 IP 地址。某些实例类型可能并非在所有区域都可用。

Note

最新版本的 Kubernetes 的 Amazon VPC CNI 插件支持的实例类型在此处显示。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅适用于 Kubernetes的 Amazon VPC CNI 插件升级 (p. 201)。

Important

某些实例类型可能并非在所有区域都可用。• NodeImageIdSSMParam – 要更新到的 AMI ID 的 参数。Amazon EC2 Systems Manager以下值使用

适用于 Kubernetes 版本 Amazon EKS 的最新 1.18 优化 AMI。

/aws/service/eks/optimized-ami/<1.18>/<amazon-linux-2>/recommended/image_id

您可以将 1.18 替换为任何受支持的 Kubernetes 版本 (p. 63)。如果要使用经 Amazon EKS 优化的加速 AMI,请将 <amazon-linux-2> 替换为 <amazon-linux-2-gpu>。

Note

使用 Amazon EC2 Systems Manager 参数可让您在将来更新节点,而无需查找和指定 AMIID。如果您的 AWS CloudFormation 堆栈使用此值,则任何堆栈更新将始终为您指定的Kubernetes 版本启动最新推荐的 Amazon EKS 优化 AMI,即使您不更改模板中的任何值。

• NodeImageId – 要使用您自己的自定义 AMI,请输入要使用的 AMI 的 ID。

Important

此值覆盖为 NodeImageIdSSMParam 指定的任何值。 如果要使用 NodeImageIdSSMParam值,请确保 NodeImageId 的值为空。

10. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。11. 在 Review (审核) 页面上,审核您的信息,确认堆栈可创建 IAM 资源,然后选择 Update stack (更新 堆

栈)。

Note

集群中每个节点的更新需要几分钟时间。等待所有节点更新完成,然后再执行后续步骤。12. 如果您的集群的 DNS 提供商是 kube-dns,请将 kube-dns 部署缩减为 1 个副本。

114

Page 123: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南AWS Fargate

kubectl scale deployments/kube-dns --replicas=1 -n kube-system

13. (可选)如果您使用的是 Kubernetes Cluster Autoscaler,请将部署缩减为所需数量的副本。

kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system

14. (可选)确认您使用的是最新版本的 Kubernetes 的 Amazon VPC CNI 插件。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅适用于 Kubernetes 的 Amazon VPC CNI 插件升级 (p. 201)。

AWS Fargate本主题讨论如何使用 Amazon EKS 在 AWS Fargate 上运行 Kubernetes Pod。

AWS Fargate 是一种为容器按需提供大小合适的计算容量的技术。使用 AWS Fargate,您不必再预置、配置或扩展虚拟机组即可运行容器。这样一来,您就无需再选择服务器类型、确定扩展节点组的时间和优化集群打包。

您可以控制哪些 Pod 在 Fargate 上启动,以及它们如何使用定义为 Amazon EKS 集群的一部分的 Fargate配置文件 (p. 121)运行。

Amazon EKS 使用由 AWS 构建的控制器(使用 Kubernetes 提供的上游可扩展模型)将 Kubernetes 与AWS Fargate 集成。这些控制器作为 Amazon EKS 托管 Kubernetes 控制层面的一部分运行,负责将本机Kubernetes Pod 安排到 Fargate 上。除了若干转换和验证准入控制器外,Fargate 控制器还包括一个与默认Kubernetes 计划程序一起运行的新计划程序。当您启动满足 Fargate 上的运行条件的 Pod 时,集群中运行的 Fargate 控制器会识别、更新 Pod 并将其安排到 Fargate 上。

Fargate 上运行的每个 Pod 都具有自己的隔离边界,不与其他 Pod 共享底层内核、CPU 资源、内存资源或弹性网络接口。

本主题介绍在 Fargate 上运行的 Pod 的不同组件,还列出了将 Fargate 与 Amazon EKS 结合使用时的特别注意事项。

AWS Fargate 和 Amazon EKS 目前在以下区域中可用:

区域名称 Region

美国东部(俄亥俄州) us-east-2

美国东部(弗吉尼亚北部) us-east-1

美国西部(加利福尼亚北部) us-west-1

美国西部(俄勒冈) us-west-2

亚太地区(香港) ap-east-1

亚太地区(孟买) ap-south-1

亚太区域(首尔) ap-northeast-2

亚太区域(新加坡) ap-southeast-1

亚太区域(悉尼) ap-southeast-2

亚太区域(东京) ap-northeast-1 (仅限 apne1-az1、apne1-az2 和apne1-az4)

115

Page 124: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 注意事项

区域名称 Region

加拿大 (中部) ca-central-1

欧洲(法兰克福) eu-central-1

欧洲(爱尔兰) eu-west-1

欧洲(伦敦) eu-west-2

欧洲(巴黎) eu-west-3

欧洲(斯德哥尔摩) eu-north-1

南美洲(圣保罗) sa-east-1

中东(巴林) me-south-1

AWS Fargate 注意事项以下是使用 Amazon EKS 上的 Fargate 时要考虑的一些事项。

• 传统负载均衡器 和 网络负载均衡器 只能与 IP 目标一起使用。您还可以将 AWS Application LoadBalancer 与 Fargate 结合使用。有关更多信息,请参阅 the section called “负载均衡器 – IP 目标” (p. 223)和the section called “应用程序负载均衡” (p. 227)。

• 在对 Pod 进行安排时,它们必须与 Fargate 配置文件匹配,才能在 Fargate 上运行。与 Fargate 配置文件不匹配的 Pod 可能会停滞为 Pending。 如果存在匹配的 Fargate 配置文件,您可以删除已创建的待处理Pod,以将它们重新安排到 Fargate。

• Fargate 上不支持守护程序集。如果您的应用程序需要守护程序,则应将该守护程序重新配置为在您的Pod 中作为附加容器运行。

• Fargate 上不支持特权容器。• 在 Fargate 上运行的 Pod 无法在 Pod 清单中指定 HostPort 或 HostNetwork。• GPUs 目前在 Fargate 上不可用。• 您不能将 Pod 的安全组 (p. 181) 与 Fargate 上运行的 Pod 一起使用。• 在 Fargate 上运行的 Pod 仅在私有子网上受支持(对 AWS 服务具有 NAT 网关访问权限,但没有到

Internet 网关的直接路由),因此您的集群的 VPC 必须具有可用的私有子网。对于没有出站 Internet 访问的集群,请参阅私有集群 (p. 81)。

• 您可以使用 Vertical Pod Autoscaler (p. 213) 最初调整 Fargate Pod 的 CPU 和内存大小,然后使用Horizontal Pod Autoscaler (p. 218) 扩展这些 Pod。如果您希望 Vertical Pod Autoscaler 自动重新部署具有更大的 CPU 和内存组合的 Pod 到 Fargate,请将 Vertical Pod Autoscaler 的模式设置为 Auto 或Recreate 以确保功能正常运行。有关更多信息,请参阅 上的 Vertical Pod AutoscalerGitHub 文档。

• 必须为 VPC 启用 DNS 解析和 DNS 主机名。有关详细信息,请参阅查看和更新您的 VPC 的 DNS 支持。• Fargate 在 VM 隔离的环境中运行每个 Pod,不与其他 Pod 共享资源。但是,由于 Kubernetes 是单租户编排

工具,Fargate 无法保证 Pod 级的安全隔离。您应该使用单独的 Amazon EKS 集群运行需要完全安全隔离的敏感工作负载或不可靠的工作负载。

• Fargate 配置文件支持从 VPC 辅助 CIDR 块指定子网。您可能需要指定辅助 CIDR 块,因为子网中可用的IP 地址数量有限。因此,可在集群中创建的 Pod 数量受到限制。对 Pod 使用不同的子网将允许您增加可用 IP 地址的数量。有关更多信息,请参阅向 VPC 添加 IPv4 CIDR 块。

通过 Amazon EKS 开始使用 AWS Fargate本主题可帮助您开始在 Amazon EKS 集群的 AWS Fargate 上运行 Pod。

116

Page 125: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 入门

Note

Amazon EKS 的 AWS Fargate 目前仅在以下区域可用:

区域名称 Region

美国东部(俄亥俄州) us-east-2

美国东部(弗吉尼亚北部) us-east-1

美国西部(加利福尼亚北部) us-west-1

美国西部(俄勒冈) us-west-2

亚太地区(香港) ap-east-1

亚太地区(孟买) ap-south-1

亚太区域(首尔) ap-northeast-2

亚太区域(新加坡) ap-southeast-1

亚太区域(悉尼) ap-southeast-2

亚太区域(东京) ap-northeast-1 (仅限 apne1-az1、apne1-az2 和 apne1-az4)

加拿大 (中部) ca-central-1

欧洲(法兰克福) eu-central-1

欧洲(爱尔兰) eu-west-1

欧洲(伦敦) eu-west-2

欧洲(巴黎) eu-west-3

欧洲(斯德哥尔摩) eu-north-1

南美洲(圣保罗) sa-east-1

中东(巴林) me-south-1

如果您使用 CIDR 块限制对集群的公有终端节点的访问,建议您还启用私有终端节点访问,以便 FargatePod 可以与集群进行通信。在未启用私有终端节点的情况下,您指定用于公有访问的 CIDR 块必须包含来自VPC 的出口源。有关更多信息,请参阅Amazon EKS 集群终端节点访问控制 (p. 48)。

(可选)创建集群从 Kubernetes 版本 1.14 和Fargate平台版本Amazon EKS 开始,在 (p. 63) 集群上支持在 eks.5 上运行的Pod。 现有集群可以更新到版本 1.14 或更高版本以利用此功能。有关更多信息,请参阅更新 Amazon EKS集群 Kubernetes 版本 (p. 37)。

如果您还没有支持 Fargate 的 Amazon EKS 集群,可以使用下面的 eksctl 命令进行创建。Note

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

117

Page 126: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 入门

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

eksctl create cluster --name <my-cluster> --version <1.18> --fargate

在上述命令中添加 --fargate 选项将创建没有节点组的集群。不过,eksctl 会创建 Pod 执行角色、default 和 kube-system 命名空间的 Fargate 配置文件,并对 coredns 部署进行修补,使其可以在Fargate 上运行。

确保现有节点可以与 Fargate Pod 进行通信如果您使用的是没有节点的新集群或只有托管节点组 (p. 86)的集群,则可以跳至 创建 Fargate Pod 执行角色 (p. 118)。

如果您使用的是已具有关联节点的现有集群,则需要确保这些节点上的 Pod 可以与 Fargate 上运行的 Pod 自由通信。在 Fargate 上运行的 Pod 会自动配置为使用与其关联的集群的群集安全组。您必须确保集群中的任何现有节点都可以向集群安全组发送流量以及从中接收流量。托管节点组 (p. 86) 也自动配置为使用集群安全组,因此您无需修改或检查它们是否具有此兼容性。

对于使用 eksctl 或 Amazon EKS 托管 AWS CloudFormation 模板创建的现有节点组,您可以手动将集群安全组添加到节点,也可以修改节点组的 Auto Scaling 组启动模板以将集群安全组附加到实例。有关更多信息,请参阅 https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SG_Changing_Group_Membership 中的更改实例的安全组Amazon VPC 用户指南。

您可以在 AWS 管理控制台 中集群的 Networking (联网) 部分下,或使用以下 AWS CLI 命令检查您集群的集群安全组:

aws eks describe-cluster --name <cluster_name> --query cluster.resourcesVpcConfig.clusterSecurityGroupId

创建 Fargate Pod 执行角色当您的集群在 AWS Fargate 上创建 Pod 时,Pod 需要代表您调用 AWS APIs,以执行从 Amazon ECR 拉取容器映像等操作。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

Note

如果您是使用 --fargate 选项通过 eksctl 创建了集群,那么您的集群已具有 Pod 执行角色,您可以直接跳至 为您的集群创建 Fargate 配置文件 (p. 119)。同样,如果您使用 eksctl 创建Fargate 配置文件,eksctl 会创建您的 Pod 执行角色(如果尚不存在)。

创建 Fargate 配置文件时,必须指定要用于 Pod 的 Pod 执行角色。此角色将被添加到集群的 Kubernetes基于角色的访问控制 (RBAC) 以进行授权。这允许在 Fargate 基础设施上运行的 kubelet 注册到您的 Amazon EKS 集群,以便它可以作为节点显示在您的集群中。有关更多信息,请参阅Pod 执行角色 (p. 283)。

使用 AWS Fargate 创建 AWS 管理控制台 Pod 执行角色

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从服务列表中选择 EKS,为您的使用案例选择 EKS - Fargate pod,然后选择 Next: (下一步:)。权限。4. 选择 Next: (下一步:)。 标签。5. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南

118

Page 127: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 入门

6. 选择 Next: (下一步:)。 审核。7. 对于 Role name (角色名称),输入您的角色的唯一名称,如

AmazonEKSFargatePodExecutionRole,然后选择 Create role (创建角色)。

为您的集群创建 Fargate 配置文件您必须先定义一个 Fargate 配置文件,以便指定 Fargate 启动时哪些 Pod 应使用它们,然后才能安排在集群中的 Fargate 上运行的 Pod。有关更多信息,请参阅AWS Fargate 配置文件 (p. 121)。

Note

如果您是使用 --fargate 选项通过 eksctl 创建的集群,那么已经为您的集群创建了 Fargate 配置文件,而且其包含 kube-system 和 default 命名空间中所有 Pod 的选择器。使用以下程序为您想要用于 Fargate 的任何其他命名空间创建 Fargate 配置文件。

您可以使用 Fargateeksctl 或 (p. 119)AWS 管理控制台 创建 (p. 119) 配置文件。

使用 eksctl 为集群创建 Fargate 配置文件

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

• 使用以下 Fargate 命令创建 eksctl 配置文件,同时将 <variable text> 替换为您自己的值。您必须指定命名空间,但不需要提供标签选项。

eksctl create fargateprofile --cluster <cluster_name> --name <fargate_profile_name> --namespace <kubernetes_namespace> --labels <key=value>

使用 AWS 管理控制台 为集群创建 Fargate 配置文件

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择要为其创建 Fargate 配置文件的集群。3. 在 Fargate profiles (Fargate 配置文件) 下,选择 Add Fargate profile (添加 Fargate 配置文件)。4. 在 Configure Fargate profile (配置 Fargate 配置文件) 页面上,输入以下信息并选择 下一步 (Next)。

a. 在 Name (名称) 下,为 Fargate 配置文件输入唯一名称。b. 对于 Pod execution role (Pod 执行角色),选择要用于您的 Fargate 配置文件的 Pod 执行角色。将

仅显示具有 eks-fargate-pods.amazonaws.com 服务委托人的 IAM 角色。如果您未看到此处列出的任何角色,则必须创建一个角色。有关更多信息,请参阅Pod 执行角色 (p. 283)。

c. 对于 Subnets (子网),选择要用于 Pod 的子网。默认情况下,集群 VPC 中的所有子网都处于选中状态。在 Fargate 上运行的 Pod 仅支持私有子网;您必须取消选择任何公有子网。

d. 对于 Tags (标签),您可以自行选择是否为 Fargate 配置文件添加标签。这些标签不会传播到与配置文件关联的其他资源,如 Pod。

5. 在 Configure pods selection (配置 Pod 选择) 页面上,输入以下信息并选择 Next (下一步)。

a. 对于 Namespace (命名空间),输入与 Pod 匹配的命名空间,如 kube-system 或 default。b. (可选)将 Kubernetes 标签添加到指定命名空间中的 Pod 必须与选择器匹配的选择器中。例如,

您可以将标签 infrastructure: fargate 添加到选择器中,以便只有指定命名空间中也具有infrastructure: fargate Kubernetes 标签的 Pod 与选择器匹配。

6. 在Review and create (查看和创建) 页面上,查看 Fargate 配置文件的信息,然后选择 Create (创建)。

119

Page 128: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 入门

(可选)更新CoreDNS默认情况下,CoreDNS 配置为在 Amazon EC2 集群上的 Amazon EKS 基础设施上运行。如果您仅 在集群中的 Fargate 上运行 Pod,则需要修改 CoreDNS 部署以删除 eks.amazonaws.com/compute-type : ec2注释。您还需要创建一个 Fargate 配置文件来定位 CoreDNS Pod。下面的 Fargate 配置文件 JSON 文件将执行此操作。

Note

如果您是使用 --fargate 选项通过 eksctl 创建了集群,那么 coredns 已经过修补以在 Fargate上运行,您可以直接跳至 后续步骤 (p. 120)。

{ "fargateProfileName": "coredns", "clusterName": "<dev>", "podExecutionRoleArn": "<arn:aws:iam::111122223333:role/AmazonEKSFargatePodExecutionRole>", "subnets": [ "subnet-<0b64dd020cdff3864>", "subnet-<00b03756df55e2b87>", "subnet-<0418fcb68ed294abf>" ], "selectors": [ { "namespace": "kube-system", "labels": { "k8s-app": "kube-dns" } } ]}

您可以使用下面的 AWS CLI 命令将此 Fargate 配置文件应用于集群。首先,创建一个名为 coredns.json的文件,然后将上一步中的 JSON 文件粘贴到该文件中,并将 <variable text> 替换为您自己的集群值。

aws eks create-fargate-profile --cli-input-json file://coredns.json

然后,使用以下 kubectl 命令从 eks.amazonaws.com/compute-type : ec2 Pod 中删除 CoreDNS 注释。

kubectl patch deployment coredns -n kube-system --type json \-p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'

后续步骤• 您可以开始使用以下工作流迁移现有应用程序来在 Fargate 上运行这些应用程序。

1. 创建与您的应用程序的 Kubernetes 命名空间和 Kubernetes 标签匹配的 Fargate 配置文件 (p. 122)。2. 删除并重新创建所有现有的 Pod,以便可以在 Fargate 上安排它们。例如,以下命令触发 coredns 部

署的推广。您可以修改命名空间和部署类型以更新特定 Pod。

kubectl rollout restart -n <kube-system> <deployment coredns>

• 部署 上的应用程序负载均衡Amazon EKS (p. 227)(版本 v1.1.4 或更高版本),以允许在 Fargate 上运行的 Pod 的入口对象。

• 您可以使用 Vertical Pod Autoscaler (p. 213) 最初调整 Fargate Pod 的 CPU 和内存大小,然后使用Horizontal Pod Autoscaler (p. 218) 扩展这些 Pod。如果您希望 Vertical Pod Autoscaler 自动使用更

120

Page 129: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 配置文件

大的 CPU 和内存组合将 Pod 重新部署到 Fargate,请将 Vertical Pod Autoscaler 的模式设置为 Auto 或Recreate 以确保功能正常运行。有关更多信息,请参阅 上的 Vertical Pod AutoscalerGitHub 文档。

AWS Fargate 配置文件您必须先定义至少一个 Fargate 配置文件,以指定 Fargate 启动时哪些 Pod 应使用它们,然后才能在集群中的 Fargate 上安排 Pod。

Fargate 配置文件允许管理员声明在 Fargate 上运行哪些 Pod。此声明通过配置文件的选择器完成。每个配置文件最多可以有五个包含命名空间和可选标签的选择器。您必须为每个选择器定义一个命名空间。标签字段由多个可选键值对组成。与选择器匹配的 Pod(通过匹配选择器的命名空间和选择器中指定的所有标签)将被安排到 Fargate 上。如果定义了没有任何标签的命名空间选择器,Amazon EKS 会尝试使用配置文件将在该命名空间中运行的所有 Pod 安排到 Fargate。如果待安排的 Pod 与 Fargate 配置文件中的任何一个选择器匹配,该 Pod 将在 Fargate 上安排。

如果某个 Pod 匹配多个 Fargate 配置文件,Amazon EKS 将随机选择其中一个。在这种情况下,您可以通过将以下 Kubernetes 标签添加到 Pod 规范来指定 Pod 应使用哪个配置文件: eks.amazonaws.com/fargate-profile: <profile_name>。 但是,Pod 仍必须匹配该配置文件中的选择器才能被安排到Fargate 上。

创建 Fargate 配置文件时,必须使用配置文件为在 Fargate 上运行的 Pod 指定 Pod 执行角色。此角色将被添加到集群的 Kubernetes 基于角色的访问控制 (RBAC) 中以进行授权,以使在 Fargate 基础设施上运行的kubelet 可以向 Amazon EKS 集群注册,并作为节点显示在集群中。Pod 执行角色还提供对 Fargate 基础设施的 IAM 权限,以允许对 Amazon ECR 映像存储库进行读取访问。有关更多信息,请参阅Pod 执行角色 (p. 283)。

Fargate 配置文件是不可变的。不过,您可以创建新的更新配置文件来替换现有配置文件,然后在更新配置文件创建完成后删除原始配置文件。

Note

删除配置文件后,使用 Fargate 配置文件运行的任何 Pod 都将停止并进入待处理状态。

如果集群中有任何 Fargate 配置文件处于 DELETING 状态,您必须等待该 Fargate 配置文件删除完毕,然后才能在该集群中创建其他配置文件。

Fargate 配置文件组件Fargate 配置文件中包含以下组件。

{ "fargateProfileName": "", "clusterName": "", "podExecutionRoleArn": "", "subnets": [ "" ], "selectors": [ { "namespace": "", "labels": { "KeyName": "" } } ], "clientRequestToken": "", "tags": { "KeyName": "" }}

121

Page 130: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate 配置文件

Pod 执行角色

当您的集群在 AWS Fargate 上创建 Pod 时,Pod 需要代表您调用 AWS APIs,例如,从 Amazon ECR 拉取容器映像。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

创建 Fargate 配置文件时,必须指定要用于 Pod 的 Pod 执行角色。此角色将被添加到集群的Kubernetes 基于角色的访问控制 (RBAC) 中以进行授权,以使在 Fargate 基础设施上运行的 kubelet可以向 Amazon EKS 集群注册,并作为节点显示在集群中。有关更多信息,请参阅Pod 执行角色 (p. 283)。

Subnets (子网)

在该配置文件中启动 Pod 的子网的 IDs。目前,在 Fargate 上运行的 Pod 不会被分配公有 IP 地址,因此此参数仅接受私有子网(没有到互联网网关的直接路由)。

选择器

要匹配 Pod 以使用此 Fargate 配置文件的选择器。每个选择器都必须有一个关联的命名空间。您还可以选择为命名空间指定标签。最多可以在 Fargate 配置文件中指定五个选择器。一个 Pod 只需匹配一个选择器即可使用 Fargate 配置文件运行。Namespace

您必须为选择器指定命名空间。选择器只匹配在此命名空间中创建的 Pod,不过,您可以创建多个选择器来定位多个命名空间。

标签

您可以选择指定 Kubernetes 标签来匹配选择器。选择器只匹配具有在选择器中指定的所有标签的Pod。

创建 Fargate 配置文件本主题可帮助您创建 Fargate 配置文件。您的集群必须支持 Fargate(从 Kubernetes 版本 1.14 和平台版本 (p. 63) eks.5 开始)。您还必须已经创建了要用于 Fargate 配置文件的 Pod 执行角色。有关更多信息,请参阅Pod 执行角色 (p. 283)。在 Fargate 上运行的 Pod 仅在私有子网上受支持(对 AWS 服务具有 NAT网关访问权限,但没有到 Internet 网关的直接路由),因此您的集群的 VPC 必须具有可用的私有子网。您可以使用 eksctl (p. 122) 或 AWS 管理控制台 (p. 122) 创建配置文件。

使用 eksctl 为集群创建 Fargate 配置文件

此过程需要 eksctl 版本 0.31.0-rc.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。

• 使用以下 Fargate 命令创建 eksctl 配置文件,同时将 <variable text> 替换为您自己的值。您必须指定命名空间,但不需要提供标签选项。

eksctl create fargateprofile --cluster <cluster_name> --name <fargate_profile_name> --namespace <kubernetes_namespace> --labels <key=value>

使用 AWS 管理控制台 为集群创建 Fargate 配置文件

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择要为其创建 Fargate 配置文件的集群。3. 在 Fargate profiles (Fargate 配置文件) 下,选择 Add Fargate profile (添加 Fargate 配置文件)。4. 在 Configure Fargate profile (配置 Fargate 配置文件) 页面上,输入以下信息并选择 下一步 (Next)。

122

Page 131: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Fargate Pod 配置

a. 在 Name (名称) 下,为 Fargate 配置文件输入唯一名称。b. 对于 Pod execution role (Pod 执行角色),选择要用于您的 Fargate 配置文件的 Pod 执行角色。将

仅显示具有 eks-fargate-pods.amazonaws.com 服务委托人的 IAM 角色。如果您未看到此处列出的任何角色,则必须创建一个角色。有关更多信息,请参阅Pod 执行角色 (p. 283)。

c. 对于 Subnets (子网),选择要用于 Pod 的子网。默认情况下,集群 VPC 中的所有子网都处于选中状态。在 Fargate 上运行的 Pod 仅支持私有子网;您必须取消选择任何公有子网。

d. 对于 Tags (标签),您可以自行选择是否为 Fargate 配置文件添加标签。这些标签不会传播到与配置文件关联的其他资源,如 Pod。

5. 在 Configure pods selection (配置 Pod 选择) 页面上,输入以下信息并选择 Next (下一步)。

a. 对于 Namespace (命名空间),输入与 Pod 匹配的命名空间,如 kube-system 或 default。b. (可选)将 Kubernetes 标签添加到指定命名空间中的 Pod 必须与选择器匹配的选择器中。例如,

您可以将标签 infrastructure: fargate 添加到选择器中,以便只有指定命名空间中也具有infrastructure: fargate Kubernetes 标签的 Pod 与选择器匹配。

6. 在Review and create (查看和创建) 页面上,查看 Fargate 配置文件的信息,然后选择 Create (创建)。

删除 Fargate 配置文件本主题可帮助您删除 Fargate 配置文件。

当您删除 Fargate 配置文件时,使用该配置文件安排到 Fargate 的所有 Pod 都将被删除。如果这些 Pod 与另一个 Fargate 配置文件匹配,将使用该配置文件在 Fargate 上安排它们。如果它们不再匹配任何 Fargate配置文件,则不会被安排到 Fargate,并仍可能处于待处理状态。

集群中一次只能有一个 Fargate 配置文件处于 DELETING 状态。您必须等待 Fargate 配置文件完成删除,然后才能删除该集群中的任何其他配置文件。

从集群中删除 Fargate 配置文件

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择要从中删除 Fargate 配置文件的集群。3. 选择要删除的 Fargate 配置文件,然后选择 Delete (删除)。4. 在 Delete <cluster_name> (删除 <集群名称>) 页面上,键入集群的名称,然后选择 Confirm (确认) 以删除

集群。

Fargate Pod 配置本节介绍在 AWS Fargate 上运行 Kubernetes Pod 的一些唯一 Pod 配置的详细信息。

Pod CPU 和内存Kubernetes 允许您定义请求、最低 vCPU 量以及分配给 Pod 中每个容器的内存资源。Pod 由 Kubernetes 安排,以确保至少每个 Pod 的请求资源可用于计算资源。有关更多信息,请参阅 Kubernetes 文档中的管理容器的计算资源。

在 Fargate 上安排 Pod 后,Pod 规格中的 vCPU 和内存预留将确定为 Pod 配置的 CPU 和内存量。

• 超出所有 Init 容器的最大请求用于确定 Init 请求 vCPU 和内存要求。• 将所有长时间运行的容器的请求相加来确定长时间运行的请求的 vCPU 和内存要求。• 然后为要用于 Pod 的 vCPU 和内存请求选择上述两个值中较大的值。• Fargate 会为所需 Kubernetes 组件(kubelet、kube-proxy 和 containerd)的每个 Pod 的内存预留

增加 256 MB。

123

Page 132: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南用量指标

Fargate 向上舍入到下面显示的最接近 vCPU 与内存请求总和的计算配置,以确保 Pod 始终拥有运行所需的资源。

如果未指定 vCPU 和内存组合,则使用最小的可用组合(.25 vCPU 和 0.5 GB 内存)。

下表显示了 Fargate 上运行的 Pod 可以使用的 vCPU 和内存组合。

vCPU 值 内存值

.25 vCPU 0.5GB、1GB、2GB

.5 vCPU 1GB、2GB、3GB、4GB

1 vCPU 2GB、3GB、4GB、5GB、6GB、7GB、8GB

2 vCPU 4GB 到 16GB 之间(以 1GB 为增量)

4 vCPU 8GB 到 30GB 之间(以 1GB 为增量)

有关这些计算配置的定价信息,请参阅 AWS Fargate 定价。

Fargate 存储预置后,Fargate 上运行的每个 Pod 将接收 20 GB 的容器映像层存储。Pod 存储是短暂存储。Pod 停止后,该存储将被删除。对于 2020 年 5 月 28 日或之后在 Fargate 上启动的新 pod,默认情况下已启用短暂存储卷加密。使用 AWS Fargate托管密钥通过 AES-256 加密算法对短暂 pod 存储进行加密。

Note

Fargate 上运行的 Amazon EKS Pod 的可用存储空间不到 20GB,因为 kubelet 以及 Pod 内部加载的其他 Kubernetes 模块占用了一些空间。

AWS Fargate 使用情况指标您可以使用 CloudWatch 使用情况指标提供对资源账户使用情况的可见性。使用这些指标在 CloudWatch 图表和控制面板上可视化当前服务用量。

AWS Fargate 用量指标与 AWS 服务配额对应。您可以配置警报,以在用量接近服务配额时向您发出警报。有关 Fargate 服务配额的更多信息,请参阅Amazon EKS 服务配额 (p. 265)。

AWS Fargate 在 AWS/Usage 命名空间中发布以下指标。

指标 Description

ResourceCount 在您的账户上运行的指定资源的总数。资源由与指标关联的维度定义。

以下维度用于优化由 AWS Fargate 发布的用量指标。

维度 Description

Service 包含该资源的 AWS 服务的名称。对于 AWS Fargate 用量指标,此维度的值为 Fargate。

Type 正在报告的实体的类型。目前,AWS Fargate 用量指标的唯一有效值为 Resource。

124

Page 133: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS已优化AMIs

维度 Description

Resource 正在运行的资源的类型。

目前,AWS Fargate 返回有关您的 Fargate 按需使用情况的信息。按需使用的资源值为 Fargate。OnDemand

Note

Fargate 按需使用使用量使用 Amazon EKS 组合使用Fargate 的 Amazon ECS Pod,使用 Fargate 启动类型的Amazon ECS 任务以及使用 FARGATE 容量提供程序的 任务。

Class 要跟踪资源的级别。目前,AWS Fargate 不使用类维度。

创建 CloudWatch 警报以监控 Fargate 资源使用情况指标AWS Fargate 提供了与 CloudWatch 按需资源的 AWS 服务配额对应的 Fargate 使用情况指标。在 ServiceQuotas 控制台中,您可以在图表上可视化您的使用情况,并配置警报以便在您的使用情况接近服务配额时提醒您。有关更多信息,请参阅AWS Fargate 使用情况指标 (p. 124)。

可以使用以下步骤根据 CloudWatch 资源使用指标创建 Fargate 警报。

根据您的 Fargate 使用情况配额创建警报 (AWS 管理控制台)

1. 在 https://console.aws.amazon.com/servicequotas/ 上打开 Service Quotas 控制台。2. 在导航窗格中,选择 AWS services (AWS 服务)。3. 从 AWS services (AWS 服务) 列表中,搜索并选择 AWS Fargate。4. 在 Service quotas (服务配额) 列表中,选择要为其创建警报的 Fargate 使用情况配额。5. 在 Amazon CloudWatch Events 警报部分中,选择 Create (创建)。6. 对于 Alarm threshold (警报阈值),选择要设置为警报值的适用配额值的百分比。7. 对于 Alarm name (警报名称),输入警报名称,然后选择 Create (创建)。

Amazon EKS已优化AMIs您可以使用预构建的 Amazon EKS 优化的 Amazon 系统映像 (AMI) 或您自己的自定义 AMIs 部署节点。 有关每种类型的 Amazon EKS 优化 AMI 的更多信息,请参阅以下主题之一。有关创建您自己的自定义 AMI 的更多信息,请参阅Amazon EKS 优化 Amazon Linux AMI构建脚本 (p. 140)。

主题• Amazon EKS已优化Amazon LinuxAMIs (p. 125)• Amazon EKS优化的 Ubuntu LinuxAMIs (p. 141)• Amazon EKS优化的 TottlerocketAMIs (p. 141)• Amazon EKS优化的 WindowsAMIs (p. 144)

Amazon EKS已优化Amazon LinuxAMIs经 Amazon EKS 优化的 Amazon Linux AMI 基于 Amazon Linux 2 构建,并且配置为用作 Amazon EKS 节点的基本映像。此 AMI 配置为与 Amazon EKS 一起使用,它包括 Docker、 kubelet 和 AWS IAM 身份验证器。

125

Page 134: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Note

• 您可以在 Amazon Linux 2 安全中心Amazon Linux跟踪 的安全或隐私事件或订阅关联的 RSS源。安全和隐私事件包括问题的概述、受影响的程序包以及如何更新实例以解决问题。

• 在部署加速或 Arm AMI 之前,请查看Amazon EKS已优化的加速AmazonLinuxAMIs (p. 133)和Amazon EKS优化的 ArmAmazon LinuxAMIs (p. 134)中的信息。

选择下列表之一中的链接,以查看区域和 Kubernetes 版本的最新 Amazon EKS 优化 Amazon Linux AMIID。您还可以使用不同的工具检索带有 IDs 参数的 AWS Systems Manager。有关更多信息,请参阅检索经Amazon EKS 优化的 Amazon Linux AMI IDs (p. 140)。

Kubernetes 版本 1.18.8

Region x86 x86 加速 手臂

美国东部(俄亥俄州)(us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈)(us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡)(ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

126

Page 135: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Region x86 x86 加速 手臂

欧洲(爱尔兰) (eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩)(eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud (US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.17.11

Region x86 x86 加速 手臂

美国东部(俄亥俄州)(us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈)(us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

127

Page 136: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Region x86 x86 加速 手臂

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡)(ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩)(eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud (US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.16.13

Region x86 x86 加速 手臂

美国东部(俄亥俄州)(us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

128

Page 137: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Region x86 x86 加速 手臂

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈)(us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡)(ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩)(eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

129

Page 138: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Region x86 x86 加速 手臂

南美洲(圣保罗) (sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud (US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.15.11

Region x86 x86 加速 手臂

美国东部(俄亥俄州)(us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈)(us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡)(ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

130

Page 139: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Region x86 x86 加速 手臂

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩)(eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud (US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.14.9

Region x86 x86 加速 手臂

美国东部(俄亥俄州)(us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈)(us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

131

Page 140: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Region x86 x86 加速 手臂

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡)(ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩)(eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud (US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID

Important

这些 AMI 需要最新的 AWS CloudFormation 节点模板。您无法将这些 AMI 与早期版本的节点模板一起使用;它们将无法加入您的集群。在尝试使用这些 AMI 之前,务必使用最新的模板(如下

132

Page 141: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

所示的 URL)升级任何现有 AWS CloudFormation 节点堆栈。使用与您的集群所在区域相对应的URL。

• 除 中国(北京) 和 中国 (宁夏) 以外的所有区域

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-nodegroup.yaml

• 中国(北京) 和 中国 (宁夏)

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-nodegroup.yaml

节点模板使用触发专用AWS CloudFormation引导脚本Amazon EC2的 用户数据启动节点。此脚本允许您的节点自动发现并连接到您的集群控制层面。有关更多信息,请参阅启动自管理 Amazon Linux 节点 (p. 98)。

Amazon EKS已优化的加速Amazon LinuxAMIs经 Amazon EKS 优化的加速 Amazon Linux AMI 基于经 Amazon EKS 优化的标准 Amazon Linux AMI 而构建,并且配置为用作 Amazon EKS 节点的可选映像来支持基于 GPU 和 Inferentia 的工作负载。

除了标准 Amazon EKS 优化 AMI 配置之外,加速 AMI 还包括以下内容:

• NVIDIA 驱动程序• nvidia-container-runtime(作为默认运行时)• AWS Neuron 容器运行时

Note

• 经 Amazon EKS 优化的加速 AMI 仅支持基于 GPU 和 Inferentia 的实例类型。务必在节点 AWSCloudFormation 模板中指定这些实例类型。使用经 Amazon EKS 优化的加速 AMI,即表明您同意 NVIDIA 的最终用户许可协议 (EULA)。

• 经 Amazon EKS 优化的加速 AMI 以前称为带 GPU 支持的 Amazon EKS 优化 AMI。• 以前版本的经 Amazon EKS 优化的加速 AMI 安装了 nvidia-docker 存储库。Amazon EKS AMI 版

本 v20200529 及更高版本中不再包含此存储库。

启用基于 GPU 的工作负载

以下过程介绍了如何使用经 Amazon EKS 优化的加速 AMI 在基于 GPU 的实例上运行工作负载。有关使用基于 Inferentia 的工作负载的更多信息,请参阅Inferentia 支持 (p. 75)。

1. 在 GPU 节点加入集群后,您必须使用以下命令在集群上将适用于 Kubernetes 的 NVIDIA 设备插件用作DaemonSet。

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml

2. 您可以使用以下命令验证节点是否具有可分配 GPUs:

kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

133

Page 142: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

部署 Pod 以测试您的 GPU 节点是否正确配置

1. 使用以下内容创建名为 nvidia-smi.yaml 的文件。此清单启动在节点上运行 nvidia-smi 的 Cuda容器。

apiVersion: v1kind: Podmetadata: name: nvidia-smispec: restartPolicy: OnFailure containers: - name: nvidia-smi image: nvidia/cuda:9.2-devel args: - "nvidia-smi" resources: limits: nvidia.com/gpu: 1

2. 使用下面的命令应用清单:

kubectl apply -f nvidia-smi.yaml

3. pod 运行完成后,使用下面的命令查看其日志:

kubectl logs nvidia-smi

输出:

Mon Aug 6 20:23:31 2018+-----------------------------------------------------------------------------+| NVIDIA-SMI 396.26 Driver Version: 396.26 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. ||===============================+======================+======================|| 0 Tesla V100-SXM2... On | 00000000:00:1C.0 Off | 0 || N/A 46C P0 47W / 300W | 0MiB / 16160MiB | 0% Default |+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+| Processes: GPU Memory || GPU PID Type Process name Usage ||=============================================================================|| No running processes found |+-----------------------------------------------------------------------------+

Amazon EKS优化的 ArmAmazon LinuxAMIsArm 实例可以为横向扩展和基于 Arm 的应用程序(如 Web 服务器、容器化微服务、缓存队列以及分布式数据存储)节省大量成本。向集群添加 Arm 节点时,请查看以下注意事项。

Considerations

• 您只能在 1.15 或更高版本的集群中部署 Arm AMIs。• 如果您的集群是在 2020 年 8 月 17 日之前部署的,则必须对关键集群附加清单进行一次性升级,以便

Kubernetes 可以提取集群中使用的每个硬件架构的正确映像。有关更新集群附加组件的更多信息,请

134

Page 143: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

参阅更新现有集群 (p. 37)。如果您在 2020 年 8 月 17 日或之后部署了集群,则适用于 Kubernetes 的coredns、kube-proxy 和 Amazon VPC CNI 插件已经支持多架构。

• 为 Arm 编译部署到 Arm 节点的应用程序。• 您不能将 Amazon FSx for Lustre CSI 驱动程序 (p. 163) 与 Arm 结合使用。• 如果您在现有集群中部署了任何 DaemonSets,或者要将它们部署到您还希望在其中部署 Arm 节点的新集

群,请确保您的 DaemonSet 可以在集群中的所有硬件架构上运行。• 您可以在同一集群中运行 Arm 节点组和 x86 节点组。如果这样做,请考虑将多架构容器映像部署到容器存

储库(如 Amazon Elastic Container Registry),然后将节点选择器添加到清单,以便 Kubernetes 知道可以将Pod 部署到哪些硬件架构。有关更多信息,请参阅 用户指南中的推送多架构映像Amazon ECR和 AmazonECR 的多架构容器映像简介博客文章。

Amazon EKS 优化的 Amazon Linux AMI 版本本主题列出了 Amazon EKS 优化的 Amazon Linux AMIs 的版本及其对应版本的 kubelet、Docker、Linux内核和 Packer build script (p. 140) 配置。

每个变体的 Amazon EKS 优化 AMI 元数据(包括 AMI ID)均可通过编程方式检索。有关更多信息,请参阅检索经 Amazon EKS 优化的 Amazon Linux AMI IDs (p. 140)。

AMIs 按 Kubernetes 版本和 AMI 的发布日期进行版本控制,格式如下:

<k8s_major_version>.<k8s_minor_version>.<k8s_patch_version>-<release_date>

Amazon EKS 优化的 Amazon Linux AMI

下表列出了经 Amazon EKS 优化的 Amazon Linux AMI 的当前版本和以前版本。

Kubernetes 版本 1.18

AMI 版本 kubelet version Docker 版本 内核版本 Packer 版本

1.18.18-20201007 1.18.8 - 19.03.6-ce-4 4.14.198 版本 20201007

Kubernetes 版本 1.17

AMI 版本 kubelet version Docker 版本 内核版本 Packer 版本

1.17.11-20201007 1.17.11 19.03.6-ce-4 4.14.198 版本 20201007

1.17.11-20201002 1.17.11 19.03.6-ce-4 4.14.198 版本 20201002

1.17.11-20200921 1.17.11 19.03.6-ce-4 4.14.193 版本 20200921

1.17.9-20200904 1.17.9 19.03.6-ce-4 4.14.193 版本 20200904

1.17.9-20200814 1.17.9 19.03.6-ce-4 4.14.186 版本 20200814

1.17.9-20200723 1.17.9 19.03.6-ce 4.14.181 版本 20200723

1.17.7-20200710 1.17.7 19.03.6-ce 4.14.181 版本 20200710

1.17.7-20200709 1.17.7 19.03.6-ce 4.14.181 版本 20200709

135

Page 144: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Kubernetes 版本 1.16

AMI 版本 kubelet version Docker 版本 内核版本 Packer 版本

1.16.16.13-202010071.16.13 19.03.6-ce-4 4.14.198 版本 20201007

1.16.16.13-202010021.16.13 19.03.6-ce-4 4.14.198 版本 20201002

1.16.16.13-202009211.16.13 19.03.6-ce-4 4.14.193 版本 20200921

1.16.16.13-202009041.16.13 19.03.6-ce-4 4.14.193 版本 20200904

1.16.16.13-202008141.16.13 19.03.6-ce-4 4.14.186 版本 20200814

1.16.16.13-202007231.16.13 19.03.6-ce 4.14.181 版本 20200723

1.16.16.12-202007101.16.12 19.03.6-ce 4.14.181 版本 20200710

1.16.16.12-202007091.16.12 19.03.6-ce 4.14.181 版本 20200709

1.16.16.8-20200615 1.16.8 19.03.6-ce 4.14.181 版本 20200615

1.16.8-20200609 1.16.8 19.03.6-ce 4.14.181 v20200609

1.16.8-20200531 1.16.8 18.09.9-ce 4.14.177 v20200531

1.16.8-20200507 1.16.8 18.09.9-ce 4.14.177 v20200507

1.16.8-20200423 1.16.8 18.09.9-ce 4.14.173 v20200423

Kubernetes 版本 1.15

AMI 版本 kubelet version Docker 版本 内核版本 Packer 版本

1.15.111-20201007 1.15.11 19.03.6-ce-4 4.14.198 版本 20201007

1.15.111-20201002 1.15.11 19.03.6-ce-4 4.14.198 版本 20201002

1.15.111-20200921 1.15.11 19.03.6-ce-4 4.14.193 版本 20200921

1.15.111-20200904 1.15.11 19.03.6-ce-4 4.14.193 版本 20200904

1.15.111-20200814 1.15.11 19.03.6-ce-4 4.14.186 版本 20200814

1.15.111-20200723 1.15.11 19.03.6-ce 4.14.181 版本 20200723

1.15.111-20200710 1.15.11 19.03.6-ce 4.14.181 版本 20200710

1.15.111-20200709 1.15.11 19.03.6-ce 4.14.181 版本 20200709

1.15.111-20200615 1.15.11 19.03.6-ce 4.14.181 版本 20200615

1.15.11-20200609 1.15.11 19.03.6-ce 4.14.181 v20200609

1.15.11-20200531 1.15.11 18.09.9-ce 4.14.177 v20200531

1.15.11-20200507 1.15.11 18.09.9-ce 4.14.177 v20200507

1.15.11-20200423 1.15.11 18.09.9-ce 4.14.173 v20200423

1.15.10-20200406 1.15.10 18.09.9-ce 4.14.173 v20200406

136

Page 145: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

AMI 版本 kubelet version Docker 版本 内核版本 Packer 版本

1.15.10-20200228 1.15.10 18.09.9-ce 4.14.165 v20200228

Kubernetes 版本 1.14

AMI 版本 kubelet version Docker 版本 内核版本 Packer 版本

1.14.9-20201007 1.14.9 19.03.6-ce-4 4.14.198 版本 20201007

1.14.9-20201002 1.14.9 19.03.6-ce-4 4.14.198 版本 20201002

1.14.9-20200921 1.14.9 19.03.6-ce-4 4.14.193 版本 20200921

1.14.9-20200904 1.14.9 19.03.6-ce-4 4.14.193 版本 20200904

1.14.9-20200814 1.14.9 19.03.6-ce-4 4.14.186 版本 20200814

1.14.9-20200723 1.14.9 19.03.6-ce 4.14.181 版本 20200723

1.14.9-20200710 1.14.9 19.03.6-ce 4.14.181 版本 20200710

1.14.9-20200709 1.14.9 19.03.6-ce 4.14.181 版本 20200709

1.14.9-20200615 1.14.9 19.03.6-ce 4.14.181 版本 20200615

1.14.9-20200609 1.14.9 19.03.6-ce 4.14.181 v20200609

1.14.9-20200531 1.14.9 18.09.9-ce 4.14.177 v20200531

1.14.9-20200507 1.14.9 18.09.9-ce 4.14.177 v20200507

1.14.9-20200423 1.14.9 18.09.9-ce 4.14.173 v20200423

1.14.9-20200406 1.14.9 18.09.9-ce 4.14.173 v20200406

1.14.9-20200406 1.14.9 18.09.9-ce 4.14.173 v20200406

1.14.9-20200228 1.14.9 18.09.9-ce 4.14.165 v20200228

1.14.9-20200122 1.14.9 18.09.9-ce 4.14.158 v20200122

1.14.8-20191213 1.14.8 18.09.9-ce 4.14.154 v20191213

1.14.7-20191119 1.14.7 18.09.9-ce 4.14.152 v20191119

1.14.7-20190927 1.14.7 18.06.1-ce 4.14.146 v20190927

Amazon EKS 优化加速 Amazon Linux AMI

下表列出了经 Amazon EKS 优化的加速 Amazon Linux AMI 的当前版本和以前版本。

Kubernetes 版本 1.18

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.18.18-202010071.18.8 - 19.03.6-ce-4 4.14.198 版本 20201007 418.87.00

137

Page 146: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

Kubernetes 版本 1.17

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.17.11-202010071.17.11 19.03.6-ce-4 4.14.198 版本 20201007 418.87.00

1.17.11-202010021.17.11 19.03.6-ce-4 4.14.198 版本 20201002 418.87.00

1.17.11-202009211.17.11 19.03.6-ce-4 4.14.193 版本 20200921 418.87.00

1.17.9-20200904 1.17.9 19.03.6-ce-4 4.14.193 版本 20200904 418.87.00

1.17.9-20200814 1.17.9 19.03.6-ce-4 4.14.186 版本 20200814 418.87.00

1.17.9-20200723 1.17.9 19.03.6-ce 4.14.181 版本 20200723 418.87.00

1.17.7-20200710 1.17.7 19.03.6-ce 4.14.181 版本 20200710 418.87.00

1.17.7-20200709 1.17.7 19.03.6-ce 4.14.181 版本 20200709 418.87.00

Kubernetes 版本 1.16

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.16.16.13-202010071.16.13 19.03.6-ce-4 4.14.198 版本 20201007 418.87.00

1.16.16.13-202010021.16.13 19.03.6-ce-4 4.14.198 版本 20201002 418.87.00

1.16.16.13-202009211.16.13 19.03.6-ce-4 4.14.193 版本 20200921 418.87.00

1.16.16.13-202009041.16.13 19.03.6-ce-4 4.14.193 版本 20200904 418.87.00

1.16.16.13-202008141.16.13 19.03.6-ce-4 4.14.186 版本 20200814 418.87.00

1.16.16.13-202007231.16.13 19.03.6-ce 4.14.181 版本 20200723 418.87.00

1.16.16.12-202007101.16.12 19.03.6-ce 4.14.181 版本 20200710 418.87.00

1.16.16.12-202007091.16.12 19.03.6-ce 4.14.181 版本 20200709 418.87.00

1.16.16.8-202006151.16.8 19.03.6-ce 4.14.181 版本 20200615 418.87.00

1.16.8-20200609 1.16.8 19.03.6-ce 4.14.181 v20200609 418.87.00

1.16.8-20200531 1.16.8 18.09.9-ce 4.14.177 v20200531 418.87.00

1.16.8-20200507 1.16.8 18.09.9-ce 4.14.177 v20200507 418.87.00

1.16.8-20200423 1.16.8 18.09.9-ce 4.14.173 v20200423 418.87.00

Kubernetes 版本 1.15

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.15.111-202010071.15.11 19.03.6-ce-4 4.14.198 版本 20201007 418.87.00

1.15.111-202010021.15.11 19.03.6-ce-4 4.14.198 版本 20201002 418.87.00

138

Page 147: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.15.111-202009211.15.11 19.03.6-ce-4 4.14.193 版本 20200921 418.87.00

1.15.111-202009041.15.11 19.03.6-ce-4 4.14.193 版本 20200904 418.87.00

1.15.111-202008141.15.11 19.03.6-ce-4 4.14.186 版本 20200814 418.87.00

1.15.111-202007231.15.11 19.03.6-ce 4.14.181 版本 20200723 418.87.00

1.15.111-202007101.15.11 19.03.6-ce 4.14.181 版本 20200710 418.87.00

1.15.111-202007091.15.11 19.03.6-ce 4.14.181 版本 20200709 418.87.00

1.15.111-202006151.15.11 19.03.6-ce 4.14.181 版本 20200615 418.87.00

1.15.11-202006091.15.11 19.03.6-ce 4.14.181 v20200609 418.87.00

1.15.11-202005311.15.11 18.09.9-ce 4.14.177 v20200531 418.87.00

1.15.11-202005071.15.11 18.09.9-ce 4.14.177 v20200507 418.87.00

1.15.11-202004231.15.11 18.09.9-ce 4.14.173 v20200423 418.87.00

1.15.10-202004061.15.10 18.09.9-ce 4.14.173 v20200406 418.87.00

1.15.10-202002281.15.10 18.09.9-ce 4.14.165 v20200228 418.87.00

Kubernetes 版本 1.14

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.14.9-20201007 1.14.9 19.03.6-ce-4 4.14.198 版本 20201007 418.87.00

1.14.9-20201002 1.14.9 19.03.6-ce-4 4.14.198 版本 20201002 418.87.00

1.14.9-20200921 1.14.9 19.03.6-ce-4 4.14.193 版本 20200921 418.87.00

1.14.9-20200904 1.14.9 19.03.6-ce-4 4.14.193 版本 20200904 418.87.00

1.14.9-20200814 1.14.9 19.03.6-ce-4 4.14.186 版本 20200814 418.87.00

1.14.9-20200723 1.14.9 19.03.6-ce 4.14.181 版本 20200723 418.87.00

1.14.9-20200710 1.14.9 19.03.6-ce 4.14.181 版本 20200710 418.87.00

1.14.9-20200709 1.14.9 19.03.6-ce 4.14.181 版本 20200709 418.87.00

1.14.9-20200615 1.14.9 19.03.6-ce 4.14.181 版本 20200615 418.87.00

1.14.9-20200609 1.14.9 19.03.6-ce 4.14.181 v20200609 418.87.00

1.14.9-20200531 1.14.9 18.09.9-ce 4.14.177 v20200531 418.87.00

1.14.9-20200507 1.14.9 18.09.9-ce 4.14.177 v20200507 418.87.00

1.14.9-20200423 1.14.9 18.09.9-ce 4.14.173 v20200423 418.87.00

1.14.9-20200406 1.14.9 18.09.9-ce 4.14.173 v20200406 418.87.00

139

Page 148: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon Linux

AMI 版本 kubeletversion

Docker 版本 内核版本 Packer 版本 NVIDIA 驱动程序版本

1.14.9-20200228 1.14.9 18.09.9-ce 4.14.165 v20200228 418.87.00

1.14.9-20200122 1.14.9 18.09.9-ce 4.14.158 v20200122 418.87.00

1.14.8-20191213 1.14.8 18.09.9-ce 4.14.154 v20191213 418.87.00

1.14.7-20191119 1.14.7 18.09.9-ce 4.14.152 v20191119 418.87.00

1.14.7-20190927 1.14.7 18.06.1-ce 4.14.146 v20190927 418.87.00

检索经 Amazon EKS 优化的 Amazon Linux AMI IDs您可以通过查询 Amazon EKS Parameter Store API,以编程方式检索经 AMIs 优化的 AWS SystemsManager 的 Amazon 系统映像 (AMI) ID。此参数使您无需手动查找经 Amazon EKS 优化的 AMI IDs。 有关 Systems Manager Parameter Store API 的更多信息,请参阅 GetParameter。 您的用户账户必须具有ssm:GetParameter IAM 权限才能检索经 Amazon EKS 优化的 AMI 元数据。

您可以使用 AWS CLI或 AWS 管理控制台 检索 AMI ID。

• AWS CLI – 您可以使用子参数 Amazon EKS,通过以下命令检索最新推荐的 Amazon Linux 优化image_id AMI 的映像 ID。 将 <1.18> 替换为支持的版本 (p. 63),并将 <region-code> 替换为您需要 AMIID 的 Amazon EKS 支持的区域。将 <amazon-linux-2> 替换为 amazon-linux-2-gpu 以查看加速 AMIID,并将 amazon-linux-2-arm64 替换为 ARM ID。

aws ssm get-parameter --name /aws/service/eks/optimized-ami/<1.18>/<amazon-linux-2>/recommended/image_id --region <region-code> --query "Parameter.Value" --output text

示例输出:

ami-<abcd1234efgh5678i>

• AWS 管理控制台 您可以使用 URL 查询建议的经 – 优化的 AMI ID。Amazon EKS该 URL 使用参数的 ID的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中,将 <1.18> 替换为支持的版本 (p. 63),并将 <region-code> 替换为您需要 AMI ID 的 Amazon EKS 支持的区域。将 <amazon-linux-2> 替换为amazon-linux-2-gpu 以查看加速 AMI ID,并将 amazon-linux-2-arm64 替换为 ARM ID。

https://console.aws.amazon.com/systems-manager/parameters/%252Faws%252Fservice%252Feks%252Foptimized-ami%252F<1.18>%252F<amazon-linux-2>%252Frecommended%252Fimage_id/description?region=<region-code>

Amazon EKS 优化 Amazon Linux AMI构建脚本Amazon Elastic Kubernetes Service (Amazon EKS)具有开源构建脚本,用于构建 Amazon EKS 优化的AMI。GitHub 上现在提供了这些生成脚本。

的 Amazon EKS 优化 Amazon Linux AMI构建在admin的Linux2之上,特别用作 Amazon EKS 群集。您可以使用此存储库查看 Amazon EKS 团队配置 kubelet 、Docker、适用于Kubernetes的ASEIAM认证器等。

生成脚本存储库包含 HashiCorp Packer 模板和生成脚本以生成 AMI。这些脚本是 Amazon EKS 优化的AMI构建,以便您可以遵循GitHub存储库监控对我们AMI的变更。例如,您可能希望自己的 AMI 使用 EKS 团队用于正式 AMI 的同一版本的 Docker。

140

Page 149: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Ubuntu Linux

GitHub 存储库还包含在启动时运行以配置实例的证书数据、控制层面终端节点、集群名称等内容的专用引导脚本。

此外,GitHub存储库包含我们的 Amazon EKS 结节 AWS CloudFormation 模板。这些模板使启动运行实例Amazon EKS 优化AMI并将其注册到群集中。

有关更多信息,请参阅 GitHub 上的存储库 (https://github.com/awslabs/amazon-eks-ami)。

Amazon EKS优化的 Ubuntu LinuxAMIsCanonical 已与 Amazon EKS 合作来创建可在集群中使用的节点 AMIs。

Canonical 提供专用的 Kubernetes 节点操作系统映像。这是为 Amazon EKS 优化的最小 Ubuntu 映像,包含与 AWS 联合开发的自定义 AWS 内核。有关更多信息,请参阅 Ubuntu 和 Amazon Elastic KubernetesService 以及 Ubuntu 18.04 上对于 Amazon EKS 的优化支持。

Amazon EKS优化的 TottlerocketAMIs优化型 Tottlerocket AMI 基于 Amazon EKSBottlerocket 构建。此 AMI 配置为与 Amazon EKS 一起使用,它包含 containerd 和 kubelet 。

选择下列表之一中的链接,以查看区域和 Kubernetes 版本的最新 Amazon EKS 优化的 Tottlerocket AMIID。您还可以使用不同的工具检索带有 IDs 参数的 AWS Systems Manager。有关更多信息,请参阅检索经Amazon EKS 优化的 Bottlerocket AMI IDs (p. 144)。

Kubernetes 版本 1.18.8

Region x86 手臂

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部)(us-west-1)

查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1) 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1) 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1) 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1) 查看 AMI ID 查看 AMI ID

141

Page 150: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Tottlerkrocket (Tottlerocket)

Region x86 手臂

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1) 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2) 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1) 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3) 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1) 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1) 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.17.11

Region x86 手臂

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部)(us-west-1)

查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1) 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1) 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1) 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1) 查看 AMI ID 查看 AMI ID

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1) 查看 AMI ID 查看 AMI ID

142

Page 151: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Tottlerkrocket (Tottlerocket)

Region x86 手臂

欧洲(伦敦) (eu-west-2) 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1) 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3) 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1) 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1) 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.16.13

Region x86 手臂

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部)(us-west-1)

查看 AMI ID 查看 AMI ID

非洲(开普敦) (af-south-1) 查看 AMI ID 查看 AMI ID

亚太地区(香港) (ap-east-1) 查看 AMI ID 查看 AMI ID

亚太地区(孟买) (ap-south-1) 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1) 查看 AMI ID 查看 AMI ID

欧洲(法兰克福) (eu-central-1)

查看 AMI ID 查看 AMI ID

欧洲(爱尔兰) (eu-west-1) 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2) 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1) 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3) 查看 AMI ID 查看 AMI ID

143

Page 152: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Region x86 手臂

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1) 查看 AMI ID 查看 AMI ID

南美洲(圣保罗) (sa-east-1) 查看 AMI ID 查看 AMI ID

检索经 Amazon EKS 优化的 Bottlerocket AMI IDs您可以通过查询 Amazon EKS Parameter Store API,以编程方式检索经 AMIs 优化的 AWS SystemsManager 的 Amazon 系统映像 (AMI) ID。此参数使您无需手动查找经 Amazon EKS 优化的 AMI IDs。 有关 Systems Manager Parameter Store API 的更多信息,请参阅 GetParameter。 您的用户账户必须具有ssm:GetParameter IAM 权限才能检索经 Amazon EKS 优化的 AMI 元数据。

您可以使用 AWS CLI或 AWS 管理控制台 检索 AMI ID。

• AWS CLI – 您可以使用子参数 Amazon EKS,通过以下 AWS CLI 命令检索最新推荐的 image_id 优化的Tottlerocket AMI 的映像 ID。 将 <1.18> 替换为支持的版本 (p. 63),并将 <region-code> 替换为您需要 AMIID 的 Amazon EKS 支持的区域。

aws ssm get-parameter --name /aws/service/bottlerocket/aws-k8s-<1.18>/x86_64/latest/image_id --region <region-code> --query "Parameter.Value" --output text

示例输出:

ami-<068ed1c8e99b4810c>

• AWS 管理控制台 – 您可以使用 Amazon EKS 中的 URL 查询建议的经 AWS 管理控制台 优化的 AMI ID。该 URL 使用参数的 ID 的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中,将 <1.18> 替换为支持的版本 (p. 63),并将 <region-code> 替换为您需要 AMI ID 的 Amazon EKS 支持的区域。

https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-k8s-<1.18>/x86_64/latest/image_id/description?region=<region-code>

Amazon EKS优化的 WindowsAMIs优化 AMI 基于 Windows Server 2019 构建,并且配置为用作 Amazon EKS 节点的基本映像。Amazon EKS此AMI 配置为即时使用 Amazon EKS,而且它包括 Docker、 kubelet 和 AWS IAM 身份验证器。

Note

您可以使用 Microsoft 安全更新指南跟踪 Windows Server 的安全或隐私事件。

下表中显示了最新的经 IDs 优化的 AMI 的 AMI Amazon EKS。Windows Server 2019 是一个长期服务通道(LTSC) 版本,Windows Server 版本 1909 和 2014 是半年通道 (SAC) 版本。有关更多信息,请参阅 WindowsServer 服务通道:。Microsoft 文档中的 LTSC 和 SAC。您也可以使用不同的工具检索带有 IDs 参数的 AWSSystems Manager。有关更多信息,请参阅 检索经 Amazon EKS 优化的 Windows AMI IDs (p. 152)。

144

Page 153: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Kubernetes 版本 1.18.8

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦)(af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港)(ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买)(ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福)(eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰)(eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

145

Page 154: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗)(sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWSGovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.17.11

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦)(af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港)(ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买)(ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

146

Page 155: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福)(eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰)(eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗)(sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWSGovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

147

Page 156: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Kubernetes 版本 1.16.13

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦)(af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港)(ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买)(ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福)(eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰)(eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

148

Page 157: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗)(sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWSGovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

Kubernetes 版本 1.15.11

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦)(af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港)(ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买)(ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

149

Page 158: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福)(eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰)(eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗)(sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWSGovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

150

Page 159: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Kubernetes 版本 1.14.9

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

美国东部(俄亥俄州) (us-east-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国东部(弗吉尼亚北部) (us-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(俄勒冈) (us-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

美国西部(加利福尼亚北部) (us-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

非洲(开普敦)(af-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(香港)(ap-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太地区(孟买)(ap-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(东京) (ap-northeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(首尔) (ap-northeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(新加坡) (ap-southeast-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

亚太区域(悉尼) (ap-southeast-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

加拿大 (中部) (ca-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国(北京) (cn-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中国 (宁夏) (cn-northwest-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(法兰克福)(eu-central-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(爱尔兰)(eu-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(伦敦) (eu-west-2)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

151

Page 160: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

Region Windows Server2019 完整

Windows Server2019 核心

Windows Server1909 核心

Windows Server2014 核心

欧洲(米兰) (eu-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(巴黎) (eu-west-3)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

欧洲(斯德哥尔摩) (eu-north-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

中东(巴林) (me-south-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

南美洲(圣保罗)(sa-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWSGovCloud(美国东部) (us-gov-east-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

AWS GovCloud(US-West) (us-gov-west-1)

查看 AMI ID 查看 AMI ID 查看 AMI ID 查看 AMI ID

检索经 Amazon EKS 优化的 Windows AMI IDs您可以通过查询 Amazon EKS Parameter Store API,以编程方式检索经 AMIs 优化的 AWS SystemsManager 的 Amazon 系统映像 (AMI) ID。此参数使您无需手动查找经 Amazon EKS 优化的 AMI IDs。 有关 Systems Manager Parameter Store API 的更多信息,请参阅 GetParameter。 您的用户账户必须具有ssm:GetParameter IAM 权限才能检索经 Amazon EKS 优化的 AMI 元数据。

您可以使用 AWS CLI或 AWS 管理控制台 检索 AMI ID。

• AWS CLI – 您可以使用子参数 Amazon EKS,通过以下命令检索最新推荐的 image_id 优化 Windows AMI的映像 ID。 您可以将 <1.18> 替换为任何受支持的 Amazon EKS 版本,并将 <region-code> 替换为您需要AMI ID 的 Amazon EKS 支持的区域。将 <Core> 替换为 Full 以查看 Windows Server 完整 AMI ID。您也可以将 <2019> 替换为 1909,或仅对于 2004 版本将替换为 Core。

aws ssm get-parameter --name /aws/service/ami-windows-latest/Windows_Server-<2019>-English-<Core>-EKS_Optimized-<1.18>/image_id --region <region-code> --query "Parameter.Value" --output text

示例输出:

ami-<ami-00a053f1635fffea0>

• AWS 管理控制台 您可以使用 URL 查询建议的经 – 优化的 AMI ID。Amazon EKS该 URL 使用参数的 ID的值打开 Amazon EC2 Systems Manager 控制台。在以下 URL 中,您可以将 <1.18> 替换为任何支持的Amazon EKS 版本,并将 <region-code> 替换为您需要 AMI ID 的 Amazon EKS 支持的区域。将 <Core> 替换为 Full 以查看 Windows Server 完整 AMI ID。您也可以将 <2019> 替换为 1909,或仅对于 2004 版本将替换为 Core。

152

Page 161: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Windows

https://console.aws.amazon.com/systems-manager/parameters/%252Faws%252Fservice%252Fami-windows-latest%252FWindows_Server-<2019>-English-<Core>-EKS_Optimized-<1.18>%252Fimage_id/description?region=<region-code>

153

Page 162: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南存储类

Storage本章介绍了 Amazon EKS 集群的存储选项。

存储类 (p. 154) 主题使用树内 Amazon EBS 存储预配置程序。Amazon EBS CSI 驱动程序 (p. 155) 可用于管理 Kubernetes 1.14 及更高版本集群中的存储。

Note

现有树内 Amazon EBS 插件 仍受支持,但通过使用 CSI 驱动程序,您可以从 Kubernetes 上游发行周期与 CSI 驱动程序发行周期的分离中获益。最终将弃用树内插件,改为使用 CSI 驱动程序。

主题• 存储类 (p. 154)• Amazon EBS CSI 驱动程序 (p. 155)• Amazon EFS CSI 驱动程序 (p. 159)• Amazon FSx for Lustre CSI 驱动程序 (p. 163)

存储类在 Kubernetes 版本 1.11 之前创建的 Amazon EKS 集群未创建有任何存储类。您必须为要使用的集群定义存储类,并且应为持久卷声明定义默认存储类。有关更多信息,请参阅 Kubernetes 文档中的存储类。

Note

本主题使用树内 Amazon EBS 存储预配置程序。对于 Kubernetes 1.14 及更高版本集群,AmazonEBS CSI 驱动程序 (p. 155) 可用于管理存储。现有树内 Amazon EBS 插件 仍受支持,但通过使用 CSI 驱动程序,您可以从 Kubernetes 上游发行周期与 CSI 驱动程序发行周期的分离中获益。最终将弃用树内插件,改为使用 CSI 驱动程序。

为 Amazon EKS 集群创建 AWS 存储类

1. 为存储类创建 AWS 存储类清单文件。下面的 gp2-storage-class.yaml 示例定义一个名为 gp2 的存储类,该类使用 Amazon EBS gp2 卷类型。

有关 AWS 存储类的可用选项的更多信息,请参阅 Kubernetes 文档中的 AWS EBS。

kind: StorageClassapiVersion: storage.k8s.io/v1metadata: name: gp2 annotations: storageclass.kubernetes.io/is-default-class: "true"provisioner: kubernetes.io/aws-ebsparameters: type: gp2 fsType: ext4

2. 使用 kubectl 从清单文件创建存储类。

kubectl create -f gp2-storage-class.yaml

154

Page 163: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EBS CSI 驱动程序

输出:

storageclass "gp2" created

定义默认存储类

1. 列出集群的现有存储类。必须先定义存储类,然后才能将它设置为默认存储类。

kubectl get storageclass

输出:

NAME PROVISIONER AGEgp2 kubernetes.io/aws-ebs 8m

2. 选择一个存储类并通过设置 storageclass.kubernetes.io/is-default-class=true 注释来将该存储类设置为默认存储类。

kubectl patch storageclass <gp2> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

输出:

storageclass "gp2" patched

3. 确认存储类现已设置为默认存储类。

kubectl get storageclass

输出:

gp2 (default) kubernetes.io/aws-ebs 12m

Amazon EBS CSI 驱动程序Amazon EBS Container Storage Interface (CSI) 驱动程序 提供了一个 CSI 接口,允许 Amazon EKS 集群管理持久性卷的 Amazon EBS 卷的生命周期。

本主题介绍了如何部署 Amazon EBS CSI 驱动程序到 Amazon EKS 集群,并验证它是否正常工作。我们建议使用驱动程序版本 v0.6.0。

Note

仅 Kubernetes 版本 1.14 及更高版本的 Amazon EKS 集群和节点上支持此驱动程序。驱动程序在Fargate 上不受支持。Amazon EKS 集群上不支持 Amazon EBS CSI 驱动程序的 Alpha 功能。驱动程序处于 Beta 版本。它经过了很好的测试且 Amazon EKS 支持将它用于生产。不会删除对此驱动程序的支持,尽管详细信息可能会发生变化。如果驱动程序的架构或原理图发生变化,则将提供迁移到下一版本的说明。

有关可用参数的详细说明以及演示驱动程序功能的完整示例,请参阅 上的 Amazon EBSContainer StorageInterface (CSI) 驱动程序项目。GitHub

155

Page 164: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EBS CSI 驱动程序

将 Amazon EBS CSI 驱动程序部署到 Amazon EKS 集群

1. 为节点实例配置文件创建一个名为 IAM 的 Amazon_EBS_CSI_Driver 策略,该策略允许 Amazon EBSCSI 驱动程序代表您调用 AWS APIs。使用以下 AWS CLI 命令在 AWS 账户中创建 IAM 策略。您可以在 上GitHub查看策略文档。

a. 从 GitHub 下载策略文档。

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/v0.6.0/docs/example-iam-policy.json

b. 创建策略。

aws iam create-policy --policy-name Amazon_EBS_CSI_Driver \ --policy-document file://example-iam-policy.json

记下返回的策略 ARN。2. 获取节点的 IAM 角色名称。可使用以下命令打印 aws-auth configmap。

kubectl -n kube-system describe configmap aws-auth

输出:

Name: aws-authNamespace: kube-systemLabels: <none>Annotations: <none>

Data====mapRoles:----- groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::<111122223333>:role/<eksctl-alb-nodegroup-ng-b1f603c5-NodeInstanceRole-GKNS581EASPU> username: system:node:{{EC2PrivateDNSName}}

Events: <none>

记录已向其分配 system:nodes 组的任何 rolearn 值的角色名称。在前面的示例输出中,角色名称为<eksctl-alb-nodegroup-ng-b1f603c5-NodeInstanceRole-GKNS581EASPU>。集群中的每个节点组均应有一个值。

3. 使用以下命令将新的 Amazon_EBS_CSI_Driver IAM 策略附加到您之前标识的每个节点 IAM 角色,同时将红色文本替换为您自己的 AWS 账号和节点 IAM 角色名称。

aws iam attach-role-policy \--policy-arn arn:aws:iam::<111122223333>:policy/Amazon_EBS_CSI_Driver \--role-name <eksctl-alb-nodegroup-ng-b1f603c5-NodeInstanceRole-GKNS581EASPU>

4. 使用与集群所在的区域对应的命令部署 Amazon EBS CSI 驱动程序。

Note

此命令要求使用版本 1.14 或更高版本的 kubectl。 您可以使用以下命令查看您的 kubectl版本。要安装或升级 kubectl 版本,请参阅 安装kubectl (p. 243)。

156

Page 165: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EBS CSI 驱动程序

kubectl version --client --short

• 区域之外的所有区域。中国

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

• 北京和宁夏 中国区域。

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable-cn/?ref=master"

部署一个示例应用程序并验证 CSI 驱动程序是否正常运行

此过程使用 https://github.com/kubernetes-sigs/aws-ebs-csi-driver/tree/master/examples/kubernetes/dynamic-provisioning Container Storage Interface (CSI) 驱动程序 存储库中的Amazon EBS动态卷预配置示例来使用动态预配置的 GitHub 卷。Amazon EBS

1. 将 Amazon EBS Container Storage Interface (CSI) 驱动程序 存储库克隆到本地系统。GitHub

git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver.git

2. 导航到 dynamic-provisioning 示例目录。

cd aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning/

3. 从 specs 目录部署 ebs-sc 存储类、ebs-claim 持久性卷声明和 app 示例应用程序。

kubectl apply -f specs/

4. 描述 ebs-sc 存储类。

kubectl describe storageclass ebs-sc

输出:

Name: ebs-scIsDefaultClass: NoAnnotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"ebs-sc"},"provisioner":"ebs.csi.aws.com","volumeBindingMode":"WaitForFirstConsumer"}

Provisioner: ebs.csi.aws.comParameters: <none>AllowVolumeExpansion: <unset>MountOptions: <none>ReclaimPolicy: DeleteVolumeBindingMode: WaitForFirstConsumerEvents: <none>

请注意,存储类使用 WaitForFirstConsumer 卷绑定模式。这意味着,在 Pod 进行持久性卷声明之前,不会动态预配置卷。有关更多信息,请参阅 Kubernetes 文档中的 卷绑定模式。

5. 查看默认命名空间中的 Pod 并等待 app Pod 进入就绪状态。

157

Page 166: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EBS CSI 驱动程序

kubectl get pods --watch

6. 列出默认命名空间中的持久性卷。查找具有 default/ebs-claim 声明的持久性卷。

kubectl get pv

输出:

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a 4Gi RWO Delete Bound default/ebs-claim ebs-sc 30s

7. 描述持久性卷。

kubectl describe pv <pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5a>

输出:

Name: pvc-37717cd6-d0dc-11e9-b17f-06fad4858a5aLabels: <none>Annotations: pv.kubernetes.io/provisioned-by: ebs.csi.aws.comFinalizers: [kubernetes.io/pv-protection external-attacher/ebs-csi-aws-com]StorageClass: ebs-scStatus: BoundClaim: default/ebs-claimReclaim Policy: DeleteAccess Modes: RWOVolumeMode: FilesystemCapacity: 4GiNode Affinity: Required Terms: Term 0: topology.ebs.csi.aws.com/zone in [<regiona>]Message:Source: Type: CSI (a Container Storage Interface (CSI) volume source) Driver: ebs.csi.aws.com VolumeHandle: <vol-0d651e157c6d93445> ReadOnly: false VolumeAttributes: storage.kubernetes.io/csiProvisionerIdentity=1567792483192-8081-ebs.csi.aws.comEvents: <none>

Amazon EBS 卷 ID 作为 VolumeHandle 列出。8. 验证 Pod 成功将数据写入卷。

kubectl exec -it app cat /data/out.txt

输出:

Wed Jul 8 13:52:09 UTC 2020Wed Jul 8 13:52:14 UTC 2020Wed Jul 8 13:52:19 UTC 2020Wed Jul 8 13:52:24 UTC 2020Wed Jul 8 13:52:29 UTC 2020Wed Jul 8 13:52:34 UTC 2020

158

Page 167: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EFS CSI 驱动程序

9. 完成试验时,请删除此示例应用程序来清除资源。

kubectl delete -f specs/

Amazon EFS CSI 驱动程序Container Storage Interface (CSI) 驱动程序 提供了一个 CSI 接口,允许 Amazon EFS 上运行的 Kubernetes集群管理 文件系统的生命周期。AWSAmazon EFS

本主题介绍了如何部署 Amazon EFS CSI 驱动程序到 Amazon EKS 集群,并验证它是否正常工作。

Note

Amazon EKS 集群上不支持 Amazon EFS CSI 驱动程序的 Alpha 功能。

有关可用参数的详细说明以及演示驱动程序功能的完整示例,请参阅 上的 Amazon EFS Container StorageInterface (CSI) 驱动程序项目。GitHub

将 Amazon EFS CSI 驱动程序部署到 Amazon EKS 集群

• 部署 Amazon EFS CSI 驱动程序。如果您的集群包含节点(也可以包含 AWS Fargate Pod),请使用以下命令部署驱动程序。

Note

此命令要求使用 kubectl 版本 1.14 或更高版本。可以使用以下命令查看您的 kubectl 版本:要安装或升级 kubectl 版本,请参阅 安装kubectl (p. 243)。

kubectl version --client --short

kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-1.0"

如果您的集群仅包含 Fargate Pod(无节点),请使用以下命令部署驱动程序。

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml

Note

• 从 1.0.0 版本开始,默认情况下启用使用 TLS 的传输中的数据加密。使用传输中加密,数据在通过网络传输到 Amazon EFS 服务期间将被加密。要禁用它并使用 NFSv4 挂载卷,请在持久性卷清单中将 volumeAttributes 字段 encryptInTransit 设置为 "false"。有关示例清单,请参阅 上的传输中加密示例GitHub。

• 仅支持静态卷预置。这意味着,在集群中的 Pod 使用之前,需要在 Amazon EFS 外部创建Amazon EKS 文件系统。

Amazon EFS 访问点

CSI 驱动程序支持 Amazon EFS 访问点Amazon EFS,这些访问点是 文件系统中特定于应用程序的入口点,让您能够更轻松地在多个 Pod 之间共享文件系统。Amazon EFS访问点可以为通过访问点发出的所有文件系统请求强制执行用户身份,并为每个 Pod 强制执行根目录。有关更多信息,请参阅 上的 Amazon EFS 访问点GitHub。

159

Page 168: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EFS CSI 驱动程序

为 Amazon EKS 集群创建 Amazon EFS 文件系统

1. 找到您 Amazon EKS 集群的 VPC ID。您可以在 Amazon EKS 控制台中查找此 ID,或者使用以下 AWSCLI 命令。

aws eks describe-cluster --name <cluster_name> --query "cluster.resourcesVpcConfig.vpcId" --output text

输出:

vpc-<exampledb76d3e813>

2. 查找您集群 VPC 的 CIDR 范围。您可以在 Amazon VPC 控制台中查找此信息,或者使用以下 AWS CLI命令。

aws ec2 describe-vpcs --vpc-ids vpc-<exampledb76d3e813> --query "Vpcs[].CidrBlock" --output text

输出:

192.168.0.0/16

3. 创建一个安全组,该安全组允许您 Amazon EFS 装载点的入站 NFS 流量。

a. 打开 Amazon VPC 控制台 https://console.aws.amazon.com/vpc/。b. 在左侧导航面板中选择 Security Groups,然后选择 Create security group。c. 为您的安全组输入名称和描述,然后选择您的 Amazon EKS 集群使用的 VPC。d. 在 Inbound rules (入站规则) 下,选择 Add rule (添加规则)。e. 在 Type (类型) 下,选择 NFS。f. 在 Source (源) 下,选择 Custom (自定义),然后粘贴您在上一步中获取的 VPC CIDR 范围。g. 选择创建安全组。

4. 为您的 Amazon EKS 集群创建 Amazon EFS 文件系统。

a. 通过 https://console.aws.amazon.com/efs/ 打开 Amazon Elastic File System 控制台。b. 在左侧导航窗格中选择 File systems (文件系统),然后选择 Create file system (创建文件系统)。c. 在 Create file system (创建文件系统) 页面上,选择 Customize (自定义)。d. 在 File system settings (文件系统设置) 页面上,您不需要输入或选择任何信息,但可以在需要时选择

Next (下一步)。e. 在 Network access (网络访问) 页面上,对于 Virtual Private Cloud (VPC) (虚拟私有云 (VPC)),选择您

的 VPC。

Note

如果您未看到您的 VPC,请在控制台的右上角,确保已选择您的 VPC 所在的区域。f. 在 Mount targets (挂载目标) 下,如果已列出默认安全组,请选择框右上角的 X(带有默认安全组名称)

以从每个挂载点中删除它,选择您在上一步中为每个挂载目标创建的安全组,然后选择 Next (下一步)。

g. 在 File system policy (文件系统策略) 页面上,选择 Next (下一步)。h. 在 Review and create (审核并创建) 页面上,选择 Create (创建)。

Important

默认情况下,新 Amazon EFS 文件系统由 root:root 拥有,并且只有 root 用户 (UID0) 具有读取、写入和执行权限。如果您的容器没有作为 Amazon EFS 运行,则必须更

160

Page 169: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EFS CSI 驱动程序

改 root 文件系统权限,以允许其他用户修改文件系统。有关更多信息,请参阅 https://docs.aws.amazon.com/efs/latest/ug/accessing-fs-nfs-permissions.html 中的在网络文件系统 (NFS) 级别使用用户、组和权限Amazon Elastic File System 用户指南。

部署一个示例应用程序并验证 CSI 驱动程序是否正常运行

此过程使用来自 Container Storage Interface (CSI) 驱动程序 存储库的多个 Pod 读取写入次数AmazonEFS示例,使用静态预配置的 持久性卷并从具有 GitHub 访问模式的多个 Pod 中访问它。AmazonEFSReadWriteMany

1. 将 Amazon EFS Container Storage Interface (CSI) 驱动程序 存储库克隆到本地系统。GitHub

git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git

2. 导航到 multiple_pods 示例目录。

cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/

3. 检索 Amazon EFS 文件系统 ID。您可以在 Amazon EFS 控制台中查找此信息,或者使用以下 AWS CLI命令。

aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text

输出:

fs-<582a03f3>

4. 编辑 specs/pv.yaml 文件并将 volumeHandle 值替换为您的 Amazon EFS 文件系统 ID。

apiVersion: v1kind: PersistentVolumemetadata: name: efs-pvspec: capacity: storage: <5Gi> volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc csi: driver: efs.csi.aws.com volumeHandle: fs-<582a03f3>

Note

由于 Amazon EFS 是弹性文件系统,它不会强制实施任何文件系统容量限制。在创建系统时,不使用持久性卷和持久性卷声明中的实际存储容量值。但是,由于存储容量是 Kubernetes 中的必填字段,您必须指定有效值,例如,在此示例中为 <5Gi>。此值不会限制 Amazon EFS 文件系统的大小。

5. 从 specs 目录部署 efs-sc 存储类、efs-claim 持久性卷声明、efs-pv 持久性卷以及 app1 和app2 示例应用程序。

kubectl apply -f specs/

6. 查看默认命名空间中的 Pod 并等待 app1 和 app2 Pod 的 STATUS 变为 Running。

161

Page 170: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EFS CSI 驱动程序

kubectl get pods --watch

Note

Pod 可能需要几分钟才能达到 Running 状态。7. 列出默认命名空间中的持久性卷。查找具有 default/efs-claim 声明的持久性卷。

kubectl get pv

输出:

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEefs-pv 5Gi RWX Retain Bound default/efs-claim efs-sc 2m50s

8. 描述持久性卷。

kubectl describe pv efs-pv

输出:

Name: efs-pvLabels: <none>Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"efs-pv"},"spec":{"accessModes":["ReadWriteMany"],"capaci... pv.kubernetes.io/bound-by-controller: yesFinalizers: [kubernetes.io/pv-protection]StorageClass: efs-scStatus: BoundClaim: default/efs-claimReclaim Policy: RetainAccess Modes: RWXVolumeMode: FilesystemCapacity: 5GiNode Affinity: <none>Message:Source: Type: CSI (a Container Storage Interface (CSI) volume source) Driver: efs.csi.aws.com VolumeHandle: fs-<582a03f3> ReadOnly: false VolumeAttributes: <none>Events: <none>

Amazon EFS 文件系统 ID 将作为 VolumeHandle 列出。9. 验证 app1 Pod 成功将数据写入卷。

kubectl exec -ti app1 -- tail /data/out1.txt

输出:

Thu Jul 23 21:44:02 UTC 2020Thu Jul 23 21:44:07 UTC 2020Thu Jul 23 21:44:12 UTC 2020

162

Page 171: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon FSx for Lustre CSI 驱动程序

Thu Jul 23 21:44:17 UTC 2020Thu Jul 23 21:44:22 UTC 2020Thu Jul 23 21:44:27 UTC 2020

10. 验证 app2 Pod 显示与卷中相同的数据。

kubectl exec -ti app2 -- tail /data/out1.txt

输出:

Thu Jul 23 21:44:47 UTC 2020Thu Jul 23 21:44:52 UTC 2020Thu Jul 23 21:44:57 UTC 2020Thu Jul 23 21:45:02 UTC 2020Thu Jul 23 21:45:07 UTC 2020Thu Jul 23 21:45:12 UTC 2020

11. 完成试验时,请删除此示例应用程序来清除资源。

kubectl delete -f specs/

Amazon FSx for Lustre CSI 驱动程序Important

此功能在 中国 区域中不可用。

Amazon FSx for Lustre Container Storage Interface (CSI) 驱动程序 提供了一个 CSI 接口,允许 AmazonEKS 集群管理 Amazon FSx for Lustre 文件系统的生命周期。

本主题介绍了如何部署 Amazon FSx for Lustre CSI 驱动程序到 Amazon EKS 集群,并验证它是否正常工作。我们建议使用驱动程序版本 0.3.0。

Note

Kubernetes 版本 1.18 及更高版本的 Amazon EKS 集群和节点上支持此驱动程序。或 Arm 节点不支持此驱动程序。FargateAmazon EKS 集群上不支持 Amazon FSx for Lustre CSI 驱动程序的Alpha 功能。驱动程序处于 Beta 版本。它经过了很好的测试且 Amazon EKS 支持将它用于生产。不会删除对此驱动程序的支持,尽管详细信息可能会发生变化。如果驱动程序的架构或原理图发生变化,则将提供迁移到下一版本的说明。

有关可用参数的详细说明以及演示驱动程序功能的完整示例,请参阅 上的 Amazon FSx for Lustre ContainerStorage Interface (CSI) 驱动程序项目。GitHub

Prerequisites

您必须:

• 已安装 AWS CLI 的版本 1.18.163 或更高版本。您可以使用 aws --version 命令检查当前已安装的版本。要安装或升级 AWS CLI,请参阅安装 AWS CLI。

• 使用现有 Amazon EKS 集群。如果您当前没有集群,请参阅Amazon EKS 入门 (p. 3)创建一个集群。• 已安装 eksctl 的版本 0.31.0-rc.0 或更高版本。您可以使用 eksctl version 命令检查当前已安装的版

本。要安装或升级 eksctl,请参阅安装或升级 eksctl (p. 251)。• 已安装与您的集群版本相对应的 kubectl 的最新版本。您可以使用 kubectl version --short --client 命令检查当前已安装的版本。有关更多信息,请参阅安装kubectl (p. 243)。

163

Page 172: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon FSx for Lustre CSI 驱动程序

将 Amazon FSx for Lustre CSI 驱动程序部署到 Amazon EKS 集群

1. 创建 AWS Identity and Access Management OIDC 提供程序,并将该提供程序与您的集群关联。

eksctl utils associate-iam-oidc-provider \ --region <region-code> \ --cluster <prod> \ --approve

2. 创建允许驱动程序代表您调用 IAM AWS APIs 的 策略和服务账户。

a. 复制以下文本并将其保存到名为 fsx-csi-driver.json 的文件。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iam:CreateServiceLinkedRole", "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource":"arn:aws:iam::*:role/aws-service-role/s3.data-source.lustre.fsx.amazonaws.com/*" }, { "Action":"iam:CreateServiceLinkedRole", "Effect":"Allow", "Resource":"*", "Condition":{ "StringLike":{ "iam:AWSServiceName":[ "fsx.amazonaws.com" ] } } }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "fsx:CreateFileSystem", "fsx:DeleteFileSystem", "fsx:DescribeFileSystems" ], "Resource":[ "*" ] } ]}

b. 创建策略。

aws iam create-policy \ --policy-name <Amazon_FSx_Lustre_CSI_Driver> \ --policy-document file://fsx-csi-driver.json

记下返回的策略 Amazon 资源名称 (ARN)。3. 为驱动程序创建一个 Kubernetes 服务账户,并将策略附加到该服务账户。将策略的 ARN 替换为上一步

中返回的 ARN。

164

Page 173: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon FSx for Lustre CSI 驱动程序

eksctl create iamserviceaccount \ --region <region-code> \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster <prod> \ --attach-policy-arn arn:aws:iam::<111122223333:policy/Amazon_FSx_Lustre_CSI_Driver> \ --approve

输出:

创建服务账户时,您将看到几行输出。输出的最后一行类似于以下示例行。

[✓] created serviceaccount "kube-system/fsx-csi-controller-sa"

记录已部署的 AWS CloudFormation 堆栈的名称。在上面的示例输出中,堆栈的名称为 eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa。

4. 记录所创建角色的角色 ARN。

a. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。b. 确保控制台设置为您在其中创建 IAM 角色的区域,然后选择 Stacks (堆栈)。c. 选择名为 eksctl-prod-addon-iamserviceaccount-kube-system-fsx-csi-

controller-sa 的堆栈。d. 选择 Outputs (输出) 选项卡。Role ARN (角色 ARN) 列在 Output(1) (输出 (1)) 页面上。

5. 使用以下命令部署驱动程序。

kubectl apply -k "github.com/kubernetes-sigs/aws-fsx-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

输出

Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl applyserviceaccount/fsx-csi-controller-sa configuredclusterrole.rbac.authorization.k8s.io/fsx-csi-external-provisioner-role createdclusterrolebinding.rbac.authorization.k8s.io/fsx-csi-external-provisioner-binding createddeployment.apps/fsx-csi-controller createddaemonset.apps/fsx-csi-node createdcsidriver.storage.k8s.io/fsx.csi.aws.com created

6. 修补驱动程序部署以添加在步骤 3 中创建的服务账户,并将 ARN 替换为在第 4 步中记录的 ARN。

kubectl annotate serviceaccount -n kube-system <fsx-csi-controller-sa> \ eks.amazonaws.com/role-arn=<arn:aws:iam::111122223333:role/eksctl-prod-addon-iamserviceaccount-kube-sys-Role1-NPFTLHJ5PJF5> --overwrite=true

部署 Kubernetes 存储类、持久卷注册和示例应用程序,以验证 CSI 驱动程序是否正常工作

此过程使用来自 Amazon S3 容器存储接口 (CSI) 驱动程序 存储库的 的动态卷预配置Amazon FSx forLustre来使用动态预配置的 卷。GitHubAmazon FSx for Lustre

1. 创建 Amazon S3 存储桶,然后通过创建文件并将文件复制到该存储桶,在存储桶中创建一个名为export 的文件夹。

165

Page 174: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon FSx for Lustre CSI 驱动程序

aws s3 mb s3://<fsx-csi>echo test-file >> testfileaws s3 cp testfile s3://<fsx-csi>/export/testfile

2. 使用下面的命令下载 storageclass 清单。

curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/storageclass.yaml

3. 编辑文件并将现有 <example values> 替换为您自己的值。

parameters: subnetId: <subnet-056da83524edbe641> securityGroupIds: <sg-086f61ea73388fb6b> s3ImportPath: s3://<ml-training-data-000> s3ExportPath: s3://<ml-training-data-000/export> deploymentType: <SCRATCH_2>

• subnetId 应在其中创建 Amazon – for Lustre 文件系统的子网 ID。FSx并非所有FSx都支持适用于Lustre 的 Amazon 可用区。通过 FSx 打开 Amazon https://console.aws.amazon.com/fsx/ for Lustre控制台,确认您要使用的子网是否位于受支持的 可用区 中。子网可以包含您的节点,也可以是不同的子网或 VPC。如果您指定的子网不是具有节点的子网,则必须VPCs连接您的 ,并且必须确保在安全组中打开了必要的端口。

• securityGroupIds – 您的节点的安全组 ID。• s3ImportPath – 要将数据从中复制到持久性卷的 Amazon Simple Storage Service 数据存储库。指定

您在第 1 步中创建的 fsx-csi 存储桶。• s3ExportPath – 要将新文件或修改过的文件导出到的 Amazon S3 数据存储库。指定您在第 1 步中创

建的 fsx-csi/export 文件夹。• deploymentType 文件系统部署类型。–有效值为 SCRATCH_1、SCRATCH_2 和 PERSISTENT_1。 有

关部署类型的更多信息,请参阅创建 Amazon FSx for Lustre 文件系统。

Note

s3ImportPath 和 s3ExportPath 的 Amazon S3 存储桶必须相同,否则驱动程序无法创建 Amazon FSx for Lustre 文件系统。s3ImportPath 可以是独立的。系统将自动创建随机路径,例如 s3://ml-training-data-000/FSxLustre20190308T012310Z。 如果不为s3ExportPath 指定值,则无法使用 S3ImportPath。

4. 创建 storageclass。

kubectl apply -f storageclass.yaml

5. 下载持久卷注册清单。

curl -o claim.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/claim.yaml

6. (可选)编辑 claim.yaml 文件。根据您的存储要求和您在上一步中选择的 <value>,将以下deploymentType 更改为下面列出的增量值之一。

storage: <1200Gi>

• SCRATCH_2 和 PERSISTENT – 1.2 TiB、2.4 TiB 或 2.4 TiB 上的 2.4 TiB 增量。• SCRATCH_1 – 1.2 TiB、2.4 TiB、3.6 TiB 或 3.6 TiB 之上的 TiB 增量。

166

Page 175: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon FSx for Lustre CSI 驱动程序

7. 创建持久卷注册。

kubectl apply -f claim.yaml

8. 确认已预配置文件系统。

kubectl get pvc

输出。

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEfsx-claim Bound pvc-15dad3c1-2365-11ea-a836-02468c18769e 1200Gi RWX fsx-sc 7m37s

Note

在更改为 STATUS 之前,Pending 可能会在 5-10 分钟内显示为 Bound。 在 STATUS 变为Bound 之前,请勿继续下一步。

9. 部署示例应用程序。

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning_s3/specs/pod.yaml

10. 验证示例应用程序正在运行。

kubectl get pods

输出

NAME READY STATUS RESTARTS AGEfsx-app 1/1 Running 0 8s

从 Amazon S3 文件系统访问 Amazon FSx for Lustre 文件

如果您只希望导入和读取数据,而不执行任何修改和创建操作,则在 storageclass.yaml 文件中不需要s3ExportPath 的值。验证示例应用程序已将数据写入 Amazon FSx for Lustre 文件系统。

kubectl exec -it fsx-app ls /data

输出。

export out.txt

示例应用程序已将 out.txt 文件写入文件系统。

将文件存档到 s3ExportPath

对于新文件以及修改后的文件,您可以通过 Lustre 用户空间工具,使用您为 s3ExportPath 指定的值将数据存档回 Amazon S3。

1. 将文件重新导出到 Amazon S3。

kubectl exec -ti fsx-app -- lfs hsm_archive /data/out.txt

167

Page 176: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon FSx for Lustre CSI 驱动程序

Note

• 新文件不会自动同步回 Amazon S3。为了将文件同步到 s3ExportPath,您需要在容器映像中安装 Lustre 客户端,并手动运行 lfs hsm_archive 命令。该容器应该在具有CAP_SYS_ADMIN 功能的特权模式下运行。

• 本示例使用生命周期挂钩来安装 Lustre 客户端,以便进行演示。常用的方法是使用 Lustre 客户端来构建容器映像。

2. 确认 out.txt 文件已写入到 Amazon S3 中的 s3ExportPath 文件夹。

aws s3 ls fsx-csi/export/

输出

2019-12-23 12:11:35 4553 out.txt2019-12-23 11:41:21 10 testfile

168

Page 177: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Amazon EKS 联网本章概述 Amazon EKS 网络。下图显示了 Amazon EKS 集群的关键组件以及这些组件与 VPC 的关系。

以下说明可帮助您了解图表的组件如何相互关联,以及本指南中的主题和您可以参考的其他 AWS 指南以了解更多信息。

• Amazon VPC 和子网 所有 – 资源部署到现有 VPC 中的现有子网中的一个区域。Amazon EKS有关更多信息,请参阅 用户指南中的 VPCs 和子网Amazon VPC。每个子网都存在于一个可用区中。VPC 和子网必须满足下列要求:• VPCs 和子网必须适当标记,以便 Kubernetes 知道它可以使用它们部署资源,如负载均衡器。有关更多信

息,请参阅 VPC 标记要求 (p. 175)和子网添加标签要求 (p. 175)。如果您使用 Amazon EKS 提供的AWS CloudFormation 模板 (p. 171)或使用 eksctl 部署 VPC,则 VPC 和子网会正确标记。

• 子网可能具有也可能不具有 Internet 访问权限。如果子网没有 Internet 访问权限,则其内部署的 Pod 必须能够访问其他 AWS 服务(如 Amazon ECR)以拉取容器映像。有关使用无法访问 Internet 的子网的更多信息,请参阅私有集群 (p. 81)。

• 必须将您使用的任何公有子网配置为为在它们内启动的 Amazon EC2 实例自动分配公有 IP 地址。有关更多信息,请参阅VPC IP 寻址 (p. 174)。

• 节点和控制层面必须能够通过适当标记的安全组在所有端口上进行通信。有关更多信息,请参阅Amazon EKS 安全组注意事项 (p. 176)。

• 您可以实施网络隔离和租户隔离网络策略。网络策略类似于 AWS 安全组的一点是,您可以创建网络传入和传出规则。您使用 Pod 选择器和标签向 Pod 分配网络策略,而不是向安全组分配实例。有关更多信息,请参阅the section called “在 Amazon EKS 上安装 Calico” (p. 205)。

您可以通过手动配置、使用 Amazon EKSeksctl 或 (p. 251) 提供的 Amazon EKS 模板部署符合AWS CloudFormation 要求的 VPC 和子网。和 eksctl 模板都使用所需的配置创建 VPC 和子网。AWSCloudFormation有关更多信息,请参阅为 Amazon EKS 集群创建 VPC (p. 171)。

169

Page 178: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南为 Amazon EKS 创建 VPC

• 控制层面Amazon EKS 由 – 在 Amazon EKS 托管 VPC 中部署和管理。Amazon EKS创建集群时,AmazonEKS 会在独立于您指定的控制层面 VPC 的 VPC 中创建和管理请求者托管的网络接口,这将允许 AWSFargate 和 Amazon EC2 实例与控制层面进行通信。

默认情况下,控制层面公开一个公有终端节点,以便客户端和节点可以与集群进行通信。您可以限制可与公有终端节点通信的 Internet 客户端源 IP 地址。或者,您可以启用私有终端节点并禁用公有终端节点,或者同时启用公有和私有终端节点。要了解有关集群终端节点的更多信息,请参阅Amazon EKS 集群终端节点访问控制 (p. 48)。

如果您的集群部署到的 VPC 与其他网络之间已配置连接,则本地网络或其他 VPCs 中的客户端可以与公有或私有终端节点进行通信。有关将您的 VPC 连接到其他网络的更多信息,请参阅 AWS 网络到 AmazonVPC 连接选项和到 Amazon VPC 连接选项Amazon VPC技术文章。

• 实例Amazon EC2 每个 – 节点部署到一个子网。Amazon EC2每个节点都分配有来自分配给子网的 CIDR块的私有 IP 地址。如果子网是使用 Amazon EKS 提供的 AWS CloudFormation 模板 (p. 171)之一创建的,则子网会自动为部署到公有子网的节点分配公有 IP 地址。每个节点都使用 Pod 联网 (CNI) (p. 178) 进行部署,默认情况下,它从分配给节点所在子网的 CIDR 块为每个 Pod 分配一个私有 IP 地址,并将该 IP 地址作为辅助 IP 地址添加到附加到实例的网络接口之一。此 AWS 资源在 和 API 中称为AWS 管理控制台网络接口Amazon EC2。因此,我们在本文档中使用“网络接口”,而不是“弹性网络接口”。本文档中的“网络接口”术语始终表示“弹性网络接口”。

您可以更改此行为,方法是将其他 CIDR 块分配给 VPC 并启用 CNI 自定义网络 (p. 191),这会将 IP 地址分配给与节点部署到的不同子网的 Pod。要使用自定义联网,您必须在启动节点时启用它。您还可以将唯一安全组与很多 Amazon EC2 实例类型上运行的某些 Pod 关联。有关更多信息,请参阅Pod 的安全组 (p. 181)。

默认情况下,与 VPC 外部的资源通信的每个 Pod 的源 IP 地址将通过网络地址转换 (NAT) 转换为连接到节点的主网络接口的主 IP 地址。您可以更改此行为,让私有子网中的 NAT 设备将每个 Pod 的 IP 地址转换为NAT 设备的 IP 地址。有关更多信息,请参阅外部源网络地址转换 (SNAT) (p. 179)。

• Fargate Pod – 仅部署到私有子网。每个 Pod 都分配有一个来自分配给子网的 CIDR 块的私有 IP 地址。Fargate 并不支持所有 Pod 网络选项。有关更多信息,请参阅AWS Fargate 注意事项 (p. 116)。

为 Amazon EKS 集群创建 VPCAmazon Virtual Private Cloud (Amazon VPC) 允许您在已定义的虚拟网络内启动 AWS 资源。这个虚拟网络与您在数据中心中运行的传统网络极其相似,并会为您提供使用 AWS 的可扩展基础设施的优势。有关更多信息,请参阅 Amazon VPC 用户指南和 节点的集群联网解密Amazon EKS。

如果您想要使用现有 VPC,则它必须满足与 Amazon EKS 一起使用的特定要求。有关更多信息,请参阅集群 VPC 注意事项 (p. 174)。本主题将指导您使用以下配置之一,为集群创建 VPC:

• 公有子网和私有子网 – 此 VPC 有两个公有子网和两个私有子网。一个公有子网和一个私有子网部署到同一个可用区。其他公有子网和私有子网部署到同一区域的第二个可用区。我们建议所有生产部署使用此选项。此选项允许您将节点部署到私有子网,并允许 Kubernetes 将负载均衡器部署到公有子网,这些子网可以均衡流量以加载到在私有子网中节点上运行的 Pod。

系统自动向部署到其中一个公有子网的资源分配公有 IP 地址,但公有 IP 地址不会分配给部署到私有子网的任何资源。私有子网中的节点可以与集群和其他 AWS 服务通信,并且 Pod 可以通过部署在每个 中的NAT 网关可用区向 Internet 进行出站通信。部署了安全组,拒绝所有入站流量并允许所有出站流量。对子网进行标记,以便 Kubernetes 能够向它们部署负载均衡器。有关子网标记的更多信息,请参阅子网添加标签要求 (p. 175)。有关此类 VPC 的更多信息,请参阅带有公有子网和私有子网 (NAT) 的 VPC。

• 仅公有子网 – 此 VPC 有三个公有子网,部署到区域中的不同可用区。所有节点都将自动分配公有 IP 地址,并可通过 Internet 网关发送和接收 Internet 流量。部署了安全组,拒绝所有入站流量并允许所有出站流量。对子网进行标记,以便 Kubernetes 可以向它们部署负载均衡器。有关子网标记的更多信息,请参阅子网添加标签要求 (p. 175)。有关此类 VPC 的更多信息,请参阅带有单个公有子网的 VPC。

• 仅私有子网 – 此 VPC 有三个私有子网,部署到区域中的不同可用区。所有节点都可以选择通过 NAT 实例或 NAT 网关发送和接收 Internet 流量。部署了安全组,拒绝所有入站流量并允许所有出站流量。对子网进

170

Page 179: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南为 Amazon EKS 创建 VPC

行标记,以便 Kubernetes 可以向它们部署内部负载均衡器。有关子网标记的更多信息,请参阅子网添加标签要求 (p. 175)。有关此类 VPC 的更多信息,请参阅仅带有私有子网和 AWS 站点到站点 VPN 访问权限的 VPC。

Important

如果 VPC 没有出站 Internet 访问,例如通过 NAT 实例、NAT 网关、VPN 或 Direct Connect,则会有其他要求。您必须通过向节点提供集群证书颁发机构和集群 API 终端节点来绕过 EKS 集群自检。您可能还需要配置修改集群终端节点访问 (p. 48)中列出的 VPC 终端节点。

Important

如果您使用 eksctl 或者使用任一 Amazon EKS AWS CloudFormation VPC 模板部署了 VPC:

• 在不早于 March 26, 2020 – 时,公有子网自动将公有 IPv4 地址分配给部署到公有子网的新节点。• 在 March 26, 2020 之前 – 公有子网不会自动将公有 IPv4 地址分配给部署到公有子网的新节点。

此更改通过以下方式影响部署到公有子网的新节点组:

• 托管节点组 (p. 88) – 如果在不早于 April 22, 2020 时节点组部署到公有子网或,则公有子网必须允许自动分配公有 IP 地址。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性。

• Linux (p. 98)、Windows (p. 104) 或 Arm (p. 134) 自管理节点组 – 如果在 March 26, 2020 之时或之后将节点组部署到公有子网,则公有子网必须已启用公有 IP 地址的自动分配,否则必须使用公有IP 地址启动节点。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性或在实例启动期间分配公有 IPv4 地址。

为 Amazon EKS 集群创建 VPC您可以创建具有公有和私有子网 (p. 171)、仅公有子网 (p. 172)或仅私有子网 (p. 173)的 VPC。

创建带有公有子网和私有子网的集群 VPC

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 从导航栏中,选择支持 Amazon EKS 的区域。3. 依次选择 Create stack (创建堆栈) 和 With new resources (standard) (使用新资源(标准))。4. 对于选择一个模板,选择指定 Amazon S3 模板 URL。5. 将与您的集群所在的区域对应的 URL 粘贴到文本区域中,然后选择 Next (下一步):

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-vpc-private-subnets.yaml

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-vpc-private-subnets.yaml

6. 在 Specify Details (指定详细信息) 页面上,相应填写参数,然后选择 Next (下一步)。

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 eks-vpc。• VpcBlock: 为您的 VPC 选择 CIDR 范围。您部署的每个工作线程节点、Pod 和负载均衡器都会从此块

中分配一个 IP 地址。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。有关

171

Page 180: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南为 Amazon EKS 创建 VPC

更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

• PublicSubnet01Block: 为公有子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PublicSubnet02Block: 指定公有子网 2 的 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet01Block: 为私有子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet02Block: 为私有子网 2 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。8. 在 Review 页面上,选择 Create 。9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。10. 记录已创建的安全组的 SecurityGroups 值。向集群添加节点时,必须指定安全组的 ID。安全组应用到在

子网中创建的跨账户弹性网络接口,这些接口允许 Amazon EKS 控制层面与节点进行通信。11. 记录已创建的 VPC 的 VpcId。您在启动节点组模板时需要此值。12. 记录已创建的子网的 SubnetIds,以及您是将它们创建为公有子网还是私有子网。向集群添加节点时,您必

须指定要将节点启动到的子网的 IDs。

创建只带有公有子网的集群 VPC

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 从导航栏中,选择支持 Amazon EKS 的区域。3. 依次选择 Create stack (创建堆栈) 和 With new resources (standard) (使用新资源(标准))。4. 对于选择一个模板,选择指定 Amazon S3 模板 URL。5. 将与您的集群所在的区域对应的 URL 粘贴到文本区域中,然后选择 Next (下一步):

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-vpc-sample.yaml

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-vpc-sample.yaml

6. 在 Specify Details (指定详细信息) 页面上,相应填写参数,然后选择 Next (下一步)。

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 eks-vpc。• VpcBlock: 为您的 VPC 选择 CIDR 块。您部署的每个工作线程节点、Pod 和负载均衡器都会从此块中

分配一个 IP 地址。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

• Subnet01Block: 为子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• Subnet02Block: 为子网 2 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• Subnet03Block: 为子网 3 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。

172

Page 181: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南后续步骤

8. 在 Review 页面上,选择 Create 。9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。10. 记录已创建的安全组的 SecurityGroups 值。向集群添加节点时,必须指定安全组的 ID。安全组应用到在

子网中创建的跨账户弹性网络接口,这些接口允许 Amazon EKS 控制层面与节点进行通信。11. 记录已创建的 VPC 的 VpcId。您在启动节点组模板时需要此值。12. 记录已创建的子网的 SubnetIds。向集群添加节点时,您必须指定要将节点启动到的子网的 IDs。

创建只带有私有子网的集群 VPC

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 从导航栏中,选择支持 Amazon EKS 的区域。3. 依次选择 Create stack (创建堆栈) 和 With new resources (standard) (使用新资源(标准))。4. 对于选择一个模板,选择指定 Amazon S3 模板 URL。5. 将与您的集群所在的区域对应的 URL 粘贴到文本区域中,然后选择 Next (下一步):

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-fully-private-vpc.yaml

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-fully-private-vpc.yaml

6. 在 Specify Details (指定详细信息) 页面上,相应填写参数,然后选择 Next (下一步)。

• 堆栈名称: 为您的 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 eks-vpc。• VpcBlock: 为您的 VPC 选择 CIDR 块。您部署的每个工作线程节点、Pod 和负载均衡器都会从此块中

分配一个 IP 地址。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

• PrivateSubnet01Block: 为子网 1 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet02Block: 为子网 2 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

• PrivateSubnet03Block: 为子网 3 指定 CIDR 块。默认值为大多数实现提供了足够的 IP 地址,但如果没有,则可以更改它。

7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步。8. 在 Review 页面上,选择 Create 。9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。10. 记录已创建的安全组的 SecurityGroups 值。向集群添加节点时,必须指定安全组的 ID。安全组应用到在

子网中创建的跨账户弹性网络接口,这些接口允许 Amazon EKS 控制层面与节点进行通信。11. 记录已创建的 VPC 的 VpcId。您在启动节点组模板时需要此值。12. 记录已创建的子网的 SubnetIds。向集群添加节点时,您必须指定要将节点启动到的子网的 IDs。

后续步骤在创建了 VPC 后,您可以尝试 Amazon EKS 入门 (p. 3)演练,但可以跳过创建您的 Amazon EKS 集群VPC (p. 19) 部分并且为您的集群使用这些子网和安全组。

173

Page 182: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南集群 VPC 注意事项

集群 VPC 注意事项创建 Amazon EKS 集群时,需要为集群指定要使用的 VPC 子网。Amazon EKS 要求指定至少两个可用区内的子网。我们建议使用同时带有公有子网和私有子网的 VPC,以便 Kubernetes 可以在公有子网中创建公有负载均衡器,进而将流量负载平衡到在私有子网中的节点上运行的 pod。

在创建集群时,您还可以指定为集群托管资源的所有子网,例如节点和负载均衡器。Note

在集群中,面向 Internet 的负载均衡器需要公有子网。默认情况下,节点还需要到 Amazon EKSAPIs 的出站 Internet 访问,以便在启动时进行集群自检和节点注册。对于没有出站 Internet 访问的集群,请参阅私有集群 (p. 81)。要拉取容器映像,它们需要访问 Amazon S3 和 Amazon ECR APIs(以及任何其他容器注册表,如DockerHub)。有关更多信息,请参阅 Amazon EKS 安全组注意事项 (p. 176) 中的 和 AWS IP 地址范围。AWS General Reference

您在创建集群时传递的子网影响 Amazon EKS 将用于控制层面的网络接口放置到节点通信的位置。

您可以在创建集群时仅指定公有或私有子网,但存在与这些配置关联的一些限制:

• 私有: 一切均在私有子网中运行,并且 Kubernetes 无法为您的 Pod 创建面向 Internet 的负载均衡器。• 仅公有: 所有内容均在公有子网中运行,包括您的节点。

Amazon EKS 在您的私有子网中创建网络接口,以便于与节点的通信。此通信渠道支持 Kubernetes 功能,例如kubectl exec 和 kubectl logs 。您在创建集群时指定的安全组将应用于为集群控制层面创建的网络接口。

VPC 必须具有 DNS 主机名和 DNS 解析支持。否则,您的节点将无法注册到集群。有关更多信息,请参阅Amazon VPC 用户指南中的在您的 VPC 中使用 DNS。

VPC IP 寻址节点必须能够与控制层面和其他 AWS 服务进行通信。如果您的节点部署在私有子网中,则您必须具有以下任一项:

• 设置子网到 NAT 网关的默认路由。必须向 NAT 网关分配一个公有 IP 地址,以便为节点提供 Internet 访问。

• 为子网配置了几个必需的设置,并执行私有集群 (p. 81)中列出的必要操作。

如果自行管理的节点部署到公有子网,则必须将子网配置为自动分配公有 IP 地址。否则,必须在启动节点实例时为其分配一个公有 IP 地址。如果托管节点部署到公有子网,则必须将子网配置为自动分配公有 IP 地址。这是因为,如果节点不是,则不会向节点分配公有 IP 地址。使用以下命令确定您的公有子网是否配置为自动分配公有 IP 地址。

aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=<VPC-ID>" | grep 'SubnetId\|MapPublicIpOnLaunch'

输出如下所示。

"MapPublicIpOnLaunch": <false>,"SubnetId": "<subnet-aaaaaaaaaaaaaaaaa>","MapPublicIpOnLaunch": <false>,"SubnetId": "<subnet-bbbbbbbbbbbbbbbbb>",

对于已将 MapPublicIpOnLaunch 设置为 false 的任何子网 ,请将设置更改为 true。

174

Page 183: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南VPC 标记要求

aws ec2 modify-subnet-attribute --map-public-ip-on-launch --subnet-id <subnet-aaaaaaaaaaaaaaaaa>

Important

如果您使用 Amazon EKS AWS CloudFormation 模板 (p. 170)在 March 26, 2020 之前部署 VPC,则需要更改公有子网的设置。

在用于 Amazon EKS 集群的 VPC 中,您可以定义私有 (RFC 1918) 和公有 (非 RFC 1918) CIDR 范围。有关更多信息,请参阅 中的IPv4向 VPC 中添加 CIDR 块。Amazon VPC 用户指南为 VPC 和子网选择无类域间路由 (CIDR) 块时,请确保这些块包含您计划部署的所有 Amazon EC2 节点和 Pod 的足够 IP 地址。每个 Pod 应至少有一个 IP 地址。您可以通过实施具有共享服务 VPC 的中转网关来节省 IP 地址的使用。有关更多信息,请参阅具有共享服务的隔离VPCs和混合网络中的 EKS VPC 可路由 IP 地址保留模式。

控制层面为每个集群在 VPC 中创建最多 4 个Amazon EKS请求者托管的网络接口。请确保您指定的子网对于请求者托管的网络接口和您的 Pod 有足够的可用 IP 地址。

VPC 标记要求在创建早于 1.15 版的 Amazon EKS 集群时,Amazon EKS 按以下方式标记包含您指定的子网的 VPC,以便Kubernetes 可以发现它:

Key Value

kubernetes.io/cluster/<cluster-name> shared

• 键: 值与您的 <cluster-name> 集群的名称匹配。Amazon EKS• 值: 值允许多个集群使用此 VPC。shared

此标签不是必需的,也不由 Amazon EKS 为 1.15 或更高版本的集群创建。如果您将 1.15 或更高版本的集群部署到已有此标签的 VPC,则不会删除该标签。

子网添加标签要求创建 Amazon EKS 集群时,Amazon EKS 按以下方式为您指定的子网添加标签,以便 Kubernetes 可以发现它们:

键 值

kubernetes.io/cluster/<cluster-name> shared

• 键:<cluster-name> 值与您的 Amazon EKS 集群匹配。• 值:shared 值允许多个集群使用此子网。

内部负载均衡器的私有子网标记要求必须按照以下方式为私有子网添加标签,以便 Kubernetes 知道它可以将这些子网用于内部负载均衡器。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建 VPC (p. 170)。

175

Page 184: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 安全组注意事项

键 值

kubernetes.io/role/internal-elb 1

外部负载均衡器的公有子网标记选项必须按照以下方式为公有子网添加标签,以便 Kubernetes 知道仅将这些子网用于外部负载均衡器,而不是在每个可用区中选择一个公有子网(按子网 ID 的字母表顺序选择)。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建VPC (p. 170)。

键 值

kubernetes.io/role/elb 1

Amazon EKS 安全组注意事项以下部分介绍了集群、控制层面以及集群的节点安全组的推荐或最低所需安全组设置。这些注意事项取决于您使用的 Kubernetes 版本和 Amazon EKS 平台版本。

集群安全组从 Kubernetes 版本 1.14 和Amazon EKS平台版本 (p. 63) 开始的 eks.3 集群在创建集群安全组时创建集群安全组。当早期版本的集群升级到此 Kubernetes 版本和平台版本时,也会出现这种情况。集群安全组旨在允许来自控制层面和托管节点组 (p. 86)的所有流量在彼此之间自由流动。通过将集群安全组分配给控制层面跨账户网络接口和托管节点组实例,您无需配置复杂的安全组规则来允许此通信。分配到此安全组的任何实例或网络接口都可以与此安全组的其他资源自由通信。

您可以在 AWS 管理控制台 中集群的 Networking (联网) 部分下,或使用以下 AWS CLI 命令检查您集群的集群安全组:

aws eks describe-cluster --name <cluster_name> --query cluster.resourcesVpcConfig.clusterSecurityGroupId

如果您的集群运行的是 Kubernetes 版本 1.14 和 平台版本 (p. 63) 或更高版本,我们建议您将集群安全组添加到所有现有和将来的节点组。eks.3有关更多信息,请参阅 https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html 中的您的 VPC 的安全组Amazon VPC 用户指南。 Amazon EKS托管节点组自动配置为使用集群安全组。 (p. 86)

  协议 端口 源 Destination

推荐入站流量 全部 全部 自身  

推荐出站流量 全部 全部   0.0.0.0/0

限制集群流量

如果您需要限制控制层面与节点之间的开放端口,则可以修改默认集群安全组以仅允许以下所需的最小端口。所需的最小端口与以前的 Amazon EKS 版本相同。

176

Page 185: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南控制层面和节点安全组

  协议 Port 源 Destination

最小入站流量 TCP 443 集群安全组  

最小入站流量* TCP 10250 集群安全组  

最小出站流量 TCP 443   集群安全组

最小出站流量* TCP 10250   集群安全组

*预期您的节点用于节点间通信的任何协议和端口(如果需要)都应包括在内。节点还需要对 Amazon EKSAPIs 的出站 Internet 访问,以便在启动时进行集群自检和节点注册,或者您已在 私有集群 (p. 81) 中实施所需的设置。要拉取容器映像,它们需要访问 Amazon S3、Amazon ECR APIs 以及它们需要从中拉取映像的任何其他容器注册表,例如 DockerHub。 有关更多信息,请参阅《AWS 一般参考》中的 AWS IP 地址范围。

控制层面和节点安全组对于 Kubernetes 版本 1.14 和 Amazon EKS平台版本 (p. 63) 之前的 eks.3 集群,可通过手动创建控制层面安全组并在创建集群时指定该安全组来配置控制层面到节点的通信。在创建集群时,此安全组随后将附加到集群的跨账户网络接口。

Note

如果您直接使用 API 或 AWS CloudFormation 等工具来创建集群,但未指定安全组,则 VPC 的默认安全组将应用于控制层面跨账户网络接口。

您可以在 AWS 管理控制台 中集群的 Networking (联网) 部分(作为 Additional security groups (其他安全组)列出)下,或使用以下 AWS CLI 命令检查您集群的控制层面安全组:

aws eks describe-cluster --name <cluster_name> --query cluster.resourcesVpcConfig.securityGroupIds

如果您在 AWS CloudFormation 演练中使用 Amazon EKS 入门 (p. 3) 模板启动节点,则 AWSCloudFormation 会修改控制层面安全组以允许与节点通信。Amazon EKS 强烈建议您为每个控制层面使用专用安全组(每个集群一个)。如果您与其他 Amazon EKS 集群或资源共享控制层面安全组,您可以阻止或中断与这些资源的连接。

节点的安全组和控制层面的安全组到节点的通信已设置为阻止通信到节点中的特权端口。如果您的应用程序需要从控制层面或节点添加的入站或出站访问,您必须将这些规则添加到与您的集群关联的安全组。有关更多信息,请参阅 Amazon VPC 用户指南 中的您的 VPC 的安全组。

Note

要允许特权端口上的代理功能或要自行运行 CNCF 符合性测试,您必须编辑控制层面和节点的安全组。节点侧上的安全组需要允许从控制层面到端口 0-65535 的入站访问,而且控制层面侧需要允许通过端口 0-65535 对节点的出站访问。

控制层面安全组

  协议 端口范围 源 Destination

最小入站流量 TCP 443 所有节点安全组

启用集群终端节点私有访问 (p. 48)时:生成 API 服务器客户端流量的任何安

 

177

Page 186: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 联网 (CNI)

  协议 端口范围 源 Destination全组(例如,集群的VPC 内堡垒主机上的 kubectl 命令)

推荐入站流量 TCP 443 所有节点安全组

启用集群终端节点私有访问 (p. 48)时:生成 API 服务器客户端流量的任何安全组(例如,集群的VPC 中堡垒主机上的 kubectl 命令)

 

最小出站流量 TCP 10250   所有节点安全组

推荐出站流量 TCP 1025-65535   所有节点安全组

节点安全组

  协议 端口范围 源 Destination

最小入站流量(来自其他节点)

您预期节点用于节点间通信的任何协议

您希望节点用于节点间通信的任何端口

所有节点安全组  

最小入站流量 (来自控制层面)

TCP 10250 控制层面安全组  

推荐入站流量 全部

TCP

全部

443,1025-65535

所有节点安全组

控制层面安全组

 

最小出站流量* TCP 443   控制层面安全组

推荐出站流量 全部 全部   0.0.0.0/0

*节点还需要通过 Internet 或 VPC 终端节点访问 Amazon EKS APIs,以便在启动时进行集群自检和节点注册。要拉取容器映像,它们需要访问 Amazon S3 和 Amazon ECR APIs(以及任何其他容器注册表,如DockerHub)。有关更多信息,请参阅 https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html 中的AWS IP 地址范围AWS General Reference和。私有集群 (p. 81)

如果您有多个与节点关联的安全组,则其中一个安全组必须应用了以下标签。如果您只有一个与节点关联的安全组,则标签是可选的。有关标记的更多信息,请参阅通过控制台使用标签 (p. 263)。

Key Value

kubernetes.io/cluster/<cluster-name> owned

Pod 联网 (CNI)Amazon EKS 支持使用适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件的本机 VPC 网络。使用此插件允许 Kubernetes Pod 在 Pod 内具有与其在 VPC 网络上相同的 IP 地址。插件是一个在 GitHub

178

Page 187: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南外部 SNAT

上维护的开源项目。 有关更多信息,请参阅 amazon-vpc-cni-k8s 和建议:。 上的适用于通过 AWS VPC 的Kubernetes 联网的 CNI 插件GitHub。 完全支持在 Amazon EKS 和 AWS 上自行管理的 Kubernetes 集群上使用 Amazon VPC CNI 插件。

Note

Kubernetes 可使用容器网络接口 (CNI) 进行可配置的网络设置。Amazon VPC CNI 插件可能不会满足所有使用案例的要求。Amazon EKS 维护一个合作伙伴网络,以提供具有商业支持选项的替代 CNI解决方案。有关更多信息,请参阅备选的兼容 CNI 插件 (p. 202)。

当您创建 Amazon EKS 节点时,它有一个网络接口。所有 Amazon EC2 实例类型都支持多个网络接口。在创建实例时附加到实例的网络接口称为主网络接口。附加到实例的任何其他网络接口称为辅助网络接口。可以为每个网络接口分配多个私有 IP 地址。其中一个私有 IP 地址是主要 IP 地址,而分配给网络接口的所有其他地址是辅助 IP 地址。有关网络接口的更多信息,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html 中的弹性网络接口Amazon EC2 用户指南(适用于 Linux 实例)。有关每个网络接口支持的网络接口和私有 IP 地址数量的更多信息,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)。例如,m5.large 实例类型支持三个网络接口,每个网络接口有 10 个私有 IP地址。

适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件随您的每个节点一起部署。插件包含两个主要组件:

• L-IPAM 守护程序 – 负责创建网络接口并将网络接口附加到 Amazon EC2 实例,将辅助 IP 地址分配给网络接口,并在每个节点上维护 IP 地址的温池,以便在安排时分配到 Kubernetes Pod。当节点上运行的Pod 数超过可分配给单个网络接口的地址数时,只要实例的最大网络接口数尚未附加,插件就会开始分配新的网络接口。有配置变量允许您更改插件创建新网络接口时的默认值。有关更多信息,请参阅 上的WARM_ENI_TARGET、WARM_IP_TARGET 和 MINIMUM_IP_TARGET。GitHub

您部署的每个 Pod 都会从连接到实例的其中一个网络接口分配一个辅助私有 IP 地址。以前,提到的是m5.large 实例为每个网络接口支持三个网络接口和十个私有 IP 地址。即使 m5.large 实例支持 30 个私有 IP 地址,您也无法向该节点部署 30 个 Pod。要确定可将多少 Pod 部署到节点,请使用以下公式:

(Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2

使用此公式,m5.large 实例类型最多可支持 29 个 Pod。有关每种实例类型支持的最大 Pod 数的列表,请参阅 上的 eni-max-pods.txtGitHub。 系统 Pod 计入最大 Pod。例如,CNI 插件和 kube-proxy Pod在集群中的每个节点上运行,因此您只能将 27 个额外的 Pod 部署到 m5.large 实例,而不是 29 个。此外,CoreDNS 在集群中的某些节点上运行,这会为其上运行的节点将最大 Pod 减少一个。

默认情况下,部署到节点的所有 Pod 都分配了相同的安全组,并分配了来自分配给实例的其中一个网络接口所连接子网的 CIDR 块的私有 IP 地址。您可以通过配置 CNI 自定义网络 (p. 191),从与主网络接口连接到的子网不同的 CIDR 块分配 IP 地址。您还可以使用 CNI 自定义网络来分配同一安全组节点上的所有 Pod。分配给所有 Pod 的安全组可能与分配给主网络接口的安全组不同。您可以使用 Pod 的安全组将唯一安全组分配给部署到多个 Amazon EC2 实例类型的 Pod。有关更多信息,请参阅Pod 的安全组 (p. 181)。

• CNI 插件 – 负责连接主机网络(例如,配置网络接口和虚拟以太网对)并向 Pod 命名空间添加正确的网络接口。

外部源网络地址转换 (SNAT)VPC 内的通信(如 Pod 到 Pod)在私有 IP 地址之间是直接的,无需源网络地址转换 (SNAT)。当流量以VPC 外部的地址为目标时,默认情况下,Kubernetes 的 Amazon VPC CNI 插件将每个 Pod 的私有 IP 地址转换为分配给 Pod 在其上运行的 节点的主 网络接口Amazon EC2(网络接口)的主要私有 IP 地址。SNAT:

179

Page 188: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南外部 SNAT

• 使 Pod 能够与互联网进行双向通信。该节点必须位于公有子网中,并且向其主网络接口的主私有 IP 地址分配了公有或弹性 IP 地址。流量在公共或弹性 IP 地址之间进行转换,并通过 Internet 网关与 Internet 之间进行路由,如下图所示。

SNAT 是必需的,因为 Internet 网关只能在主私有 IP 地址与分配给运行 Pod 的 Amazon EC2 实例节点的主网络接口的公有或弹性 IP 地址之间进行转换。

• 阻止其他私有 IP 地址空间中的设备(例如,VPC 对等连接、中转 VPC 或 Direct Connect)直接与未分配Amazon EC2 实例节点的主网络接口的主私有 IP 地址的 Pod 进行通信。

如果 Internet 或其他私有 IP 地址空间中的设备需要与某个 Pod 进行通信,而该 Pod 未获得分配给运行 Pod的 Amazon EC2 实例节点的主网络接口的主私有 IP 地址,则:

• 节点必须部署在具有到公有子网中的 NAT 设备的路由的私有子网中。• 您需要使用以下命令在 CNI 插件 aws-node DaemonSet 中启用外部 SNAT:

kubectl set env daemonset -n kube-system aws-node AWS_VPC_K8S_CNI_EXTERNALSNAT=true

启用外部 SNAT 后,当流量以 VPC 外部的地址为目标时,CNI 插件不会将 Pod 的私有 IP 地址转换为分配给Pod 运行实例节点的主网络接口的主私有 IP 地址。Amazon EC2从 Pod 到 Internet 的流量在外部与 NAT 设备的公有 IP 地址进行双向转换,并通过 Internet 网关路由到 Internet 和从 Internet 中向外路由,如下图所示。

180

Page 189: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

Pod 的安全组Pod 的安全组将 Amazon EC2 安全组与 Kubernetes Pod 集成。您可以使用 Amazon EC2 安全组来定义规则,这些规则允许与许多 Amazon EC2 实例类型上运行的节点相部署的 Pod 之间的入站和出站网络流量。有关此功能的详细说明,请参阅 Pod 安全组简介博客文章。

Considerations在为 Pod 部署安全组之前,请考虑以下限制和条件:

• 您的 Amazon EKS 集群必须运行 Kubernetes 版本 1.17 和 Amazon EKS 平台版本 eks.3 或更高版本。您不能对您部署到 Amazon EC2 的 Kubernetes 集群上的 Pod 使用安全组。

• 与安全组关联的 Pod 之间的流量不会被限制为 Calico network policy (校准网络策略) (p. 205) 执行,而仅限于 Amazon EC2 安全组执行。社区正在消除此限制。

• Pod 的安全组不能与部署到 Fargate 的 Pod 一起使用。• Pod 的安全组不能与 Windows 节点一起使用。• 大多数基于 Nitro 的 实例系列(包括 Amazon EC2、m5、c5、r5、p3、m6g、cg6 和 r6g 实例系列)支持

Pod 的安全组。实例系列不受支持。t3有关支持的实例的完整列表,请参阅the section called “支持的实例” (p. 184)。您的节点必须是受支持的实例类型之一。

• 源 NAT 对来自具有已分配安全组的 Pod 的出站流量禁用,以便应用出站安全组规则。要访问 Internet,必须在使用 NAT 网关或实例配置的私有子网中部署的节点上启动带有已分配安全组的 Pod。将安全组部署到公有子网的 Pod 无法访问 Internet。

• 如果您将自定义网络 (p. 191)和安全组用于 Pod,则使用由 Pod 安全组指定的安全组,而不是 ENIconfig 中指定的安全组。

部署 Pod 的安全组为 Pod 部署安全组

1. 使用以下命令检查您当前的 CNI 插件版本。

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

181

Page 190: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

输出类似于以下输出。

amazon-k8s-cni:<1.7.1>

如果您的 CNI 插件版本低于 1.7.1,则将 CNI 插件升级到版本 1.7.1 或更高版本。有关更多信息,请参阅适用于 Kubernetes 的 Amazon VPC CNI 插件升级 (p. 201)。

2. 将 AmazonEKSVPCResourceController 托管策略添加到与您的 集群关联的 (p. 280)集群角色Amazon EKS。策略允许该角色管理网络接口、其私有 IP 地址以及与实例之间的附加和分离。以下命令将策略添加到名为 <eksClusterRole> 的集群角色。

aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController \ --role-name <eksClusterRole>

3. 通过在 ENABLE_POD_ENI true 中将 aws-node 变量设置为 DaemonSet,启用 CNI 插件以管理 Pod 的网络接口。 将此设置设置为 true 后,对于集群中的每个节点,插件都会添加一个值为vpc.amazonaws.com/has-trunk-attached=true 的标签。 VPC 资源控制器创建并附加一个称为中继网络接口的特殊网络接口,其描述为 aws-k8s-trunk-eni。

kubectl set env daemonset aws-node -n kube-system ENABLE_POD_ENI=true

Note

中继网络接口包含在实例类型支持的最大网络接口数中。有关每种实例类型支持的最大接口数的列表,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)。如果您的节点已附加最大数量的标准网络接口,则 VPC 资源控制器将预留空间。您必须缩小正在运行的 Pod,以使控制器能够分离和删除标准网络接口、创建中继网络接口并将其附加到实例。

您可以使用以下命令查看哪些节点的 aws-k8s-trunk-eni 设置为 true。

kubectl get nodes -o wide -l vpc.amazonaws.com/has-trunk-attached=true

创建中继网络接口后,可以从中继或标准网络接口为 Pod 分配辅助 IP 地址。如果删除节点,则中继接口会自动删除。

4. 创建要将资源部署到的命名空间。

kubectl create namespace <my-namespace>

5. 将 Amazon EKS SecurityGroupPolicy 部署到您的集群。

a. 将以下示例安全策略保存到名为 <my-security-group-policy.yaml> 的文件中。如果您希望根据服务账户标签选择 Pod,则可以将 podSelector 替换为 serviceAccountSelector。您必须指定一个或另一个选择器。如果为空 podSelector(示例:podSelector: {}),则选择命名空间中的所有Pod。如果为空,则选择命名空间中的所有服务账户。serviceAccountSelector您必须为 IDs 指定 1-5 个安全组 groupIds。 如果您指定多个 ID,则所有安全组中的所有规则的组合对所选 Pod 有效。

apiVersion: vpcresources.k8s.aws/v1beta1kind: SecurityGroupPolicymetadata: name: <my-security-group-policy> namespace: <my-namespace>spec:

182

Page 191: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

<podSelector>: matchLabels: <role>: <my-role> securityGroups: groupIds: - <sg-abc123>

Important

• 您在策略中指定的安全组必须存在。如果它们不存在,则当您部署与选择器匹配的 pod时,您的 pod 仍会在创建过程中卡住。如果您描述 pod,您将看到类似于以下内容的错误消息: An error occurred (InvalidSecurityGroupID.NotFound) whencalling the CreateNetworkInterface operation: The securityGroupID '<sg-abc123>' does not exist。

• 安全组必须允许从集群安全组(对于 kubelet)通过已配置探测器的任何端口进行入站通信。

• 安全组必须允许通过 TCP 和 UDP 端口 53 与集群安全组(对于 CoreDNS)进行出站通信。集群安全组还必须允许来自与 Pod 关联的所有安全组的入站 TCP 和 UDP 端口 53通信。

b. 部署策略。

kubectl apply -f <my-security-group-policy.yaml>

6. 使用与您在上一步中指定的 <my-role> 的 <podSelector> 值匹配的标签部署示例应用程序。

a. 将以下内容保存到名为 <my-deployment.yaml> 的文件中。

apiVersion: apps/v1kind: Deploymentmetadata: name: <my-deployment> namespace: <my-namespace> labels: app: <my-app>spec: replicas: <1> selector: matchLabels: app: <my-app> template: metadata: labels: app: <my-app> role: <my-role> spec: containers: - name: <my-container> image: <my-image> ports: - containerPort: <80>

b. 使用以下命令部署应用程序。当您部署应用程序时,CNI 插件匹配 role 标签,您在上一步中指定的安全组将应用于 Pod。VPC 资源控制器创建一个称为分支网络接口的特殊网络接口,其描述为 aws-k8s-branch-eni,并将安全组与之关联。除了附加到节点的标准和中继网络接口之外,还会创建分支网络接口。

kubectl apply -f <my-deployment.yaml>

183

Page 192: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

Note

• 如果您的 Pod 停滞在 Waiting 状态,并且在您描述 Pod 时看到 Insufficientpermissions: Unable to create Elastic Network Interface.,请确认您在上一步中已将 IAM 策略添加到 IAM 集群角色。

• 如果您的 Pod 停滞在 Pending 状态,请确认您的节点实例类型在 the section called “支持的实例” (p. 184) 中列出,并且实例类型支持的最大分支网络接口数乘以节点组中节点数的尚未满足。例如,m5.large 实例支持九个分支网络接口。如果您的节点组有五个节点,则最多可为节点组创建 45 个分支网络接口。您尝试部署的第 46 个 Pod 将处于Pending 状态,直到删除具有关联安全组的另一个 Pod。

如果您运行 kubectl describe pod <my-deployment-xxxxxxxxxx-xxxxx> -n <my-namespace> 并看到类似于以下消息的消息,则可以安全地忽略它。在 CNI 插件尝试设置主机网络时,将会出现此消息;在创建网络接口时可能会失败。CNI 插件将记录此事件,直到创建了网络接口。

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "<e24268322e55c8185721f52df6493684f6c2c3bf4fd59c9c121fd4cdc894579f>" network for pod "<my-deployment-59f5f68b58-c89wx>": networkPlugincni failed to set up pod "<my-deployment-59f5f68b58-c89wx_my-namespace>" network: add cmd: failed to assign an IP address to container

不能超过实例类型上可以运行的最大 Pod 数。有关可以在每个实例类型上运行的最大 Pod 数的列表,请参阅 上的 eni-max-pods.txtGitHub。 当您删除具有关联安全组的 Pod 时,或删除运行 Pod 的节点时,VPC 资源控制器会删除分支网络接口。如果您删除带有 Pod 的集群,并使用 Pod 作为安全组,则控制器不会删除分支网络接口,因此您需要自行删除它们。

Amazon EC2 支持的实例和分支网络接口下表列出了可用于每种受支持的 Amazon EC2 实例类型的分支网络接口的数量。

实例类型 分支网络接口

a1.medium 10

a1.large 9

a1.xlarge 18

a1.2xlarge 38

a1.4xlarge 54

a1.金属 54

c5.large 9

c5.xlarge 18

c5.2xlarge 38

c5.4xlarge 54

c5.9xlarge 54

c5.12xlarge 54

184

Page 193: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

实例类型 分支网络接口

c5.18xlarge 107

c5.24xlarge 107

c5.金属 107

c5a.large 9

c5a.xlarge 18

c5a.2xlarge 38

c5a.4xlarge 54

c5a.8xlarge 54

c5a.12xlarge 54

c5a.16xlarge 107

c5a.24xlarge 107

c5d.large 9

c5d.xlarge 18

c5d.2xlarge 38

c5d.4xlarge 54

c5d.9xlarge 54

c5d.12xlarge 54

c5d.18xlarge 107

c5d.24xlarge 107

c5d.金属 107

c5n.large 9

c5n.xlarge 18

c5n.2xlarge 38

c5n.4xlarge 54

c5n.9xlarge 54

c5n.18xlarge 107

c5n.metal 107

c6g.medium 4

c6g.large 9

c6g.xlarge 18

c6g.2xlarge 38

185

Page 194: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

实例类型 分支网络接口

c6g.4xlarge 54

c6g.8xlarge 54

c6g.12xlarge 54

c6g.16xlarge 107

c6g.金属 107

g4dn.xlarge 39

g4dn.2xlarge 39

g4dn.4xlarge 59 -

g4dn.8xlarge 58

g4dn.12xlarge 54

g4dn.16xlarge 118

g4dn.metal 107

i3en.large 5

i3en.xlarge 12

i3en.2xlarge 28

i3en.3xlarge 38

i3en.6xlarge 54

i3en.12xlarge 114

i3en.24xlarge 107

i3en.metal 107

inf1.xlarge 38

inf1.2xlarge 38

inf1.6xlarge 54

inf1.24xlarge 107

m5.large 9

m5.xlarge 18

m5.2xlarge 38

m5.4xlarge 54

m5.8xlarge 54

m5.12xlarge 54

m5.16xlarge 107

186

Page 195: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

实例类型 分支网络接口

m5.24xlarge 107

m5.metal 107

m5a.large 9

m5a.xlarge 18

m5a.2xlarge 38

m5a.4xlarge 54

m5a.8xlarge 54

m5a.12xlarge 54

m5a.16xlarge 107

m5a.24xlarge 107

m5ad.large 9

m5ad.xlarge 18

m5ad.2xlarge 38

m5ad.4xlarge 54

m5ad.8xlarge 54

m5ad.12xlarge 54

m5ad.16xlarge 107

m5ad.24xlarge 107

m5d.large 9

m5d.xlarge 18

m5d.2xlarge 38

m5d.4xlarge 54

m5d.8xlarge 54

m5d.12xlarge 54

m5d.16xlarge 107

m5d.24xlarge 107

m5d.metal 107

m5dn.large 9

m5dn.xlarge 18

m5dn.2xlarge 38

m5dn.4xlarge 54

187

Page 196: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

实例类型 分支网络接口

m5dn.8xlarge 54

m5dn.12xlarge 54

m5dn.16xlarge 107

m5dn.24xlarge 107

m5n.large 9

m5n.xlarge 18

m5n.2xlarge 38

m5n.4xlarge 54

m5n.8xlarge 54

m5n.12xlarge 54

m5n.16xlarge 107

m5n.24xlarge 107

m6g.medium 4

m6g.large 9

m6g.xlarge 18

m6g.2xlarge 38

m6g.4xlarge 54

m6g.8xlarge 54

m6g.12xlarge 54

m6g.16xlarge 107

m6g.金属 107

p3.2xlarge 38

p3.8xlarge 54

p3.16xlarge 114

p3dn.24xlarge 107

r5.large 9

r5.xlarge 18

r5.2xlarge 38

r5.4xlarge 54

r5.8xlarge 54

r5.12xlarge 54

188

Page 197: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

实例类型 分支网络接口

r5.16xlarge 107

r5.24xlarge 107

r5.metal 107

r5a.large 9

r5a.xlarge 18

r5a.2xlarge 38

r5a.4xlarge 54

r5a.8xlarge 54

r5a.12xlarge 54

r5a.16xlarge 107

r5a.24xlarge 107

r5ad.large 9

r5ad.xlarge 18

r5ad.2xlarge 38

r5ad.4xlarge 54

r5ad.8xlarge 54

r5ad.12xlarge 54

r5ad.16xlarge 107

r5ad.24xlarge 107

r5d.large 9

r5d.xlarge 18

r5d.2xlarge 38

r5d.4xlarge 54

r5d.8xlarge 54

r5d.12xlarge 54

r5d.16xlarge 107

r5d.24xlarge 107

r5d.metal 107

r5dn.large 9

r5dn.xlarge 18

r5dn.2xlarge 38

189

Page 198: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 的安全组

实例类型 分支网络接口

r5dn.4xlarge 54

r5dn.8xlarge 54

r5dn.12xlarge 54

r5dn.16xlarge 107

r5dn.24xlarge 107

r5n.large 9

r5n.xlarge 18

r5n.2xlarge 38

r5n.4xlarge 54

r5n.8xlarge 54

r5n.12xlarge 54

r5n.16xlarge 107

r5n.24xlarge 107

r6g.medium 4

r6g.large 9

r6g.xlarge 18

r6g.2xlarge 38

r6g.4xlarge 54

r6g.8xlarge 54

r6g.12xlarge 54

r6g.16xlarge 107

z1d.large 13

z1d.xlarge 28

z1d.2xlarge 58

z1d.3xlarge 54

z1d.6xlarge 54

z1d.12xlarge 107

z1d.metal 107

190

Page 199: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 自定义网络

CNI 自定义网络默认情况下,在为 Pod 分配新的网络接口时,ipamD 将使用节点的主网络接口的安全组和子网。您可能希望Pod 在与您的控制层面安全组相同的 VPC 中使用不同的安全组或子网。例如:

• 子网中可用 IP 地址的数量是有限的。这可能会限制可在集群中创建的 Pod 的数量。对 Pod 使用不同的子网将允许您增加可用 IP 地址的数量。

• 出于安全原因,您必须使用与节点的主网络接口不同的安全组或子网。• 这些节点在公有子网中配置,您希望使用 NAT 网关将 Pod 放在私有子网中。有关更多信息,请参阅外部源

网络地址转换 (SNAT) (p. 179)。

Note

• 您可以为自行管理节点组或使用使用自定义 AMI 的启动模板 (p. 97)创建的托管节点组配置自定义网络。本主题中的过程需要适用于 Kubernetes 的 Amazon VPC CNI 插件 1.4.0 版或更高版本。要检查您的 CNI 版本,并在必要时进行升级,请参阅适用于 Kubernetes 的 Amazon VPC CNI 插件升级 (p. 201)。

• 启用自定义网络将从使用它的每个节点中有效地删除可用网络接口(及其针对 Pod 的所有可用 IP地址)。启用自定义网络时,节点的主网络接口不用于 Pod 放置。

• 本主题中的过程指示 CNI 插件将与实例中的主网络接口相关的不同安全组关联到辅助网络接口。使用辅助网络接口的所有 Pod 仍将共享使用辅助网络接口,并将使用相同的安全组。如果您要将不同的安全组分配给各个 Pod,则可以使用 Pod 的安全组 (p. 181)。Pod 的安全组创建额外的网络接口,每个接口都可以分配一个唯一的安全组。适用于 Pod 的安全组可以与或与自定义网络一起使用。

配置 CNI 自定义网络

1. 将辅助 CIDR 块与您集群的 VPC 关联。有关更多信息,请参阅 IPv4 中的将辅助 CIDR 块与您的 VPC 关联Amazon VPC 用户指南。

2. 使用您的辅助 CIDR 块在您的 VPC 中为每个 可用区 创建一个子网。您的自定义子网必须来自与启动节点的子网不同的 VPC CIDR 块。有关更多信息,请参阅 中的在 VPC 中创建子网Amazon VPC 用户指南。

3. 在 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG true 中将 aws-node 环境变量设置为 DaemonSet:

kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true

4. 查看当前安装的 CNI 版本。

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

输出:

amazon-k8s-cni:1.7.5

5. 如果您安装了版本 1.3 或更高版本的 CNI,则可以跳到步骤 6。为集群定义新的 ENIConfig 自定义资源。

a. 创建一个名为 ENIConfig.yaml 的文件,并将以下内容粘贴到该文件中:

apiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata:

191

Page 200: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 自定义网络

name: eniconfigs.crd.k8s.amazonaws.comspec: scope: Cluster group: crd.k8s.amazonaws.com version: v1alpha1 names: plural: eniconfigs singular: eniconfig kind: ENIConfig

b. 使用以下命令将该文件应用于集群:

kubectl apply -f ENIConfig.yaml

6. 为您希望在其中安排 Pod 的每个子网创建 ENIConfig 自定义资源。

a. 为每个网络接口配置创建一个唯一的文件。每个文件必须包含具有 name 的唯一值的以下内容。 我们强烈建议为 name 使用与子网的 可用区 匹配的值,因为这可以简化多可用区 Auto Scaling 组的部署(请参阅下面的步骤 6c)。

在此示例中,将创建一个名为 us-west-2a.yaml 的文件。将 <example values>、name 和subnet 的 securityGroups 替换为您自己的值。在此示例中,我们遵循最佳实践,并将 name的值设置为子网所在的可用区。如果您没有要为 Pod 附加的特定安全组,您可以暂时将该值留空。稍后,您将在 ENIConfig 中指定节点安全组。

apiVersion: crd.k8s.amazonaws.com/v1alpha1kind: ENIConfigmetadata: name: <us-west-2a>spec: securityGroups: - <sg-0dff111a1d11c1c11> subnet: <subnet-011b111c1f11fdf11>

Note

子网和安全组的每个组合均需要有自己的自定义资源。如果您在同一个 可用区 中有多个子网,请使用以下命令使用匹配的配置名称注释每个子网中的节点。

kubectl annotate node <node-name>.<region>.compute.internal k8s.amazonaws.com/eniConfig=<subnet1ConfigName>

b. 使用以下命令将您创建的每个自定义资源文件应用于您的集群:

kubectl apply -f <us-west-2a>.yaml

c. (可选,但建议用于多 可用区 节点组)默认情况下,Kubernetes 将节点的 可用区 应用于 failure-domain.beta.kubernetes.io/zone 标签。如果您使用 VPC 中的每个 ENIConfig 命名您的 可用区 自定义资源,如步骤 6a 中所推荐,则可以使用以下命令,让 Kubernetes 自动为节点的 ENIConfig应用相应的 可用区。

kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=failure-domain.beta.kubernetes.io/zone

Note

确保对于 ENI_CONFIG_ANNOTATION_DEF 环境变量具有键 k8s.amazonaws.com/eniConfig 的注释不存在于 aws-node 守护进程集的容器规范中。如果存在,它会覆盖ENI_CONFIG_LABEL_DEF 值,而应被删除。您可以检查是否使用 kubectl describe

192

Page 201: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 指标帮助程序

daemonset aws-node -n kube-system | grep ENI_CONFIG_ANNOTATION_DEF命令设置了此变量。如果没有返回输出,则未设置此变量。

7. 创建新的自行管理节点组。对于托管节点组,请使用具有启动模板 (p. 97)的自定义 AMI。

a. 使用以下公式确定每个节点上可以计划的最大 Pod 数。

maxPods = (number of interfaces - 1) * (max IPv4 addresses per interface - 1) + 2

例如,m5.large 实例类型支持三个网络接口,并且每个接口有 10 个 IPv4 地址。将值插入到公式中时,实例最多可支持 20 个 Pod,如以下计算所示。

maxPods = (3 - 1) * (10 - 1) + 2 = 20

有关每个实例类型的最大网络接口数的更多信息,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)。

b. 按照中自行管理节点启动自管理 Amazon Linux 节点 (p. 98)的步骤创建新的自行管理节点组。打开AWS CloudFormation 模板后,按照说明中所述输入值。指定您在部署的 ENIConfig 资源中指定的子网。对于 BootstrapArguments 字段,输入以下值。

--use-max-pods false --kubelet-extra-args '--max-pods=<20>'

8. 创建节点组后,记录为子网创建的安全组并将安全组应用于关联的 ENIConfig。 使用以下命令编辑每个ENIConfig,将 <eniconfig-name> 替换为您的值:

kubectl edit eniconfig.crd.k8s.amazonaws.com/<eniconfig-name>

如果您遵循了步骤 6a 和 6c 中的最佳实践,则 eniconfig-name 对应于 可用区 名称。

spec 节应如下所示:

spec: securityGroups: - <sg-0dff222a2d22c2c22> subnet: <subnet-022b222c2f22fdf22>

9. 如果在您集群中有任何节点放置 Pod,然后您才能完成此过程,则应终止这些节点。只有向k8s.amazonaws.com/eniConfig 标签注册的新节点才能使用新的自定义联网功能。

CNI 指标帮助程序CNI 指标帮助程序是一种工具,您可以用它来抓取网络接口和 IP 地址信息、在集群级别聚合指标,并将指标发布到 Amazon CloudWatch。

在管理 Amazon EKS 集群时,您可能希望了解已经分配了多少个 IP 地址以及还有多少个地址可用。CNI 指标帮助程序可帮助您:

• 跟踪这些指标随时间的变化• 诊断和排除与 IP 分配和回收相关的问题• 提供容量规划见解

预配置节点时,CNI 插件会自动将辅助 IP 地址池从节点的子网分配给主网络接口 (eth0)。此 IP 地址池称为热池,其大小由节点的实例类型决定。例如,一个 c4.large 实例可以支持三个网络接口,每个接口有九个

193

Page 202: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 指标帮助程序

IP 地址。可供指定 Pod 使用的 IP 地址数量比最大值(十个)少一个,因为其中一个 IP 地址预留给弹性网络接口自身。有关更多信息,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的Amazon EC2 用户指南(适用于 Linux 实例)每个实例类型的每个网络接口的私有 IP 地址。

在 IP 地址池耗尽时,该插件会自动附加另一个弹性网络接口到实例,并将另外一组辅助 IP 地址分配到接口。此过程将继续,直到节点不再支持额外的弹性网络接口。

系统为您的集群收集以下指标并导出到 CloudWatch:

• 集群可以支持的最大网络接口数量• 已分配给 Pod 的网络接口数• 当前分配给 Pod 的 IP 地址• IP 地址总数以及最大可用 IP 地址数• 错误的数量ipamD

部署 CNI 指标帮助程序CNI 指标帮助程序需要 cloudwatch:PutMetricData 权限以将指标数据发送到 CloudWatch。本部分帮助您创建具有这些权限的 IAM 策略,将其应用于节点实例角色,然后部署 CNI 指标帮助程序。

为 CNI 指标帮助程序创建 IAM 策略

1. 创建名为 allow_put_metrics_data.json 的文件并向其中填充以下策略文档。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" } ]}

2. 为节点实例配置文件创建一个名为 IAM 的 CNIMetricsHelperPolicy 策略,该策略允许 CNI 指标帮助程序代表您调用 AWS APIs。可使用以下 AWS CLI 命令在 AWS 账户中创建 IAM 策略。

aws iam create-policy --policy-name CNIMetricsHelperPolicy \--description "Grants permission to write metrics to CloudWatch" \--policy-document file://allow_put_metrics_data.json

记下返回的策略 ARN。3. 获取节点的 IAM 角色名称。可使用以下命令打印 aws-auth configmap。

kubectl -n kube-system describe configmap aws-auth

输出:

Name: aws-authNamespace: kube-systemLabels: <none>Annotations: <none>

Data

194

Page 203: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 指标帮助程序

====mapRoles:----- groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::<111122223333>:role/<eksctl-prod-nodegroup-standard-wo-NodeInstanceRole-GKNS581EASPU> username: system:node:{{EC2PrivateDNSName}}

Events: <none>

记录已向其分配 system:nodes 组的任何 rolearn 值的角色名称。在上面的示例输出中,角色名称为<eksctl-prod-nodegroup-standard-wo-NodeInstanceRole-GKNS581EASPU>。集群中的每个节点组均应有一个值。

4. 使用以下命令将新的 CNIMetricsHelperPolicy IAM 策略附加到您之前标识的每个节点 IAM 角色,同时将红色文本替换为您自己的 AWS 账号和节点 IAM 角色名称。

aws iam attach-role-policy \--policy-arn arn:aws:iam::<111122223333>:policy/CNIMetricsHelperPolicy \--role-name <eksctl-prod-nodegroup-standard-wo-NodeInstanceRole-GKNS581EASPU>

部署 CNI 指标帮助程序

• 使用与集群所在的区域对应的命令应用 CNI 指标帮助程序清单。

• 区域之外的所有区域。中国

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.7/config/v1.7/cni-metrics-helper.yaml

• 北京和宁夏 中国区域。

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/v1.7/cni-metrics-helper-cn.yaml

创建指标控制面板部署 CNI 指标帮助程序之后,您可在 CloudWatch 控制台中查看 CNI 指标帮助程序。本主题可帮助您创建控制面板来查看集群的 CNI 指标。

创建 CNI 指标面板

1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/。2. 在左侧导航窗格中,选择 Metrics (指标)。3. 在自定义命名空间中,选择 Kubernetes。4. 选择 CLUSTER_ID。5. 在所有指标选项卡上,选择要添加到控制面板的指标。6. 选择操作,然后选择添加到控制面板。7. 在选择控制面板部分,选择新建,然后输入控制面板的名称,例如“EKS-CNI-metrics”。8. 在选择小部件类型部分中,选择数字。9. 在 Customize the widget title (自定义小部件标题) 部分中,输入控制面板标题的逻辑名称,例如“EKS

CNI 指标”。

195

Page 204: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 配置变量

10. 选择添加到控制面板以完成操作。现在,您的 CNI 指标已添加到可以监控的控制面板,如下所示。

CNI 配置变量适用于 Kubernetes 的 Amazon VPC CNI 插件支持很多部署选项,这些选项是通过环境变量设置的。提供了以下环境变量,并且它们都是可选的。

AWS_VPC_CNI_NODE_PORT_SUPPORT

类型 – 布尔值

默认值 – true

指定是否在节点的主网络接口上启用 NodePort 服务。这需要额外的 iptables 规则,并要求将主接口上内核的反向路径筛选条件设置为 loose。

AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG

类型 – 布尔值

默认值 – false

指定您的 Pod 可以使用独立于集群的 resourcesVpcConfig 的子网和安全组(在控制层面资源所在的VPC 中)。 默认情况下,Pod 与节点的主接口共享相同的子网和安全组。将此变量设置为 true 会导致ipamD 将节点的 ENIConfig 中的安全组和子网用于网络接口分配。您必须为 Pod 将驻留的每个子网创建一个 ENIConfig 自定义资源定义,然后对每个节点进行注释以使用特定的 ENIConfig(可使用同一ENIConfig 注释多个节点)。节点一次只能使用单个 ENIConfig 进行注释,并且 ENIConfig 中的子网必须属于节点所在的同一 可用区。有关更多信息,请参阅CNI 自定义网络 (p. 191)。

ENI_CONFIG_ANNOTATION_DEF

类型 – 字符串

默认值 – k8s.amazonaws.com/eniConfig

指定节点注释键名。这应在 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true 时使用。 注释值将用于设置 ENIConfig 名称。注释优先于标签。

ENI_CONFIG_LABEL_DEF

类型 – 字符串

默认值 – k8s.amazonaws.com/eniConfig

指定节点标签键名。这应在 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true 时使用。 标签值将用于设置 ENIConfig 名称。注释将优先于标签。要使用标签,请确保已定义具有键 k8s.amazonaws.com/eniConfig 的注释,并且节点上未设置注释键ENI_CONFIG_ANNOTATION_DEF 的值。要基于 ENIConfig 选择 可用区,请将此项设置为 failure-domain.beta.kubernetes.io/zone 并为每个 ENIConfig 创建 可用区 自定义资源,如 us-east-1a。 有关更多信息,请参阅CNI 自定义网络 (p. 191)。

196

Page 205: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 配置变量

AWS_VPC_ENI_MTU – v1.6.0 和后续版本

类型 – 整数

默认值 – 9001

用于为附加的 ENIs 配置 MTU 大小。 有效范围为 576 到 9001。AWS_VPC_K8S_CNI_EXTERNALSNAT

类型 – 布尔值

默认值 – false

指定是否应使用外部 NAT 网关提供辅助网络接口 IP 地址的 SNAT。在设置为 true 的情况下,不应用SNAT iptables 规则与非 VPC IP 规则,如果已应用这些规则,则会将其删除。

如果您需要允许从外部 VPNs、直接连接和外部 VPCs 到 Pod 的入站通信,并且您的 Pod 不需要直接通过 Internet 网关访问 Internet,请禁用 SNAT。您的节点必须在私有子网中运行且已通过 AWS NAT 网关或其他外部 NAT 设备连接到 Internet。

有关更多信息,请参阅外部源网络地址转换 (SNAT) (p. 179)。AWS_VPC_K8S_CNI_RANDOMIZESNAT

类型 – 字符串

默认值 – hashrandom

有效值 – hashrandom、prng、none

指定 SNAT iptables 规则是否应随机选择连接的传出端口。这应在AWS_VPC_K8S_CNI_EXTERNALSNAT=false 时使用。 启用 (hashrandom) 后,--random 标志将添加到 SNAT iptables 规则中。要使用伪随机数生成,而不是基于散列 (--random-fully),请为环境变量使用 prng。对于不支持 iptables 的旧版本的 --random-fully,此选项将回退为 --random。 如果您对传出连接依赖顺序端口分配,请禁用 (none) 此功能。

Note

none 之外的所有选项将导致向出站连接分配一个源端口,该端口不一定属于在操作系统级别(/proc/sys/net/ipv4/ip_local_port_range) 设置的临时端口范围。如果您具有基于在NACLs 中找到的端口范围限制流量的 ip_local_port_range,则这一点非常重要。

AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS – v1.6.0 和后续版本

类型 – 字符串

默认值 – 空

指定要从 SNAT 中排除的 IPv4 CIDRs 的逗号分隔列表。对于列表中的每个项目,将应用iptables 规则和非 VPC IP 规则。如果项目不是有效的 IPv4 范围,则会跳过该项目。这应在AWS_VPC_K8S_CNI_EXTERNALSNAT=false 时使用。

WARM_ENI_TARGET

类型 – 整数

默认值 – 1

指定空闲网络接口(及其所有可用 IP 地址)的数量,ipamD 守护程序应尝试使接口可用于节点上的 Pod 分配。默认情况下,ipamD 尝试使一个网络接口及其所有 IP 地址可用于 Pod 分配。

Note

每个网络接口的 IP 地址数因实例类型而异。有关更多信息,请参阅 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)。

197

Page 206: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 配置变量

例如,m4.4xlarge 启动时具有 1 个网络接口和 30 个 IP 地址。如果在节点上放置 5 个 Pod,并从 IP地址热池中删除 5 个空闲 IP 地址,则 ipamD 会尝试分配更多接口,直到有足够的 WARM_ENI_TARGET空闲接口在节点上可用。

Note

如果已设置 WARM_IP_TARGET,则此环境变量将被忽略,并且将改用 WARM_IP_TARGET 行为。

WARM_IP_TARGET

类型 – 整数

默认值 – 无

指定空闲 IP 地址的数量,ipamD 守护程序应尝试使这些 IP 地址可用于节点上的 Pod 分配。例如,如果将 WARM_IP_TARGET 设置为 10,则 ipamD 会尝试始终使 10 个空闲 IP 地址可用。如果节点上的弹性网络接口无法提供这么多空闲地址,则 ipamD 会尝试分配更多接口,直到有足够的 WARM_IP_TARGET空闲 IP 地址可用。

Note

此环境变量将覆盖 WARM_ENI_TARGET 行为。MINIMUM_IP_TARGET – v1.6.0 和后续版本

类型 – 整数

默认值 – 无

指定 ipamD 守护程序应尝试为节点上的 Pod 分配分配的 IP 地址总数。MINIMUM_IP_TARGET 的行为与 WARM_IP_TARGET 相同,只不过它不设置始终可用的可用 IP 地址的目标数量,而是针对分配的 IP 地址总数设置一个下限目标编号。

MINIMUM_IP_TARGET 用于预扩展,WARM_IP_TARGET 用于动态扩展。例如,假设集群的预期 Pod 密度为每个节点大约 30 个 Pod。如果 WARM_IP_TARGET 设置为 30 以确保 CNI 最初分配了足够的 IPs,则30 个 Pod 将部署到节点。CNI 将另外分配 30 个 IPs,总共 60 个,从而加快相关子网中的 IP 耗尽。如果MINIMUM_IP_TARGET 设置为 30,WARM_IP_TARGET 设置为 2,则在部署 30 个 Pod 后,CNI 将另外分配2 个 IPs。 这仍提供弹性,但使用的 IPs 数量约为单独使用 WARM_IP_TARGET 时的一半(32 个 IP 地址与60 个 IP 地址)。

这还通过减少分配或取消分配私有 IP 地址所需的调用次数来提高集群的可靠性,这些 IP 地址可能会受到限制,尤其是在扩展相关时间内。

MAX_ENI

类型 – 整数

默认值 – 无

指定将附加到节点的网络接口的最大数量。当 MAX_ENI 未设置或者小于或等于 0 时,不会使用该设置,并且网络接口的最大数量始终等于有问题的实例类型的最大数量。即使 MAX_ENI 是正数,它也受实例类型的最大数量限制。

AWS_VPC_K8S_CNI_LOGLEVEL

类型 – 字符串

默认值 – DEBUG

有效值 – DEBUG、INFO、WARN、ERROR 或 FATAL(不区分大小写)

指定 ipamd 的日志级别。AWS_VPC_K8S_CNI_LOG_FILE

类型 – 字符串

198

Page 207: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 配置变量

默认值 – 未设置

有效值:stdout 或文件路径

指定将 ipamd 的日志记录输出写入到的位置。 您可以指定 stdout 或覆盖默认文件,例如 /var/log/aws-routed-eni/ipamd.log。

AWS_VPC_K8S_PLUGIN_LOG_FILE

类型 – 字符串

默认值 – 未设置

有效值 – stdout 或文件路径。

指定将 aws-cni 插件的日志记录输出写入到的位置。您可以指定 stdout 或覆盖默认文件,例如 /var/log/aws-routed-eni/plugin.log。

AWS_VPC_K8S_PLUGIN_LOG_LEVEL

类型 – 字符串

默认值 – DEBUG

有效值 – DEBUG、INFO、WARN、ERROR 或 FATAL(不区分大小写)

指定 aws-cni 插件的日志级别。INTROSPECTION_BIND_ADDRESS

类型 – 字符串

默认值 – 127.0.0.1:61679

指定自检终端节点的绑定地址。Unix 域套接字可以使用套接字路径之前的 unix: 前缀指定。DISABLE_INTROSPECTION

类型 – 布尔值

默认值 – false

指定是否在节点上禁用自检终端节点。此项设置为 true 时,将减少运行 aws-cni-support.sh 脚本时可从节点获取的调试信息。

DISABLE_METRICS

类型 – 布尔值

默认值 – false

指定是否为 ipamd 禁用 Prometheus 指标终端节点。 默认情况下,指标在 :61678/metrics 上发布。AWS_VPC_K8S_CNI_VETHPREFIX

类型 – 字符串

默认值 – eni

指定用于为 CNI 生成主机端 veth 设备名称的 veth 前缀。前缀长度最多为四个字符。ADDITIONAL_ENI_TAGS – v1.6.0 和后续版本

类型 – 字符串

默认值 – {}

示例值 – {"tag_key": "tag_val"}

199

Page 208: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 配置变量

应用到网络接口的元数据可帮助您出于计费或其他目的对资源进行分类和组织。每个标签都包含自定义键和可选值。标签键最多可包含 128 个字符。标签值最多可包含 256 个字符。标签将添加到主机上的所有网络接口。

Important

自定义标签不应包含 k8s.amazonaws.com 前缀,因为它是保留的。如果标签包含k8s.amazonaws.com,则将忽略标签添加。

CLUSTER_NAME

类型 – 字符串

默认值 – ""

指定用于标记分配的网络接口的集群名称。

与分配相关的网络接口标签

此插件与网络接口上的以下标签交互:• cluster.k8s.amazonaws.com/name

• node.k8s.amazonaws.com/instance_id

• node.k8s.amazonaws.com/no_manage

集群名称标签

标签 cluster.k8s.amazonaws.com/name 将设置为创建网络接口的 aws-node 守护程序集的集群名称。

实例 ID 标签

标签 node.k8s.amazonaws.com/instance_id 将设置为分配了此网络接口的 aws-node 实例的实例 ID。

无管理标签

守护程序集读取 node.k8s.amazonaws.com/no_manage 标签,以确定附加到计算机的网络接口是否不应配置或用于私有 IP 地址。aws-node此标签本身并不由 CNI 插件设置,而是由用户设置,以指示网络接口用于主机网络 Pod 或用于与 Kubernetes 无关的其他进程。

Note

为网络接口附加 no_manage 标签将导致 kubelet 的 --max-pods 配置选项的值不正确。如果您使用此标签,另请考虑分别更新此插件以及 kubelet 上的 MAX_ENI 和 --max-pods 配置选项。

备注

每个节点上运行的 L-IPAMD (aws-node daemonSet) 都需要访问 Kubernetes API 服务器。如果它不能访问 Kubernetes API 服务器,ipamD 将退出,CNI 无法为 Pod 获取任何 IP 地址。确认 L-IPAMD 是否有权访问 Kubernetes API 服务器。

kubectl get svc kubernetes

输出

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP <10.0.0.1> <none> 443/TCP 29d

通过 SSH 连接到节点以检查节点是否可以访问 API 服务器。

200

Page 209: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 升级

telnet <10.0.0.1> 443

输出

Trying 10.0.0.1...Connected to 10.0.0.1.Escape character is '^]'.

如果您收到最后一行输出,则可以访问 Kubernetes API 服务器。

适用于 Kubernetes 的 Amazon VPC CNI 插件升级当您启动 Amazon EKS 集群时,适用于 Kubernetes 的 Amazon VPC CNI 插件的最新版本将应用于您的集群。在切换新集群以使用它之前,GitHub 上可在短暂的宽限期内使用该插件的绝对最新版本。Amazon EKS不会在发布新版本时自动升级集群上的 CNI 插件。要获取现有集群上 CNI 插件的新版本,您必须手动升级该插件。

我们推荐的 最新版本为版本 1.7.5。您可以查看插件可用的不同版本,并在 GitHub 上阅读每个版本的发行说明。

请使用以下过程查看您的 CNI 插件版本并升级到最新建议版本。

查看适用于 Kubernetes 的 Amazon VPC CNI 插件的版本

• 使用以下命令输出您集群的 CNI 版本:

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

输出:

amazon-k8s-cni:1.6.3

在本示例输出中,CNI 版本为 1.6.3,此版本早于推荐的最新版本 1.7.5。使用以下过程升级 CNI。

升级适用于 Kubernetes 的 Amazon VPC CNI 插件

• 如果您的 CNI 版本低于 1.7.5,则使用下面的适当命令将 CNI 版本更新为最新建议版本:

• 美国西部(俄勒冈) (us-west-2)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni.yaml

• 中国(北京) (cn-north-1) 或 中国 (宁夏) (cn-northwest-1)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni-cn.yaml

• AWS GovCloud(美国东部) (us-gov-east-1)

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni-us-gov-east-1.yaml

• AWS GovCloud (US-West) (us-gov-west-1)

201

Page 210: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南备选的兼容 CNI 插件

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni-us-gov-west-1.yaml

• 对于所有其他区域• 下载清单文件。

curl -o aws-k8s-cni.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/aws-k8s-cni.yaml

• 在以下命令中,将 <region-code> 替换为您的集群所在的区域,然后运行修改后的命令以替换文件中的区域代码(当前为 us-west-2)。

sed -i -e 's/us-west-2/<region-code>/' aws-k8s-cni.yaml

• 将清单文件应用于集群。

kubectl apply -f aws-k8s-cni.yaml

备选的兼容 CNI 插件Amazon EKS 仅官方支持 Amazon VPC CNI 插件 (p. 178)。但 Amazon EKS 运行上游 Kubernetes 且经认证符合 Kubernetes 要求,因此,备选 CNI 插件将与 Amazon EKS 集群一起工作。如果您计划在生产中使用备选 CNI 插件,那么我们强烈建议要么您获得商业支持,要么拥有内部专业知识来排查开源 CNI 插件项目的问题并提供修复。

Amazon EKS 与为备选的兼容 CNI 插件提供支持的合作伙伴网络保持着合作关系。请参阅以下合作伙伴的文档,了解受支持的 Kubernetes 版本以及获得的资格和所执行的测试的详细信息。

合作伙伴 产品 文档

Tigera Calico 安装说明

Isovalent Cilium 安装说明

Weaveworks Weave Net 安装说明

VMware 安提拉 安装说明

Amazon EKS 旨在为您提供广泛的选项来涵盖所有使用案例。如果您开发的商业上支持的 Kubernetes CNI插件未在此处列出,请通过 [email protected] 与我们的合作伙伴团队联系以获取更多信息。

安装或升级 CoreDNS在具有 Kubernetes 版本 CoreDNS 或更高版本的 Amazon EKS 集群上支持 1.15。使用 Kubernetes 版本1.10 创建的集群作为默认 DNS 和服务发现提供程序随 kube-dns 一起提供。如果已从 1.10 集群更新,要将CoreDNS 用于 DNS 和服务发现,则必须安装 CoreDNS 并删除 kube-dns。

要检查您的集群是否已运行 CoreDNS,请使用以下命令。

kubectl get pod -n kube-system -l k8s-app=kube-dns

202

Page 211: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装或升级 CoreDNS

如果输出在 pod 名称中显示 coredns,则表示您已在集群中运行 CoreDNS。如果没有,请使用以下过程将您的 DNS 和服务发现提供程序更新为 CoreDNS。

Note

的服务仍称为 CoreDNS 以实现向后兼容。kube-dns

使用 CoreDNS 在更新的 Amazon EKS 集群上安装kubectl

1. 将 {"eks.amazonaws.com/component": "kube-dns"} 选择器添加到集群的 kube-dns 部署。这将防止两个 DNS 部署争夺对同一组标签的控制。

kubectl patch -n kube-system deployment/kube-dns --patch \'{"spec":{"selector":{"matchLabels":{"eks.amazonaws.com/component":"kube-dns"}}}}'

2. 将 CoreDNS 部署到您的集群。

a. 将集群的 DNS IP 地址设置为 DNS_CLUSTER_IP 环境变量。

export DNS_CLUSTER_IP=$(kubectl get svc -n kube-system kube-dns -o jsonpath='{.spec.clusterIP}')

b. 将 REGION 环境变量设置为集群的 AWS <region-code>。

export REGION="<region-code>"

c. 从与集群所在的区域对应的 CoreDNS 资源存储桶下载 Amazon EKS 清单。

• 区域之外的所有区域。中国

curl -o dns.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/dns.yaml

• 北京和宁夏 中国区域。

curl -o dns.yaml https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/dns.yaml

d. 将 dns.yaml 文件中的变量占位符替换为您的环境变量值并将更新后的清单应用于您的集群。以下命令将一步完成此操作。

cat dns.yaml | sed -e "s/REGION/$REGION/g" | sed -e "s/DNS_CLUSTER_IP/$DNS_CLUSTER_IP/g" | kubectl apply -f -

e. 从集群中获取 coredns pod 名称。

COREDNS_POD=$(kubectl get pod -n kube-system -l eks.amazonaws.com/component=coredns \-o jsonpath='{.items[0].metadata.name}')

f. 查询 coredns pod 以确保其接收请求。

kubectl get --raw /api/v1/namespaces/kube-system/pods/$COREDNS_POD:9153/proxy/metrics \| grep 'coredns_dns_request_count_total'

Note

预期输出正确返回可能需要几分钟时间,具体取决于集群中 DNS 请求的速率。

203

Page 212: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南升级 CoreDNS

在下面的预期输出中,数字 23 是 DNS 请求总数。

✓ HELP coredns_dns_request_count_total Counter of DNS requests made per zone, protocol and family.✓ TYPE coredns_dns_request_count_total countercoredns_dns_request_count_total{family="1",proto="udp",server="dns://:53",zone="."} 23

3. 通过完成CoreDNS中的步骤,将 升级 CoreDNS (p. 204) 升级到您的集群的建议版本。4. 将 kube-dns 部署缩减至零个副本。

kubectl scale -n kube-system deployment/kube-dns --replicas=0

5. 清理旧的 kube-dns 资源。

kubectl delete -n kube-system deployment/kube-dns serviceaccount/kube-dns configmap/kube-dns

升级 CoreDNS1. 检查集群的 coredns 部署的当前版本。

kubectl describe deployment coredns --namespace kube-system | grep Image | cut -d "/" -f 3

输出:

coredns:v<1.1.3>

建议的对应 Kubernetes 版本的 coredns 版本如下所示:

Kubernetes 版本 1.18 1.17 1.16 1.15 1.14

CoreDNS 1.7.0 1.6.6 1.6.6 1.6.6 1.6.6

2. 如果当前 coredns 版本是 1.5.0 或更高版本,但早于推荐版本,请跳过此步骤。如果当前版本早于1.5.0,则需要修改 coredns 的配置映射以使用 forward 插件,而不是 proxy 插件。

a. 使用以下命令打开 configmap。

kubectl edit configmap coredns -n kube-system

b. 将以下行中的 proxy 替换为 forward。保存该文件并退出编辑器。

proxy . /etc/resolv.conf

3. 检索您当前的 coredns 映像:

kubectl get deployment coredns --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'

4. 通过获取上一步中的输出并将 <1.7.0>(包括 <>)替换为集群的建议 coredns 版本,将 coredns 更新到建议的版本:

204

Page 213: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南在 Amazon EKS 上安装 Calico

kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=<602401143452.dkr.ecr.us-west-2.amazonaws.com>/eks/coredns:v<1.7.0>-eksbuild.1

Note

如果您要更新到最新的 Amazon EKS 1.14 版本,请从上述映像的末尾删除 -eksbuild.1。

在 Amazon EKS 上安装 CalicoProject Calico 是一种适用于 Kubernetes 的网络策略引擎。通过强制实施 Calico 网络策略,您可以实现网络隔离和租户隔离。在必须隔离各个租户的多租户环境中,或者当您要针对开发、暂存和生产创建单独的环境时,这非常有用。网络策略类似于 AWS 安全组的一点是,您可以创建网络传入和传出规则。您使用 Pod 选择器和标签向 Pod 分配网络策略,而不是向安全组分配实例。以下过程介绍了如何在 Amazon EKS 集群中的 Linux 节点上安装 Calico。要在 Windows 节点上安装 Calico,请参阅在 Amazon EKS Windows 容器上使用 Calico。

Note

• 当将 Fargate 与 Amazon EKS 一起使用时不支持 Calico。• Calico 将规则添加到节点上的 iptables 中,其优先级可能高于您在 Calico 外部实施的现有规

则。考虑将现有 iptables 规则添加到 Calico 策略,以避免 Calico 策略以外的规则被 Calico 覆盖。

• 如果您使用的是 Pod 的安全组 (p. 181),则分支网络接口上的 Pod 的流量不会限制到 Calico 网络策略实施,并且仅限 Amazon EC2 安全组实施。社区正在消除此限制。

在 Amazon EKS Linux 节点上安装 Calico

1. 完成与集群所在区域对应的选项,将 Calico 清单应用于集群。

• 除 中国 (宁夏) 或 中国(北京) 之外的所有区域 – 从 aws/amazon-vpc-cni-k8s GitHub 项目应用Calico 清单。此清单在 DaemonSets 命名空间中创建 kube-system。

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml

• 中国 (宁夏) 或 中国(北京)1. 使用下面的命令下载 Calico 清单。

curl -o calico.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml

2. 修改清单。a. 查看您下载的一个或多个清单文件,并记下映像名称。使用以下命令在本地下载映像。

docker pull image:<tag>

b. 使用以下命令标记要推送到中国区域内的 Amazon Elastic Container Registry 存储库的映像。

docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

c. 使用以下命令将映像推送到中国区域内的 Amazon ECR 存储库。

205

Page 214: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Stars 策略演示

docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

d. 更新一个或多个 Kubernetes 清单文件或以引用您所在区域内的 Amazon ECR 映像 URL。3. 应用 Calico 清单。此清单在 DaemonSets 命名空间中创建 kube-system。

kubectl apply -f calico.yaml

2. 查看 kube-system DaemonSets 并等待 calico-node DaemonSet 具有处于 DESIRED 状态的READY 个 Pod。出现这种情况时,Calico 正在运行。

kubectl get daemonset calico-node --namespace kube-system

输出:

NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGEcalico-node 3 3 3 3 3 <none> 38s

从 Amazon EKS 集群中删除 Calico

• 如果您在 Amazon EKS 集群中使用完 Calico,则可以使用以下命令删除 DaemonSet:

kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml

Stars 策略演示本部分演示了 Project Calico 文档提供的 Stars 策略演示。该演示在您的 Amazon EKS 集群上创建前端、后端和客户端服务。该演示还创建管理 GUI,用于显示各服务之间可用的传入和传出路径。

在您创建任何网络策略之前,所有服务可以双向通信。应用网络策略后,您可以看到客户端只能与前端服务进行通信,而后端只能接受来自前端的流量。

运行 Stars 策略演示

1. 应用前端、后端、客户端和管理 UI 服务:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yamlkubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yamlkubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yamlkubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yamlkubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml

2. 等待所有 Pod 达到 Running 状态:

kubectl get pods --all-namespaces --watch

206

Page 215: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Stars 策略演示

3. 要连接到管理 UI,请将您的本地端口 9001 转发至集群上运行的 management-ui 服务:

kubectl port-forward service/management-ui -n management-ui 9001

4. 在本地系统上打开浏览器,然后将其指向 http://localhost:9001/。您应该看到管理 UI。C 节点是客户端服务,F 节点是前端服务,B 节点是后端服务。每个节点都有到所有其他节点的完整通信访问权限 (如粗体、彩色行所示)。

5. 应用以下网络策略以隔离各个服务:

kubectl apply -n stars -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yamlkubectl apply -n client -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml

6. 刷新您的浏览器。您可以看到管理 UI 不再能访问任何节点,因此它们不会显示在 UI 中。7. 应用以下网络策略以允许管理 UI 访问这些服务:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml

207

Page 216: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Stars 策略演示

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml

8. 刷新您的浏览器。您可以看到管理 UI 可以再次访问节点,但各节点无法相互通信。

9. 应用以下网络策略以允许流量从前端服务传到后端服务:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml

10. 应用以下网络策略以允许流量从 client 命名空间传到前端服务:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml

208

Page 217: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Stars 策略演示

11. (可选)在完成该演示后,您可以使用以下命令删除其资源:

kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yamlkubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yamlkubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yamlkubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yamlkubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml

即使在删除资源后,节点上仍然存在 iptables 规则,这些规则仍可能会以意外方式干扰集群中的联网。删除 Calico 的唯一可靠方法是终止所有节点并将它们回收。要终止所有节点,请将 Auto Scaling 组所需计数设置为 0,然后备份到所需数量,或者仅终止节点。如果您无法回收节点,请参阅 Calico 存储库中的禁用和删除 Calico 策略GitHub以了解最后的解决方法。

209

Page 218: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南示例部署

Applications您的应用程序部署在 容器 (部署在 Kubernetes 的 Pod 中) 中。Pod 包含一个或多个容器。通常,在Kubernetes 服务中部署一个或多个提供相同服务的 Pod。在部署了提供相同服务的多个 Pod 后,您可以:

• 使用 Kubernetes Vertical Pod Autoscaler (p. 213) 纵向扩展或缩减 Pod。• 使用 Kubernetes Horizontal Pod Autoscaler (p. 218) 水平扩展满足需求所需的 Pod 数量。• 创建外部 (适用于可通过 Internet 访问的 Pod) 或内部 (适用于私有 Pod) 负载均衡器 (p. 221),以均衡跨

Pod 的网络流量。负载均衡器在 OSI 模型的第 4 层路由流量。• 创建 上的应用程序负载均衡Amazon EKS (p. 227) 以跨 Pod 平衡应用程序流量。应用程序负载均衡器在

OSI 模型的第 7 层路由流量。• 如果您不熟悉 Kubernetes,本主题将帮助您部署示例 Linux 应用程序 (p. 210)。

部署示例 Linux 应用程序在本主题中,您将创建一个 Kubernetes 清单并将其部署到您的集群。

Prerequisites

• 您必须具有现有 Kubernetes 集群才能部署示例应用程序。如果您没有现有集群,则可以使用其中一个Amazon EKS 指南部署 Amazon EKS 入门 (p. 3) 集群。

• 您必须在计算机上安装 kubectl。有关更多信息,请参阅安装kubectl (p. 243)。• kubectl 必须配置为与您的集群通信。有关更多信息,请参阅为 Amazon EKS 创建kubeconfig (p. 236)。

部署示例应用程序

1. 为示例应用程序创建 Kubernetes 命名空间。

kubectl create namespace <my-namespace>

2. 创建 Kubernetes 服务和部署。

a. 将以下内容保存到计算机上名为 sample-service.yaml 的文件中。如果您要部署到 AWSFargate (p. 115) Pod,请确保 namespace 的值与您在 AWS Fargate 配置文件 (p. 121) 中定义的命名空间匹配。此示例部署将从公有存储库中拉取容器映像,将其三个副本部署到您的集群,并创建具有其自己的 IP 地址的 Kubernetes 服务,该服务只能从集群内访问。要从集群外部访问服务,您需要部署负载均衡器 (p. 221)或 ALB 入口控制器 (p. 227)。

映像是一个多架构映像,因此,如果您的集群同时包含 x86 和 Arm 节点,则可以在任一类型的硬件架构上安排 Pod。Kubernetes 将基于 Pod 计划的节点的硬件类型部署适当的硬件映像。或者,如果您希望部署只在具有特定硬件架构的节点上运行,或者您的集群只包含一个硬件架构,请从后面的示例中删除 amd64 或 arm64。

apiVersion: v1kind: Servicemetadata: name: my-service namespace: my-namespace labels: app: my-app

210

Page 219: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南示例部署

spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80---apiVersion: apps/v1kind: Deploymentmetadata: name: my-deployment namespace: my-namespace labels: app: my-appspec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - amd64 - arm64 containers: - name: nginx image: nginx:1.19.2 ports: - containerPort: 80

要了解有关 Kubernetes 服务和部署的更多信息,请参阅 Kubernetes 文档。示例清单中的容器不使用网络存储,但它们可能能够使用。有关更多信息,请参阅Storage (p. 154)。尽管此示例中未实施,但我们建议您为 Pod 创建 Kubernetes 服务账户并将其关联到 AWS IAM 账户。通过指定服务账户,您的 Pod 可以获得与其他 服务交互所需的最低权限。有关更多信息,请参阅服务账户的 IAM 角色 (p. 284)

b. 部署应用程序。

kubectl apply -f <sample-service.yaml>

3. 查看 my-namespace 命名空间中存在的所有资源。

kubectl get all -n my-namespace

输出

NAME READY STATUS RESTARTS AGEpod/my-deployment-776d8f8fd8-78w66 1/1 Running 0 27mpod/my-deployment-776d8f8fd8-dkjfr 1/1 Running 0 27mpod/my-deployment-776d8f8fd8-wmqj6 1/1 Running 0 27m

211

Page 220: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南示例部署

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/my-service ClusterIP 10.100.190.12 <none> 80/TCP 32m

NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/my-deployment 3/3 3 3 27m

NAME DESIRED CURRENT READY AGEreplicaset.apps/my-deployment-776d8f8fd8 3 3 3 27m

在输出中,您会看到在上一步中部署的示例清单中指定的服务和部署。您还会看到三个 pod,这是由于在示例清单中为 3 指定 replicas 而造成的。有关 Pod 的更多信息,请参阅 Kubernetes 文档中的Pods。Kubernetes 自动创建 replicaset 资源,即使该资源未在示例清单中指定。有关 ReplicaSets 的更多信息,请参阅 Kubernetes 文档中的 ReplicaSet。

Note

Kubernetes 将保留清单中指定的副本数。如果这是生产部署,并且您希望 Kubernetes 水平扩展副本数量或垂直扩展 Pod 的计算资源,则需要使用 Horizontal Pod Autoscaler (p. 218) 和Vertical Pod Autoscaler (p. 213)。

4. 查看已部署服务的详细信息。

kubectl -n <my-namespace> describe service <my-service>

缩减的输出

Name: my-serviceNamespace: my-namespaceLabels: app=my-appAnnotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"my-app"},"name":"my-service","namespace":"my-namespace"}...Selector: app=my-appType: ClusterIPIP: 10.100.190.12Port: <unset> 80/TCPTargetPort: 80/TCP...

在输出中,IP: 的值是一个唯一 IP 地址,可从集群中的任何 Pod 访问。5. 查看已部署的 Pod 之一的详细信息。

kubectl -n <my-namespace> describe pod <my-deployment-776d8f8fd8-78w66>

缩减的输出

Name: my-deployment-776d8f8fd8-78w66Namespace: my-namespacePriority: 0Node: ip-192-168-9-36.us-west-2.compute.internal/192.168.9.36...IP: 192.168.16.57IPs: IP: 192.168.16.57Controlled By: ReplicaSet/my-deployment-776d8f8fd8...Conditions: Type Status Initialized True Ready True

212

Page 221: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Vertical Pod Autoscaler

ContainersReady True PodScheduled True...Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned my-namespace/my-deployment-776d8f8fd8-78w66 to ip-192-168-9-36.us-west-2.compute.internal...

在输出中,默认情况下,IP: 的值是分配给节点所在子网的 CIDR 块中的 Pod 的唯一 IP。如果您希望从与节点所在的子网不同的 CIDR 块为 Pod 分配 IP 地址,您可以更改默认行为。有关更多信息,请参阅CNI自定义网络 (p. 191)。您还可以看到 Kubernetes 计划程序计划了 IP 地址为 192.168.9.36 的节点上的 Pod。

6. 将下面的 <value> 替换为在步骤 3 中为某个 Pod 返回的值,以在其中一个 Pod 上执行 shell。

kubectl exec -it <my-deployment-776d8f8fd8-78w66> -n <my-namespace> -- /bin/bash

7. 查看 DNS 解析程序配置文件。

cat /etc/resolv.conf

输出

nameserver 10.100.0.10search my-namespace.svc.cluster.local svc.cluster.local cluster.local us-west-2.compute.internaloptions ndots:5

在前面的输出中,nameserver 的值是集群的名称服务器,并自动分配为部署到集群的任何 Pod 的名称服务器。

8. 键入 exit 断开与 pod 的连接。9. 删除示例服务、部署、Pod 和命名空间。

kubectl delete namespace <my-namespace>

Vertical Pod AutoscalerKubernetes Vertical Pod Autoscaler 为 Pod 自动调整 CPU 和内存预留,以帮助实现“合适规模”的应用程序。此调整可以帮助提高集群资源利用率并释放 CPU 和内存供其他 Pod 使用。本主题可帮助您将 VerticalPod Autoscaler 部署到集群并验证它在正常工作。

安装 Metrics ServerKubernetes Metrics Server 是集群中资源使用情况数据的聚合器。默认情况下它未部署在 Amazon EKS 集群中,但它提供了 Vertical Pod Autoscaler 所需的指标。本主题介绍了如何在 Amazon EKS 集群上部署Kubernetes Metrics Server。

Note

您也可以使用 Prometheus 为 Vertical Pod Autoscaler 提供指标。有关更多信息,请参阅Prometheus 的控制层面指标 (p. 258)。

213

Page 222: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南部署 Vertical Pod Autoscaler

如果您已将 Metrics Server 部署到了集群,则可以转到下一部分。您可以使用以下命令检查 MetricsServer。

kubectl -n kube-system get deployment/metrics-server

如果此命令返回 NotFound 错误,则您必须将 Metrics Server 部署到 Amazon EKS 集群。

部署 Metrics Server

1. 使用以下命令部署 Metrics Server:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

2. 使用以下命令验证 metrics-server 部署是否运行所需数量的 Pod:

kubectl get deployment metrics-server -n kube-system

输出

NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 6m

部署 Vertical Pod Autoscaler在此部分中,您将部署 Vertical Pod Autoscaler 到集群。

部署 Vertical Pod Autoscaler

1. 打开终端窗口,导航到您要下载 Vertical Pod Autoscaler 源代码的目录。2. 克隆 kubernetes/autoscaler GitHub 存储库。

git clone https://github.com/kubernetes/autoscaler.git

3. 切换到 vertical-pod-autoscaler 目录。

cd autoscaler/vertical-pod-autoscaler/

4. (可选)如果您已经部署另一个版本的 Vertical Pod Autoscaler,请使用以下命令将其删除。

./hack/vpa-down.sh

5. 如果您的集群不在 中国(北京) 或 中国 (宁夏) 区域中,请跳至步骤 6。使用以下步骤编辑 ./vertical-pod-autoscaler/deploy 中的清单文件。

1. 查看您下载的一个或多个清单文件,并记下映像名称。使用以下命令在本地下载映像。

docker pull image:<tag>

2. 使用以下命令标记要推送到中国区域内的 Amazon Elastic Container Registry 存储库的映像。

docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

214

Page 223: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南测试 Vertical Pod Autoscaler 安装

3. 使用以下命令将映像推送到中国区域内的 Amazon ECR 存储库。

docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

4. 更新一个或多个 Kubernetes 清单文件或以引用您所在区域内的 Amazon ECR 映像 URL。6. 使用以下命令将 Vertical Pod Autoscaler 部署到您的集群。

./hack/vpa-up.sh

7. 验证已成功创建 Vertical Pod Autoscaler Pod。

kubectl get pods -n kube-system

输出:

NAME READY STATUS RESTARTS AGEaws-node-949vx 1/1 Running 0 122maws-node-b4nj8 1/1 Running 0 122mcoredns-6c75b69b98-r9x68 1/1 Running 0 133mcoredns-6c75b69b98-rt9bp 1/1 Running 0 133mkube-proxy-bkm6b 1/1 Running 0 122mkube-proxy-hpqm2 1/1 Running 0 122mmetrics-server-8459fc497-kfj8w 1/1 Running 0 83mvpa-admission-controller-68c748777d-ppspd 1/1 Running 0 7svpa-recommender-6fc8c67d85-gljpl 1/1 Running 0 8svpa-updater-786b96955c-bgp9d 1/1 Running 0 8s

测试 Vertical Pod Autoscaler 安装在此部分中,您部署示例应用程序以验证 Vertical Pod Autoscaler 在正常运行。

测试 Vertical Pod Autoscaler 安装

1. 使用以下命令部署 hamster.yaml Vertical Pod Autoscaler 示例。

kubectl apply -f examples/hamster.yaml

2. 从 hamster 示例应用程序获取 Pod。

kubectl get pods -l app=hamster

输出:

hamster-c7d89d6db-rglf5 1/1 Running 0 48shamster-c7d89d6db-znvz5 1/1 Running 0 48s

3. 描述一个 Pod 以查看其 CPU 和内存预留。

kubectl describe pod hamster-<c7d89d6db-rglf5>

输出:

Name: hamster-c7d89d6db-rglf5

215

Page 224: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南测试 Vertical Pod Autoscaler 安装

Namespace: defaultPriority: 0Node: ip-192-168-9-44.<region-code>.compute.internal/192.168.9.44Start Time: Fri, 27 Sep 2019 10:35:15 -0700Labels: app=hamster pod-template-hash=c7d89d6dbAnnotations: kubernetes.io/psp: eks.privileged vpaUpdates: Pod resources updated by hamster-vpa: container 0:Status: RunningIP: 192.168.23.42IPs: <none>Controlled By: ReplicaSet/hamster-c7d89d6dbContainers: hamster: Container ID: docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24 Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1 Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Fri, 27 Sep 2019 10:35:16 -0700 Ready: True Restart Count: 0 Requests: cpu: 100m memory: 50Mi...

您可以看到原始 Pod 预留了 100 millicpu 个 CPU 和 50 MB 内存。对于本示例应用程序,100 millicpu小于 Pod 运行所需的数量,因此 CPU 受限。它预留的内存也远小于所需的数量。Vertical PodAutoscaler vpa-recommender 部署分析 hamster Pod 以查看 CPU 和内存需求是否合适。如果需要调整,vpa-updater 使用更新后的值重新启动 Pod。

4. 等待 vpa-updater 启动新 hamster Pod。这大概需要一两分钟。您可以使用以下命令监控 Pod。

Note

如果您不确定已经启动了新 Pod,请将 Pod 名称与您之前的列表比较。新 Pod 启动时,您会看到新 Pod 名称。

kubectl get --watch pods -l app=hamster

5. 当新 hamster Pod 启动时,描述它并查看更新后的 CPU 和内存预留。

kubectl describe pod hamster-<c7d89d6db-jxgfv>

输出:

Name: hamster-c7d89d6db-jxgfvNamespace: defaultPriority: 0Node: ip-192-168-9-44.<region-code>.compute.internal/192.168.9.44Start Time: Fri, 27 Sep 2019 10:37:08 -0700Labels: app=hamster pod-template-hash=c7d89d6db

216

Page 225: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南测试 Vertical Pod Autoscaler 安装

Annotations: kubernetes.io/psp: eks.privileged vpaUpdates: Pod resources updated by hamster-vpa: container 0: cpu request, memory requestStatus: RunningIP: 192.168.3.140IPs: <none>Controlled By: ReplicaSet/hamster-c7d89d6dbContainers: hamster: Container ID: docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: docker-pullable://k8s.gcr.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1 Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Fri, 27 Sep 2019 10:37:08 -0700 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k...

此时可以看到 CPU 预留提升到了 587 个 millicpu,这是原始值的五倍多。内存已增加到 262144 KB,即大约 250 MB,或原始值的五倍。此 Pod 资源不足,Vertical Pod Autoscaler 使用更为合适的值纠正了我们的估计值。

6. 描述 hamster-vpa 资源以查看新的建议。

kubectl describe vpa/hamster-vpa

输出:

Name: hamster-vpaNamespace: defaultLabels: <none>Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...API Version: autoscaling.k8s.io/v1beta2Kind: VerticalPodAutoscalerMetadata: Creation Timestamp: 2019-09-27T18:22:51Z Generation: 23 Resource Version: 14411 Self Link: /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa UID: d0d85fb9-e153-11e9-ae53-0205785d75b0Spec: Target Ref: API Version: apps/v1 Kind: Deployment Name: hamsterStatus: Conditions:

217

Page 226: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Horizontal Pod Autoscaler

Last Transition Time: 2019-09-27T18:23:28Z Status: True Type: RecommendationProvided Recommendation: Container Recommendations: Container Name: hamster Lower Bound: Cpu: 550m Memory: 262144k Target: Cpu: 587m Memory: 262144k Uncapped Target: Cpu: 587m Memory: 262144k Upper Bound: Cpu: 21147m Memory: 387863636Events: <none>

7. 在完成对示例应用程序的试验后,使用以下命令可将其删除。

kubectl delete -f examples/hamster.yaml

Horizontal Pod AutoscalerKubernetes Horizontal Pod Autoscaler 根据资源的 CPU 利用率,自动扩展部署、复制控制器或副本集中的Pod 数量。这可帮助您的应用程序进行扩展以满足增长的需求,或者在不需要资源时进行缩减,从而释放出用于其他应用程序的节点。当您设置目标 CPU 利用率百分比时,Horizontal Pod Autoscaler 扩展或缩减应用程序来尝试满足该目标。

Horizontal Pod Autoscaler 是 Kubernetes 中的标准 API 资源,只需在 Amazon EKS 集群上安装一个指标源(如 Kubernetes Metrics Server)即可正常运行。您不需要在集群上部署或安装 Horizontal Pod Autoscaler以开始扩展您的应用程序。有关更多信息,请参阅 Kubernetes 文档中的 Horizontal Pod Autoscaler。

使用本主题为您的 Amazon EKS 集群准备 Horizontal Pod Autoscaler 并验证它可用于示例应用程序。

Note

本主题基于 Kubernetes 文档中的 Horizontal Pod Autoscaler 演练。

安装 Metrics ServerKubernetes Metrics Server 是集群中资源使用情况数据的聚合器。默认情况下 Metrics Server 未部署在Amazon EKS 集群中,但它提供了 Horizontal Pod Autoscaler 所需的指标。本主题介绍了如何在 AmazonEKS 集群上部署 Kubernetes Metrics Server。

如果您已将 Metrics Server 部署到了集群,则可以转到下一部分。您可以使用以下命令检查 MetricsServer。

kubectl -n kube-system get deployment/metrics-server

如果此命令返回 NotFound 错误,则您必须将 Metrics Server 部署到 Amazon EKS 集群。

部署 Metrics Server

1. 使用以下命令部署 Metrics Server:

218

Page 227: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南运行 Horizontal Pod Autoscaler 测试应用程序

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

2. 使用以下命令验证 metrics-server 部署是否运行所需数量的 Pod:

kubectl get deployment metrics-server -n kube-system

输出

NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 6m

运行 Horizontal Pod Autoscaler 测试应用程序在此部分中,您部署示例应用程序以验证 Horizontal Pod Autoscaler 在正常运行。

Note

本示例基于 Kubernetes 文档中的 Horizontal Pod Autoscaler 演练。

测试 Horizontal Pod Autoscaler 安装

1. 使用以下命令部署一个简单的 Apache Web 服务器应用程序。

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml

向此 Apache Web 服务器 Pod 提供 500 millicpu 的 CPU 限制,并在端口 80 上提供服务。2. 为 php-apache 部署创建 Horizontal Pod Autoscaler 资源。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

此命令创建为部署定位 50% CPU 利用率的 Autoscaler,最少一个 Pod,最多十个 Pod。当平均 CPU负载低于 50 时,Autoscaler 尝试减少部署中的 Pod 数量,最低一个。当负载大于 50% 时,Autoscaler尝试增加部署中的 Pod 数量,最高十个。有关更多信息,请参阅 Kubernetes 文档中的 Horizontal PodAutoscaler 的工作原理。

3. 使用以下命令描述 Autoscaler 以查看其详细信息。

kubectl describe hpa

输出:

Name: php-apacheNamespace: defaultLabels: <none>Annotations: <none>CreationTimestamp: Thu, 11 Jun 2020 16:05:41 -0500Reference: Deployment/php-apacheMetrics: ( current / target ) resource cpu on pods (as a percentage of request): <unknown> / 50%Min replicas: 1Max replicas: 10Deployment pods: 1 current / 0 desiredConditions:

219

Page 228: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南运行 Horizontal Pod Autoscaler 测试应用程序

Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: did not receive metrics for any ready podsEvents: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedGetResourceMetric 42s (x2 over 57s) horizontal-pod-autoscaler unable to get metrics for resource cpu: no metrics returned from resource metrics API Warning FailedComputeMetricsReplicas 42s (x2 over 57s) horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API Warning FailedGetResourceMetric 12s (x2 over 27s) horizontal-pod-autoscaler did not receive metrics for any ready pods Warning FailedComputeMetricsReplicas 12s (x2 over 27s) horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: did not receive metrics for any ready pods

如您所见,当前 CPU 负载是 <unknown>,因为服务器上尚没有负载。pod 计数已处于其最低边界(1),因此无法缩减。

4. 通过运行容器为 Web 服务器创建负载。

kubectl run -it --rm load-generator --image=busybox /bin/sh --generator=run-pod/v1

如果您在几秒钟后未收到命令提示符,则可能需要按 Enter。 在命令提示符下,输入以下命令来生成负载,并促使 Autoscaler 扩展部署。

while true; do wget -q -O- http://php-apache; done

5. 要监视部署的向外扩展情况,请在与执行上一步骤的终端不同的终端上定期运行以下命令。

kubectl get hpa

输出:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEphp-apache Deployment/php-apache 250%/50% 1 10 5 4m44s

只要实际 CPU 百分比高于目标百分比,副本计数就会增加(最大值为 10)。在此情况下,此百分比为250%,因此 REPLICAS 数会继续增加。

Note

可能需要在几分钟后,您才能看到副本计数达到其最大值。例如,如果只需 6 个副本即可让CPU 负载小于或等于 50%,则负载将不会超过 6 个副本。

6. 停止负载。在正在生成负载(从步骤 4)的终端窗口中,通过按住 Ctrl+C 键来停止负载。通过再次运行以下命令,您会看到副本数缩减回 1。

kubectl get hpa

输出

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE

220

Page 229: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南网络负载均衡

php-apache Deployment/php-apache 0%/50% 1 10 1 25m

Note

缩减的默认时间范围是 5 分钟,因此,即使当前 CPU 百分比为 0%,您还是需要花一些时间才能看到副本计数再次达到 1。时间范围是可修改的。有关更多信息,请参阅 Kubernetes 文档中的Horizontal Pod Autoscaler。

7. 完成示例应用程序的试验之后,删除 php-apache 资源。

kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache

上的网络负载均衡Amazon EKS您可以使用 AWS 网络负载均衡器 (NLB) 或 传统负载均衡器 对跨 Pod 的网络流量进行负载均衡。要了解有关这两种类型之间的差异的更多信息,请参阅 网站上的 Elastic Load Balancing 功能AWS。您可以将 NLB 部署到公有或私有子网。

网络流量在 OSI 模型的 L4 处实现负载均衡。要在 L7 处对应用程序流量进行负载均衡,请参阅the sectioncalled “应用程序负载均衡” (p. 227)。要了解有关两种类型的负载均衡之间的差异的更多信息,请参阅 网站上的 Elastic Load Balancing 功能AWS。

Prerequisites

您必须先满足以下要求,然后才能将网络流量负载均衡到应用程序。

• 拥有现有集群。如果您没有现有集群,请参阅Amazon EKS 入门 (p. 3)。• 必须按照以下方式为公有子网添加标签,以便 Kubernetes 知道仅将这些子网用于外部负载均衡器,而不

是在每个可用区中选择一个公有子网(按子网 ID 的字母表顺序选择)。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建VPC (p. 170)。

键 值

kubernetes.io/role/elb 1

• 必须按照以下方式为私有子网添加标签,以便 Kubernetes 知道它可以将这些子网用于内部负载均衡器。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建 VPC (p. 170)。

键 值

kubernetes.io/role/internal-elb 1

Considerations

• 在 Amazon EKS 版本 1.15 及更高版本以及以下最低或更高版本的平台上,负载均衡器支持使用 UDP 协议。有关更多信息,请参阅the section called “平台版本” (p. 63)。

221

Page 230: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南负载均衡器 – 实例目标

Amazon EKS version 平台版本

1.18 1。

1.17 2.

1.16 3.

1.15 4.

• 您只能通过 VPC CNI 插件使用 NLB Amazon EKSIP (p. 178) 目标。您可以将 NLB 实例目标与 AmazonEKS VPC CNI 插件或可替换的兼容 CNI 插件 (p. 202)结合使用。有关 NLB 目标类型的更多信息,请参阅 中的目标类型Network Load Balancer 用户指南。

• 您只能将 IP 目标与 NLB 一起使用,而不能使用传统负载均衡器。• 您只能将 NLB IP 目标与至少运行 Amazon EKS 版本 1.18 的集群结合使用。要升级当前版本,请参阅the

section called “更新 Kubernetes 版本” (p. 37)。• 负载均衡器的配置由添加到服务清单中的注释控制。如果要在创建负载均衡器时(或之后)向负载均衡器添

加标签,请在服务规范中添加以下注释。有关更多信息,请参阅 Kubernetes 文档中的其他 ELB 注释。

service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags

• 如果您使用的是 Amazon EKS 1.16 或更高版本,则可以通过添加以下注释来将弹性 IP 地址分配给 网络负载均衡器。将 <example-values>(包括 <>)替换为您的弹性 IP 地址的分配 IDs。分配 IDs 的数量必须与用于负载均衡器的子网数匹配。

service.beta.kubernetes.io/aws-load-balancer-eip-allocations: eipalloc-<xxxxxxxxxxxxxxxxx>,eipalloc-<yyyyyyyyyyyyyyyyy>

负载均衡器 – 实例目标实例目标由 Kubernetes 服务控制器创建。您可以将 NLB 实例目标与部署到节点的 Pod 一起使用,但不能与 Fargate 一起使用。要在部署到 Fargate 的 Pod 之间对网络流量进行负载均衡,您必须使用 IP目标 (p. 223)。默认情况下,当您部署类型为 传统负载均衡器 的 Kubernetes 服务时,将创建外部(公有)LoadBalancer。 要部署 网络负载均衡器,请将以下注释应用于您的服务:

service.beta.kubernetes.io/aws-load-balancer-type: nlb

Important

在创建服务后,请勿编辑此注释。如果您需要修改它,请删除服务对象,然后使用此注释的所需值再次创建它。

要将负载均衡器部署到私有子网,您的服务规范必须具有以下注释:

service.beta.kubernetes.io/aws-load-balancer-internal: "true"

对于内部负载均衡器,Amazon EKS 集群必须配置为使用 VPC 中的至少一个私有子网。Kubernetes 会检查子网的路由表来确定它们是公有还是私有。公有子网有使用 Internet 网关直接连接到 Internet 的路由,但私有子网没有。

有关指定负载均衡器的示例服务清单,请参阅 Kubernetes 文档中的类型 LoadBalancer。有关通过Kubernetes 使用 网络负载均衡器 的更多信息,请参阅 Kubernetes 文档中的 AWS 上的 Network LoadBalancer 支持。

222

Page 231: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南负载均衡器 – IP 目标

负载均衡器 – IP 目标您可以将 NLB IP 目标与部署到 Amazon EC2 节点或 Fargate 的 Pod 一起使用。要创建使用 IP 目标的负载均衡器,您必须部署 AWS 负载均衡器控制器。有关控制器的更多信息,请参阅 上的 AWS负载均衡器控制器GitHub。 控制器创建和管理 NLB。您的 Kubernetes 服务必须创建为类型 LoadBalancer。 有关更多信息,请参阅 Kubernetes 文档中的类型 LoadBalancer。

要创建使用 IP 目标的负载均衡器,请将以下注释添加到服务清单并部署您的服务。

service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip"

Important

在创建服务后,请勿编辑此注释。如果您需要修改它,请删除服务对象,然后使用此注释的所需值再次创建它。您只能对至少运行 版本 1.18 的集群使用 NLB IPAmazon EKS 目标。要升级当前版本,请参阅the section called “更新 Kubernetes 版本” (p. 37)。

将 AWS 负载均衡器控制器部署到 Amazon EKS 集群

1. 创建 IAM OIDC 提供程序,并将该提供程序与您的集群关联。将 <example values>(包括 <>)替换为您自己的值。

eksctl utils associate-iam-oidc-provider \ --region <region-code> \ --cluster <my-cluster> \ --approve

2. 为 IAM 负载均衡器控制器下载允许它代表您调用 AWS AWS APIs 的 策略。您可以在 上查看策略文档GitHub。

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

3. 使用上一步中下载的策略创建 IAM 策略。

aws iam create-policy \ --policy-name <AWSLoadBalancerControllerIAMPolicy> \ --policy-document file://iam-policy.json

记下返回的策略 ARN。4. 在 IAM 命名空间中创建一个名为 aws-load-balancer-controller 的 kube-system 角色和

Kubernetes 服务账户,并创建一个集群角色绑定,以便负载均衡器控制器与以下命令一起使用。

eksctl create iamserviceaccount \ --cluster=<my-cluster> \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/<AWSLoadBalancerControllerIAMPolicy> \ --override-existing-serviceaccounts \ --approve

5. 如果您当前已安装适用于 Kubernetes 的 AWS ALB 入口控制器,请卸载它。负载均衡器控制器取代了适用于 Kubernetes 的 AWS ALB 入口控制器的功能。AWS

a. 检查当前是否已安装控制器。

223

Page 232: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南负载均衡器 – IP 目标

kubectl get deployment -n kube-system alb-ingress-controller

输出(如果已安装)

NAME READY UP-TO-DATE AVAILABLE AGEalb-ingress-controller 1/1 1 1 122d

输出(如果未安装)

Error from server (NotFound): deployments.apps "alb-ingress-controller" not found

b. 如果已安装控制器,请输入以下命令将其删除。

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/alb-ingress-controller.yamlkubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml

6. 使用 Helm 安装 AWS 负载均衡器控制器。如果您希望手动安装控制器,请跳到下一步。

a. 安装 TargetGroupBinding 自定义资源定义。

kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"

b. 添加 eks-charts 存储库。

helm repo add eks https://aws.github.io/eks-charts

c. 安装 AWS 负载均衡器控制器。

helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=<cluster-name> \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system

Important

部署的图表不会自动接收安全更新。您需要在图表可用时手动升级到较新的图表。7. 手动安装控制器。如果您已使用上一步安装控制器,则不要完成此步骤。

a. 安装 cert-manager 以将证书配置注入到 Webhook 中。

• 在 Kubernetes 1.16 或更高版本上安装。

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager.yaml

• 在 Kubernetes 1.15 或更早版本上安装。

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager-legacy.yaml

b. 安装控制器。

224

Page 233: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南负载均衡器 – IP 目标

a. 下载控制器规范。有关控制器的更多信息,请参阅 上的文档GitHub。

curl -o v2_0_0_full.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/v2_0_0_full.yaml

b. 编辑保存的 yaml 文件。在 Deployment spec 部分中,将 --cluster-name 值设置为您的Amazon EKS 集群名称。建议您从 yaml 规范中删除 ServiceAccount。如果您删除安装,这样做将保留 eksctl 创建的 iamserviceaccount。

c. 应用文件。

kubectl apply -f v2_0_0_full.yaml

8. 验证是否已安装控制器。

kubectl get deployment -n kube-system aws-load-balancer-controller

输出

NAME READY UP-TO-DATE AVAILABLE AGEaws-load-balancer-controller 1/1 1 1 84s

(可选)部署示例应用程序

1. 部署示例应用程序。

a. 将以下内容保存到计算机上的 yaml 文件中。

apiVersion: apps/v1kind: Deploymentmetadata: name: sample-appspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80

b. 将清单应用于集群。

kubectl apply -f <file-name-you-specified>.yaml

2. 使用注释创建 LoadBalancer 类型的服务,以创建具有 IP 目标的 NLB。

a. 将以下内容保存到计算机上的 yaml 文件中。

apiVersion: v1

225

Page 234: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南负载均衡器 – IP 目标

kind: Servicemetadata: name: sample-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb-ipspec: ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app: nginx

b. 将清单应用于集群。

kubectl apply -f <file-name-you-specified>.yaml

3. 验证是否已部署服务。

kubectl get svc sample-service

输出

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsample-service LoadBalancer 10.100.240.137 k8s-default-samplese-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.us-west-2.amazonaws.com 80:32400/TCP 16h

4. 打开 Amazon EC2 AWS 管理控制台。在左侧面板中选择 Target Groups (目标组)(在 Load Balancing(负载均衡) 下)。查找在上一步中创建的目标组。Load balancer (负载均衡器) 列中的名称将是上一步中返回的名称的一部分。例如,k8s-default-nlbipsvc-xxxxxxxxxx。 Target type (目标类型) 为。IP

5. 选择 Target group 以查看其详细信息。在 Registered targets (注册目标) 下,您应看到上一步中部署的三个副本的三个 IP 地址。请耐心等待,直到所有目标的状态均正常,然后再继续。可能需要几分钟时间,然后所有目标才为 healthy。 在更改为 unhealthy 之前,目标可能具有 healthy 状态。

6. 使用上一步中返回的值将流量发送到替换示例值的服务。EXTERNAL-IP

curl <k8s-default-samplese-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.us-west-2.amazonaws.com>

输出

<!DOCTYPE html><html><head><title>Welcome to nginx!</title>...

7. 当您使用完示例部署和服务后,请将其删除。

kubectl delete service sample-servicekubectl delete deployment sample-app

226

Page 235: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南应用程序负载均衡

上的应用程序负载均衡Amazon EKS您可以使用 AWS 应用程序负载均衡器 (ALB) 跨 Pod 实现应用程序流量的负载均衡。要了解更多信息,请参阅 Application Load Balancer 用户指南 中的什么是 Application Load Balancer?。您可以使用入口组跨Kubernetes 集群中的多个应用程序共享 ALB。过去,您需要对每个应用程序使用单独的 ALB。控制器会自动预置 AWS ALBs 以响应 Kubernetes 入口对象。ALBs 可以与部署到节点或 AWS Fargate 的 Pod 一起使用。您可以将 ALB 部署到公有或私有子网。

网络流量在 OSI 模型的 L7 时均衡。要在 L4 处对网络流量进行负载均衡,请参阅the section called “网络负载均衡” (p. 221)。要了解有关两种类型的负载均衡之间的差异的更多信息,请参阅 网站上的 Elastic LoadBalancing 功能AWS。

Prerequisites

您必须先满足以下要求,然后才能将应用程序流量负载均衡到应用程序。

• 拥有现有集群。如果您没有现有集群,请参阅Amazon EKS 入门 (p. 3)。• 必须按照以下方式为公有子网添加标签,以便 Kubernetes 知道仅将这些子网用于外部负载均衡器,而不

是在每个可用区中选择一个公有子网(按子网 ID 的字母表顺序选择)。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建VPC (p. 170)。

键 值

kubernetes.io/role/elb 1

• 必须按照以下方式为私有子网添加标签,以便 Kubernetes 知道它可以将这些子网用于内部负载均衡器。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建 VPC (p. 170)。

键 值

kubernetes.io/role/internal-elb 1

每当使用 注释在集群上创建 Kubernetes 入口资源时,AWS 负载均衡器控制器(以前名为 AWS ALB 入口控制器ALBs)都会创建 AWS 和必要的支持 kubernetes.io/ingress.class: alb 资源。入口资源会配置ALB 以便将 HTTP 或 HTTPS 流量路由到集群中的其他 Pod。要确保您的入口对象使用 AWS 负载均衡器控制器,请将以下注释添加到您的 Kubernetes 入口规范中。有关更多信息,请参阅 上的入口规范GitHub。

annotations: kubernetes.io/ingress.class: alb

AWS 负载均衡器控制器支持以下流量模式:

• 实例 – 将您的集群中的节点注册为 ALB 的目标。传输到 ALB 的流量将路由到您的服务的 NodePort,然后转发到您的 Pod。这是默认流量模式。您也可以使用 alb.ingress.kubernetes.io/target-type: instance 注释明确地指定该模式。

Note

您的 Kubernetes 服务必须指定 NodePort 类型,才能使用此流量模式。• IP – 将 Pod 注册为 ALB 的目标。传输到 ALB 的流量将直接路由到您的服务的 Pod。您必须指定alb.ingress.kubernetes.io/target-type: ip 注释,才能使用此流量模式。

227

Page 236: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南应用程序负载均衡

要标记控制器创建的 ALBs,请将以下注释添加到控制器: alb.ingress.kubernetes.io/tags。 有关AWS 负载均衡器控制器支持的所有可用注释列表,请参阅 上的入口注释GitHub。

本主题介绍如何配置 AWS 负载均衡器控制器以与您的 Amazon EKS 集群结合使用。

将 AWS 负载均衡器控制器部署到 Amazon EKS 集群

1. 创建 IAM OIDC 提供程序,并将该提供程序与您的集群关联。将 <example values>(包括 <>)替换为您自己的值。

eksctl utils associate-iam-oidc-provider \ --region <region-code> \ --cluster <my-cluster> \ --approve

2. 为 IAM 负载均衡器控制器下载允许它代表您调用 AWS AWS APIs 的 策略。您可以在 上查看策略文档GitHub。

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

3. 使用上一步中下载的策略创建 IAM 策略。

aws iam create-policy \ --policy-name <AWSLoadBalancerControllerIAMPolicy> \ --policy-document file://iam-policy.json

记下返回的策略 ARN。4. 在 IAM 命名空间中创建一个名为 aws-load-balancer-controller 的 kube-system 角色和

Kubernetes 服务账户,并创建一个集群角色绑定,以便负载均衡器控制器与以下命令一起使用。

eksctl create iamserviceaccount \ --cluster=<my-cluster> \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/<AWSLoadBalancerControllerIAMPolicy> \ --override-existing-serviceaccounts \ --approve

5. 如果您当前已安装适用于 Kubernetes 的 AWS ALB 入口控制器,请卸载它。负载均衡器控制器取代了适用于 Kubernetes 的 AWS ALB 入口控制器的功能。AWS

a. 检查当前是否已安装控制器。

kubectl get deployment -n kube-system alb-ingress-controller

输出(如果已安装)

NAME READY UP-TO-DATE AVAILABLE AGEalb-ingress-controller 1/1 1 1 122d

输出(如果未安装)

Error from server (NotFound): deployments.apps "alb-ingress-controller" not found

b. 如果已安装控制器,请输入以下命令将其删除。

228

Page 237: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南应用程序负载均衡

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/alb-ingress-controller.yamlkubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml

6. 使用 Helm 安装 AWS 负载均衡器控制器。如果您希望手动安装控制器,请跳到下一步。

a. 安装 TargetGroupBinding 自定义资源定义。

kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"

b. 添加 eks-charts 存储库。

helm repo add eks https://aws.github.io/eks-charts

c. 安装 AWS 负载均衡器控制器。

helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=<cluster-name> \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system

Important

部署的图表不会自动接收安全更新。您需要在图表可用时手动升级到较新的图表。7. 手动安装控制器。如果您已使用上一步安装控制器,则不要完成此步骤。

a. 安装 cert-manager 以将证书配置注入到 Webhook 中。

• 在 Kubernetes 1.16 或更高版本上安装。

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager.yaml

• 在 Kubernetes 1.15 或更早版本上安装。

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager-legacy.yaml

b. 安装控制器。

a. 下载控制器规范。有关控制器的更多信息,请参阅 上的文档GitHub。

curl -o v2_0_0_full.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/v2_0_0_full.yaml

b. 编辑保存的 yaml 文件。在 Deployment spec 部分中,将 --cluster-name 值设置为您的Amazon EKS 集群名称。建议您从 yaml 规范中删除 ServiceAccount。如果您删除安装,这样做将保留 eksctl 创建的 iamserviceaccount。

c. 应用文件。

kubectl apply -f v2_0_0_full.yaml

8. 验证是否已安装控制器。

229

Page 238: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南应用程序负载均衡

kubectl get deployment -n kube-system aws-load-balancer-controller

输出

NAME READY UP-TO-DATE AVAILABLE AGEaws-load-balancer-controller 1/1 1 1 84s

使用 IngressGroups 在多个入口资源之间共享 ALB

要将入口加入入口组,请将以下注释添加到 Kubernetes 入口资源规范中。

alb.ingress.kubernetes.io/group.name: <my-group>

组名称必须为:

• 长度不超过 63 个字符。• 由小写字母数字字符、- 和 . 组成,并且必须以字母数字字符开头和结尾。

控制器将自动合并同一入口组中所有入口规则,并通过单个 ALB 支持它们。在入口上定义的大多数注释仅适用于该入口定义的路径。默认情况下,入口资源不属于任何入口组。

Warning

潜在安全风险: 仅当所有具有 RBAC 权限的 Kubernetes 用户创建或修改入口资源位于相同的信任边界内时,您才应为入口指定入口组。如果您使用组名称添加注释,则其他 Kubernetes 用户可能会创建或修改其入口信息以属于同一入口组。这样做可能会导致意外的行为,例如用较高优先级的规则覆盖现有规则。

您可以添加入口资源的订单号。

alb.ingress.kubernetes.io/group.order: <'10'>

数字范围可以在 1-1000 之间。首先评估同一入口组中所有入口的最小数量。没有此注释的所有入口的求值结果为零。数字越大的重复规则可能会覆盖数字越小的规则。默认情况下,相同入口组内入口之间的规则顺序由入口命名空间和名称的词汇顺序决定。

Important

确保同一入口组中的每个入口都具有唯一的优先级编号。不能跨入口包含重复的订单号。

部署示例应用程序

您可以在仅具有 Amazon EC2 节点和/或 Fargate Pod 的集群上运行示例应用程序。

1. 如果您不部署到 Fargate,请跳过此步骤。创建 Fargate 配置文件。后面的命令仅适用于使用 eksctl 创建的集群。 如果您未使用 eksctl 创建集群,则可以使用 AWS 管理控制台 (p. 122) 创建配置文件,并对以下命令中的 name 和 namespace 使用相同的值。

eksctl create fargateprofile --cluster <my-cluster> --region <region-code> --name <alb-sample-app> --namespace game-2048

2. 将游戏 2048 作为示例应用程序部署,以验证 AWS 负载均衡器控制器是否作为入口对象的结果创建 AWSALB。

230

Page 239: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南应用程序负载均衡

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml

3. 几分钟后,验证是否已使用以下命令创建入口资源。

kubectl get ingress/ingress-2048 -n game-2048

输出:

NAME CLASS HOSTS ADDRESS PORTS AGEingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com 80 2m32s

Note

如果在几分钟后尚未创建入口,请运行以下命令以查看负载均衡器控制器日志。这些日志包含可帮助您诊断部署中任何问题的错误消息。

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

4. 打开浏览器并从上一命令输出导航到 ADDRESS URL 以查看示例应用程序。5. 在完成对示例应用程序的试验后,请使用以下命令将其删除。

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml

231

Page 240: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装aws-iam-authenticator

集群身份验证Amazon EKS 使用 IAM 向您的 Kubernetes 集群提供身份验证(通过版本 或更高版本中提供的 aws eksget-token 1.16.156 命令或者AWS CLI适用于 Kubernetes 的 AWS IAM 身份验证器),但它仍依赖于本机Kubernetes 基于角色的访问控制 (RBAC) 来进行授权。这表示 IAM 仅用于有效 IAM 实体的身份验证。用于与 Amazon EKS 集群的 Kubernetes API 进行交互的所有权限通过本机 Kubernetes RBAC 系统进行管理。

主题• 安装aws-iam-authenticator (p. 232)• 为 Amazon EKS 创建 kubeconfig (p. 236)• 管理集群的用户或 IAM 角色 (p. 240)

安装aws-iam-authenticatorAmazon EKS 使用 IAM 通过适用于 Kubernetes 的 AWS IAM 身份验证器向 Kubernetes 集群提供身份验证。您可以将库存 kubectl 客户端配置为使用 Amazon EKS,方式是安装适用于 Kubernetes 的 AWS IAM身份验证器,然后修改 kubectl 配置文件,以便使用它进行身份验证。

Note

如果您正在运行 AWS CLI 版本 1.16.156 或更高版本,则无需安装身份验证器。相反,您可以使用aws eks get-token 命令。有关更多信息,请参阅手动创建 kubeconfig (p. 237)。

如果您无法使用 AWS CLI 版本 1.16.156 或更高版本创建 kubeconfig 文件,则可以在macOS、 (p. 233)Linux 或 (p. 234)Windows 上安装适用于 Kubernetes 的 AWS IAM 身份验证器。 (p. 235)

232

Page 241: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装aws-iam-authenticator

使用 Homebrew 安装aws-iam-authenticator

安装 aws-iam-authenticator 的最简单方法是使用 Homebrew。

1. 如果您的 Mac 上尚未安装 Homebrew,请使用以下命令安装它。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

2. 使用以下命令安装 aws-iam-authenticator。

brew install aws-iam-authenticator

3. 测试 aws-iam-authenticator 二进制文件的工作原理。

aws-iam-authenticator help

在 上安装 aws-iam-authenticator macOS

也可以按照以下步骤安装 AWS 提供的 aws-iam-authenticator 版本。

1. 使用与集群所在的区域对应的命令从 Amazon EKS 下载 aws-iam-authenticator 提供的 AmazonS3 二进制文件。

• 区域之外的所有区域。中国

curl -o aws-iam-authenticator https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/aws-iam-authenticator

• 北京和宁夏 中国区域。

curl -o aws-iam-authenticator https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/aws-iam-authenticator

2. (可选)使用同一存储桶前缀中提供的 SHA-256 总和验证下载的二进制文件。

a. 使用与集群所在的区域对应的命令下载系统的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o aws-iam-authenticator.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/aws-iam-authenticator.sha256

• 北京和宁夏 中国区域。

curl -o aws-iam-authenticator.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/aws-iam-authenticator.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

openssl sha1 -sha256 aws-iam-authenticator

c. 将命令输出中生成的 SHA-256 总和与下载的 aws-iam-authenticator.sha256 文件进行比较。这两者应该匹配。

3. 将执行权限应用于二进制文件。

233

Page 242: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装aws-iam-authenticator

chmod +x ./aws-iam-authenticator

4. 将二进制文件复制到 $PATH 中的文件夹。 我们建议您创建一个 $HOME/bin/aws-iam-authenticator 并确保 $HOME/bin 首先显示在您的 $PATH 中。

mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$PATH:$HOME/bin

5. 将 $HOME/bin 添加到 PATH 环境变量。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

6. 测试 aws-iam-authenticator 二进制文件的工作原理。

aws-iam-authenticator help

在 Linux 上安装 aws-iam-authenticator

1. 使用与集群所在的区域对应的命令从 Amazon EKS 下载 aws-iam-authenticator 提供的 AmazonS3 二进制文件。要下载 Arm 版本,请先将 amd64 更改为 arm64,然后再运行命令。

• 区域之外的所有区域。中国

curl -o aws-iam-authenticator https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/aws-iam-authenticator

• 北京和宁夏 中国区域。

curl -o aws-iam-authenticator https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/aws-iam-authenticator

2. (可选)使用同一存储桶前缀中提供的 SHA-256 总和验证下载的二进制文件。

a. 使用与集群所在的区域对应的命令下载系统的 SHA-256 总和。要下载 Arm 版本,请先将 <amd64>更改为 arm64,然后再运行命令。

• 区域之外的所有区域。中国

curl -o aws-iam-authenticator.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/aws-iam-authenticator.sha256

• 北京和宁夏 中国区域。

curl -o aws-iam-authenticator.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/aws-iam-authenticator.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

openssl sha1 -sha256 aws-iam-authenticator

c. 将命令输出中生成的 SHA-256 总和与下载的 aws-iam-authenticator.sha256 文件进行比较。这两者应该匹配。

3. 将执行权限应用于二进制文件。

234

Page 243: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装aws-iam-authenticator

chmod +x ./aws-iam-authenticator

4. 将二进制文件复制到 $PATH 中的文件夹。 我们建议您创建一个 $HOME/bin/aws-iam-authenticator 并确保 $HOME/bin 首先显示在您的 $PATH 中。

mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$PATH:$HOME/bin

5. 将 $HOME/bin 添加到 PATH 环境变量。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc

6. 测试 aws-iam-authenticator 二进制文件的工作原理。

aws-iam-authenticator help

在带 Chocolatey 的 Windows 上安装aws-iam-authenticator

1. 如果您尚未在 Windows 系统上安装 Chocolatey,请参阅安装 Chocolatey。2. 打开 PowerShell 终端窗口,并使用以下命令安装 aws-iam-authenticator 程序包:

choco install -y aws-iam-authenticator

3. 测试 aws-iam-authenticator 二进制文件的工作原理。

aws-iam-authenticator help

在 Windows 上安装 aws-iam-authenticator

1. 打开 PowerShell 终端窗口,然后使用与集群所在的区域对应的命令从 Amazon EKS 下载 aws-iam-authenticator 提供的 Amazon S3 二进制文件。

• 区域之外的所有区域。中国

curl -o aws-iam-authenticator.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/aws-iam-authenticator.exe

• 北京和宁夏 中国区域。

curl -o aws-iam-authenticator.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/aws-iam-authenticator.exe

2. (可选)使用同一存储桶前缀中提供的 SHA-256 总和验证下载的二进制文件。

a. 使用与集群所在的区域对应的命令下载系统的 SHA-256 总和。

• 区域之外的所有区域。中国

curl -o aws-iam-authenticator.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/aws-iam-authenticator.exe.sha256

• 北京和宁夏 中国区域。

235

Page 244: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南为 Amazon EKS 创建 kubeconfig

curl -o aws-iam-authenticator.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/aws-iam-authenticator.exe.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

Get-FileHash aws-iam-authenticator.exe

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。二者应匹配,但 PowerShell输出为大写。

3. 将二进制文件复制到 PATH 中的文件夹。 如果 PATH 中有现有目录可用于命令行实用程序,请将二进制文件复制到该目录。否则,请完成以下步骤。

a. 为命令行二进制文件创建一个新目录,例如 C:\bin。b. 将 aws-iam-authenticator.exe 二进制文件复制到新目录。c. 编辑用户或系统 PATH 环境变量,将新目录添加到 PATH 中。d. 关闭您的 PowerShell 终端并打开一个新的终端来选取新的 PATH 变量。

4. 测试 aws-iam-authenticator 二进制文件的工作原理。

aws-iam-authenticator help

如果您现有一个 Amazon EKS 集群,则为该集群创建一个 kubeconfig 文件。有关更多信息,请参阅为Amazon EKS 创建 kubeconfig (p. 236)。否则,请参阅创建 Amazon EKS 集群 (p. 30)以创建新的Amazon EKS 集群。

为 Amazon EKS 创建 kubeconfig在本节中,将为集群创建一个 kubeconfig 文件(或更新现有文件)。

本节提供两个用于创建或更新 kubeconfig 的过程。您可以使用 AWS CLI,借助 自动创建或更新 kubeconfigupdate-kubeconfig 命令,也可以使用 AWS CLI 或 AWS CLI 手动创建 kubeconfig。aws-iam-authenticator

Amazon EKS 使用 的版本 aws eks get-token 或更高版本中提供的 1.16.156 AWS CLI 命令或适用于Kubernetes 的 AWS IAM 身份验证器 和 kubectl 进行集群身份验证。如果您的系统上已安装 AWS CLI,则默认情况下,适用于 Kubernetes 的 AWS IAM 身份验证器将使用随以下命令返回的相同凭证:

aws sts get-caller-identity

有关更多信息,请参阅 AWS CLI 中的配置 AWS Command Line Interface 用户指南。

自动创建 kubeconfig使用 AWS CLI 创建 kubeconfig

1. 确保您已安装 AWS CLI 的版本 1.16.156 或更高版本。要安装或升级 AWS CLI,请参阅 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html 中的AWS Command Line Interface 用户指南安装 AWS 命令行界面。

Note

系统的 Python 版本必须为 2.7.9 或更高版本。否则,在 AWS CLI 调用 Amazon EKS 时会收到hostname doesn't match 错误。

236

Page 245: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南手动创建 kubeconfig

可以使用以下命令来查看您的 AWS CLI版本:

aws --version

Important

程序包管理器(如 yum 、 apt-get 或适用于 macOS 的 Homebrew)通常位于 AWS CLI 的多个版本之后。要确保您具有最新版本,请参阅 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html 中的安装 AWS 命令行界面AWS Command Line Interface 用户指南。

2. 使用 AWS CLI update-kubeconfig 命令为您的集群创建或更新 kubeconfig。

• 默认情况下,生成的配置文件会在主目录的默认 kubeconfig 路径 (.kube/config) 中创建,或与该位置的现有 kubeconfig 合并。您可以使用 --kubeconfig 选项指定其他路径。

• 在发出 IAM --role-arn 命令时,您可以使用 kubectl 选项指定用于身份验证的 角色 ARN。否则,将使用默认 AWS CLI 或开发工具包凭证链中的 IAM 实体。您可以通过运行 AWS CLI aws stsget-caller-identity 命令来查看默认 或开发工具包身份。

• 有关更多信息,请参阅包含 aws eks update-kubeconfig help 命令的帮助页面,或参阅 https://docs.aws.amazon.com/cli/latest/reference/eks/update-kubeconfig.html 中的 update-kubeconfigAWSCLI Command Reference。

Note

要运行以下命令,您必须具有对指定的集群使用 eks:DescribeCluster API 操作的权限。有关更多信息,请参阅Amazon EKS 基于身份的策略示例 (p. 273)。

aws eks --region <region-code> update-kubeconfig --name <cluster_name>

3. 测试配置。

kubectl get svc

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

手动创建 kubeconfig手动创建 kubeconfig 文件

1. 如果默认 ~/.kube 目录尚不存在,请创建它。

mkdir -p ~/.kube

2. 打开您常用的文本编辑器并将以下 kubeconfig 代码块之一复制到其中,具体取决于您的首选客户端令牌方法。

237

Page 246: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南手动创建 kubeconfig

• 要使用 AWS CLI aws eks get-token 命令(需要 1.16.156 的版本 AWS CLI 或更高版本),请执行以下操作:

apiVersion: v1clusters:- cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetescontexts:- context: cluster: kubernetes user: aws name: awscurrent-context: awskind: Configpreferences: {}users:- name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws args: - "eks" - "get-token" - "--cluster-name" - "<cluster-name>" ✓ - "--role" ✓ - "<role-arn>" ✓ env: ✓ - name: AWS_PROFILE ✓ value: "<aws-profile>"

• 使用适用于 Kubernetes 的 AWS IAM 身份验证器:

apiVersion: v1clusters:- cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetescontexts:- context: cluster: kubernetes user: aws name: awscurrent-context: awskind: Configpreferences: {}users:- name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws-iam-authenticator args: - "token" - "-i" - "<cluster-name>" ✓ - "-r" ✓ - "<role-arn>" ✓ env:

238

Page 247: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南手动创建 kubeconfig

✓ - name: AWS_PROFILE ✓ value: "<aws-profile>"

3. 将 <endpoint-url> 替换为为您的集群创建的终端节点 URL。4. 将 <base64-encoded-ca-cert> 替换为为您的集群创建的 certificateAuthority.data。5. 将 <cluster-name> 替换为您的集群名称。6. (可选)要代入 IAM 角色以执行集群操作(而不是默认 AWS 凭证提供程序链)请取消注释 -r 或 --

role 和 <role-arn> 行,并替换 IAM 角色 ARN 以将其用于您的用户。7. (可选)要始终使用指定的特定 AWS 凭证配置文件(而不是默认 AWS 凭证提供程序链),请取消注释 env

行并将 <aws-profile> 替换为要使用的配置文件名称。8. 将该文件保存到默认 kubectl 文件夹,并在文件名中包含您的集群名称。例如,如果您的集群名称为

<devel>,请将该文件保存到 ~/.kube/config-<devel>。9. 将该文件路径添加到您的 KUBECONFIG 环境变量中,以便 kubectl 知道查找集群配置的位置。

• 对于 macOS 或 Linux 上的 Bash shell:

export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>

• 对于 Windows 上的 PowerShell:

$ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config-<devel>"

10. (可选) 将配置添加到您的 shell 初始化文件,以便在打开 shell 时对其进行配置。

• 对于 macOS 上的 Bash shell:

echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>' >> ~/.bash_profile

• 对于 Linux 上的 Bash shell:

echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>' >> ~/.bashrc

• 对于 Windows 上的 PowerShell:

[System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')

11. 测试配置。

kubectl get svc

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

239

Page 248: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南管理集群的用户或 IAM 角色

管理集群的用户或 IAM 角色当您创建 Amazon EKS 集群时,将在集群的 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap。

Note

有关不同 IAM; 实体的更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html中的IAM 用户指南身份(用户、组和角色)。有关 Kubernetes RBAC 配置的更多信息,请参阅使用 RBAC 授权。有关所有 ConfigMap 设置,请参阅 上的完整配置格式GitHub。

aws-auth 的应用在 ConfigMap 指南中有介绍,该指南提供了从创建 Amazon EKS 入门 (p. 3) 集群到部署示例 Kubernetes 应用程序的完整端到端演练。Amazon EKS它最初是为了允许节点加入集群而创建的,但您也可以使用此 ConfigMap 将 RBAC 访问添加到 IAM 用户和角色。如果您尚未启动节点并应用了 aws-authConfigMap,则可以通过以下过程执行该操作。

将 aws-auth ConfigMap 应用于集群

1. 检查您是否已经应用了 aws-auth ConfigMap。

kubectl describe configmap -n kube-system aws-auth

如果您收到错误信息“Error from server (NotFound): configmaps "aws-auth" notfound”,则继续执行以下步骤以应用股票 ConfigMap。

2. 下载、编辑和应用 AWS 身份验证器配置映射。

a. 使用与集群所在的区域对应的命令下载配置映射。

• 区域之外的所有区域。中国

curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/aws-auth-cm.yaml

• 北京和宁夏 中国区域。

curl -o aws-auth-cm.yaml https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/aws-auth-cm.yaml

b. 使用您常用的文本编辑器打开文件。将 <ARN of instance role (not instanceprofile)> 替换为与节点关联的 Amazon 资源名称 (ARN) 角色的 IAM,并保存文件。请勿修改此文件中的任何其他行。

Important

角色 ARN 不能包含路径。角色 ARN 的格式必须为arn:aws:iam::<123456789012>:role/<role-name>。 有关更多信息,请参阅aws-auth ConfigMap 不授予对集群的访问权限 (p. 319)。

apiVersion: v1kind: ConfigMapmetadata: name: aws-auth namespace: kube-systemdata: mapRoles: | - rolearn: <ARN of instance role (not instance profile)>

240

Page 249: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南管理集群的用户或 IAM 角色

username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes

您可以检查工作线程节点组的 AWS CloudFormation 堆栈输出,并查找以下值:

• InstanceRoleARN(适用于使用 eksctl 创建的节点组)• NodeInstanceRole(针对在Amazon EKS中使用 AWS CloudFormation 提供的 AWS 管理控制台

模板创建的节点组)c. 应用配置。此命令可能需要几分钟才能完成。

kubectl apply -f aws-auth-cm.yaml

Note

如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝(kubectl) (p. 312)。

3. 查看节点的状态并等待它们达到 Ready 状态。

kubectl get nodes --watch

将 IAM 用户或角色添加到 Amazon EKS 集群

1. 确保 kubectl 要使用的 AWS 凭证已为集群授权。默认情况下,创建该集群的 IAM 用户具有这些权限。

2. 打开 aws-auth ConfigMap。

kubectl edit -n kube-system configmap/aws-auth

Note

如果您收到指示“Error from server (NotFound): configmaps "aws-auth" notfound”的错误,请使用上述过程应用库存 ConfigMap。

示例 ConfigMap:

apiVersion: v1data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF username: system:node:{{EC2PrivateDNSName}}kind: ConfigMapmetadata: creationTimestamp: "2020-09-30T21:09:18Z" name: aws-auth namespace: kube-system resourceVersion: "1021" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c

3. 将您的 IAM 用户、角色或 AWS 账户添加到 configMap。 您无法将 IAM 组添加到 configMap。241

Page 250: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南管理集群的用户或 IAM 角色

• 添加 IAM 角色(例如,对于联合身份用户):将角色详细信息添加到 mapRoles 的 ConfigMap 部分下的data。 如果此部分在文件中尚不存在,请添加它。每个条目支持以下参数:• 角色组: 要添加的 ARN 角色的 IAM。• 用户名: Kubernetes 内要映射到 IAM 角色的用户名。• 组: Kubernetes 内角色要映射到的组的列表。有关更多信息,请参阅 Kubernetes 文档中的默认角色

和角色绑定。• 添加 IAM 用户:将用户详细信息添加到 mapUsers 中的 ConfigMap 部分下的 data。 如果此部分在文

件中尚不存在,请添加它。每个条目支持以下参数:• userarn: 要添加的 ARN 用户的 IAM。• 用户名: Kubernetes 内要映射到 IAM 用户的用户名。• 组: Kubernetes 内用户要映射到的组的列表。有关更多信息,请参阅 Kubernetes 文档中的默认角色

和角色绑定。

例如,下面的块包含:

• 一个 mapRoles 部分,该部分添加节点实例角色,以便节点可以自行注册到集群。• mapUsers 部分,其中包含来自默认 AWS 账户的 AWS 用户 admin 和来自其他 AWS 账户的 ops-user。两个用户均添加到 system:masters 组。

将所有 <example-values>(包括 <>)替换为您自己的值。

✓ Please edit the object below. Lines beginning with a '✓' will be ignored,✓ and an empty file will abort the edit. If an error occurs while saving this file will be✓ reopened with the relevant failures.✓apiVersion: v1data: mapRoles: | - rolearn: <arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF> username: <system:node:{{EC2PrivateDNSName}}> groups: - <system:bootstrappers> - <system:nodes> mapUsers: | - userarn: <arn:aws:iam::111122223333:user/admin> username: <admin> groups: - <system:masters> - userarn: <arn:aws:iam::111122223333:user/ops-user> username: <ops-user> groups: - <system:masters>

4. 保存文件并退出您的文本编辑器。

242

Page 251: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装kubectl

集群管理本章包含以下帮助您管理集群的主题。

• 安装kubectl (p. 243) – 了解如何安装 kubectl,这是用于管理 Kubernetes 的命令行工具。• eksctl 命令行实用程序 (p. 251) – 了解如何安装用于在 Amazon EKS 上创建和管理 Kubernetes 集群

的简单命令行实用程序。• 教程: 部署 Kubernetes 控制面板 (Web UI) (p. 253) – 了解如何安装控制面板,它是一种适用于

Kubernetes 集群和应用程序的基于 Web 的用户界面。• 安装 Kubernetes Metrics Server (p. 257) – Kubernetes Metrics Server 是集群中资源使用情况数据的

聚合器。它默认不部署在您的集群中,但由 Kubernetes 附加组件(例如 Kubernetes 控制面板和 HorizontalPod Autoscaler (p. 218))使用。在本主题中,您将学习如何安装 Metrics Server。

• Prometheus 的控制层面指标 (p. 258) – Kubernetes API 服务器公开了大量对监控和分析有用的指标。本主题介绍了如何部署 Prometheus 以及您可以使用它来查看和分析集群执行的操作的一些方法。

• 配合使用 Helm 与 Amazon EKS (p. 261) – Kubernetes 的 Helm 程序包管理器可帮助您在 Kubernetes集群上安装和管理应用程序。本主题可帮助您安装并运行 Helm 二进制文件,以便您可以在本地计算机上使用 Helm CLI 安装和管理图表。

• 标记 Amazon EKS 资源 (p. 261) – 为了帮助您管理 Amazon EKS 资源,您可以标签 的形式为每个资源分配您自己的元数据。本主题介绍标签并说明如何创建标签。

• Amazon EKS 服务配额 (p. 265) – 您的 AWS 账户对于每个 AWS 服务都具有默认配额(以前称为限制)。了解 Amazon EKS 的配额以及如何增加这些配额。

安装kubectlKubernetes 使用名为 kubectl 的命令行实用程序与集群 API 服务器通信。很多操作系统程序包管理器中都提供 kubectl 二进制文件,此选项通常比手动下载和安装过程要容易很多。您可以按照 Kubernetes 文档中针对您的特定操作系统或程序包管理器的说明进行安装。

本主题可帮助您下载并安装适用于 Amazon EKSkubectl、LinuxmacOS 和 (p. 243)Windows 操作系统的 (p. 245) 提供的 (p. 246) 二进制文件。这些二进制文件与上游社区版本相同,且不为 Amazon EKS 或AWS 所特有。

Note

您必须使用与您的 Amazon EKS 集群控制层面不同的一个次要版本内的 kubectl 版本。例如,1.17 kubectl 客户端应使用 Kubernetes 1.16、1.17 和 1.18 集群。

除 中国 (宁夏) 和 中国(北京) 之外的所有区域要在 kubectl 区域中安装 中国,请参阅the section called “中国区域” (p. 247)。

[在 kubectl 上安装 macOS ]

1. 从 Amazon EKS 下载集群的 Kubernetes 版本的 提供的 kubectl Amazon S3 二进制文件:

• Kubernetes 1.18:

243

Page 252: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南除 中国 (宁夏) 和 中国(北京) 之外的所有区域

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/kubectl

• Kubernetes 1.17:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.11/2020-09-18/bin/darwin/amd64/kubectl

• Kubernetes 1.16:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.13/2020-09-18/bin/darwin/amd64/kubectl

• Kubernetes 1.15:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.11/2020-09-18/bin/darwin/amd64/kubectl

2. (可选)使用二进制文件的 SHA-256 总和验证下载的二进制文件。

a. 为 macOS 的集群的 Kubernetes 版本下载 SHA-256 总和:

• Kubernetes 1.18:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/darwin/amd64/kubectl.sha256

• Kubernetes 1.17:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.11/2020-09-18/bin/darwin/amd64/kubectl.sha256

• Kubernetes 1.16:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.13/2020-09-18/bin/darwin/amd64/kubectl.sha256

• Kubernetes 1.15:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.11/2020-09-18/bin/darwin/amd64/kubectl.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

chmod +x ./kubectl

4. 将二进制文件复制到 PATH 中的文件夹。 如果您已经安装了 kubectl 版本,我们建议您创建一个$HOME/bin/kubectl 并确保 $HOME/bin 位于您的 $PATH 中。

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

5. (可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

244

Page 253: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南除 中国 (宁夏) 和 中国(北京) 之外的所有区域

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

6. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Linux 上安装 kubectl]

1. 从 Amazon EKS 下载集群的 Kubernetes 版本的 提供的 kubectl Amazon S3 二进制文件。要下载Arm 版本,请先将 amd64 更改为 arm64,然后再运行命令。

• Kubernetes 1.18:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl

• Kubernetes 1.17:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.11/2020-09-18/bin/linux/amd64/kubectl

• Kubernetes 1.16:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.13/2020-09-18/bin/linux/amd64/kubectl

• Kubernetes 1.15:

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.11/2020-09-18/bin/linux/amd64/kubectl

2. (可选)使用二进制文件的 SHA-256 总和验证下载的二进制文件。

a. 为 Linux 的集群的 Kubernetes 版本下载 SHA-256 总和。要下载 Arm 版本,请先将 <amd64> 更改为 arm64,然后再运行命令。

• Kubernetes 1.18:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl.sha256

• Kubernetes 1.17:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.11/2020-09-18/bin/linux/amd64/kubectl.sha256

• Kubernetes 1.16:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.13/2020-09-18/bin/linux/amd64/kubectl.sha256

• Kubernetes 1.15:

curl -o kubectl.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.11/2020-09-18/bin/linux/amd64/kubectl.sha256

245

Page 254: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南除 中国 (宁夏) 和 中国(北京) 之外的所有区域

b. 检查下载的二进制文件的 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

chmod +x ./kubectl

4. 将二进制文件复制到 PATH 中的文件夹。 如果您已经安装了 kubectl 版本,我们建议您创建一个$HOME/bin/kubectl 并确保 $HOME/bin 位于您的 $PATH 中。

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

5. (可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

Note

这一步假设您使用 Bash Shell;如果使用其他 Shell,请将命令更改为使用您的特定 Shell 的初始化文件。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc

6. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Windows 上安装 kubectl]

1. 打开 PowerShell 终端。2. 从 Amazon EKS 下载集群的 Kubernetes 版本的 提供的 kubectl Amazon S3 二进制文件:

• Kubernetes 1.18:

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe

• Kubernetes 1.17:

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.11/2020-09-18/bin/windows/amd64/kubectl.exe

• Kubernetes 1.16:

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.13/2020-09-18/bin/windows/amd64/kubectl.exe

• Kubernetes 1.15:

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.11/2020-09-18/bin/windows/amd64/kubectl.exe

3. (可选)使用二进制文件的 SHA-256 总和验证下载的二进制文件。

a. 为 Windows 的集群的 Kubernetes 版本下载 SHA-256 总和:

246

Page 255: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南中国区域

• Kubernetes 1.18:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• Kubernetes 1.17:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.11/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• Kubernetes 1.16:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.13/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• Kubernetes 1.15:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.us-west-2.amazonaws.com/1.15.11/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

Get-FileHash kubectl.exe

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。二者应匹配,但 PowerShell输出为大写。

4. 将二进制文件复制到 PATH 中的文件夹。 如果 PATH 中有现有目录可用于命令行实用程序,请将二进制文件复制到该目录。否则,请完成以下步骤。

a. 为命令行二进制文件创建一个新目录,例如 C:\bin。b. 将 kubectl.exe 二进制文件复制到新目录。c. 编辑用户或系统 PATH 环境变量,将新目录添加到 PATH 中。d. 关闭您的 PowerShell 终端并打开一个新终端来选取新的 PATH 变量。

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

中国区域如果您在中国(北京)或中国 (宁夏)区域,请完成以下说明。要安装 kubectl(如果您是任何其他区域),请参阅the section called “除 中国 (宁夏) 和 中国(北京) 之外的所有区域 ” (p. 243)。

[在 kubectl 上安装 macOS ]

1. 从 Amazon EKS 下载集群的 Kubernetes 版本的 提供的 kubectl Amazon S3 二进制文件:

• Kubernetes 1.18:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/kubectl

• Kubernetes 1.17:

247

Page 256: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南中国区域

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.17.11/2020-09-18/bin/darwin/amd64/kubectl

• Kubernetes 1.16:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.16.13/2020-09-18/bin/darwin/amd64/kubectl

• Kubernetes 1.15:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.15.11/2020-09-18/bin/darwin/amd64/kubectl

2. (可选)使用二进制文件的 SHA-256 总和验证下载的二进制文件。

a. 为 macOS 的集群的 Kubernetes 版本下载 SHA-256 总和:

• Kubernetes 1.18:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/darwin/amd64/kubectl.sha256

• Kubernetes 1.17:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.17.11/2020-09-18/bin/darwin/amd64/kubectl.sha256

• Kubernetes 1.16:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.16.13/2020-09-18/bin/darwin/amd64/kubectl.sha256

• Kubernetes 1.15:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.15.11/2020-09-18/bin/darwin/amd64/kubectl.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

openssl sha1 -sha256 kubectl

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

chmod +x ./kubectl

4. 将二进制文件复制到 PATH 中的文件夹。 如果您已经安装了 kubectl 版本,我们建议您创建一个$HOME/bin/kubectl 并确保 $HOME/bin 先出现在您的 $PATH 中。

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

5. (可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile

6. 安装 kubectl 后,可以使用以下命令验证其版本:

248

Page 257: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南中国区域

kubectl version --short --client

[在 Linux 上安装 kubectl]

1. 从 Amazon EKS 下载集群的 Kubernetes 版本的 提供的 kubectl Amazon S3 二进制文件。要下载Arm 版本,请先将 amd64 更改为 arm64,然后再运行命令。

• Kubernetes 1.18:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/kubectl

• Kubernetes 1.17:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.17.11/2020-09-18/bin/linux/amd64/kubectl

• Kubernetes 1.16:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.16.13/2020-09-18/bin/linux/amd64/kubectl

• Kubernetes 1.15:

curl -o kubectl https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.15.11/2020-09-18/bin/linux/amd64/kubectl

2. (可选)使用二进制文件的 SHA-256 总和验证下载的二进制文件。

a. 为 Linux 的集群的 Kubernetes 版本下载 SHA-256 总和。要下载 Arm 版本,请先将 <amd64> 更改为 arm64,然后再运行命令。

• Kubernetes 1.18:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/linux/amd64/kubectl.sha256

• Kubernetes 1.17:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.17.11/2020-09-18/bin/linux/amd64/kubectl.sha256

• Kubernetes 1.16:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.16.13/2020-09-18/bin/linux/amd64/kubectl.sha256

• Kubernetes 1.15:

curl -o kubectl.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.15.11/2020-09-18/bin/linux/amd64/kubectl.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

openssl sha1 -sha256 kubectl

249

Page 258: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南中国区域

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。这两者应该匹配。3. 将执行权限应用于二进制文件。

chmod +x ./kubectl

4. 将二进制文件复制到 PATH 中的文件夹。 如果您已经安装了 kubectl 版本,我们建议您创建 $HOME/bin/kubectl 并确保 $HOME/bin 先出现在您的 $PATH 中。

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

5. (可选) 将 $HOME/bin 路径添加到 shell 初始化文件,以便在打开 shell 时配置此路径。

Note

这一步假设您使用 Bash Shell;如果使用其他 Shell,请将命令更改为使用您的特定 Shell 的初始化文件。

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc

6. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

[在 Windows 上安装 kubectl]

1. 打开 PowerShell 终端。2. 从 Amazon EKS 下载集群的 Kubernetes 版本的 提供的 kubectl Amazon S3 二进制文件:

• Kubernetes 1.18:

curl -o kubectl.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe

• Kubernetes 1.17:

curl -o kubectl.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.17.11/2020-09-18/bin/windows/amd64/kubectl.exe

• Kubernetes 1.16:

curl -o kubectl.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.16.13/2020-09-18/bin/windows/amd64/kubectl.exe

• Kubernetes 1.15:

curl -o kubectl.exe https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.15.11/2020-09-18/bin/windows/amd64/kubectl.exe

3. (可选)使用二进制文件的 SHA-256 总和验证下载的二进制文件。

a. 为 Windows 的集群的 Kubernetes 版本下载 SHA-256 总和:

• Kubernetes 1.18:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.18.8/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

250

Page 259: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装eksctl

• Kubernetes 1.17:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.17.11/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• Kubernetes 1.16:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.16.13/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

• Kubernetes 1.15:

curl -o kubectl.exe.sha256 https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/1.15.11/2020-09-18/bin/windows/amd64/kubectl.exe.sha256

b. 检查下载的二进制文件的 SHA-256 总和。

Get-FileHash kubectl.exe

c. 将命令输出中生成的 SHA-256 总和与下载的 SHA-256 文件进行比较。二者应匹配,但 PowerShell输出为大写。

4. 将二进制文件复制到 PATH 中的文件夹。 如果 PATH 中有现有目录可用于命令行实用程序,请将二进制文件复制到该目录。否则,请完成以下步骤。

a. 为命令行二进制文件创建一个新目录,例如 C:\bin。b. 将 kubectl.exe 二进制文件复制到新目录。c. 编辑用户或系统 PATH 环境变量,将新目录添加到 PATH 中。d. 关闭您的 PowerShell 终端并打开一个新终端来选取新的 PATH 变量。

5. 安装 kubectl 后,可以使用以下命令验证其版本:

kubectl version --short --client

eksctl 命令行实用程序本主题介绍 eksctl,这是一个用于在 Amazon EKS 上创建和管理 Kubernetes 集群的简单命令行实用程序。命令行实用程序提供了使用 eksctl 的节点创建新集群的最快、最简单的方法。Amazon EKS

有关更多信息以及查看官方文档,请访问 https://eksctl.io/。

安装或升级 eksctl此部分将帮助您安装或升级 eksctl 命令行实用程序的最新版本。

您可以在 eksctlmacOS、 (p. 251)Linux 或 (p. 252)Windows 上安装 (p. 252)。

[使用 Homebrew 在 eksctl 上安装或升级macOS

开始使用 Amazon EKS 和 macOS 的最简单方法是使用 eksctlHomebrew 安装 。Homebrew 配方安装eksctl 所需的 eksctl 和任何其他依赖项,例如 Amazon EKS。kubectl 该配方还会安装 aws-iam-authenticator (p. 232),如果您没有安装 AWS CLI 版本 1.16.156 或更高版本,则这是必需的。

1. 如果您尚未在 macOS 上安装 Homebrew,请使用以下命令安装它。

251

Page 260: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南安装或升级 eksctl

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

2. 安装 Weaveworks Homebrew tap。

brew tap weaveworks/tap

3. 安装或升级 eksctl。

• 使用以下命令安装 eksctl:

brew install weaveworks/tap/eksctl

• 如果已安装 eksctl,请运行以下命令进行升级:

brew upgrade eksctl && brew link --overwrite eksctl

4. 使用以下命令测试您的安装是否成功。

eksctl version

Note

GitTag 版本不得低于 0.31.0-rc.0。如果低于此版本,请检查您的终端输出是否有任何安装或升级错误,或从以下位置手动下载该版本的存档: https://github.com/weaveworks/eksctl/releases/download/0.31.0-rc.0/eksctl_Darwin_amd64.tar.gz,提取 eksctl 并执行。

[使用 eksctl 在 Linux 上安装或升级curl

1. 使用以下命令下载并提取最新版本的 eksctl。

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

2. 将提取的二进制文件移至 /usr/local/bin。

sudo mv /tmp/eksctl /usr/local/bin

3. 使用以下命令测试您的安装是否成功。

eksctl version

Note

版本应至少为 GitTag。0.31.0-rc.0 如果没有,请检查终端输出是否有任何安装或升级错误,或将步骤 1 中的地址替换为 https://github.com/weaveworks/eksctl/releases/download/0.31.0-rc.0/eksctl_Linux_amd64.tar.gz 并再次完成步骤 1-3。

[使用 Chocolatey 在 Windows 上安装或升级eksctl

1. 如果您尚未在 Windows 系统上安装 Chocolatey,请参阅安装 Chocolatey。2. 安装或升级 eksctl 。

• 使用以下命令安装二进制文件:

252

Page 261: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南教程: 部署 Kubernetes 控制面板

chocolatey install -y eksctl

• 如果已安装,请运行以下命令进行升级:

chocolatey upgrade -y eksctl

3. 使用以下命令测试您的安装是否成功。

eksctl version

Note

GitTag 版本不得低于 0.31.0-rc.0。如果低于此版本,请检查您的终端输出是否有任何安装或升级错误,或从以下位置手动下载该版本的存档: https://github.com/weaveworks/eksctl/releases/download/0.31.0-rc.0/eksctl_Windows_amd64.zip,提取 eksctl 并执行。

教程: 部署 Kubernetes 控制面板 (Web UI)本教程指导您完成将 Kubernetes 控制面板部署到 Amazon EKS 集群的过程,包括 CPU 和内存指标。它还帮助您创建可用于安全地连接到控制面板以查看和控制集群的 Amazon EKS 管理员服务账户。

Prerequisites本教程假定:

• 您已通过执行 Amazon EKS 入门 (p. 3)中的步骤创建了一个 Amazon EKS 集群。• 您的控制层面弹性网络接口和节点的安全组遵循 Amazon EKS 安全组注意事项 (p. 176) 中的推荐设置。• 您使用的是配置为与 Amazon EKS 集群通信 (p. 24)的 kubectl 客户端。

253

Page 262: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 1: 部署 Kubernetes Metrics Server

步骤 1: 部署 Kubernetes Metrics ServerKubernetes Metrics Server 是集群中资源使用情况数据的聚合器,它在 Amazon EKS 集群中默认不部署。Kubernetes 控制面板使用指标服务器来收集集群的指标,例如 CPU 和内存随时间的使用情况。

部署 Metrics Server

1. 使用以下命令部署 Metrics Server:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

2. 使用以下命令验证 metrics-server 部署是否运行所需数量的 Pod:

kubectl get deployment metrics-server -n kube-system

输出

NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 6m

步骤 2: 部署 Kubernetes 控制面板完成与集群所在的 区域对应的选项的说明。

• 中国以外的所有区域北京和宁夏

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

• 北京和宁夏 中国1. 使用下面的命令下载 Kubernetes 控制面板清单。

curl -o recommended.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

2. 使用以下步骤编辑清单文件。a. 查看您下载的一个或多个清单文件,并记下映像名称。使用以下命令在本地下载映像。

docker pull image:<tag>

b. 使用以下命令标记要推送到中国区域内的 Amazon Elastic Container Registry 存储库的映像。

docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

c. 使用以下命令将映像推送到中国区域内的 Amazon ECR 存储库。

docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>

d. 更新一个或多个 Kubernetes 清单文件或以引用您所在区域内的 Amazon ECR 映像 URL。3. 使用以下命令将清单应用于集群。

254

Page 263: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 3: 创建 eks-admin 服务账户和集群角色绑定

kubectl apply -f recommended.yaml

输出:

namespace/kubernetes-dashboard createdserviceaccount/kubernetes-dashboard createdservice/kubernetes-dashboard createdsecret/kubernetes-dashboard-certs createdsecret/kubernetes-dashboard-csrf createdsecret/kubernetes-dashboard-key-holder createdconfigmap/kubernetes-dashboard-settings createdrole.rbac.authorization.k8s.io/kubernetes-dashboard createdclusterrole.rbac.authorization.k8s.io/kubernetes-dashboard createdrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard createdclusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard createddeployment.apps/kubernetes-dashboard createdservice/dashboard-metrics-scraper createddeployment.apps/dashboard-metrics-scraper created

步骤 3: 创建 eks-admin 服务账户和集群角色绑定默认情况下,Kubernetes 控制面板用户的权限是有限的。在此部分中,您创建一个可用于使用管理员级别权限安全地连接到控制面板的 eks-admin 服务账户和集群角色绑定。有关更多信息,请参阅 Kubernetes 文档中的管理服务账户。

创建 eks-admin 服务账户和集群角色绑定

Important

使用此过程创建的示例服务账户在集群上具有完整的 cluster-admin (超级用户) 特权。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权。

1. 使用以下文本创建一个名为 eks-admin-service-account.yaml 的文件。此清单定义一个名为eks-admin 的服务账户和集群角色绑定。

apiVersion: v1kind: ServiceAccountmetadata: name: eks-admin namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata: name: eks-adminroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects:- kind: ServiceAccount name: eks-admin namespace: kube-system

2. 将此服务账户和集群角色绑定应用到您的集群。

kubectl apply -f eks-admin-service-account.yaml

255

Page 264: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 4: 连接到控制面板

输出:

serviceaccount "eks-admin" createdclusterrolebinding.rbac.authorization.k8s.io "eks-admin" created

步骤 4: 连接到控制面板现在,已将 Kubernetes 控制面板部署到集群,并且您已具有可用于查看和控制集群的管理员服务账户,您可使用该服务账户连接到控制面板。

连接到 Kubernetes 控制面板

1. 检索 eks-admin 服务账户的身份验证令牌。从输出中复制 <authentication_token> 值。您可以使用此令牌连接到控制面板。

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

输出:

Name: eks-admin-token-b5zv4Namespace: kube-systemLabels: <none>Annotations: kubernetes.io/service-account.name=eks-admin kubernetes.io/service-account.uid=bcfe66ac-39be-11e8-97e8-026dce96b6e8

Type: kubernetes.io/service-account-token

Data====ca.crt: 1025 bytesnamespace: 11 bytestoken: <authentication_token>

2. 启动 kubectl proxy 。

kubectl proxy

3. 要访问控制面板终端节点,请使用 Web 浏览器打开以下链接:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login。

4. 选择 Token (令牌),将上一个命令中的 <authentication_token> 输出粘贴到 Token (令牌) 字段中,然后选择 SIGN IN (登录)。

256

Page 265: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南步骤 5: 后续步骤

Note

可能需要等待几分钟,之后 CPU 和内存指标才会显示在控制面板中。

步骤 5: 后续步骤在连接到 Kubernetes 控制面板之后,可使用 eks-admin 服务账户查看和控制集群。有关使用控制面板的更多信息,请参阅 上的项目文档GitHub。

安装 Kubernetes Metrics ServerKubernetes Metrics Server 是集群中资源使用情况数据的聚合器,它在 Amazon EKS 集群中默认不部署。指标服务器通常由其他 Kubernetes 加载项使用,例如Horizontal Pod Autoscaler (p. 218)或 Kubernetes 控制面板 (p. 253)。有关详细信息,请参阅 Kubernetes 文档中的资源指标管道。本主题介绍了如何在 AmazonEKS 集群上部署 Kubernetes Metrics Server。

部署 Metrics Server

1. 使用以下命令部署 Metrics Server:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

2. 使用以下命令验证 metrics-server 部署是否运行所需数量的 Pod:

kubectl get deployment metrics-server -n kube-system

257

Page 266: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Prometheus 指标

输出

NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 6m

Prometheus 的控制层面指标Kubernetes API 服务器公开了大量可用于监控和分析的指标。这些指标是通过引用 /metrics HTTP API 的指标终端节点内部公开的。与其他终端节点一样,此终端节点在 Amazon EKS 控制层面上公开。本主题介绍了一些您可以使用此终端节点查看和分析集群所执行的操作的方法。

查看原始指标要查看原始指标输出,请使用带有 --raw 标志的 kubectl。此命令允许您传递任何 HTTP 路径,并返回原始响应。

kubectl get --raw /metrics

示例输出:

...✓ HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host.✓ TYPE rest_client_requests_total counterrest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8✓ HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts✓ TYPE ssh_tunnel_open_count counterssh_tunnel_open_count 0✓ HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts✓ TYPE ssh_tunnel_open_fail_count counterssh_tunnel_open_fail_count 0

此原始输出逐字返回 API 服务器公开的内容。这些指标以 Prometheus 格式表示。此格式允许 API 服务器公开按行拆分的不同指标。每一行包含一个指标名称、标签和值。

<metric_name>{"<tag>"="<value>"[<,...>]} <value>

虽然此终端节点在您查找特定指标时很有用,但您通常需要在一段时间内分析这些指标。要执行此操作,您可以在集群中部署 Prometheus。Prometheus 是一个监控和时间序列数据库,它擦除公开的终端节点并聚合数据,让您可以筛选、用图表表示以及查询结果。

部署 Prometheus本主题可帮助您使用 Helm V3 在集群中部署 Prometheus。如果您已安装有 Helm,则可使用 helmversion 命令来检查您的版本。Helm 是 Kubernetes 集群的包管理器。有关 Helm 及其安装方法的更多信息,请参阅 配合使用 Helm 与 Amazon EKS (p. 261)。

258

Page 267: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南部署 Prometheus

在为您的 Amazon EKS 集群配置 Helm 后,您可以使用它来部署 Prometheus,步骤如下。

使用 Helm 部署 Prometheus

1. 创建 Prometheus 命名空间。

kubectl create namespace prometheus

2. 部署 Prometheus。

helm install prometheus stable/prometheus \ --namespace prometheus \ --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

3. 确认 prometheus 命名空间中的所有 Pod 均处于 READY 状态。

kubectl get pods -n prometheus

输出:

NAME READY STATUS RESTARTS AGEprometheus-alertmanager-59b4c8c744-r7bgp 1/2 Running 0 48sprometheus-kube-state-metrics-7cfd87cf99-jkz2f 1/1 Running 0 48sprometheus-node-exporter-jcjqz 1/1 Running 0 48sprometheus-node-exporter-jxv2h 1/1 Running 0 48sprometheus-node-exporter-vbdks 1/1 Running 0 48sprometheus-pushgateway-76c444b68c-82tnw 1/1 Running 0 48sprometheus-server-775957f748-mmht9 1/2 Running 0 48s

4. 使用 kubectl 将 Prometheus 控制台端口转发到本地计算机。

kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090

5. 将 Web 浏览器指向 localhost:9090 来查看 Prometheus 控制台。6. 从 - insert metric at cursor (- 在光标位置插入指标) 菜单选择一个指标,然后选择 Execute

(执行)。选择 Graph (图表) 选项卡显示一段时间内的指标。下图显示了一段时间内的container_memory_usage_bytes。

259

Page 268: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南部署 Prometheus

7. 在顶部导航栏中,选择 Status (状态),然后选择 Targets (目标)。

260

Page 269: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用 Helm

使用服务发现连接到 Prometheus 的所有 Kubernetes 终端节点将显示。

配合使用 Helm 与 Amazon EKSKubernetes 的 Helm 包管理器可帮助您在 Kubernetes 集群上安装和管理应用程序。有关更多信息,请参阅Helm 文档。本主题可帮助您安装并运行 Helm 二进制文件,以便您可以在本地系统中使用 Helm CLI 安装和管理图表。

Important

您必须先将 Amazon EKS kubectl 配置为适用于 ,然后才能在 Amazon EKS 集群上安装 Helm 图表。如果您尚未执行此操作,请参阅为 Amazon EKS 创建 kubeconfig (p. 236)后再继续。如果集群的以下命令成功,说明您已正确配置。

kubectl get svc

在本地系统上安装 Helm 二进制文件

1. 运行适用于您的客户端操作系统的命令。

• 如果您将 macOS 与 Homebrew 结合使用,请使用以下命令安装二进制文件。

brew install helm

• 如果您将 Windows 与 Chocolatey 配合使用,请使用以下命令安装二进制文件。

choco install kubernetes-helm

• 如果您正在使用 Linux,请使用以下命令来安装二进制文件。

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.shchmod 700 get_helm.sh./get_helm.sh

2. 要在 PATH 中选择新的二进制文件,请关闭当前的终端窗口,然后打开一个新窗口。3. 使用以下命令确认 Helm 是否正在运行。

helm help

4. 此时,您可以运行任何 Helm 命令(例如 helm install <chart_name>),以便安装、修改、删除或查询您的集群中的 Helm 图表。如果您刚接触 Helm,并且没有要安装的特定图表,您可以:

• 通过安装示例图表来进行试验。请参阅 Helm 快速入门指南中的安装示例图表。• 创建示例图表并将其推送到 Amazon ECR。有关更多信息,请参阅 https://docs.aws.amazon.com/

AmazonECR/latest/userguide/push-oci-artifact.html 中的推送 Helm 图表Amazon Elastic ContainerRegistry 用户指南。

• 从 Amazon EKSeks-charts 存储库或从 GitHub ArtifactHub 安装 图表。

标记 Amazon EKS 资源为了帮助您管理 Amazon EKS 资源,您可以使用标签 为每个资源分配您自己的元数据。本主题概述了标签函数并说明如何创建标签。

261

Page 270: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南有关标签的基本知识

内容• 有关标签的基本知识 (p. 262)• 标记 资源 (p. 262)• 标签限制 (p. 263)• 通过控制台使用标签 (p. 263)• 通过 CLI、API 或 eksctl 使用标签 (p. 264)

有关标签的基本知识标签是为 AWS 资源分配的标记。每个标签都包含您定义的一个键 和一个可选值。

标签可让您按用途、所有者或环境等对 AWS 资源进行分类。在您具有相同类型的许多资源时,可以根据分配给资源的标签快速识别特定资源。例如,您可以为 Amazon EKS 集群定义一组标签,以帮助您跟踪每个集群的拥有者和堆栈级别。我们建议您为每个资源类型设计一组一致的标签键。然后,您可以根据添加的标签搜索和筛选资源。

标签不会自动分配至您的资源。添加标签后,您可以编辑标签键和值,还可以随时删除资源的标签。如果删除资源,资源的所有标签也会被删除。

标签对 Amazon EKS 没有任何语义意义,严格按字符串进行解析。您可以将标签的值设为空的字符串,但是不能将其设为空值。如果您添加的标签的键与该资源上现有的标签相同,则新值将覆盖前面的值。

您可以使用 AWS 管理控制台、AWS CLI 或 Amazon EKS API 标记新的或现有的集群资源。您只能使用eksctl 标记新的集群资源。

如果您使用 AWS Identity and Access Management (IAM),则可以控制 AWS 账户中的哪些用户有权管理标签。

标记 资源您可以标记新的或现有的 Amazon EKS 集群和托管节点组。

如果您使用的是 Amazon EKS 控制台,则可以随时将标签应用于新的或现有的资源。您可以使用相关资源页面上的 Tags (标签) 选项卡执行此操作。如果您使用的是 eksctl,则可以在使用 --tags 选项创建资源时对其应用标签。

如果您使用的是 Amazon EKS API、AWS CLI 或 AWS 开发工具包,则可以使用相关 API 操作上的 tags 参数将标签应用于新资源。您可以使用 TagResource API 操作将标签应用于现有资源。有关更多信息,请参阅TagResource。

某些资源创建操作允许您在创建资源时为其指定标签。如果在创建资源时无法应用标签,则无法创建资源。此机制确保您要在创建时标记的资源是使用指定标签创建的,或者根本不创建资源。如果您在创建时标记资源,则无需在创建资源后运行自定义标记脚本。

下表描述了可以标记的 Amazon EKS 资源和可在创建时标记的资源。

Amazon EKS 资源标记支持

Resource 支持标签 支持标签传播 支持在创建时添加标签(Amazon EKSAPI、AWS CLI、AWS开发工具包和 eksctl)

Amazon EKS 集群 是 否。集群标签不传播到与集群关联的任何其他资源。

262

Page 271: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南标签限制

Resource 支持标签 支持标签传播 支持在创建时添加标签(Amazon EKSAPI、AWS CLI、AWS开发工具包和 eksctl)

Amazon EKS 托管节点组

是 否。托管节点组标签不会传播到与节点组关联的任何其他资源。

Amazon EKS Fargate 配置文件

是 否。Fargate 配置文件标签不会传播到与 Fargate配置文件关联的任何其他资源,例如使用配置文件调度的 pod。

标签限制下面是适用于标签的基本限制:

• 每个资源的最大标签数 – 50• 对于每个资源,每个标签键都必须是唯一的,每个标签键只能有一个值。• 最大键长度 – 128 个 Unicode 字符(采用 UTF-8 格式)• 最大值长度 – 256 个 Unicode 字符(采用 UTF-8 格式)• 如果您的标记方案针对多个 AWS 服务和资源使用,请记得其他服务可能对允许使用的字符有限制。通常

允许使用的字符包括可用 UTF-8 格式表示的字母、数字和空格,以及以下字符:+ - = . _ : / @。• 标签键和值要区分大小写。• 不要使用 aws:、AWS: 或任何大写或小写组合(如键或值的前缀)。这些保留仅供 AWS 使用。您无法编辑

或删除带此前缀的标签键或值。具有此前缀的标签不计入每个资源的标签数限制。

通过控制台使用标签通过使用 Amazon EKS 控制台,您可以管理与新的或现有的集群和托管节点组关联的标签。

当您在 Amazon EKS 控制台中选择特定资源页面时,它会显示这些资源列表。例如,如果您从导航面板中选择 Clusters (集群),则控制台会显示 Amazon EKS 集群列表。当您从支持标签的其中一个列表中选择资源(例如,特定集群)时,可以在 Tags (标签) 选项卡上查看和管理其标签。

在创建时为单个资源添加标签您可以在创建 Amazon EKS 集群、托管节点组和 Fargate 配置文件时向其添加标签。有关更多信息,请参阅创建 Amazon EKS 集群 (p. 30)。

为单个资源添加和删除标签Amazon EKS 允许您直接从资源的页面中添加或删除与集群相关的标签。

添加或删除单个资源上的标签

1. 在 https://console.aws.amazon.com/eks/home#/clusters 处打开 Amazon EKS 控制台。2. 从导航栏中,选择要使用的区域。3. 在导航面板中,选择 Clusters。4. 选择特定集群,然后向下滚动并选择 Manage tags (管理标签)。

263

Page 272: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南通过 CLI、API 或 eksctl 使用标签

5. 在 Update tags (更新标签) 页面上,根据需要添加或删除标签。

• 添加标签 — 选择 Add Tag (添加标签),然后指定各个标签的键和值。• 删除标签 — 选择 Remove tag (删除标签)。

6. 为要添加或删除的每个标签重复此过程,然后选择 Update (更新) 以完成操作。

通过 CLI、API 或 eksctl 使用标签使用以下 AWS CLI 命令或 Amazon EKS API 操作来添加、更新、列出和删除资源的标签。您只能使用eksctl 将标签添加到新资源。

Amazon EKS 资源标记支持

任务 AWS CLI 适用于 Windows PowerShell 的AWS 工具

API 操作

添加或覆盖一个或多个标签。

tag-resource Add-EKSResourceTag TagResource

删除一个或多个标签。

untag-resource Remove-EKSResourceTag UntagResource

以下示例说明如何使用 AWS CLI 标记或取消标记资源。

示例 1:标记现有集群

以下命令标记现有集群。

aws eks tag-resource --resource-arn <resource_ARN> --tags <team>=<devs>

示例 2:取消标记现有集群

以下命令从现有集群删除标签。

aws eks untag-resource --resource-arn <resource_ARN> --tag-keys <tag_key>

示例 3: 列出资源的标签

以下命令列出与现有资源关联的标签。

aws eks list-tags-for-resource --resource-arn <resource_ARN>

某些资源创建操作允许您在创建资源时指定标签。以下操作支持在创建资源时进行标记。

任务 AWS CLI 适用于 WindowsPowerShell 的 AWS工具

API 操作 eksctl

创建集群 create-cluster

New-EKSCluster CreateClustercreatecluster

创建托管节点组* create-nodegroup

New-EKSNodegroup CreateNodegroupcreatenodegroup

264

Page 273: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务配额

任务 AWS CLI 适用于 WindowsPowerShell 的 AWS工具

API 操作 eksctl

创建 Fargate 配置文件 create-fargate-profile

New-EKSFargateProfile

CreateFargateProfile.htmlcreatefargateprofile

*如果您希望在创建托管节点组时也为 Amazon EC2 实例添加标签,请使用启动模板创建托管节点组。有关更多信息,请参阅the section called “标记 Amazon EC2 实例” (p. 95)。如果您的实例已存在,您可以手动标记实例。有关更多信息,请参阅 中的标记您的资源Amazon EC2 用户指南(适用于 Linux 实例)。

Amazon EKS 服务配额Amazon EKS 已与 Service Quotas 集成,后者是一项 AWS 服务,可让您从中心位置查看和管理您的配额。有关更多信息,请参阅 什么是服务配额? 在 Service Quotas 用户指南。 Service Quotas 让您轻松查找Amazon EKS 和 AWS Fargate 使用 AWS 管理控制台 和 AWS CLI.

查看 Amazon EKS 和 Fargate 使用 AWS 管理控制台

1. 在 https://console.aws.amazon.com/servicequotas/ 上打开 Service Quotas 控制台。2. 在导航面板中,选择 AWS服务.3. 从 AWS 服务 列表,搜索并选择 Amazon Elastic Kubernetes Service (人Amazon EKS) 或 AWS Fargate.

在 Service quotas (服务配额) 列表中,您可以查看服务配额名称、应用的值(如果该值可用)、AWS默认配额以及配额值是否可调整。

4. 要查看有关服务配额的其他信息(如描述),请选择配额名称。5. (可选)要请求增加配额,请选择要增加的配额,选择 Request quota increase (请求增加配额),输入

或选择所需信息,然后选择 Request (请求)。

要使用 AWS 管理控制台进一步处理服务配额,请参阅 Service Quotas 用户指南。要请求配额增加,请参阅请求配额增加 在 Service Quotas 用户指南.

查看 Amazon EKS 和 Fargate 使用 AWS CLI

运行以下命令以查看您的 Amazon EKS 配额。

aws service-quotas list-aws-default-service-quotas \ --query 'Quotas[*].{Adjustable:Adjustable,Name:QuotaName,Value:Value,Code:QuotaCode}' \ --service-code eks \ --output table

运行以下命令以查看您的 Fargate 配额。

aws service-quotas list-aws-default-service-quotas \ --query 'Quotas[*].{Adjustable:Adjustable,Name:QuotaName,Value:Value,Code:QuotaCode}' \ --service-code fargate \ --output table

Note

返回的配额是 Amazon ECS 任务或 Amazon EKS pod在上同时运行 Fargate 位于当前地区的此帐户。

265

Page 274: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务配额

要使用 AWS CLI 进一步处理服务配额,请参阅 Service Quotas AWS CLI 命令参考。要请求配额增加,请参阅 request-service-quota-increase 命令 AWS CLI 命令参考.

下表提供了的默认配额(也称为限制) Amazon EKS 和 AWS Fargate 用于 AWS 帐户。

Amazon EKS 服务配额

以下配额是 Amazon EKS 服务配额。这些服务配额中的大多数都列在 Amazon Elastic Kubernetes Service(人Amazon EKS)中的命名空间 Service Quotas 控制台。要请求配额增加,请参阅 请求配额增加 在 ServiceQuotas 用户指南.

服务配额 Description 默认配额值 可调整

群集 当前地区中此帐户中EKS群集的最大数量。

100 是

每个群集的控制平面安全组

每个群集的最大控制平面安全组数(这些在创建群集时指定)。

4 否

每个群集的托管节点组 每个群集的最大托管节点组数。

30 是

每个托管节点组的节点数

每个托管节点组的最大节点数。

100 是

每个群集的公共端点访问CIDR范围

每个群集的最大公共端点访问CIDR范围数(这些在创建或更新群集时指定)。

40 否

Fargate 每个群集的配置文件

最大数量 Fargate 每个群集的配置文件。

10 是

选择器/ Fargate 配置文件

每个最大选择器数Fargate 配置文件

5 是

每对标签 Fargate 配置文件选择器

每个 Fargate 配置文件选择器

5 是

AWS Fargate 服务配额

以下配额是 Amazon EKS 于 AWS Fargate 服务配额。服务配额列在 AWS Fargate 中的命名空间 ServiceQuotas 控制台。要请求配额增加,请参阅 请求配额增加 在 Service Quotas 用户指南.

服务配额 Description 默认配额值 可调整

Fargate按需资源计数 最大 Amazon ECS 任务和 Amazon EKS pod在上同时运行 Fargate 位于当前地区的此帐户。

500 是

266

Page 275: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Identity and Access Management

Amazon EKS 中的安全性AWS 的云安全性的优先级最高。作为 AWS 客户,您将从专为满足大多数安全敏感型组织的要求而打造的数据中心和网络架构中受益。

安全性是 AWS 和您的共同责任。责任共担模型将其描述为云的 安全性和云中 的安全性:

• 云的安全性 – AWS 负责保护在 AWS 云中运行 AWS 服务的基础设施。对于 Amazon EKS,AWS 负责Kubernetes 控制层面,其中包括控制层面节点和 etcd 数据库。作为 AWS 合规性计划的一部分,第三方审核人员将定期测试和验证安全性的有效性。要了解适用于 Amazon EKS 的合规性计划,请参阅合规性计划范围内的 AWS 服务。

• 云中的安全性 – 您的责任包括以下各个方面。• 数据层面的安全配置,包括配置安全组以允许流量从 Amazon EKS 控制层面传入客户 VPC• 节点和容器本身的配置• 节点的操作系统(包括更新和安全补丁)• 其他关联的应用程序软件:

• 设置和管理网络控制功能,例如防火墙规则• 使用 IAM 或其他服务管理平台级身份和访问管理

• 您的数据的敏感性、您公司的要求以及适用的法律法规

该文档帮助您了解如何在使用 Amazon EKS 时应用责任共担模型。以下主题说明如何配置 Amazon EKS 以实现您的安全性和合规性目标。您还将了解如何使用其他 AWS 服务来帮助您监控和保护 Amazon EKS 资源。

Note

Linux 容器由控制组 (cgroup) 和命名空间组成,它们有助于限制容器可访问的内容,但所有容器都与主机 Amazon EC2 实例共享相同的 Linux 内核。强烈建议不要以根用户 (UID 0) 身份运行容器或向容器授予对主机资源或命名空间(如主机网络或主机 PID 命名空间)的访问权限,因为这样做会降低容器提供的隔离的有效性。

主题• 适用于 Amazon EKS 的 Identity and Access Management (p. 267)• Amazon EKS 中的日志记录和监控 (p. 297)• Amazon EKS 的合规性验证 (p. 297)• Amazon EKS 中的恢复功能 (p. 298)• Amazon EKS 中的基础设施安全性 (p. 298)• Amazon EKS 中的配置和漏洞分析 (p. 299)• Pod 安全策略 (p. 299)

适用于 Amazon EKS 的 Identity and AccessManagement

AWS Identity and Access Management (IAM) 是一项 AWS 服务,可帮助管理员安全地控制对 AWS 资源的访问。IAM 管理员控制谁可以通过身份验证 (登录)和授权 (具有权限)以使用 Amazon EKS 资源。IAM是一项无需额外费用即可使用的 AWS 服务。

267

Page 276: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Audience

Audience如何使用 AWS Identity and Access Management (IAM) 因您可以在 Amazon EKS 中执行的操作而异。

服务用户 – 如果您使用 Amazon EKS 服务来完成工作,则您的管理员会为您提供所需的凭证和权限。当您使用更多 Amazon EKS 功能来完成工作时,您可能需要额外权限。了解如何管理访问权限可帮助您向管理员请求适合的权限。如果您无法访问 Amazon EKS 中的一项功能,请参阅排查 Amazon EKS 身份和权限的问题 (p. 297)。

服务管理员 – 如果您在公司负责管理 Amazon EKS 资源,则您可能具有 Amazon EKS 的完全访问权限。您有责任确定您的员工应访问哪些 Amazon EKS 功能和资源。然后,您必须向 IAM 管理员提交请求以更改您的服务用户的权限。检查此页上的信息,了解 IAM 的基本概念。要了解有关您的公司如何将 IAM 与 AmazonEKS 搭配使用的更多信息,请参阅Amazon EKS 如何与 IAM 协同工作 (p. 271)。

IAM 管理员 – 如果您是 IAM 管理员,您可能希望了解有关您可以如何编写策略以管理 Amazon EKS 访问权限的详细信息。要查看您可在 IAM 中使用的基于身份的 Amazon EKS 示例策略,请参阅Amazon EKS 基于身份的策略示例 (p. 273)。

使用 身份进行身份验证身份验证是您使用身份凭证登录 AWS 的方法。有关使用 AWS 管理控制台 登录的更多信息,请参阅 IAM 用户指南 中的 以 IAM 用户或 根用户身份登录 AWS 管理控制台。

您必须以 AWS 账户根用户、IAM 用户身份或通过代入 IAM 角色进行身份验证(登录到 AWS)。您还可以使用公司的单一登录身份验证方法,甚至使用 Google 或 Facebook 登录。在这些案例中,您的管理员以前使用 IAM 角色设置了联合身份验证。在您使用来自其他公司的凭证访问 AWS 时,您间接地代入了角色。

要直接登录到 AWS 管理控制台,请使用您的密码和 根用户 电子邮件地址或 IAM 用户名。您可以使用 根用户 或 IAM 用户访问密钥以编程方式访问 AWS。AWS 提供了开发工具包和命令行工具,可使用您的凭证对您的请求进行加密签名。如果您不使用 AWS 工具,则必须自行对请求签名。使用签名版本 4(用于对入站API 请求进行验证的协议)完成此操作。有关身份验证请求的更多信息,请参阅 AWS General Reference 中的签名版本 4 签名流程。

无论使用何种身份验证方法,您可能还需要提供其他安全信息。例如,AWS 建议您使用多重身份验证(MFA) 来提高账户的安全性。要了解更多信息,请参阅 IAM 用户指南 中的在 AWS 中使用 Multi-FactorAuthentication (MFA)。

AWS 账户根用户当您首次创建 AWS 账户时,最初使用的是一个对账户中所有 AWS 服务和资源有完全访问权限的单点登录身份。此身份称为 AWS 账户 根用户,可使用您创建账户时所用的电子邮件地址和密码登录来获得此身份。强烈建议您不使用 根用户 执行日常任务,即使是管理任务。请遵守仅将 根用户 用于创建首个 IAM 用户的最佳实践。然后请妥善保存 根用户 凭证,仅用它们执行少数账户和服务管理任务。

IAM 用户和组IAM 用户是 AWS 账户内对某个人员或应用程序具有特定权限的一个身份。IAM 用户可以拥有长期凭证,例如用户名和密码或一组访问密钥。要了解如何生成访问密钥,请参阅 IAM 用户指南 中的管理 IAM 用户的访问密钥。为 IAM 用户生成访问密钥时,请确保查看并安全保存密钥对。您以后无法找回秘密访问密钥,而是必须生成新的访问密钥对。

IAM 组 是指定一个 IAM 用户集合的身份。您不能使用组的身份登录。您可以使用组来一次性为多个用户指定权限。如果有大量用户,使用组可以更轻松地管理用户权限。例如,您有一个名为 IAMAdmins 的组并为该组授予管理 IAM 资源的权限。

用户与角色不同。用户唯一地与某个人员或应用程序关联,而角色旨在让需要它的任何人代入。用户具有永久的长期凭证,而角色提供临时凭证。要了解更多信息,请参阅 IAM 用户指南 中的何时创建 IAM 用户(而不是角色)。

268

Page 277: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用策略管理访问权限

IAM 角色IAM 角色 是 AWS 账户中具有特定权限的实体。它类似于 IAM 用户,但未与特定人员关联。您可以通过切换角色,在 AWS 管理控制台中暂时代入 IAM 角色。您可以调用 AWS CLI 或 AWS API 操作或使用自定义URL 以代入角色。有关使用角色方法的更多信息,请参阅 IAM 用户指南 中的使用 IAM 角色。

具有临时凭证的 IAM 角色在以下情况下很有用:

• 临时 IAM 用户权限 – IAM 用户可代入 IAM 角色,暂时获得针对特定任务的不同权限。• 联合身份用户访问 – 您也可以不创建 IAM 用户,而是使用来自 AWS Directory Service、您的企业用户

目录或 Web 身份提供商的现有身份。这些用户被称为联合身份用户。在通过身份提供商请求访问权限时,AWS 将为联合身份用户分配角色。有关联合身份用户的更多信息,请参阅 IAM 用户指南 中的联合身份用户和角色。

• 跨账户访问 – 您可以使用 IAM 角色允许其他账户中的某个人(可信任委托人)访问您账户中的资源。角色是授予跨账户访问权限的主要方式。但是,对于某些 AWS 服务,您可以将策略直接附加到资源(而不是使用角色作为代理)。要了解用于跨账户访问的角色和基于资源的策略之间的差别,请参阅 IAM 用户指南中的 IAM 角色与基于资源的策略有何不同。

• 跨服务访问 – Some AWS services use features in other AWS services. For example, when you makea call in a service, it's common for that service to run applications in Amazon EC2 or store objects inAmazon S3. A service might do this using the calling principal's permissions, using a service role, orusing a service-linked role.• 委托人权限 – When you use an IAM user or role to perform actions in AWS, you are considered a

principal. Policies grant permissions to a principal. When you use some services, you might perform anaction that then triggers another action in a different service. In this case, you must have permissionsto perform both actions. To see whether an action requires additional dependent actions in a policy,see Actions, Resources, and Condition Keys for Amazon Elastic Kubernetes Service in the ServiceAuthorization Reference.

• 服务角色 – 服务角色是服务代入以代表您执行操作的 IAM 角色。服务角色只在您的账户内提供访问权限,不能用于为访问其他账户中的服务授权。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息,请参阅 IAM 用户指南 中的创建角色以向 AWS 服务委派权限。

• 服务相关角色 – A service-linked role is a type of service role that is linked to an AWS service. Theservice can assume the role to perform an action on your behalf. Service-linked roles appear inyour IAM account and are owned by the service. An IAM administrator can view, but not edit thepermissions for service-linked roles.

• 在 Amazon EC2 上运行的应用程序–对于在 EC2 实例上运行、并发出 AWS CLI 或 AWS API 请求的应用程序,您可以使用 IAM 角色管理它们的临时凭证。这优先于在 EC2 实例中存储访问密钥。要将 AWS 角色分配给 EC2 实例并使其对该实例的所有应用程序可用,您可以创建一个附加到实例的实例配置文件。实例配置文件包含角色,并使 EC2 实例上运行的程序能够获得临时凭证。有关更多信息,请参阅 IAM 用户指南 中的使用 IAM 角色向在 Amazon EC2 实例上运行的应用程序授予权限。

要了解是否使用 IAM 角色或 IAM 用户,请参阅 IAM 用户指南 中的何时创建 IAM 角色(而不是用户)。

使用策略管理访问权限您将创建策略并将其附加到 IAM 身份或 AWS 资源,以便控制 AWS 中的访问。策略是 AWS中的对象;在与标识或资源相关联时,策略定义它们的权限。您可以通过 根用户 用户或 IAM 用户身份登录,也可以代入IAM 角色。随后,当您提出请求时,AWS 会评估相关的基于身份或基于资源的策略。策略中的权限确定是允许还是拒绝请求。大多数策略在 AWS 中存储为 JSON 文档。有关 JSON 策略文档的结构和内容的更多信息,请参阅 IAM 用户指南 中的 JSON 策略概述。

Administrators can use AWS JSON policies to specify who has access to what. That is, which principal canperform actions on what resources, and under what conditions.

每个 IAM 实体(用户或角色)在一开始都没有权限。换言之,默认情况下,用户什么都不能做,甚至不能更改他们自己的密码。要为用户授予执行某些操作的权限,管理员必须将权限策略附加到用户。或者,管理员

269

Page 278: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用策略管理访问权限

可以将用户添加到具有预期权限的组中。当管理员为某个组授予访问权限时,该组内的全部用户都会获得这些访问权限。

IAM 策略定义操作的权限,无论您使用哪种方法执行操作。例如,假设您有一个允许 iam:GetRole 操作的策略。具有该策略的用户可以从 AWS 管理控制台、AWS CLI 或 AWS API 获取角色信息。

基于身份的策略Identity-based policies are JSON permissions policy documents that you can attach to an identity, such asan IAM user, group of users, or role. These policies control what actions users and roles can perform, onwhich resources, and under what conditions. To learn how to create an identity-based policy, see CreatingIAM policies in the IAM 用户指南.

基于身份的策略可以进一步归类为内联策略或托管策略。内联策略直接嵌入单个用户、组或角色中。托管策略是可以附加到 AWS 账户中的多个用户、组和角色的独立策略。托管策略包括 AWS 托管策略和客户托管策略。要了解如何在托管策略或内联策略之间进行选择,请参阅 IAM 用户指南 中的在托管策略与内联策略之间进行选择 。

基于资源的策略Resource-based policies are JSON policy documents that you attach to a resource. Examples of resource-based policies are IAM role trust policies and Amazon S3 bucket policies. In services that support resource-based policies, service administrators can use them to control access to a specific resource. For theresource where the policy is attached, the policy defines what actions a specified principal can perform onthat resource and under what conditions. You must specify a principal in a resource-based policy. Principalscan include accounts, users, roles, federated users, or AWS services.

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用来自 IAM 的 AWS 托管策略。

访问控制列表 (ACL)Access control lists (ACLs) control which principals (account members, users, or roles) have permissions toaccess a resource. ACLs are similar to resource-based policies, although they do not use the JSON policydocument format.

Amazon S3、AWS WAF 和 Amazon VPC 是支持 ACL 的服务示例。要了解有关 ACL 的更多信息,请参阅Amazon Simple Storage Service 开发人员指南 中的访问控制列表 (ACL) 概述。

其他策略类型AWS 支持额外的、不太常用的策略类型。这些策略类型可以设置更常用的策略类型向您授予的最大权限。

• 权限边界 – 权限边界是一项高级功能,借助该功能,您可以设置基于身份的策略可以授予 IAM 实体的最大权限(IAM 用户或角色)。您可为实体设置权限边界。这些结果权限是实体的基于身份的策略及其权限边界的交集。在 Principal 中指定用户或角色的基于资源的策略不受权限边界限制。任一项策略中的显式拒绝将覆盖允许。有关权限边界的更多信息,请参阅 IAM 用户指南 中的 IAM 实体的权限边界。

• 服务控制策略 (SCP) – SCP 是 JSON 策略,指定了组织或组织单位 (OU) 在 AWS Organizations 中的最大权限。AWS Organizations 是一项服务,用于分组和集中管理您的企业拥有的多个 AWS 账户。如果在组织内启用了所有功能,则可对任意或全部账户应用服务控制策略 (SCP)。SCP 限制成员账户中实体(包括每个 AWS 账户根用户)的权限。有关 组织 和 SCP 的更多信息,请参阅 AWS Organizations 用户指南 中的 SCP 工作原理。

• 会话策略 – 会话策略是当您以编程方式为角色或联合身份用户创建临时会话时作为参数传递的高级策略。结果会话的权限是用户或角色的基于身份的策略和会话策略的交集。权限也可以来自基于资源的策略。任一项策略中的显式拒绝将覆盖允许。有关更多信息,请参阅 IAM 用户指南 中的会话策略。

270

Page 279: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 如何与 IAM 协同工作

多个策略类型当多个类型的策略应用于一个请求时,生成的权限更加复杂和难以理解。要了解 AWS 如何确定在涉及多个策略类型时是否允许请求,请参阅 IAM 用户指南 中的策略评估逻辑。

Amazon EKS 如何与 IAM 协同工作在使用 IAM 管理对 Amazon EKS 的访问之前,您应了解哪些 IAM 功能可与 Amazon EKS 协同工作。要了解 Amazon EKS 和其他 AWS 服务与IAM合作,请参阅 AWS 服务 IAM 在 IAM 用户指南.

主题• Amazon EKS 基于身份的策略 (p. 271)• Amazon EKS 基于资源的策略 (p. 272)• 基于 Amazon EKS 标签的授权 (p. 272)• Amazon EKS IAM 角色 (p. 273)

Amazon EKS 基于身份的策略使用 IAM 基于身份的策略,您可以指定允许或拒绝操作和资源,以及指定在什么条件下允许或拒绝操作。Amazon EKS 支持特定操作、资源和条件键。要了解JSON策略中使用的所有元素,请参阅 IAM JSON策略元素参考 在 IAM 用户指南.

Actions

Administrators can use AWS JSON policies to specify who has access to what. That is, which principal canperform actions on what resources, and under what conditions.

JSON 策略的 Action 元素描述可用于在策略中允许或拒绝访问的操作。策略操作通常与关联的 AWS API操作同名。有一些例外情况,例如没有匹配 API 操作的仅限权限 操作。还有一些操作需要在策略中执行多个操作。这些附加操作称为相关操作。

在策略中包含操作以授予执行相关操作的权限。

中的策略操作 Amazon EKS 在操作之前使用以下前缀: eks:。例如,授予某人权限以获取关于 Amazon EKS群集,您包括 DescribeCluster 政策中的行为。策略语句必须包含 Action 或 NotAction 元素。

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:

"Action": ["eks:<action1>", "eks:<action2>"]

您也可以使用通配符 (*) 指定多个操作。例如,要指定以单词 Describe 开头的所有操作,请包括以下操作:

"Action": "eks:Describe*"

要查看 Amazon EKS 操作的列表,请参阅 IAM 用户指南 中的 Amazon Elastic Kubernetes Service 定义的操作。

Resources

Administrators can use AWS JSON policies to specify who has access to what. That is, which principal canperform actions on what resources, and under what conditions.

271

Page 280: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 如何与 IAM 协同工作

Resource JSON 策略元素指定要向其应用操作的一个或多个对象。语句必须包含 Resource 或NotResource 元素。作为最佳做法,请使用其 Amazon 资源名称 (ARN) 指定资源。对于支持特定资源类型(称为资源级权限)的操作,您可以执行此操作。

对于不支持资源级权限的操作(如列出操作),请使用通配符 (*) 指示语句应用于所有资源。

"Resource": "*"

Amazon EKS 集群资源具有以下 ARN:

arn:${Partition}:eks:${Region}:${Account}:cluster/${ClusterName}

有关 ARN 格式的更多信息,请参阅 Amazon 资源名称 (ARN) 和 AWS 服务命名空间。

例如,要在语句中指定 dev 集群,请使用以下 ARN:

"Resource": "arn:aws:eks:<region-code>:123456789012:cluster/dev"

要指定属于特定账户和区域的所有集群,请使用通配符 (*):

"Resource": "arn:aws:eks:<region-code>:123456789012:cluster/*"

无法对特定资源执行某些 Amazon EKS 操作,例如,用于创建资源的操作。在这些情况下,您必须使用通配符 (*)。

"Resource": "*"

要查看 Amazon EKS 资源类型及其 ARN 的列表,请参阅 IAM 用户指南 中的 Amazon Elastic KubernetesService 定义的资源。要了解您可以使用哪些操作指定每个资源的 ARN,请参阅 Amazon Elastic KubernetesService 定义的操作。

条件键Amazon EKS 不提供任何特定于服务的条件键,但支持使用某些全局条件键。查看所有 AWS 全局条件键,请参阅 AWS 全局条件上下文键 在 IAM 用户指南.

Examples

要查看 Amazon EKS 基于身份的策略的示例,请参阅Amazon EKS 基于身份的策略示例 (p. 273)。

当您创建 Amazon EKS 集群时,将在集群的 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap。

有关使用 ConfigMap 的更多信息,请参阅管理集群的用户或 IAM 角色 (p. 240)。

Amazon EKS 基于资源的策略Amazon EKS 不支持基于资源的策略。

基于 Amazon EKS 标签的授权您可以将标签附加到 Amazon EKS 资源或将请求中的标签传递到 Amazon EKS。要基于标签控制访问,您需要使用 eks:ResourceTag/<key-name>、aws:RequestTag/<key-name> 或 aws:TagKeys 条件键在策略的条件元素中提供标签信息。有关标记 Amazon EKS 资源的更多信息,请参阅标记 Amazon EKS 资源 (p. 261)。

272

Page 281: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南基于身份的策略示例

Amazon EKS IAM 角色IAM 角色是 AWS 账户中具有特定权限的实体。

将临时凭证用于 Amazon EKS

您可以使用临时凭证进行联合身份登录,担任 IAM 角色或担任跨账户角色。您可以通过调用 AWS STS API操作(如 AssumeRole 或 GetFederationToken)获得临时安全凭证。

Amazon EKS 支持使用临时凭证。

服务相关角色

服务相关角色允许 AWS 服务访问其他服务中的资源以代表您完成操作。服务相关角色显示在您的 IAM 账户中,并由该服务拥有。IAM 管理员可以查看但不能编辑服务相关角色的权限。

Amazon EKS 支持服务相关角色。有关创建或管理 Amazon EKS 服务相关角色的详细信息,请参阅对Amazon EKS 使用服务相关角色 (p. 276)。

服务角色

此功能允许服务代表您担任服务角色。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在您的 IAM 账户中,并由该账户拥有。这意味着 IAM 管理员可以更改此角色的权限。但是,这样操作可能会中断服务的功能。

Amazon EKS 支持服务角色。有关更多信息,请参阅 Amazon EKS 集群 IAM 角色 (p. 279)和Amazon EKS节点 IAM 角色 (p. 281)。

在 Amazon EKS 中选择一个 IAM 角色

当您在 Amazon EKS 中创建集群资源时,您必须选择一个角色以允许 Amazon EKS 代表您访问一些其他AWS 资源。如果您之前创建了一个服务角色,Amazon EKS 会为您提供一个角色列表供您选择。请务必选择一个附带 Amazon EKS 托管策略的角色。有关更多信息,请参阅 检查现有集群角色 (p. 279)和检查现有节点角色 (p. 281)。

Amazon EKS 基于身份的策略示例默认情况下,IAM 用户和角色没有创建或修改 Amazon EKS 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,为用户和角色授予权限,以便对他们所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

了解如何创建 IAM 使用这些示例JSON策略文档的基于身份的策略,请参阅 在JSON选项卡上创建策略 在 IAM用户指南.

当您创建 Amazon EKS 集群时,将在集群的 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap。

有关使用 ConfigMap 的更多信息,请参阅管理集群的用户或 IAM 角色 (p. 240)。

主题• 策略最佳实践 (p. 274)• 使用 Amazon EKS 控制台 (p. 274)• 允许用户查看他们自己的权限 (p. 274)• 更新 Kubernetes 集群 (p. 275)• 列出或描述所有集群 (p. 275)

273

Page 282: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南基于身份的策略示例

策略最佳实践基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 Amazon EKS 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:

• 开始使用 AWS 托管策略 – 要快速开始使用 Amazon EKS,请使用 AWS 托管策略,为您的员工授予他们所需的权限。这些策略已在您的账户中提供,并由 AWS 维护和更新。有关更多信息,请参阅 IAM 用户指南 中的利用 AWS 托管策略开始使用权限。

• 授予最低权限 – 创建自定义策略时,仅授予执行任务所需的许可。最开始只授予最低权限,然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息,请参阅 IAM 用户指南 中的授予最小权限。

• 为敏感操作启用 MFA – 为增强安全性,要求 IAM 用户使用多重身份验证 (MFA) 来访问敏感资源或 API 操作。有关更多信息,请参阅 IAM 用户指南 中的在 AWS 中使用多重身份验证 (MFA)。

• 使用策略条件来增强安全性 – 在切实可行的范围内,定义基于身份的策略在哪些情况下允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件,以便仅允许指定日期或时间范围内的请求,或者要求使用 SSL 或 MFA。有关更多信息,请参阅 IAM 用户指南 中的 IAM JSON 策略元素:Condition。

使用 Amazon EKS 控制台要访问 Amazon EKS 控制台,您必须拥有一组最低的权限。这些权限必须允许您列出和查看有关您的 AWS账户中的 Amazon EKS 资源的详细信息。如果创建比必需的最低权限更为严格的基于身份的策略,对于附加了该策略的实体(IAM 用户或角色),控制台将无法按预期正常运行。

确保这些实体仍然可以使用 Amazon EKS 控制台,使用您自己的唯一名称创建策略,例如AmazonEKSAdminPolicy。将策略附加到实体。有关更多信息,请参阅 向用户添加权限 在 IAM 用户指南:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "eks.amazonaws.com" } } } ]}

对于仅调用 AWS CLI 或 AWS API 的用户,您不需要允许最低控制台权限。相反,只允许访问与您尝试执行的 API 操作相匹配的操作。

允许用户查看他们自己的权限此示例显示您可以如何创建策略,以便允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

274

Page 283: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南基于身份的策略示例

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ]}

更新 Kubernetes 集群此示例显示如何创建一个策略,该策略允许用户在任何区域为一个账号更新任何 dev 集群的 Kubernetes 版本。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "eks:UpdateClusterVersion", "Resource": "arn:aws:eks:*:<111122223333>:cluster/<dev>" } ]}

列出或描述所有集群此示例显示如何创建一个策略,该策略允许用户拥有只读访问权限以列出或描述所有集群。账户必须能够列出和描述集群才能使用 update-kubeconfig AWS CLI 命令。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [

275

Page 284: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用服务相关角色

"eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ]}

对 Amazon EKS 使用服务相关角色Amazon Elastic Kubernetes Service 使用 AWS Identity and Access Management (IAM) 服务相关角色。服务相关角色是一种与 Amazon EKS 直接关联的独特类型的 IAM 角色。服务相关角色由 Amazon EKS 预定义,并包含该服务代表您调用其他 AWS 服务所需的一切权限。

主题• Using Roles for Amazon EKS (p. 276)• Using Roles for Amazon EKS node groups (p. 277)

Using Roles for Amazon EKSAmazon Elastic Kubernetes Service 使用 AWS Identity and Access Management (IAM) 服务相关角色。服务相关角色是一种与 Amazon EKS 直接关联的独特类型的 IAM 角色。服务相关角色由 Amazon EKS 预定义,并包含该服务代表您调用其他 AWS 服务所需的一切权限。

服务相关角色使 Amazon EKS 的设置更轻松,因为您不必手动添加必要的权限。Amazon EKS 定义其服务相关角色的权限,除非另行定义,否则仅 Amazon EKS 可以代入其角色。定义的权限包括信任策略和权限策略,并且权限策略不能附加到任何其他 IAM 实体。

只有在首先删除相关资源后,才能删除服务相关角色。这将保护您的 Amazon EKS 资源,因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其他服务的信息,请参阅与 IAM 配合使用的 AWS 服务并查找 Service-Linked Role列为 Yes 的服务。选择 Yes 与查看该服务的服务相关角色文档的链接。

适用于 Amazon EKS 的服务相关角色权限

Amazon EKS 使用名为 AWSServiceRoleForAmazonEKS – These permissions are required for AmazonEKS to manage clusters in your account. These policies are related to management of the followingresources: network interfaces, security groups, logs, and VPCs. 的服务相关角色。

Note

AWSServiceRoleForAmazonEKS 服务相关角色不同于创建集群所需的角色。有关更多信息,请参阅Amazon EKS 集群 IAM 角色 (p. 279)。

AWSServiceRoleForAmazonEKS 服务相关角色信任以下服务代入该角色:

• eks.amazonaws.com

角色权限策略允许 Amazon EKS 对指定资源完成以下操作:

• AmazonEKS服务角色策略

您必须配置权限以允许 IAM 实体(如用户、组或角色)创建、编辑或删除服务相关角色。有关更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions 中的IAM 用户指南服务相关角色权限。

276

Page 285: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用服务相关角色

为 Amazon EKS 创建服务相关角色

您无需手动创建服务相关角色。在 AWS 管理控制台、AWS CLI 或 AWS API 中create a cluster时,AmazonEKS 将为您创建服务相关角色。

如果您删除了此服务相关角色,然后需要再次创建它,则可以使用相同的流程在您的账户中重新创建此角色。当您create a cluster时,Amazon EKS 将再次为您创建服务相关角色。

编辑 Amazon EKS 的服务相关角色

Amazon EKS 不允许您编辑 AWSServiceRoleForAmazonEKS 服务相关角色。创建服务相关角色后,您将无法更改角色的名称,因为可能有多种实体引用该角色。不过,您可以使用 IAM 编辑角色的说明。有关更多信息,请参阅 IAM 用户指南 中的编辑服务相关角色。

删除 Amazon EKS 的服务相关角色

如果您不再需要使用某个需要服务相关角色的功能或服务,我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是,您必须先清除您的服务相关角色,然后才能手动删除它。

清除服务相关角色

必须先删除服务相关角色使用的所有资源,然后才能使用 IAM 删除该角色。

Note

如果在您试图删除资源时 Amazon EKS 服务正在使用该角色,则删除操作可能会失败。如果发生这种情况,则请等待几分钟后重试。

删除 AWSServiceRoleForAmazonEKS 所使用的 Amazon EKS 资源

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择集群。3. 在集群页面上,如果 Node Groups (节点组) 部分中存在任何托管节点组,请分别选择各个节点组,然后

选择 Delete (删除)。4. 在删除确认窗口中键入节点组的名称,然后选择 Confirm (确认) 以删除。5. 对集群中的任何其他节点组重复此过程。等待所有删除操作完成。6. 在集群页面上,选择 Delete (删除)。7. 对您账户中的任何其他集群重复此过程。

手动删除服务相关角色

使用 IAM 控制台、AWS CLI 或 AWS API 删除 AWSServiceRoleForAmazonEKS 服务相关角色。有关更多信息,请参阅 IAM 用户指南中的删除服务相关角色。

Amazon EKS 服务相关角色的受支持区域

Amazon EKS 支持在服务可用的所有区域中使用服务相关角色。有关更多信息,请参阅Amazon EKSService Endpoints and Quotas。

Using Roles for Amazon EKS node groupsAmazon EKS 使用 AWS Identity and Access Management (IAM) 服务相关角色。服务相关角色是一种与Amazon EKS 直接关联的独特类型的 IAM 角色。服务相关角色由 Amazon EKS 预定义,并包含该服务代表您调用其他 AWS 服务所需的一切权限。

277

Page 286: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用服务相关角色

服务相关角色使 Amazon EKS 的设置更轻松,因为您不必手动添加必要的权限。Amazon EKS 定义其服务相关角色的权限,除非另行定义,否则仅 Amazon EKS 可以代入其角色。定义的权限包括信任策略和权限策略,并且权限策略不能附加到任何其他 IAM 实体。

只有在首先删除相关资源后,才能删除服务相关角色。这将保护您的 Amazon EKS 资源,因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其他服务的信息,请参阅与 IAM 配合使用的 AWS 服务并查找 Service-Linked Role列为 Yes 的服务。选择 Yes 与查看该服务的服务相关角色文档的链接。

适用于 Amazon EKS 的服务相关角色权限

Amazon EKS 使用名为 AWSServiceRoleForAmazonEKSNodegroup 的服务相关角色 – These permissionsare required for managing nodegroups in your account. These policies are related to management of thefollowing resources: Auto Scaling groups, security groups, launch templates and IAM instance profiles.。

AWSServiceRoleForAmazonEKSNodegroup 服务相关角色信任以下服务代入该角色:

• eks-nodegroup.amazonaws.com

角色权限策略允许 Amazon EKS 对指定资源完成以下操作:

• AWSServiceRoleForAmazonEKSNodegroup

您必须配置权限以允许 IAM 实体(如用户、组或角色)创建、编辑或删除服务相关角色。有关更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions 中的IAM 用户指南服务相关角色权限。

为 Amazon EKS 创建服务相关角色

您无需手动创建服务相关角色。在 AWS 管理控制台、AWS CLI 或 AWS API 中CreateNodegroup时,Amazon EKS 将为您创建服务相关角色。

Important

如果您在使用此角色支持的功能的其他服务中完成了一个操作,则此服务链接角色可以显示在您的帐户中。 如果您使用的是 Amazon EKS 之前的服务 January 1, 2017,当它开始支持服务链接角色时,Amazon EKS 创建了 AWSServiceRoleForAmazonEKSNodegroup 角色。 要了解更多信息,请参阅我的 IAM 账户中出现新角色。

在 Amazon EKS (AWS API) 中创建服务相关角色

您无需手动创建服务相关角色。当您在 AWS 管理控制台、AWS CLI 或 AWS API 中创建托管节点组时,Amazon EKS 会为您创建服务相关角色。

如果您删除了此服务相关角色,然后需要再次创建它,则可以使用相同的流程在您的账户中重新创建此角色。创建另一个托管节点组时,Amazon EKS 再次为您创建服务相关角色。

编辑 Amazon EKS 的服务相关角色

Amazon EKS 不允许您编辑 AWSServiceRoleForAmazonEKSNodegroup 服务相关角色。创建服务相关角色后,您将无法更改角色的名称,因为可能有多种实体引用该角色。不过,您可以使用 IAM 编辑角色的说明。有关更多信息,请参阅 IAM 用户指南 中的编辑服务相关角色。

删除 Amazon EKS 的服务相关角色

如果您不再需要使用某个需要服务相关角色的功能或服务,我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是,您必须先清除您的服务相关角色,然后才能手动删除它。

278

Page 287: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南集群 IAM 角色

清除服务相关角色

必须先删除服务相关角色使用的所有资源,然后才能使用 IAM 删除该角色。Note

如果在您试图删除资源时 Amazon EKS 服务正在使用该角色,则删除操作可能会失败。如果发生这种情况,则请等待几分钟后重试。

删除 AWSServiceRoleForAmazonEKSNodegroup 所使用的 Amazon EKS 资源

1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.2. 选择集群。3. 在集群页面上,如果 Node Groups (节点组) 部分中存在任何托管节点组,请分别选择各个节点组,然后

选择 Delete (删除)。4. 在删除确认窗口中键入集群的名称,然后选择 Confirm (确认) 以删除。5. 对集群中的任何其他节点组以及您账户中的任何其他集群重复此过程。

手动删除服务相关角色

使用 IAM 控制台、AWS CLI 或 AWS API 删除 AWSServiceRoleForAmazonEKSNodegroup 服务相关角色。有关更多信息,请参阅 IAM 用户指南中的删除服务相关角色。

Amazon EKS 服务相关角色的受支持区域Amazon EKS 支持在服务可用的所有区域中使用服务相关角色。有关更多信息,请参阅Amazon EKSService Endpoints and Quotas。

Amazon EKS 集群 IAM 角色Amazon EKS 管理的 Kubernetes 集群代表您调用其他 AWS 服务,以管理您与该服务一起使用的资源。必须先使用以下 IAM 策略创建 IAM 角色,然后才能创建 Amazon EKS 集群:

• AmazonEKSClusterPolicy

Note

2020年4月16日前, AmazonEKS服务政策 也是必需的,并且建议的名称是 eksServiceRole。使用AWSServiceRoleForAmazonEKS 服务链接角色,2020年4月16日或之后创建的群集不再需要该策略。

检查现有集群角色可使用以下过程检查并确定您的账户是否已有 Amazon EKS 集群角色。

在 IAM 控制台中检查 eksClusterRole

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 在导航面板中,选择 角色.3. 搜索角色列表 eksClusterRole。如果某个角色包括 eksClusterRole 不存在,然后参阅 创建

Amazon EKS 集群角色 (p. 280) 创建角色。如果包含 eksClusterRole 的角色确实存在,则选择角色以查看附加的策略。

4. 选择 Permissions。5. 确保将 AmazonEKSClusterPolicy 托管策略附加到此角色。如果附加该策略,则将正确配置 Amazon

EKS 集群角色。

279

Page 288: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南集群 IAM 角色

6. 选择 Trust Relationships,然后选择 Edit Trust Relationship。7. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不符合,

请将策略复制到 Policy Document 窗口中并选择 Update Trust Policy。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

创建 Amazon EKS 集群角色可以使用 AWS 管理控制台 (p. 280)或 AWS CloudFormation (p. 280) 为您的账户创建集群角色(如果尚不具有此角色)。

在 IAM 控制台中创建 Amazon EKS 集群角色

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从服务列表中选择 EKS,为您的使用案例选择 EKS - Cluster,然后选择 Next: (下一步:)。权限。4. 选择 Next: (下一步:)。 标签。5. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南6. 选择 Next: (下一步:)。 审核。7. 对于 Role name (角色名称),输入您的角色的唯一名称,如 eksClusterRole,然后选择 Create role

(创建角色)。

使用 AWS CloudFormation 创建 Amazon EKS 集群角色

1. 将以下 AWS CloudFormation 模板保存到本地系统中的文本文件。

---AWSTemplateFormatVersion: '2010-09-09'Description: 'Amazon EKS Cluster Role'

Resources:

eksClusterRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - eks.amazonaws.com Action: - sts:AssumeRole

280

Page 289: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南节点 IAM 角色

ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonEKSClusterPolicy

Outputs:

RoleArn: Description: The role that Amazon EKS will use to create AWS resources for Kubernetes clusters Value: !GetAtt eksClusterRole.Arn Export: Name: !Sub "${AWS::StackName}-RoleArn"

Note

在 2020 年 4 月 16 日之前,ManagedPolicyArns 有一个 arn:aws:iam::aws:policy/AmazonEKSServicePolicy 条目。 对于 AWSServiceRoleForAmazonEKS 服务相关角色,不再需要该策略。

2. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。3. 选择创建堆栈。4. 对于指定模板,选择上传模板文件,然后选择选择文件。5. 选择您之前创建的文件,然后选择下一步。6. 对于 Stack name (堆栈名称),输入角色的名称,如 eksClusterRole,然后选择 Next (下一步)。7. 在 Configure stack options (配置堆栈选项) 页面上,选择 Next (下一步)。8. 在审核页面上,审核您的信息,确认堆栈可创建 IAM 资源,然后选择创建堆栈。

Amazon EKS 节点 IAM 角色的 Amazon EKS 节点 kubelet 守护进程拨打呼叫 AWS API代表您。节点通过 IAM 实例配置文件和关联的策略。在启动节点并将其注册到群集之前,必须创建 IAM 这些节点在启动时使用的角色。此要求适用于通过Amazon EKS 由Amazon提供的优化AMI,或与您打算使用的任何其他节点AMI配合使用。在创建节点之前,必须创建 IAM 角色 IAM 政策:

• AmazonEKSWorkerNodePolicy

• AmazonEKS_CNI_Policy

• AmazonEC2ContainerRegistryReadOnly

检查现有节点角色您可以使用以下步骤检查您的帐户是否已经有 Amazon EKS 节点角色。

在 IAM 控制台中检查 NodeInstanceRole

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 在导航面板中,选择 角色.3. 搜索角色列表 NodeInstanceRole。如果某个角色包含 NodeInstanceRole 不存在,然后参阅 创建

Amazon EKS 节点 IAM 角色 (p. 282) 创建角色。如果包含 NodeInstanceRole 的角色确实存在,请选择该角色以查看附加的策略。

4. 选择 Permissions。5. 确保 AmazonEKSWorkerNodePolicy、AmazonEKS_CNI_Policy 和

AmazonEC2ContainerRegistryReadOnly 托管策略已经附加到该角色。自的推h種命場中清亥清種迄清迄雖推推雖亥h種命,為場統動 Amazon EKS 节点角色配置正确。

6. 选择 Trust Relationships,然后选择 Edit Trust Relationship。

281

Page 290: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南节点 IAM 角色

7. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不符合,请将策略复制到 Policy Document 窗口中并选择 Update Trust Policy。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

创建 Amazon EKS 节点 IAM 角色如果您按照 AWS 管理控制台入门 (p. 13) 或 eksctl 入门 (p. 3) 则节点角色已存在,您不需要手动创建它。您可以使用 AWS 管理控制台 或 AWS CloudFormation 创建 Amazon EKS 节点角色(如果您尚未为您的帐户设置)。您可以使用 AWS 管理控制台 (p. 282) 或 AWS CloudFormation (p. 282).

在 Amazon EKS 控制台中创建 IAM 节点角色

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从 Choose a use case 下的 Common use cases 列表中选择 EC2,然后选择 Next: 权限。4. 在 Filter policies (筛选策略) 框中,输入 AmazonEKSWorkerNodePolicy。 选中

AmazonEKSWorkerNodePolicy 左侧的框。5. 在 Filter policies (筛选策略) 框中,输入 AmazonEKS_CNI_Policy。 选中 _CNI_PolicyAmazonEKS 左

侧的框。6. 在 Filter policies (筛选策略) 框中,输入 AmazonEC2ContainerRegistryReadOnly。 选中

AmazonEC2ContainerRegistryReadOnly 左侧的框。7. 选择 Next: (下一步:)。 标签。8. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南9. 选择 Next: (下一步:)。 审核。10. 对于 Role name (角色名称),输入您的角色的唯一名称,例如 NodeInstanceRole。 对于 Role

description (角色描述),请将当前文本替换为描述性文本,例如 Amazon EKS - Node Group Role,然后选择 Create role (创建角色)。

使用 Amazon EKS 创建 AWS CloudFormation 节点角色

1. 从 https://console.aws.amazon.com/cloudformation 打开 AWS CloudFormation 控制台。2. 选择 Create stack (创建堆栈),然后选择 With new resources (standard) (使用新资源(标准))。3. 对于 Specify template (指定模板),选择 Amazon S3 URL。4. 将与您的集群所在的区域对应的 URL 粘贴到 Amazon S3 URL 文本区域中,然后选择 Next (下一步) 两

次:

• 区域之外的所有区域。中国

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/amazon-eks-nodegroup-role.yaml

282

Page 291: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Pod 执行角色

• 北京和宁夏 中国区域。

https://amazon-eks.s3.cn-north-1.amazonaws.com.cn/cloudformation/2020-08-12/amazon-eks-nodegroup-role.yaml

5. 在 Specify stack details (指定堆栈详细信息) 页面上,对于 Stack name (堆栈名称) 输入一个名称,如eks-node-group-instance-role ,然后选择 Next (下一步)。

6. (可选)在 Configure stack options (配置堆栈选项) 页面上,您可以选择为堆栈资源添加标签。选择下一步。

7. 在 Review (审核) 页面上,选中 Capabilities (功能) 部分中的复选框,然后选择 Create stack (创建堆栈)。

8. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)。9. 记录已创建的 角色的 NodeInstanceRoleIAM 值。在您创建节点组时需要此功能。

Pod 执行角色要在 AWS Fargate 基础设施上运行 Pod,需要有 Amazon EKS Pod 执行角色。

当您的集群在 AWS Fargate 基础设施上创建 Pod 时,Pod 需要代表您调用 AWS APIs,例如,从 Amazon ECR中提取容器映像。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

创建 Fargate 配置文件时,必须指定要用于 Pod 的 Pod 执行角色。此角色将被添加到集群的 Kubernetes 基于角色的访问控制 (RBAC) 以进行授权,以使在 Fargate 基础设施上运行的 kubelet 可以向您的 AmazonEKS 集群注册。这是为了让 Fargate 基础设施作为节点显示在集群中。

在创建 Fargate 配置文件之前,必须使用以下 IAM 策略创建 IAM 角色:

• AmazonEKSFargatePodExecutionRolePolicy

检查现有的 Pod 执行角色可以使用以下过程检查并查看您的账户是否已有 Amazon EKS Pod 执行角色。

在 IAM 控制台中检查 AmazonEKSFargatePodExecutionRole

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 在导航面板中,选择 Roles。3. 在角色列表中搜索 AmazonEKSFargatePodExecutionRole。 如果角色不存在,请参阅创建 Amazon

EKS Pod 执行角色 (p. 284)以创建角色。如果角色存在,请选择角色以查看附加的策略。4. 选择 Permissions。5. 确保将 AmazonEKSFargatePodExecutionRolePolicyAmazon 托管策略附加到该角色。如果附加该策

略,则将正确配置 Amazon EKS Pod 执行角色。6. 选择 Trust Relationships,然后选择 Edit Trust Relationship。7. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不符合,

请将策略复制到 Policy Document 窗口中并选择 Update Trust Policy。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks-fargate-pods.amazonaws.com"

283

Page 292: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

}, "Action": "sts:AssumeRole" } ]}

创建 Amazon EKS Pod 执行角色可以使用以下过程为您的账户创建一个 Amazon EKS Pod 执行角色(如果尚不具有此角色)。

使用 AWS Fargate 创建 AWS 管理控制台 Pod 执行角色

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 选择 Roles,然后选择 Create role。3. 从服务列表中选择 EKS,为您的使用案例选择 EKS - Fargate pod,然后选择 Next: (下一步:)。权限。4. 选择 Next: (下一步:)。 标签。5. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅

中的标记 IAM 实体。IAM 用户指南6. 选择 Next: (下一步:)。 审核。7. 对于 Role name (角色名称),输入您的角色的唯一名称,如

AmazonEKSFargatePodExecutionRole,然后选择 Create role (创建角色)。

服务账户的 IAM 角色通过 Amazon EKS 集群上服务账户的 IAM 角色,您可以将 IAM 角色与 Kubernetes 服务账户关联。然后,此服务账户可向使用它的任意 Pod 中的容器提供 AWS 权限。借助此功能,您不再需要向节点 IAM 角色提供扩展的权限以便该节点上的 Pod 可以调用 AWS APIs。

应用程序必须通过 AWS 凭证签署 AWS API 请求。此功能提供了管理可供应用程序使用的凭证的策略,这与Amazon EC2 实例配置文件为 Amazon EC2 实例提供凭证的方式相似。您可以将 IAM 角色与 Kubernetes 服务账户关联,而不是为容器创建和分配 AWS 凭证或使用 Amazon EC2 实例的角色。之后,Pod 的容器中的应用程序可以使用 AWS 开发工具包或 AWS CLI 向授权的 AWS 服务发出 API 请求。

服务账户的 IAM 角色功能提供了下列优势:

• 最低权限— 通过使用服务账户的 角色功能,您不再需要向节点 IAM 角色提供扩展的权限,以便该节点上的Pod 可以调用 IAM AWS。APIs 您可以将 IAM 权限范围限定到服务账户,并且只有使用该服务账户的 Pod可以访问这些权限。此功能还消除了对 kiam 或 kube2iam 等第三方解决方案的需求。

• 凭证隔离 — 容器只能检索与该容器所属服务账户关联的 IAM 角色的凭证。容器永远无法访问属于其他Pod 的其他容器所用的凭证。

• 可审核性 — 可通过 CloudTrail 进行访问和事件日志记录以帮助确保可追溯性审核。

要了解其用法,请参阅在集群上为服务账户启用 IAM 角色 (p. 289)。

有关使用 eksctl 的端到端演练,请参阅演练: 更新 VPC CNI 插件以使用服务账户的 IAM 角色 (p. 294)。

服务账户的 IAM 角色技术概述2014 年,AWS Identity and Access Management 使用 OpenID Connect (OIDC) 增加了对联合身份的支持。此功能允许您通过支持的身份提供商对 AWS API 调用进行身份验证,并获得有效的 OIDC Web 令牌(JWT)。您可以将此令牌传递到 AWS STS AssumeRoleWithWebIdentity API 操作并接收 IAM 临时角色凭证。您可以使用这些凭证与任意 AWS 服务交互,例如 Amazon S3 和 DynamoDB。

284

Page 293: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

Kubernetes 长期以来将服务账户用作其内部身份系统。Pod 可以使用自动装载的令牌(这是非OIDC JWT,只有 Kubernetes API 服务器可以验证)进行 Kubernetes API 服务器的身份验证。这些旧服务账户令牌不会过期,轮换签名密钥是一个困难的过程。在 Kubernetes 版本 1.12 中,为新ProjectedServiceAccountToken 功能添加了支持,这是还包含了服务账户身份的 OIDC JSON Web 令牌,并支持可配置的受众。

Amazon EKS 现在针对包含 ProjectedServiceAccountToken JSON Web 令牌的签名密钥的集群,托管公有 OIDC 搜索终端节点,这样 IAM 等外部系统可以验证和接收 Kubernetes 发布的 OIDC 令牌。

IAM 角色配置

在 IAM 中,您创建具有可信关系的 IAM 角色,其范围限定为您集群的 OIDC 提供方、服务账户命名空间以及(可选)服务账户名称,然后附加您要与服务账户关联的 IAM 策略。您可在下方的 StringEquals 和StringLike 条件中添加多个条目,以将多个服务账户或命名空间用于角色。

• 将角色范围限定为特定服务账户:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/<OIDC_PROVIDER>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "<OIDC_PROVIDER>:sub": "system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>" } } } ]}

• 将角色限定为整个命名空间(以使用命名空间为边界):

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/<OIDC_PROVIDER>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "<OIDC_PROVIDER>:sub": "system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:*" } } } ]}

服务账户配置

在 Kubernetes 中,您通过添加 eks.amazonaws.com/role-arn 注释到服务账户,定义 IAM 角色与集群中的服务账户关联。

285

Page 294: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

apiVersion: v1kind: ServiceAccountmetadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<AWS_ACCOUNT_ID>:role/<IAM_ROLE_NAME>

Pod 配置

集群上的 Amazon EKS Pod 身份 Webhook 监视与具有此注释的服务账户关联的 Pod,并对其应用以下环境变量。

AWS_ROLE_ARN=arn:aws:iam::<AWS_ACCOUNT_ID>:role/<IAM_ROLE_NAME>AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token

Note

您的集群无需使用变异的 Webhook 来配置环境变量和令牌文件装载;您可以选择配置 Pod 以手动添加这些环境变量。

Important

无论是使用更改 Web 挂钩还是手动配置环境变量,您都需要将以下环境变量添加到为 中国 区域中的服务账户使用 IAM 角色的所有 Pod。

AWS_DEFAULT_REGION=<region-code>

AWS 开发工具包支持的版本 (p. 288)首先在凭证链提供商中查找这些环境变量。角色凭证用于满足这些标准的 Pod。

Note

当 Pod 使用来自与服务账户关联的 IAM 角色的 AWS 凭证时,该 Pod 的容器中的 AWS CLI 或其他SDKs 仅使用该角色提供的凭证。它们不再从节点 IAM 角色继承任何 IAM 权限。

默认情况下,只有以 root 身份运行的容器才具有正确的文件系统权限来读取 Web 身份令牌文件。您可以通过使容器以 root 身份运行或通过为清单中的容器提供以下安全上下文,以提供这些权限。fsGroup ID 是任意的,您可以选择任何有效的组 ID。有关为 Pod 设置安全上下文的含义的更多信息,请参阅 Kubernetes文档中的为 Pod 或容器配置安全上下文。

apiVersion: apps/v1kind: Deploymentmetadata: name: <my-app>spec: template: metadata: labels: app: <my-app> spec: serviceAccountName: <my-app> containers: - name: <my-app> image: <my-app>:latest securityContext: fsGroup: <1337>...

286

Page 295: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

代表 Pod 请求并存储令牌。kubelet默认情况下,如果令牌早于其总 TTL 的 80%,或者令牌超过 24 小时,kubelet 将刷新令牌。您可以使用 Pod 规范中的设置修改任何账户(默认服务账户除外)的过期持续时间。有关更多信息,请参阅 Kubernetes 文档中的服务账户令牌卷投影。

跨账户 IAM 权限您可以通过以下方式配置跨账户 IAM 权限:从另一个账户的集群创建身份提供商,或使用链接的 AssumeRole操作。在以下示例中,账户 A 拥有一个 Amazon EKS 集群,支持服务账户的 IAM 角色。在该集群上运行的Pod 需要代入来自账户 B 的 IAM 权限。

Example : 从其他账户的集群创建身份提供商

Example

在此示例中,账户 A 将从其集群向账户 B 提供 OIDC 发布者 URL。账户 B 遵循在集群上为服务账户启用IAM 角色 (p. 289)和为服务账户创建 IAM 角色和策略 (p. 290)中的说明,并使用来自账户 A 集群的 OIDC发布者 URL。然后,集群管理员注释账户 A 的集群中的服务账户以使用来自账户 B 的角色。

apiVersion: v1kind: ServiceAccountmetadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_B_AWS_ACCOUNT_ID>:role/<IAM_ROLE_NAME>

Example :使用链接 AssumeRole 操作

Example

在此示例中,账户 B 创建一个 IAM 策略,其中包括授予账户 A 集群中 Pod 的权限。账户 B 将该策略附加到具有可信关系的 IAM 角色,允许对账户 A (111111111111) 的 AssumeRole 权限,如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "sts:AssumeRole", "Condition": {} } ]}

账户 A 创建具有信任策略的角色,从使用集群的 OIDC 发布者 URL 创建的身份提供商获取凭证,如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111111111111:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/EXAMPLEC061A78C479E31025A21AC4CDE191335D05820BE5CE" }, "Action": "sts:AssumeRoleWithWebIdentity" }

287

Page 296: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

]}

账户 A 将策略附加到具有以下权限的角色,以代入账户 B 创建的角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/account-b-role" } ]}

Pod 的应用程序代码代入账户 B 的角色使用两个配置文件: account_b_role 和 account_a_role。 配置文件使用 account_b_role 配置文件作为其源。account_a_role对于 AWS CLI,该 ~/.aws/config文件类似于下例所示。

[profile account_b_role]source_profile = account_a_rolerole_arn=arn:aws:iam::222222222222:role/account-b-role

[profile account_a_role]web_identity_token_file = /var/run/secrets/eks.amazonaws.com/serviceaccount/token role_arn=arn:aws:iam::111111111111:role/account-a-role

要为其他 AWS SDKs 指定链接的配置文件,请参阅其文档。

使用支持的 AWS 开发工具包Pod 中的容器必须使用支持通过 OIDC Web 身份令牌文件代入 AWS 角色的 IAM 开发工具包版本。AWSLinux 发行版程序包管理器中包含的 SDKs 可能不是最新的,无法支持此功能。请确保至少使用以下列出的最低开发工具包版本:

• Java(版本 2)— 2.10.11• Java — 1.11.704• Go — 1.23.13• Python (Boto3) — 1.9.220• Python (botocore) — 1.12.200• AWS CLI — 1.16.232• Node — 2.521.0• Ruby — 2.11.345• C++ — 1.7.174• .NET — 3.3.659.1• PHP — 3.110.7

许多流行的 Kubernetes 附加组件,如 Cluster Autoscaler 和 ALB 入口控制器支持服务账户的 IAM 角色。适用于 Kubernetes 的 Amazon VPC CNI 插件使用支持的 适用于 Go 的 AWS 开发工具包 版本进行了更新,您可以为服务账户功能使用 IAM 角色来提供所需的权限,以使 CNI 正常工作。

为了确保您使用的是受支持的开发工具包,请在构建容器时按照适用于 Amazon Web Services 的工具中针对您的首选开发工具包的安装说明操作。

288

Page 297: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

在集群上为服务账户启用 IAM 角色服务账户的 IAM 角色功能在新 Amazon EKS Kubernetes 版本 1.14 及更高版本的集群上可用,以及在 2019年 9 月 3 日及之后更新为版本 1.13 及更高版本的集群上可用。现有集群可更新到版本 1.13 或更高版本来利用此功能。有关更多信息,请参阅更新 Amazon EKS 集群 Kubernetes 版本 (p. 37)。

如果您的集群支持服务账户的 IAM 角色,它将具有与之关联的 OpenIDConnect (连接) 发布者 URL。您可以在Amazon EKS 控制台中查看此 URL,也可以使用以下 AWS CLI 命令检索它。

Important

您必须至少使用 AWS CLI 的版本 1.18.163 或 2.0.59,才能从此命令接收适合的输出。有关更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS CLI。

aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text

输出:

https://oidc.eks.<region-code>.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E

要为集群中的服务账户使用 IAM 角色,您必须使用 eksctl (p. 289) 或 AWS 管理控制台 创建 OIDC 身份提供商。 (p. 289)

使用 eksctl 为集群创建 IAM OIDC 身份提供商

1. 使用以下命令查看您的 eksctl 版本。此过程假定您已安装 eksctl,且您的 eksctl 版本最低为0.31.0-rc.0。

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。2. 使用以下命令为您的集群创建 OIDC 身份提供商。将 <cluster_name> 替换为您自己的值。

eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve

使用 AWS 管理控制台 为集群创建 IAM OIDC 身份提供商

1. 使用 Amazon EKS 控制台从集群的描述或者使用以下 AWS CLI 命令检索 OIDC 发布者 URL。

Important

您必须至少使用 AWS CLI 的版本 1.18.163 或 2.0.59,才能从此命令接收适合的输出。有关更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS CLI。

aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text

2. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。3. 在导航面板中,选择 Identity Providers,然后选择 Create Provider。4. 对于 Provider Type (提供商类型),选择 Choose a provider type (选择提供商类型),然后选择 OpenID

Connect (连接)。5. 对于 Provider URL (提供商 URL),粘贴集群的 OIDC 发布者 URL。6. 对于“Audience (受众)”,键入 sts.amazonaws.com 并选择 Next Step (下一步)。

289

Page 298: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

7. 验证提供商信息正确,然后选择 Create (创建) 以创建身份提供商。

在为集群启用 IAM OIDC 身份提供商之后,您可以创建 IAM 角色以关联集群中的服务账户。有关更多信息,请参阅为服务账户创建 IAM 角色和策略 (p. 290)

为服务账户创建 IAM 角色和策略您必须创建一个 IAM 策略,该策略指定您希望 Pod 中的容器拥有的权限。您可通过多种方式创建新的 IAM 权限策略。一种方法是复制已具有您期望的一些功能的完整 AWS 托管策略,然后根据您的特定要求对其进行自定义。有关更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html 中的创建新策略IAM 用户指南。

您还必须为 Kubernetes 服务账户创建 IAM 角色,以便在您将其与服务账户关联之前使用。该信任关系范围限定为您的集群和服务账户,这样各个集群和服务账户组合需要其自己的角色。然后,您可以将特定的 IAM策略附加到角色,该策略为 Pod 中的容器提供所需的权限。以下过程介绍了如何执行此操作。

创建 IAM 策略

在此过程中,我们提供了您可用于应用程序的两个示例策略:

• 一个策略允许对 Amazon S3 存储桶的只读访问权限。您应将配置信息或引导脚本存储在此存储桶中,并且您 Pod 中的容器可以从存储桶读取文件并将其加载到应用程序中。

• 允许来自 AWS Marketplace 的付费容器映像的策略。

1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。2. 在导航面板中,选择 Policies (策略),然后选择 Create policy (创建策略)。3. 选择 JSON 选项卡。4. 在 Policy Document (策略文档) 字段中,粘贴以下策略之一以应用到您的服务账户,或将您自己的策略

文档粘贴到字段中。您还可以使用可视化编辑器构建自己的策略。

以下示例授予对 <my-pod-secrets-bucket> Amazon S3 存储桶的权限。您可以修改策略文档以满足您的特定需求。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<my-pod-secrets-bucket>/*" ] } ]}

以下示例授予所需权限以使用来自 AWS Marketplace 的付费容器映像。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:RegisterUsage" ],

290

Page 299: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

"Effect": "Allow", "Resource": "*" } ]}

5. 选择查看策略。6. 输入您策略的名称和描述,然后选择 Create policy (创建角色)。7. 记录策略的 Amazon 资源名称 (ARN) 以便在您稍后创建角色时使用。

创建一个 IAM 角色为服务账户创建 IAM 角色。您可以使用 eksctl (p. 291)、 AWS 管理控制台 或 (p. 291)AWS CLI 创建角色。 (p. 292)

使用 eksctl 创建服务账户

使用以下命令来创建服务账户和 IAM 角色。将 <example values> 替换为您自己的值。Note

此命令仅适用于使用 eksctl 创建的集群。 如果您未使用 eksctl 创建集群,则使用 AWS 管理控制台 或 AWS CLI 选项卡上的说明。

eksctl create iamserviceaccount \ --name <service_account_name> \ --namespace <service_account_namespace> \ --cluster <cluster_name> \ --attach-policy-arn <IAM_policy_ARN> \ --approve \ --override-existing-serviceaccounts

已部署了 AWS CloudFormation 模板,该模板创建了 IAM 角色,并且已将 IAM 策略附加到该模板。该角色已与 Kubernetes 服务账户相关联。

使用 AWS 管理控制台 创建服务账户

1. 使用 Amazon EKS 控制台从集群的描述或者使用以下 AWS CLI 命令检索 OIDC 发布者 URL。Important

您必须至少使用 AWS CLI 的版本 1.18.163 或 2.0.59,才能从此命令接收适合的输出。有关更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS CLI。

aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text

2. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。3. 在导航面板中,依次选择 Roles 和 Create Role。4. 在 Select type of trusted entity (选择受信任实体的类型) 部分中,选择 Web identity (Web 身份)。5. 在 Choose a web identity provider (选择 Web 身份提供商) 部分中:

1. 对于 Identity provider (身份提供商),选择您集群的 URL。2. 对于 Audience (受众),请选择 sts.amazonaws.com。

6. 选择 Next: (下一步:)。权限。7. 在 Attach Policy (附加策略) 部分中,选择要用于服务账户的策略。选择 Next: (下一步:)。 标签。8. 在 Add tags (optional) (添加标签(可选)) 屏幕上,您可以为账户添加标签。选择 Next: (下一步:)。 审

核。

291

Page 300: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

9. 对于 Role Name (角色名称),为角色输入名称,然后选择 Create Role (创建角色)。10. 创建角色后,在控制台中选择角色以将其打开进行编辑。11. 选择 Trust relationships 选项卡,然后选择 Edit trust relationship。

1. 编辑 OIDC 提供商后缀并将它从 :aud 更改为 :sub。2. 将 sts.amazonaws.com 替换为您的服务账户 ID。3. 如有必要,请将 <region-code> 更改为在步骤 1 的输出中返回的区域代码。

生成的行应如下所示。

"oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B716D3041E>:sub": "system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>"

12. 选择 Update Trust Policy (更新可信策略) 以完成操作。13. 将 IAM 角色与 Kubernetes 服务账户关联。有关更多信息,请参阅为服务账户指定 IAM 角

色 (p. 293)。

使用 AWS CLI 创建服务账户

1. 使用以下命令将 AWS 账户 ID 设置为环境变量。

AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)

2. 使用以下命令将您的 OIDC 身份提供商设置为环境变量,替换集群名称。

Important

您必须至少使用 AWS CLI 的版本 1.18.163 或 2.0.59,才能从此命令接收适合的输出。有关更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS CLI。

OIDC_PROVIDER=$(aws eks describe-cluster --name <cluster-name> --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")

3. 将以下代码块复制到您的计算机,并将 <namespace> 和 <service-account-name> 替换为您自己的值。

read -r -d '' TRUST_RELATIONSHIP <<EOF{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": "system:serviceaccount:<namespace>:<service-account-name>" } } } ]}EOFecho "${TRUST_RELATIONSHIP}" > trust.json

4. 运行上一步中修改后的代码块以创建名为 trust.json 的文件。

292

Page 301: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

5. 运行以下 AWS CLI 命令以创建角色,替换您的 IAM 角色的名称和描述。

aws iam create-role --role-name <IAM_ROLE_NAME> --assume-role-policy-document file://trust.json --description "<IAM_ROLE_DESCRIPTION>"

6. 运行以下命令以将您的 IAM 策略附加到角色,替换您的 IAM 角色名称和策略 ARN。

aws iam attach-role-policy --role-name <IAM_ROLE_NAME> --policy-arn=<IAM_POLICY_ARN>

7. 将 IAM 角色与 Kubernetes 服务账户关联。有关更多信息,请参阅为服务账户指定 IAM 角色 (p. 293)。

为服务账户指定 IAM 角色在 Kubernetes 中,您通过添加以下注释到服务账户,定义 IAM 角色与集群中的服务账户关联。

Note

如果您已使用 eksctl 创建了 IAM 角色用于您的服务账户,则在您创建角色时就使用该服务账户完成了该操作。

apiVersion: v1kind: ServiceAccountmetadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<AWS_ACCOUNT_ID>:role/<IAM_ROLE_NAME>

修补用于 IAM 角色的服务账户

1. 使用以下命令可通过要用于服务账户的 IAM 角色的 ARN 注释您的服务账户。请确保替换您自己的值以替换用于 Pod 的 <example values>。

kubectl annotate serviceaccount -n <SERVICE_ACCOUNT_NAMESPACE> <SERVICE_ACCOUNT_NAME> \eks.amazonaws.com/role-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:role/<IAM_ROLE_NAME>

2. 删除并重新创建任何与服务账户关联的现有 Pod,以应用凭据环境变量。变异 Webhook 不将其应用到已经在运行的 Pod。以下命令删除现有 aws-node DaemonSet Pod 并使用服务账户注释部署它们。您可以修改命名空间、部署类型和标签,以更新您的特定 Pod。

kubectl delete pods -n <kube-system> -l <k8s-app=aws-node>

3. 确认 Pod 已全部重新启动。

kubectl get pods -n <kube-system> -l <k8s-app=aws-node>

4. 描述 Pod 之一并确保 AWS_WEB_IDENTITY_TOKEN_FILE 和 AWS_ROLE_ARN 环境变量存在。

kubectl exec -n kube-system aws-node-<9rgzw> env | grep AWS

输出:

AWS_VPC_K8S_CNI_LOGLEVEL=DEBUGAWS_ROLE_ARN=arn:aws:iam::<AWS_ACCOUNT_ID>:role/<IAM_ROLE_NAME>AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token

当您在上一步中创建 Kubernetes 服务账户时,eksctl 已创建 IAM 角色。

293

Page 302: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

限制对 Amazon EC2 实例配置文件凭证的访问默认情况下,节点上运行的所有容器都将所有权限分配给附加到该节点的 Amazon EKS 节点 IAM 角色 (p. 281)。Amazon EC2 实例元数据服务将凭证提供给在实例上运行的任何进程。有关更多信息,请参阅从实例元数据检索安全凭证。

在为 Pod 的服务账户实施 IAM 角色时,Pod 中的容器将所有权限分配给服务账户和节点 IAM 角色。如果您为集群中的所有 Pod 实施服务账户的 IAM 角色,您可能希望阻止 Pod 中的容器使用分配给节点 IAM 角色的权限。但请记住,Pod 需要运行的节点 IAM 角色上可能存在某些关键权限。正确确定服务账户 IAM 角色的范围非常重要,以便您的 Pod 具有所有必要的权限。例如,向节点 IAM 角色分配了从 Amazon ECR 拉取容器映像的权限。如果未向某个 Pod 分配这些权限,则该 Pod 无法从 Amazon ECR 提取容器映像。

要阻止节点上所有 Pod 中的所有容器使用分配给节点 IAM 角色的权限(同时仍允许分配给服务账户的权限),请在节点上运行以下 iptables 命令(作为 root)或将其包含在实例引导用户数据脚本中。

Important

• 这些命令完全阻止节点上运行的所有 容器查询实例元数据服务中的任何元数据,而不仅仅是节点IAM 角色的凭证。请勿在运行您尚未为服务账户实施 IAM 角色的节点上运行这些命令,否则节点上的任何容器都不会将任何权限分配给节点 IAM 角色。

• 如果您使用 Calico (p. 205) 等工具实施网络策略,则此规则可能会被覆盖。实施网络策略时,请确保它不会覆盖此规则,或者您的策略包含此规则。

yum install -y iptables-servicesiptables --insert FORWARD 1 --in-interface eni+ --destination 169.254.169.254/32 --jump DROPiptables-save | tee /etc/sysconfig/iptables systemctl enable --now iptables

演练: 更新 VPC CNI 插件以使用服务账户的 IAM 角色适用于 Kubernetes 的 Amazon VPC CNI 插件是在 Amazon EKS 集群中用于 Pod 联网的联网插件。CNI 插件负责向 Kubernetes 节点分配 VPC IP 地址并为每个节点上的 Pod 配置所需网络。该插件需要 IAM 托管策略 AWS 提供的 AmazonEKS_CNI_Policy 权限,才能代表您调用 AWS APIs。默认情况下,此策略附加到您的节点 IAM 角色。但是,使用此方法,节点上的所有 Pod 都具有与 CNI 插件相同的权限。您可以将 IAM 角色用于服务账户功能,以提供 AmazonEKS_CNI_Policy 权限,然后从节点 IAM 角色中删除策略。

为了便于使用,此主题使用 eksctl 为服务账户配置 IAM 角色。但是,如果您希望使用 AWS 管理控制台、AWS CLI 或 AWS SDKs 之一,相同的基本概念将适用,但您必须修改步骤才能使用 在集群上为服务账户启用 IAM 角色 (p. 289) 中的过程。

配置 CNI 插件以便为服务账户使用 IAM 角色

1. 使用以下命令查看您的 eksctl 版本。此过程假定您已安装 eksctl,且您的 eksctl 版本最低为0.31.0-rc.0。

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl (p. 251)。2. 如果您的集群不在 中国 区域中,请跳过此步骤。描述 Pod 之一并确保 AWS_DEFAULT_REGION 环境变量

存在。

kubectl exec -n kube-system aws-node-<9rgzw> env | grep AWS

294

Page 303: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

输出:

...AWS_DEFAULT_REGION=<region-code>

如果变量不存在,则需要使用以下命令将变量添加到使用服务账户的 IAM 角色的每个 Pod 中。

kubectl set env daemonset aws-node -n kube-system AWS_DEFAULT_REGION=<region-code>

3. 检查 Kubernetes 的集群的 Amazon VPC CNI 插件版本。使用以下命令输出您集群的 CNI 版本。

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

输出:

amazon-k8s-cni:<1.6.3>

如果您的 CNI 版本低于 1.7.5,请完成以下步骤以创建服务账户,然后将您的 CNI 版本升级到最新版本:

a. 使用以下命令为您的集群创建 OIDC 身份提供程序。使用您自己的值替换集群名称。

eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve

b. 使用以下命令来创建 Kubernetes 服务账户。将 <cluster_name>(包括 <>)替换为您自己的值。此命令部署一个 AWS CloudFormation 堆栈,该堆栈创建一个 IAM 角色,将AmazonEKS_CNI_Policy AWS 托管策略附加到该角色,并将 IAM 角色绑定到该服务账户。

eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster <cluster_name> \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --approve \ --override-existing-serviceaccounts

c. 完成与集群所在区域对应的选项中的说明,将 CNI 版本升级到最新版本。

• 中国以外的所有区域北京和宁夏

将您的 CNI 版本升级到最新版本。该清单中指定了您在上一步中创建的 aws-node 服务账户。

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.7/config/v1.7/aws-k8s-cni.yaml

• 北京和宁夏 中国1. 使用以下命令下载最新版本的 CNI 清单。

curl -o aws-k8s-cni-cn.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/v1.7/aws-k8s-cni-cn.yaml

2. 编辑 aws-k8s-cni-cn.yaml 文件。在文件的以下部分中,添加 AWS_DEFAULT_REGION 环境变量。

env:

295

Page 304: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南服务账户的 IAM 角色

- name: AWS_VPC_K8S_CNI_LOGLEVEL value: DEBUG - name: AWS_VPC_K8S_CNI_VETHPREFIX value: eni - name: AWS_VPC_ENI_MTU value: "9001" - name: AWS_DEFAULT_REGION value: <region-code>

3. 将您的 CNI 版本升级到最新版本。该清单中指定了您在上一步中创建的 aws-node 服务账户。

kubectl apply -f aws-k8s-cni-cn.yaml

4. 观察部署过程,并等待部署的 DESIRED 计数与 UP-TO-DATE 计数匹配。按 Ctrl + c 退出。

kubectl get -n kube-system daemonset.apps/aws-node --watch

5. 列出 aws-node DaemonSet 中的 Pod。

kubectl get pods -n kube-system -l k8s-app=aws-node

输出:

NAME READY STATUS RESTARTS AGEaws-node-mp88b 1/1 Running 0 17maws-node-n4tcd 1/1 Running 0 20saws-node-qt9dl 1/1 Running 0 17m

6. 再次检查集群适用于 Kubernetes 的 Amazon VPC CNI 插件的版本,确认该版本为 1.7.5。

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

输出:

amazon-k8s-cni:<1.7.5>

7. 描述 Pod 之一并确保 AWS_WEB_IDENTITY_TOKEN_FILE 和 AWS_ROLE_ARN 环境变量存在。

kubectl exec -n kube-system aws-node-<9rgzw> env | grep AWS

输出:

AWS_VPC_K8S_CNI_LOGLEVEL=DEBUGAWS_ROLE_ARN=arn:aws:iam::<111122223333>:role/eksctl-prod-addon-iamserviceaccount-kube-sys-Role1-<V66K5I6JLDGK>AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token

当您在上一步中创建 Kubernetes 服务账户时,eksctl 已创建 IAM 角色。8. 从您的节点 AmazonEKS_CNI_Policy 角色删除 IAM 策略。

a. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。b. 在左侧导航窗格中,选择 Roles (角色),然后搜索您的节点实例角色。c. 为您的节点实例角色选择 Permissions (权限) 选项卡,然后选择 AmazonEKS_CNI_Policy 右侧的

X。

296

Page 305: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南问题排查

d. 选择 Detach (分离) 以完成操作。

现在,您的 CNI 插件 Pod 从自己的角色获取其 IAM 权限,实例角色不再能够向其他 Pod 提供这些权限。

排查 Amazon EKS 身份和权限的问题要诊断并修复您在使用 Amazon EKS 和 IAM 时可能遇到的常见问题,请参阅 IAM 问题排查 (p. 318)。

Amazon EKS 中的日志记录和监控Amazon EKS 控制层面日志记录将审计和诊断日志直接从 Amazon EKS 控制层面提供到您账户中的CloudWatch Logs。这些日志可让您轻松地保护和运行您的集群。您可以选择所需的确切的日志类型,日志将作为日志流发送到 CloudWatch 中的每个 Amazon EKS 集群的组。 有关更多信息,请参阅 Amazon EKS控制层面日志记录 (p. 56)。

Note

当您在 Amazon CloudWatch 中检查 Amazon EKS 身份验证器日志时,您将看到一些条目的文本类似于以下示例文本。

level=info msg="mapping IAM role" groups="[]" role="arn:aws:iam::<111122223333:>role/<XXXXXXXXXXXXXXXXXX>-NodeManagerRole-<XXXXXXXX>" username="eks:node-manager"

预期为包含此文本的条目。username 是一个 Amazon EKS 内部服务角色,用于为托管节点组和Fargate 执行特定操作。

Amazon EKS 与 AWS CloudTrail 集成,后者是一项服务,该服务提供了由用户、角色或 Amazon EKS 中的 AWS 服务执行的操作的记录。CloudTrail 将 Amazon EKS 的所有 API 调用作为事件捕获。捕获的调用包含来自 Amazon EKS 控制台的调用和对 Amazon EKS API 操作的代码调用。有关更多信息,请参阅 使用AWS CloudTrail 记录 Amazon EKS API 调用 (p. 305)。

Kubernetes API 服务器公开了大量可用于监控和分析的指标。有关更多信息,请参阅Prometheus 的控制层面指标 (p. 258)。

Amazon EKS 的合规性验证作为多项 AWS 合规性计划的一部分,第三方审计员将评估 Amazon EKS 的安全性和合规性。其中包括SOC、PCI、ISO、HIPAA 等。

有关特定合规性计划范围内的 AWS 服务的列表,请参阅合规性计划范围内的 AWS 服务。有关一般信息,请参阅 AWS 合规性计划。

您可以使用 AWS Artifact 下载第三方审核报告。有关更多信息,请参阅在 AWS Artifact 中下载报告。

您在使用 Amazon EKS 时的合规性责任由您数据的敏感性、贵公司的合规性目标以及适用的法律法规决定。AWS 提供以下资源来帮助满足合规性:

• 安全性与合规性快速入门指南 – 这些部署指南讨论了架构注意事项,并提供了在 AWS 上部署基于安全性和合规性的基准环境的步骤。

• HIPAA 安全性和合规性架构设计文章 本文介绍了公司如何使用 – 创建符合 HIPAA 标准的应用程序。AWS• AWS 合规性资源 – 此业务手册和指南集合可能适用于您的行业和位置。• AWS Config – 此 AWS 服务评估您的资源配置对内部实践、行业指南和法规的遵循情况。

297

Page 306: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南弹性

• AWS Security Hub – 此 AWS 服务提供了 AWS 中安全状态的全面视图,可帮助您检查是否符合安全行业标准和最佳实践。

Amazon EKS 中的恢复功能全球基础设施围绕 AWS 区域和可用区构建。AWSAWS区域提供多个在物理上独立且隔离的可用区,这些可用区通过延迟低、吞吐量高且冗余性高的网络连接在一起。利用可用区,您可以设计和操作在可用区之间无中断地自动实现故障转移的应用程序和数据库。与传统的单个或多个数据中心基础设施相比,可用区具有更高的可用性、容错性和可扩展性。

Amazon EKS 跨多个可用区运行 Kubernetes 控制层面实例以确保高可用性。Amazon EKS 可以自动检测和替换运行状况不佳的控制层面实例,并为它们提供自动版本升级和修补。

此控制层面包含至少两个 API 服务器节点和三个跨区域内可用区的运行的 etcd 节点。Amazon EKS 会自动检测并替换运行状况不佳的控制层面实例,并根据需要跨区域中的可用区重启它们。Amazon EKS 利用AWS 区域的架构以保持高可用性。因此,Amazon EKS 能够提供确保 API 服务器终端节点可用性的 SLA。

有关 AWS 区域和可用区的更多信息,请参阅 AWS 全球基础设施。

Amazon EKS 中的基础设施安全性作为一项托管服务,Amazon EKS 由 AWS 中所述的 Amazon Web Services 全球网络安全程序提供保护: 安全流程概述文章。

您可以使用 AWS 发布的 API 调用通过网络访问 Amazon EKS。客户端必须支持传输层安全性 (TLS) 1.0 或更高版本。建议使用 TLS 1.2 或更高版本。客户端还必须支持具有完全向前保密 (PFS) 的密码套件,例如Ephemeral Diffie-Hellman (DHE) 或 Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)。大多数现代系统(如 Java 7 及更高版本)都支持这些模式。

此外,必须使用访问密钥 ID 和与 IAM 委托人关联的秘密访问密钥来对请求进行签名。或者,您可以使用AWS Security Token Service (AWS STS) 生成临时安全凭证来对请求进行签名。

创建 Amazon EKS 集群时,需要为集群指定要使用的 VPC 子网。Amazon EKS 要求指定至少两个可用区内的子网。我们建议使用同时带有公有子网和私有子网的 VPC,以便 Kubernetes 可以在公有子网中创建公有负载均衡器,进而将流量负载平衡到在私有子网中的节点上运行的 pod。

有关 VPC 注意事项的更多信息,请参阅集群 VPC 注意事项 (p. 174)。

如果使用Amazon EKS 入门 (p. 3)演练中提供的 AWS CloudFormation 模板创建 VPC 和节点组,则将使用推荐设置来配置控制层面和节点安全组。

有关安全组注意事项的更多信息,请参阅Amazon EKS 安全组注意事项 (p. 176)。

在创建新集群时,Amazon EKS 将为您用于与集群进行通信的托管 Kubernetes API 服务器(使用Kubernetes 管理工具,如 kubectl)创建终端节点。默认情况下,此 API 服务器终端节点是对于 Internet是公有的,对 API 服务器的访问将使用 AWS Identity and Access Management (IAM) 与本机 Kubernetes 基于角色的访问控制 (RBAC) 的组合加以保护。

您可以启用 Kubernetes API 服务器的私有访问,以便节点与 API 服务器之间的所有通信都在 VPC 内。您可以限制可以从 Internet 访问 API 服务器的 IP 地址,或者完全禁用对 API 服务器的 Internet 访问。

有关修改集群终端节点访问的更多信息,请参阅修改集群终端节点访问 (p. 48)。

您可以使用工具实现网络策略,例如 Project Calico (p. 205)。Project Calico 是一个第三方开源项目。有关更多信息,请参阅 Project Calico 文档。

298

Page 307: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南配置和漏洞分析

Amazon EKS 中的配置和漏洞分析对于配置和维护 Kubernetes 集群和应用程序,安全是一个关键注意事项。Center for Internet Security (CIS)Kubernetes 基准提供了 节点安全配置的指导。Amazon EKS基准:

• 适用于您负责 Kubernetes 组件安全配置的 Amazon EC2 节点(托管和自管理)。• 提供社区批准的标准方法,以确保您在使用 Amazon EKS 时安全地配置了 Kubernetes 集群和节点。• 由四个部分组成:控制层面日志记录配置、节点安全配置、策略和托管服务。• 支持 Amazon EKS 中当前可用且可以使用 kube-bench(一种在 Kubernetes 集群上使用 CIS 基准检查用于

检查配置的标准开源工具)运行的所有 Kubernetes 版本。

要了解更多信息,请参阅 CIS Amazon EKS 基准简介。

Amazon EKS 平台版本表示集群控制层面的功能,包括启用哪些 Kubernetes API 服务器标志和当前的Kubernetes 补丁版本。使用最新平台版本部署新集群。有关详细信息,请参阅 平台版本 (p. 63)。

您可以将 Amazon EKS 集群更新 (p. 37)到更新的 Kubernetes 版本。随着新 Kubernetes 版本在 AmazonEKS 中提供,我们建议您主动将集群更新为使用最新的可用版本。有关 EKS 中 Kubernetes 版本的更多信息,请参阅Amazon EKS Kubernetes 版本 (p. 58)。

在 Amazon Linux 安全中心跟踪 Amazon Linux 2 的安全和隐私事件,或订阅关联的 RSS 源。安全和隐私事件包括受影响问题的概述、程序包以及更新实例以解决问题的说明。

您可以使用 Amazon Inspector 来检查节点的意外网络可访问性以及这些 Amazon EC2 实例上的漏洞。

Pod 安全策略Kubernetes pod 安全策略准入控制器针对一系列规则验证 pod 创建和更新请求。默认情况下,Amazon EKS集群附带完全宽松的安全策略(没有任何限制)。有关更多信息,请参阅 Kubernetes 文档中的 Pod 安全策略。

Note

仅在运行 Kubernetes 版本 1.13 或更高版本的 Amazon EKS 集群上启用 pod 安全策略准入控制器。您必须将集群的 Kubernetes 版本更新到至少 1.13 才能使用 pod 安全策略。有关更多信息,请参阅更新 Amazon EKS 集群 Kubernetes 版本 (p. 37)。

Amazon EKS 默认 Pod 安全策略Amazon EKS 具有 Kubernetes 版本 1.13 及更高版本的 eks.privileged 集群具有名为 的默认 Pod 安全策略。 此策略对于系统中可以接受什么类型的 pod 没有限制,这相当于在禁用 PodSecurityPolicy 控制器的情况下运行 Kubernetes。

Note

创建此策略是为了与未启用 PodSecurityPolicy 控制器的集群保持向后兼容性。您可以针对集群、各个命名空间和服务账户创建更具有限制性的策略,然后删除默认策略以启用这些更具有限制性的策略。

您可以使用以下命令查看默认策略。

kubectl get psp eks.privileged

299

Page 308: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 默认 Pod 安全策略

输出:

NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMESeks.privileged true * RunAsAny RunAsAny RunAsAny RunAsAny false *

有关更多详细信息,您可以使用以下命令描述此策略。

kubectl describe psp eks.privileged

输出:

Name: eks.privileged

Settings: Allow Privileged: true Allow Privilege Escalation: 0xc0004ce5f8 Default Add Capabilities: <none> Required Drop Capabilities: <none> Allowed Capabilities: * Allowed Volume Types: * Allow Host Network: true Allow Host Ports: 0-65535 Allow Host PID: true Allow Host IPC: true Read Only Root Filesystem: false SELinux Context Strategy: RunAsAny User: <none> Role: <none> Type: <none> Level: <none> Run As User Strategy: RunAsAny Ranges: <none> FSGroup Strategy: RunAsAny Ranges: <none> Supplemental Groups Strategy: RunAsAny Ranges: <none>

以下示例显示 eks.privileged pod 安全策略、其群集角色和集群角色绑定的完整 YAML 文件。

---apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: eks.privileged annotations: kubernetes.io/description: 'privileged allows full unrestricted access to pod features, as if the PodSecurityPolicy controller was not enabled.' seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policyspec: privileged: true allowPrivilegeEscalation: true allowedCapabilities: - '*' volumes: - '*' hostNetwork: true hostPorts:

300

Page 309: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 默认 Pod 安全策略

- min: 0 max: 65535 hostIPC: true hostPID: true runAsUser: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' readOnlyRootFilesystem: false

---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: eks:podsecuritypolicy:privileged labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policyrules:- apiGroups: - policy resourceNames: - eks.privileged resources: - podsecuritypolicies verbs: - use

---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: eks:podsecuritypolicy:authenticated annotations: kubernetes.io/description: 'Allow all authenticated users to create privileged pods.' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policyroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:podsecuritypolicy:privilegedsubjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated

删除默认 pod 安全策略

为您的集群创建自定义 pod 安全策略后,您可以删除默认 Amazon EKS eks.privileged pod 安全策略以启用您的自定义策略。

1. 创建一个名为 privileged-podsecuritypolicy.yaml 的文件,并将上述示例中的完整eks.privileged YAML 文件内容粘贴到该文件中(这将允许您删除与其关联的 pod 安全策略、ClusterRole 和 ClusterRoleBinding)。

2. 使用以下命令删除 YAML。

kubectl delete -f privileged-podsecuritypolicy.yaml

301

Page 310: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 默认 Pod 安全策略

安装或恢复默认 Pod 安全策略

如果要从 Kubernetes 的早期版本升级,或者您已修改或删除默认 Amazon EKS eks.privileged Pod 安全策略,则可使用以下步骤还原它。

1. 创建一个名为 privileged-podsecuritypolicy.yaml 的文件,并将以下YAML 文件内容粘贴到该文件中。

---apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: eks.privileged annotations: kubernetes.io/description: 'privileged allows full unrestricted access to pod features, as if the PodSecurityPolicy controller was not enabled.' seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policyspec: privileged: true allowPrivilegeEscalation: true allowedCapabilities: - '*' volumes: - '*' hostNetwork: true hostPorts: - min: 0 max: 65535 hostIPC: true hostPID: true runAsUser: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' readOnlyRootFilesystem: false

---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: eks:podsecuritypolicy:privileged labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policyrules:- apiGroups: - policy resourceNames: - eks.privileged resources: - podsecuritypolicies verbs: - use

---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBinding

302

Page 311: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 默认 Pod 安全策略

metadata: name: eks:podsecuritypolicy:authenticated annotations: kubernetes.io/description: 'Allow all authenticated users to create privileged pods.' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policyroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:podsecuritypolicy:privilegedsubjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated

2. 使用以下命令应用 YAML。

kubectl apply -f privileged-podsecuritypolicy.yaml

303

Page 312: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用 AWS CloudFormation 创建 Amazon EKS 资源

与 Amazon EKS 集成的 AWS 服务Amazon EKS 可与其他 AWS 服务配合使用来提供应对您的业务挑战的更多解决方案。本主题介绍了使用Amazon EKS 添加功能的服务或 Amazon EKS 用于执行任务的服务。

内容• 使用 AWS CloudFormation 创建 Amazon EKS 资源 (p. 304)• 使用 AWS CloudTrail 记录 Amazon EKS API 调用 (p. 305)• Amazon EKS 上的 AWS Outposts (p. 307)• 将 App Mesh 与 Kubernetes 结合使用 (p. 304)• Amazon EKS 本地区域上的AWS (p. 310)• Deep Learning 容器 (p. 310)

使用 AWS CloudFormation 创建 Amazon EKS 资源Amazon EKS 与 AWS CloudFormation 集成,后者是一项服务,可帮助您对 AWS 资源进行建模和设置,这样您只需花较少的时间来创建和管理资源与基础设施。您创建一个描述您所需的所有 AWS 资源(如Amazon EKS 集群)的模板,而 AWS CloudFormation 将负责为您设置和配置这些资源。

在您使用 AWS CloudFormation 时,可重复使用您的模板来不断地重复设置您的 Amazon EKS 资源。仅描述您的资源一次,然后在多个 AWS 账户和区域中反复配置相同的资源。

Amazon EKS 和 AWS CloudFormation 模板要为 Amazon EKS 和相关服务设置和配置资源,您必须了解 AWS CloudFormation 模板。模板是 JSON 或YAML 格式的文本文件。这些模板描述要在 AWS CloudFormation 堆栈中调配的资源。如果您不熟悉 JSON或 YAML,可以在 AWS CloudFormation Designer 的帮助下开始使用 AWS CloudFormation 模板。有关更多信息,请参阅 中的AWS CloudFormation什么是 Designer?。AWS CloudFormation 用户指南

Amazon EKS 支持在 AWS CloudFormation 中创建集群和节点组 。有关更多信息,包括 Amazon EKS 资源的JSON 和 YAML 模板示例,请参阅 中的 Amazon EKS 资源类型参考。AWS CloudFormation 用户指南

了解关于 AWS CloudFormation 的更多信息要了解有关 AWS CloudFormation 的更多信息,请参阅以下资源:

• AWS CloudFormation• AWS CloudFormation 用户指南• AWS CloudFormation 命令行界面用户指南

将 App Mesh 与 Kubernetes 结合使用App Mesh 是一种服务网格,让您能够轻松监控和控制服务。App Mesh 标准化服务的通信方式,为您提供端到端可见性,并有助于确保应用程序的高可用性。App Mesh 使您可以为应用程序中的每个服务提供一致的可见性和网络流量控制。您可以完成 App Mesh 中的 和 Kubernetes 入门AWS App Mesh教程,开始将 AWS AppMesh 用户指南 用于 Kubernetes。本教程建议您已部署一个要与 App Mesh 配合使用的现有 Kubernetes 集群和应用程序。

304

Page 313: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南使用 AWS CloudTrail 记录 Amazon EKS API 调用

使用 AWS CloudTrail 记录 Amazon EKS API 调用Amazon EKS 与 AWS CloudTrail 集成,后者是一项在 Amazon EKS 中提供用户、角色或 AWS 服务所采取操作的记录的服务。CloudTrail 会将 Amazon EKS 的所有 API 调用(包括来自 Amazon EKS 控制台的调用和对 Amazon EKS API 操作的代码调用)作为事件捕获。

如果您创建跟踪,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶(包括Amazon EKS的事件)。如果您不配置跟踪,则仍可在 CloudTrail 控制台的 Event history (事件历史记录) 中查看最新事件。利用CloudTrail 收集的信息,您可以确定向 Amazon EKS 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。

要了解 CloudTrail 的更多信息,请参阅 AWS CloudTrail User Guide。

CloudTrail 中的 Amazon EKS 信息创建账户时,将在 AWS 账户上启用 CloudTrail。当 Amazon EKS 中发生活动时,该活动将记录在CloudTrail 事件中,并与其他 AWS 服务事件一同保存在 Event history (事件历史记录) 中。您可以在 AWS账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件。

要持续记录 AWS 账户中的事件(包括 Amazon EKS 的事件),请创建跟踪。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪时,此跟踪应用于所有 AWS 区域。此跟踪在 AWS 分区中记录来自所有区域的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他 AWS 服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅下列内容:

• 创建跟踪概述• CloudTrail 支持的服务和集成• 为 配置 Amazon SNS 通知 CloudTrail• 从多个区域接收 CloudTrail 日志文件和从多个账户中接收 CloudTrail 日志文件

所有 Amazon EKS 操作均由 CloudTrail 记录下来并记载到 Amazon EKS API 参考 中。例如,对CreateCluster、ListClusters 和 DeleteCluster 部分的调用将在 CloudTrail 日志文件中生成条目。

每个事件或日志条目都包含有关生成请求的人员的信息。身份信息帮助您确定以下内容:

• 请求是使用根用户凭证还是 AWS Identity and Access Management (IAM) 用户凭证发出的。• 请求是使用角色还是联合身份用户的临时安全凭证发出的。• 请求是否由其他 AWS 服务发出。

有关更多信息,请参阅 CloudTrail userIdentity 元素。

了解 Amazon EKS 日志文件条目跟踪是一种配置,可用于将事件作为日志文件传送到您指定的 Amazon S3 存储桶。CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪,因此它们不会以任何特定顺序显示。

下面的示例显示一个 CloudTrail 日志条目,该条目演示 CreateCluster 操作。

{

305

Page 314: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南了解 Amazon EKS 日志文件条目

"eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::111122223333:user/username", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "username" }, "eventTime": "2018-05-28T19:16:43Z", "eventSource": "eks.amazonaws.com", "eventName": "CreateCluster", "awsRegion": "<region-code>", "sourceIPAddress": "205.251.233.178", "userAgent": "PostmanRuntime/6.4.0", "requestParameters": { "resourcesVpcConfig": { "subnetIds": [ "subnet-a670c2df", "subnet-4f8c5004" ] }, "roleArn": "arn:aws:iam::111122223333:role/AWSServiceRoleForAmazonEKS-CAC1G1VH3ZKZ", "clusterName": "test" }, "responseElements": { "cluster": { "clusterName": "test", "status": "CREATING", "createdAt": 1527535003.208, "certificateAuthority": {}, "arn": "arn:aws:eks:<region-code>:111122223333:cluster/test", "roleArn": "arn:aws:iam::111122223333:role/AWSServiceRoleForAmazonEKS-CAC1G1VH3ZKZ", "version": "1.10", "resourcesVpcConfig": { "securityGroupIds": [], "vpcId": "vpc-21277358", "subnetIds": [ "subnet-a670c2df", "subnet-4f8c5004" ] } } }, "requestID": "a7a0735d-62ab-11e8-9f79-81ce5b2b7d37", "eventID": "eab22523-174a-499c-9dd6-91e7be3ff8e3", "readOnly": false, "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

Amazon EKS 服务相关角色的日志条目Amazon EKS 服务相关角色对 AWS 资源进行 API 调用。您将看到由 Amazon EKS 服务相关角色进行的调用的 CloudTrail 日志条目以及 username: AWSServiceRoleForAmazonEKS 和 username:AWSServiceRoleForAmazonEKSNodegroup。有关 Amazon EKS 和服务相关角色的更多信息,请参阅对Amazon EKS 使用服务相关角色 (p. 276)。

以下示例显示了一个 CloudTrail 日志条目,该条目演示 AWSServiceRoleForAmazonEKSNodegroup 服务相关角色执行的 DeleteInstanceProfile 操作(在 sessionContext 中注明)。

{ "eventVersion": "1.05",

306

Page 315: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Amazon EKS 上的 AWS Outposts

"userIdentity": { "type": "AssumedRole", "principalId": "AROA3WHGPEZ7SJ2CW55C5:EKS", "arn": "arn:aws:sts::111122223333:assumed-role/AWSServiceRoleForAmazonEKSNodegroup/EKS", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROA3WHGPEZ7SJ2CW55C5", "arn": "arn:aws:iam::111122223333:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup", "accountId": "111122223333", "userName": "AWSServiceRoleForAmazonEKSNodegroup" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2020-02-26T00:56:33Z" } }, "invokedBy": "eks-nodegroup.amazonaws.com" }, "eventTime": "2020-02-26T00:56:34Z", "eventSource": "iam.amazonaws.com", "eventName": "DeleteInstanceProfile", "awsRegion": "us-east-1", "sourceIPAddress": "eks-nodegroup.amazonaws.com", "userAgent": "eks-nodegroup.amazonaws.com", "requestParameters": { "instanceProfileName": "eks-11111111-2222-3333-4444-abcdef123456" }, "responseElements": null, "requestID": "11111111-2222-3333-4444-abcdef123456", "eventID": "11111111-2222-3333-4444-abcdef123456", "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

Amazon EKS 上的 AWS Outposts从具有 Amazon EKS 平台版本 eks.5 的 Kubernetes 版本 1.14.8 和具有 Amazon EKS 平台版本 eks.6 的Kubernetes 版本 1.13.12 开始,您可以在 AWS Outposts 上创建和运行 Amazon EKS 节点。AWS Outposts在本地设施中支持本地 AWS 服务、基础设施和操作模型。在 AWS Outposts 环境中,您可以使用与 AWS 云中所用相同的 AWS APIs、工具和基础设施。Amazon EKS 上的 AWS Outposts 节点非常适合需要靠近本地数据和应用程序运行的低延迟工作负载。有关 AWS Outposts 的更多信息,请参阅 AWS Outposts 用户指南。

Prerequisites以下是使用 Amazon EKS 上的 AWS Outposts 节点的先决条件:

• 您必须已在本地数据中心中安装并配置了 Outpost。• Outpost 与其 AWS 区域之间必须具有可靠的网络连接。• Outpost 的 AWS 区域必须支持 Amazon EKS。有关受支持区域的列表,请参阅 Amazon EKS 中的 服务终

端节点AWS General Reference。

307

Page 316: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Considerations

Considerations• AWS Identity and Access Management、应用程序负载均衡器、网络负载均衡器、传统负载均衡器 和

Amazon Route 53 在 AWS 区域中运行,而不是在 Outpost 中。这将增加服务和容器之间的延迟。• AWS Fargate 在 AWS Outposts 上不可用。• 托管节点组无法部署到 Outpost 上的节点。• 您不能在 AWS Outposts 区域中使用中国

网络连接注意事项以下是 Amazon EKS AWS Outposts 的网络连接注意事项:

• 如果 Outpost 与其 AWS 区域之间的网络连接丢失,节点将继续运行。但是,在恢复连接之前,您无法创建新节点或对现有部署执行新操作。如果实例出现故障,则不会自动替换该实例。Kubernetes 控制层面在区域中运行,且由与 可用区 的连接断开等原因导致的检测信号丢失可能导致故障。失败的检测信号将导致Outpost 上的 Pod 被标记为不正常,最终,节点状态将超时,Pod 将被标记为移出。有关更多信息,请参阅 Kubernetes 文档中的节点控制器。

• 建议在 Outpost 与其 AWS 区域之间提供可靠且高度可用的低延迟连接。

在 Outpost 上创建 Amazon EKS 节点在 Outpost 上创建 Amazon EKS 节点类似于在 AWS 云中创建 Amazon EKS 节点。在 Outpost 上创建Amazon EKS 节点时,您必须指定与您的 Outpost 关联的子网。

Outpost 是 AWS 区域的扩展,您可以在账户中扩展 VPC 以跨越多个 可用区 和任何关联的 Outpost 位置。在配置 Outpost 时,您将一个子网与它相关联,以将区域 VPC 环境扩展到本地设施。Outpost 上的实例显示为区域 VPC 的一部分,类似于具有关联子网的可用区。

308

Page 317: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南在 Outpost 上创建 Amazon EKS 节点

要使用 AWS CLI 在 Outpost 上创建 Amazon EKS 节点,请指定与您的 Outpost 关联的安全组和子网。

在 Outpost 上创建 Amazon EKS 节点组

1. 创建 VPC。

aws ec2 create-vpc --cidr-block <10.0.0.0/16>

2. 创建 Outpost 子网。必须为要为 Outpost 创建的子网指定 --outpost-arn 参数。(此步骤不同于AWS Outposts。)

aws ec2 create-subnet --vpc-id <vpc-xxxxxxxx> --cidr-block <10.0.3.0/24> \ –-outpost-arn arn:aws:outposts:<us-west-2>:123456789012:outpost/<op-xxxxxxxxxxxxxxxx>

3. 创建一个集群,指定 Outpost 的子网。(此步骤不同于 AWS Outposts。)

aws eks --region <region-code> create-cluster --name <eks-outpost> --role-arn \ arn:aws:iam::123456789012:role/<eks-service-role-AWSServiceRoleForAmazonEKS-OUTPOST> \ --resources-vpc-config subnetIds=<subnet-xxxxxxxx>,<subnet-yyyyyyyy>,securityGroupIds=<sg-xxxxxxxx>

4. 创建节点组。指定在 Outpost 上可用的实例类型。(此步骤不同于 AWS Outposts。)

eksctl create nodegroup --cluster <eks-outpost> \ --version auto \ --name <outpost-nodes> \ --node-type <c5.large> \ --node-ami auto \

309

Page 318: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南将 App Mesh 与 Kubernetes 结合使用

--nodes 3 \ --nodes-min 1 \ --nodes-max 4

5. 部署应用程序和服务。

kubectl apply -f kubernetes/deployment.yaml

将 App Mesh 与 Kubernetes 结合使用App Mesh 是一种服务网格,让您能够轻松监控和控制服务。App Mesh 标准化服务的通信方式,为您提供端到端可见性,并有助于确保应用程序的高可用性。App Mesh 使您可以为应用程序中的每个服务提供一致的可见性和网络流量控制。您可以完成 App Mesh 中的 和 Kubernetes 入门AWS App Mesh教程,开始将 AWS AppMesh 用户指南 用于 Kubernetes。本教程建议您将现有服务部署到要使用 App Mesh 的 Kubernetes。

Amazon EKS 本地区域上的AWS本地扩展区是地理上靠近用户的 AWS 区域的扩展。AWS本地扩展区有自己的 Internet 连接并支持 AWSDirect Connect。在本地扩展区中创建的资源可以为本地用户提供低延迟的通信。有关更多信息,请参阅本地扩展区。

Amazon EKS 支持从作为集群一部分的本地区域运行某些基础设施,包括 Amazon EC2 实例、Amazon EBS卷和 应用程序负载均衡器。使用本地区域基础设施作为 Amazon EKS 集群的一部分时,有几个注意事项。

Kubernetes 版本

只有运行 Kubernetes 版本 1.17 及更高版本的 Amazon EKS 集群才能使用本地区域计算资源。

Nodes

Amazon EKS 不支持在 AWS 本地扩展区中创建托管节点组。您必须使用 Amazon EC2 API 或 AWSCloudFormation 创建自行管理的节点。 不使用 eksctl 在本地区域中创建集群或节点。有关详细信息和选项,请按照自管理节点 (p. 97)中的说明操作。

网络架构

托管 Kubernetes 控制层面始终在 Amazon EKS 区域中运行。AWS托管 Kubernetes 控制层面无法在本地扩展区中运行。Amazon EKS由于本地区域显示为 VPC 内的子网,Kubernetes 查看您的本地区域资源作为该子网的一部分。

Kubernetes 集群使用 Amazon EKS 托管的Amazon EC2弹性网络接口AWS与您在 Amazon EKS 区域或本地区域中运行的 实例通信。要了解有关 Amazon EKS 网络架构的更多信息,请参阅Amazon EKS 联网 (p. 169)。

与区域子网不同,Amazon EKS 无法将网络接口放入您的本地区域子网。这意味着,在创建集群时,您不能指定本地区域子网。

创建集群后,使用 Amazon EKS 集群名称标记您的本地区域子网。有关更多信息,请参阅子网添加标签要求 (p. 175)。然后,您可以将自行管理的节点部署到本地区域子网,并且这些节点将能够加入您的 Amazon EKS集群。

Deep Learning 容器AWS Deep Learning Containers 是 TensorFlow 和 Amazon EKS (Amazon Elastic Container Service)上 Amazon ECS 中训练和处理模型的一组 Docker 映像。Deep Learning Containers 提供具有

310

Page 319: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Deep Learning 容器

TensorFlow、Nvidia CUDA(适用于 GPU 实例)和 Intel MKL(适用于 CPU 实例)库的优化环境,并且这些环境在Amazon ECR 中可用。

要开始使用 AWS 上的 Amazon EKS Deep Learning Containers,请参阅 开发人员指南AWS 中的 AmazonEKS 上的 Deep Learning Containers。AWS Deep Learning AMI

311

Page 320: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南容量不足

Amazon EKS 故障排除本章介绍使用 Amazon EKS 时可能遇到的一些常见错误以及相应的错误处理方式。

容量不足如果您在尝试创建 Amazon EKS 集群时收到以下错误,则表示所指定的可用区之一的容量不足,无法支持集群。

Cannot create cluster 'example-cluster' because region-1d, the targeted ✓✓✓,does not currently have sufficient capacity to support the cluster. Retry andchoose from these ✓✓✓s: region-1a, region-1b, region-1c

在集群 VPC 中使用此错误消息所返回的可用区中托管的子网重新尝试创建集群。

节点无法加入集群有几个常见原因会阻止节点加入集群:

• 文件没有适用于您的节点的正确 aws-auth-cm.yaml 角色 IAM。ARN确保在 IAM 文件中指定了节点ARN 角色 ARN(而不是实例配置文件 aws-auth-cm.yaml)。有关更多信息,请参阅启动自管理 AmazonLinux 节点 (p. 98)。

• 节点 模板中的 ClusterNameAWS CloudFormation 与您希望节点加入的集群的名称不完全匹配。将不正确的值传递到此字段会导致节点的 /var/lib/kubelet/kubeconfig 文件配置不正确,并且节点不会加入集群。

• 节点不会标记为集群拥有。您的节点必须应用了以下标签,其中 <cluster-name> 替换为集群的名称。

Key Value

kubernetes.io/cluster/<cluster-name> owned

• 这些节点可能无法使用公有 IP 地址访问集群。确保向部署在公有子网中的节点分配了公有 IP 地址。如果没有,您可以在节点启动后为其关联弹性 IP 地址。有关更多信息,请参阅将弹性 IP 地址与正在运行的实例或网络接口关联。如果公有子网未设置为自动将公有 IP 地址分配给部署到其中的实例,我们建议启用该设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性。如果节点部署到私有子网,则该子网必须具有指向分配了公有 IP 地址的 NAT 网关的路由。

• 未为您的账户启用您要将节点部署到的区域的 STS 终端节点。要启用该区域,请参阅在 AWS 区域中激活和停用 AWS STS。

未经授权或访问被拒绝 (kubectl)如果您在运行 kubectl 命令时收到以下错误之一,则表示未为 正确配置 kubectl ,或者您使用的 AmazonEKS 用户或角色凭证未映射到在 IAM 集群中具有足够权限的 Kubernetes RBAC 用户。Amazon EKS

• could not get token: AccessDenied: Access denied

• error: You must be logged in to the server (Unauthorized)

• error: the server doesn't have a resource type "svc"

312

Page 321: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南未找到 aws-iam-authenticator

这可能是因为集群是使用一组 AWS 凭证(来自 IAM 用户或角色)创建的,而 kubectl 使用的是另一组凭证。

创建 Amazon EKS 集群后,创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(具有 system:masters 权限)。最初,仅该 IAM 用户可以使用 kubectl 调用 Kubernetes API 服务器。有关更多信息,请参阅 管理集群的用户或 IAM 角色 (p. 240)。如果您使用控制台创建集群,则必须确保在集群上运行 IAM AWS 命令时相同的 kubectl 用户凭证位于 开发工具包凭证链中。

如果您安装和配置 AWS CLI,则可以为您的用户配置 IAM 凭证。有关更多信息,请参阅 AWS CLI 中的配置AWS Command Line Interface 用户指南。

如果您担任创建 Amazon EKS 集群的角色,则必须确保将 kubectl 配置为代入同一角色。使用以下命令更新您的 kubeconfig 文件以使用 IAM 角色。有关更多信息,请参阅为 Amazon EKS 创建kubeconfig (p. 236)。

aws --region <region-code> eks update-kubeconfig --name <cluster_name> --role-arn arn:aws:iam::<aws_account_id>:role/<role_name>

要将 IAM 用户映射到 Kubernetes RBAC 用户,请参阅 管理集群的用户或 IAM 角色 (p. 240) 或观看有关如何映射用户的视频。

未找到 aws-iam-authenticator如果您收到错误 "aws-iam-authenticator": executable file not found in $PATH,则表示未为 配置 kubectl Amazon EKS。有关更多信息,请参阅安装aws-iam-authenticator (p. 232)。

Note

如果安装了 AWS CLI 版本 1.16.156 或更高版本,则不需要 aws-iam-authenticator。

hostname doesn't match系统的 Python 版本必须为 2.7.9 或更高版本。否则,在 AWS CLI 调用 Amazon EKS 时会收到 hostnamedoesn't match 错误。有关更多信息,请参阅“Python 请求常见问题”中的什么是“主机名不匹配”错误?。

getsockopt: no route to hostDocker 在 Amazon EKS 集群中的 172.17.0.0/16 CIDR 范围内运行。我们建议您的集群的 VPC 子网不重叠此范围。否则,您将收到以下错误:

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host

托管节点组错误如果您在 AWS 管理控制台中收到“Instances failed to join the kubernetes cluster (实例无法加入 kubernetes集群)”错误,请确保已启用集群的私有终端节点访问,或者您已正确配置 CIDR 块以用于公有终端节点访问。有关更多信息,请参阅Amazon EKS 集群终端节点访问控制 (p. 48)。

如果您的托管节点组遇到运行状况问题,则 Amazon EKS 返回错误消息以帮助诊断问题。以下错误消息及其相关描述如下所示。

313

Page 322: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南托管节点组错误

• AccessDenied: 或一个或多个托管节点无法对 Kubernetes 集群 API 服务器进行身份验证或授权。AmazonEKS有关解决此错误的更多信息,请参阅修复了托管节点组的 AccessDenied 错误 (p. 314)。

• AutoScalingGroupNotFound: 我们找不到与托管节点组关联的 Auto Scaling 组。您可以重新创建具有相同设置的 Auto Scaling 组进行恢复。

• ClusterUnreachable:Amazon EKS 或一个或多个托管节点无法与 Kubernetes 集群 API 服务器通信。如果网络中断或 API 服务器超时处理请求,则可能会发生这种情况。

• Ec2SecurityGroupNotFound: 我们无法找到集群的集群安全组。您必须重新创建集群。• Ec2SecurityGroupDeletionFailure: 我们无法删除托管节点组的远程访问安全组。从安全组中删除所有依赖

关系。• Ec2LaunchTemplateNotFound: 我们无法找到托管节点组的 Amazon EC2 启动模板。您可以重新创建具有

相同设置的启动模板进行恢复。• Ec2LaunchTemplateVersionMismatch: 托管节点组的 Amazon EC2 启动模板版本与 Amazon EKS 创建的

版本不匹配。您可以恢复到 Amazon EKS 创建用于进行恢复的版本。• IamInstanceProfileNotFound: 我们无法找到您的托管节点组的 IAM 实例配置文件。您可以重新创建具有相

同设置的实例配置文件进行恢复。• IamNodeRoleNotFound: 我们无法为您的托管节点组找到 IAM 角色。您可以重新创建具有相同设置的 IAM

角色进行恢复。• AsgInstanceLaunchFailures: 您的 Auto Scaling 组在尝试启动实例时出现故障。• NodeCreationFailure: 您启动的实例无法向 Amazon EKS 集群注册。此故障的常见原因是节点 IAM 角

色 (p. 281)权限不足或节点缺少出站 Internet 访问。您的节点必须能够使用公有 IP 地址访问 Internet 才能正常工作。有关更多信息,请参阅VPC IP 寻址 (p. 174)。您的节点还必须具有对 Internet 开放的端口。有关更多信息,请参阅Amazon EKS 安全组注意事项 (p. 176)。

• InstanceLimitExceeded: 您的 AWS 账户无法启动指定实例类型的任何其他实例。您可以请求提高Amazon EC2 实例限制以进行恢复。

• InsufficientFreeAddresses: 与您的托管节点组关联的一个或多个子网没有足够的可用 IP 地址供新节点使用。

• InternalFailure: 这些错误通常由 Amazon EKS 服务器端问题导致。

修复了托管节点组的 AccessDenied 错误在对托管节点组执行操作时出现 AccessDenied 错误的最常见原因是缺少 eks:node-managerClusterRole 或 ClusterRoleBinding。在开始使用托管节点组的过程中,Amazon EKS 会在您的集群中设置这些资源,这些资源是管理节点组所必需的。

可能会随着时间的推移而更改,但它应类似于以下示例:ClusterRole

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: eks:node-managerrules:- apiGroups: - '' resources: - pods verbs: - get - list - watch - delete- apiGroups: - '' resources: - nodes verbs:

314

Page 323: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南托管节点组错误

- get - list - watch - patch- apiGroups: - '' resources: - pods/eviction verbs: - create

可能会随着时间的推移而更改,但它应类似于以下示例:ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: eks:node-managerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-managersubjects:- apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

验证 eks:node-manager ClusterRole 是否存在。

kubectl describe clusterrole eks:node-manager

如果存在,请将输出与上一个 ClusterRole 示例进行比较。

验证 eks:node-manager ClusterRoleBinding 是否存在。

kubectl describe clusterrolebinding eks:node-manager

如果存在,请将输出与上一个 ClusterRoleBinding 示例进行比较。

如果您在请求托管节点组操作时发现 ClusterRole 或 ClusterRoleBinding 缺失或损坏是导致AcessDenied 错误的原因,则可以还原它们。将以下内容保存到名为 eks-node-manager-role.yaml 的文件中。

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: eks:node-managerrules:- apiGroups: - '' resources: - pods verbs: - get - list - watch - delete- apiGroups: - '' resources:

315

Page 324: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南CNI 日志收集工具

- nodes verbs: - get - list - watch - patch- apiGroups: - '' resources: - pods/eviction verbs: - create---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: eks:node-managerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-managersubjects:- apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

应用文件。

kubectl apply -f eks-node-manager-role.yaml

重试节点组操作,查看这是否已解决您的问题。

CNI 日志收集工具适用于 Kubernetes 的 Amazon VPC CNI 插件有自己的故障排除脚本(在节点上的 /opt/cni/bin/aws-cni-support.sh 提供),您可以使用该脚本来收集诊断日志以支持案例和一般故障排除。

使用以下命令在节点上运行脚本:

sudo bash /opt/cni/bin/aws-cni-support.sh

Note

如果脚本在该位置不存在,CNI 容器将无法运行。可以使用以下命令手动下载并运行脚本:

curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.shsudo bash eks-log-collector.sh

该脚本收集以下诊断信息。您已部署的 CNI 版本可以早于脚本版本。

This is version 0.6.1. New versions can be found at https://github.com/awslabs/amazon-eks-ami

Trying to collect common operating system logs... Trying to collect kernel logs... Trying to collect mount points and volume information...

316

Page 325: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南容器运行时网络未准备就绪

Trying to collect SELinux status... Trying to collect iptables information... Trying to collect installed packages... Trying to collect active system services... Trying to collect Docker daemon information... Trying to collect kubelet information... Trying to collect L-IPAMD information... Trying to collect sysctls information... Trying to collect networking information... Trying to collect CNI configuration information... Trying to collect running Docker containers and gather container data... Trying to collect Docker daemon logs... Trying to archive gathered information...

Done... your bundled logs are located in /var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

诊断信息收集并存储在 中

/var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

容器运行时网络未准备就绪您可能会收到类似于以下内容的 Container runtime network not ready 错误和授权错误:

4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized

这些错误最可能与 AWS IAM 身份验证器配置映射未应用于节点有关。配置映射提供system:bootstrappers 和 system:nodes Kubernetes RBAC 权限供节点注册到集群。有关更多信息,请参阅 的自行管理节点选项卡上的启用节点以加入集群启动自管理 Amazon Linux 节点 (p. 98)。确保您在配置映射中指定实例角色的 Role ARN (角色 ARN) ,而不是 Instance Profile ARN (实例配置文件 ARN)。

如果身份验证器包含 之外的路径,则身份验证器无法识别角色 ARN/,如以下示例所示:

arn:aws:iam::<111122223333>:role/<development/apps/prod-iam-role-NodeInstanceRole-621LVEXAMPLE>

在配置映射中指定包含路径而非 / 的 Role ARN (角色 ARN) 时,必须删除该路径。将以上 ARN 指定为以下内容:

arn:aws:iam::<111122223333>:role/<prod-iam-role-NodeInstanceRole-621LVEXAMPLE>

TLS 握手超时当节点无法建立与公有 API 服务器终端节点的连接时,您可能会遇到类似于以下错误的错误。

317

Page 326: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南InvalidClientTokenId

server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""

kubelet 进程将持续重新生成并测试 API 服务器终端节点。在控制层面中执行集群滚动更新(例如配置更改或版本更新)的任何过程中,也可能临时发生此错误。

要解决此问题,请检查路由表和安全组,以确保来自节点的流量可以到达公有终端节点。

InvalidClientTokenId如果您对部署到 IAM 区域中集群的 Pod 或守护程序集的服务账户使用 中国 角色,并且未在规范中设置AWS_DEFAULT_REGION 环境变量,则 Pod 或守护程序集可能会收到以下错误:

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

要解决此问题,您需要将 AWS_DEFAULT_REGION 环境变量添加到您的 Pod 或 daemonset 规范中,如以下示例 Pod 规范中所示。

apiVersion: v1kind: Podmetadata: name: envar-demo labels: purpose: demonstrate-envarsspec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "<region-code>"

IAM 问题排查本主题介绍将 Amazon EKS 与 IAM 结合使用时可能遇到的一些常见错误以及相应的错误处理方式。

AccessDeniedException如果您在调用 AWS API 操作时收到 AccessDeniedException,则表明您使用的 AWS Identity andAccess Management (IAM) 用户或角色凭证具有发起该调用所需的权限。

An error occurred (AccessDeniedException) when calling the DescribeCluster operation: User: arn:aws:iam::<111122223333>:user/<user_name> is not authorized to perform: eks:DescribeCluster on resource: arn:aws:eks<:region>:<111122223333>:cluster/<cluster_name>

在上面的示例消息中,用户没有调用 Amazon EKS DescribeCluster API 操作的权限。要为用户提供Amazon EKS 管理员权限,请参阅Amazon EKS 基于身份的策略示例 (p. 273)。

有关 IAM 的更多一般信息,请参阅 中的使用策略控制访问。IAM 用户指南

318

Page 327: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南aws-auth ConfigMap 不授予对集群的访问权限

aws-auth ConfigMap 不授予对集群的访问权限AWS IAM Authenticator 不允许在配置映射中使用角色 ARN 中的路径。因此,在指定 rolearn 之前,请删除路径。例如,将 arn:aws:iam::<123456789012>:role/<team>/<developers>/<eks-admin>更改为 arn:aws:iam::<123456789012>:role/<eks-admin>。

我无权执行 iam:PassRole如果您收到错误消息,提示您无权执行 iam:PassRole 操作,则必须联系您的管理员寻求帮助。您的管理员是指为您提供用户名和密码的那个人。请求那个人更新您的策略,以便允许您将角色传递给 AmazonEKS。

有些 AWS 服务允许您将现有角色传递到该服务,而不是创建新服务角色或服务相关角色。为此,您必须具有将角色传递到服务的权限。

当名为 marymajor 的 IAM 用户尝试使用控制台在 Amazon EKS 中执行操作时,会发生以下示例错误。但是,服务必须具有服务角色所授予的权限才可执行操作。Mary 不具有将角色传递到服务的权限。

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

在这种情况下,Mary 请求她的管理员来更新其策略,以允许她执行 iam:PassRole 操作。

我想要查看我的访问密钥创建 IAM 用户访问密钥之后,您可以随时查看您的访问密钥 ID。但是,您无法再查看您的秘密访问密钥。如果您丢失了私有密钥,则必须创建一个新的访问密钥对。

访问密钥包含两部分:访问密钥 ID(例如 AKIAIOSFODNN7EXAMPLE)和秘密访问密钥(例如wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。与用户名和密码一样,您必须同时使用访问密钥ID 和秘密访问密钥对请求执行身份验证。像对用户名和密码一样,安全地管理访问密钥。

Important

请不要向第三方提供访问密钥,甚至为了帮助找到您的规范用户 ID 也不能提供。如果您这样做,可能会向某人提供对您的账户的永久访问权限。

当您创建访问密钥对时,系统会提示您将访问密钥 ID 和秘密访问密钥保存在一个安全位置。秘密访问密钥仅在您创建它时可用。如果您丢失了秘密访问密钥,则必须向您的 IAM 用户添加新的访问密钥。您最多可拥有两个访问密钥。如果您已有两个密钥,则必须删除一个密钥对,然后再创建新的密钥。要查看说明,请参阅IAM 用户指南 中的管理访问密钥。

我是管理员,并且想要允许其他人访问 Amazon EKS要允许其他人访问 Amazon EKS,您必须为需要访问权限的人员或应用程序创建 IAM 实体(用户或角色)。他们(它们)将使用该实体的凭证访问 AWS。然后,您必须将策略附加到实体,以便在 Amazon EKS 中为他们(它们)授予正确的权限。

要立即开始使用,请参阅 IAM 用户指南 中的创建您的第一个 IAM 委托用户和组。

我希望允许我的 AWS 账户之外的人员访问我的Amazon EKS 资源您可以创建一个角色,以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖,可以代入角色。对于支持基于资源的策略或访问控制列表 (ACL) 的服务,您可以使用这些策略向人员授予对您的资源的访问权。

319

Page 328: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南我希望允许我的 AWS 账户之外的人员访问我的 Amazon EKS 资源

要了解更多信息,请参阅以下内容:

• 要了解 Amazon EKS 是否支持这些功能,请参阅Amazon EKS 如何与 IAM 协同工作 (p. 271)。• 要了解如何向您拥有的 AWS 账户中的资源提供访问权限,请参阅 IAM 用户指南 中的对您拥有的 AWS 账

户中的 IAM 用户提供访问权限。• 要了解如何向第三方 AWS 账户提供对您的资源的访问权限,请参阅 IAM 用户指南 中的向第三方拥有的

AWS 账户提供访问权限。• 要了解如何通过联合身份验证提供访问权限,请参阅 IAM 用户指南 中的向经过外部身份验证的用户(联合

身份验证)提供访问权限。• 要了解使用角色和基于资源的策略进行跨账户访问之间的差别,请参阅 IAM 用户指南 中的 IAM 角色和基

于资源的策略有何不同。

320

Page 329: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南管理工具

相关项目这些开源项目扩展了在 AWS 上运行的 Kubernetes 集群的功能,包括 Amazon EKS 管理的集群。

管理工具Amazon EKS 和 Kubernetes 集群的相关管理工具。

eksctleksctl 是一个用于在 Amazon EKS 上创建集群的简单 CLI 工具。

• 项目 URL:https://eksctl.io/• 项目文档:https://eksctl.io/• AWS 开源博客:eksctl:使用一个命令的 Amazon EKS 集群

适用于 Kubernetes 的 AWS 控制器AWS 适用于 Kubernetes 的控制器允许您直接从 Kubernetes 集群创建和管理 AWS 资源。

• 项目 URL:https://aws.github.io/aws-controllers-k8s/• AWS 开源博客:Kubernetes 的 AWS 服务运算符现已推出

Flux CD (Flux CD)Flux 是一种可让您使用 Git 管理集群配置的工具。它使用集群中的运算符在 Kubernetes 中触发部署。有关运算符的更多信息,请参阅 上的 Awesome Operators in the AnwiseGitHub。

• 项目 URL:https://fluxcd.io/• 项目文档:https://docs.fluxcd.io/

适用于 Kubernetes 的 CDK适用于 Kubernetes 的 CDK (cdk8s) 可让您使用熟悉的编程语言定义 Kubernetes 应用程序和组件。cdk8s 应用程序合成为可应用于任何 Kubernetes 集群的标准 Kubernetes 清单。

• 项目 URL: https://cdk8s.io/• 项目文档:https://github.com/awslabs/cdk8s/tree/master/docs/getting-started• AWS 容器博客: cdk8s+ 简介: 适用于 Kubernetes 对象的目的驱动型APIs

NetworkingAmazon EKS 和 Kubernetes 集群的相关联网项目。

321

Page 330: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Kubernetes 的 Amazon VPC CNI 插件

Kubernetes 的 Amazon VPC CNI 插件Amazon EKS 支持通过适用于 Kubernetes 的 Amazon VPC CNI 插件进行本机 VPC 联网。使用此 CNI 插件允许 Kubernetes Pod 在 Pod 内具有与其在 VPC 网络上相同的 IP 地址。有关更多信息,请参阅 Pod 联网(CNI) (p. 178)和CNI 配置变量 (p. 196)。

• 项目 URL:https://github.com/aws/amazon-vpc-cni-k8s• 项目文档:https://github.com/aws/amazon-vpc-cni-k8s/blob/master/README.md

Kubernetes 的 AWS 应用程序负载均衡器 (ALB) 入口控制器AWS ALB 入口控制器通过配置 应用程序负载均衡器 满足 Kubernetes 入口资源的要求。

• 项目 URL:https://github.com/kubernetes-sigs/aws-alb-ingress-controller• 项目文档:https://github.com/kubernetes-sigs/aws-alb-ingress-controller/tree/master/docs• AWS 开源博客: 使用 AWS ALB 入口控制器的 Kubernetes 入口

ExternalDNSExternalDNS 将公开的 Kubernetes 服务和入口与 DNS 提供商同步,包括 Amazon Route 53 和 AWS ServiceDiscovery。

• 项目 URL:https://github.com/kubernetes-incubator/external-dns• 项目文档:https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/aws.md

App Mesh 控制器适用于 Kubernetes 的 App Mesh 控制器有助于管理集群的 App Mesh。控制器允许您使用集群中的自定义资源管理服务网格,并管理向 Pod 注入网络代理附加以启用网格。

• 项目 URL:https://github.com/aws/aws-app-mesh-controller-for-k8s• 项目文档:https://docs.aws.amazon.com/app-mesh/latest/userguide/mesh-k8s-integration.html• AWS 博客: 和 App Mesh 入门 Amazon EKS

SecurityAmazon EKS 和 Kubernetes 集群的相关安全项目。

AWS IAM 身份验证器一种使用 AWS IAM 凭证向 Kubernetes 集群进行身份验证的工具(如果您未使用 AWS CLI 版本 1.16.156或更高版本)。有关更多信息,请参阅安装aws-iam-authenticator (p. 232)。

• 项目 URL:https://github.com/kubernetes-sigs/aws-iam-authenticator• 项目文档:https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md• AWS 开源博客: 将 AWS IAM 身份验证器部署到 kops

322

Page 331: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南机器学习

机器学习Amazon EKS 和 Kubernetes 集群的相关机器学习项目。

KubeflowKubernetes 的机器学习工具包。

• 项目 URL:https://www.kubeflow.org/• 项目文档:https://www.kubeflow.org/docs/• AWS 开源博客: 上的 Kubeflow Amazon EKS

Auto ScalingAmazon EKS 和 Kubernetes 集群的相关 Auto Scaling 项目。

Cluster AutoscalerCluster Autoscaler 是一个根据 CPU 和内存压力自动调整 Kubernetes 集群大小的工具。

• 项目 URL:https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler• 项目文档:https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/

README.md• Amazon EKS 研讨会:https://eksworkshop.com/scaling/deploy_ca/

EscalatorEscalator 是 Kubernetes 的优化了批处理或作业的水平 Autoscaler。

• 项目 URL:https://github.com/atlassian/escalator• 项目文档:https://github.com/atlassian/escalator/blob/master/docs/README.md

MonitoringAmazon EKS 和 Kubernetes 集群的相关监控项目。

PrometheusPrometheus 是一个开源系统监控和警报工具包。

• 项目 URL:https://prometheus.io/• 项目文档:https://prometheus.io/docs/introduction/overview/• Amazon EKS 研讨会:https://eksworkshop.com/intermediate/240_monitoring/

持续集成/持续部署Amazon EKS 和 Kubernetes 集群的相关 CI/CD 项目。

323

Page 332: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南Jenkins X

Jenkins XAmazon EKS 和 Kubernetes 集群上现代云应用程序的 CI/CD 解决方案。

• 项目 URL:https://jenkins-x.io/• 项目文档:https://jenkins-x.io/docs/

324

Page 333: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Amazon EKS 的文档历史记录下表描述了 Amazon EKS 用户指南的主要更新和新功能。我们还经常更新文档来处理您发送给我们的反馈意见。

update-history-change update-history-description update-history-date

跨多个入口共享 ALB 您现在可以跨多个 Kubernetes 入口共享 AWS 应用程序负载均衡器。过去,您必须为每个传入部署单独的 应用程序负载均衡器。

October 23, 2020

NLB IP 目标支持 您现在可以使用 IP 目标部署网络负载均衡器 (NLB)。这使您能够使用 NLB 来对 Fargate Pod 以及直接对 Amazon EC2 节点上运行的Pod 进行网络流量负载均衡。

October 23, 2020

Kubernetes 版本 1.18 增加了新集群和版本升级的Kubernetes 版本 1.18 支持。

October 13, 2020

为 Kubernetes 服务 IP 地址分配指定自定义 CIDR 块。

您现在可以指定 Kubernetes 将从中分配服务 IP 地址的自定义CIDR 块。

September 29, 2020

将安全组分配给各个 Pod 您现在可以将不同的安全组与许多Amazon EC2 实例类型上运行的某些单独 Pod 关联。

September 9, 2020

在节点上部署 Tottlerocket 您现在可以部署运行 Bottlerocket的节点。

August 31, 2020

托管节点组启动模板和自定义AMI

您现在可以使用 Amazon EC2 启动模板部署托管节点组。启动模板可以指定自定义 AMI (如果您选择)。

August 17, 2020

对 AWS Fargate 的 EFS 支持 现在可以将 Amazon EFS 与 AWSFargate 一起使用。

August 17, 2020

启动 Arm 节点的能力已正式发布 您现在可以在托管和自管理节点组中启动 Arm 节点。

August 17, 2020

Amazon EKS 平台版本更新 具有安全修复和增强功能的新平台版本,包括在将 NLB 与Kubernetes 1.15 或更高版本一起使用时,对 LoadBalancer 类型的服务的 UDP 支持。有关更多信息,请参阅 上的 Allow UDP forAWS NLB (允许适用于 AWS NLB的 UDP)GitHub 问题。

August 12, 2020

Amazon EKS 区域扩展 (p. 325) Amazon EKS 现已在非洲(开普敦) (af-south-1) 和 欧洲(米兰) (eu-south-1) 区域中可用。

August 6, 2020

325

Page 334: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Fargate 使用情况指标 AWS Fargate 提供了 CloudWatch使用情况指标,这些指标可让您了解 Fargate 按需资源的账户使用情况。

August 3, 2020

Kubernetes 版本 1.17 增加了新集群和版本升级的Kubernetes 版本 1.17 支持。

July 10, 2020

使用适用于 Kubernetes 的 AppMesh 控制器,在 Kubernetes 中创建和管理 App Mesh 资源

您可以在 Kubernetes 中创建和管理 App Mesh 资源。控制器还会自动在您部署的 pod 中注入Envoy 代理和 init 容器。

June 18, 2020

Amazon EKS 现在支持 AmazonEC2 Inf1 节点

您可以向集群添加 Amazon EC2Inf1 节点。

June 4, 2020

Amazon EKS 区域扩展 (p. 325) Amazon EKS 现已在AWSGovCloud(美国东部) (us-gov-east-1) 和 AWS GovCloud(US-West) (us-gov-west-1) 区域中可用。

May 13, 2020

Amazon EKS 上已弃用Kubernetes 1.12

Amazon EKS 不再支持Kubernetes 版本 1.12。请将任何1.12 集群更新到版本 1.13 或更高版本以避免服务中断。

May 12, 2020

Kubernetes 版本 1.16 添加了新集群和版本升级的Kubernetes 版本 1.16 支持。

April 30, 2020

添加了AWSServiceRoleForAmazonEKS服务相关角色

添加了AWSServiceRoleForAmazonEKS服务相关角色。

April 16, 2020

Kubernetes 版本 1.15 增加了新集群和版本升级的Kubernetes 版本 1.15 支持。

March 10, 2020

Amazon EKS 区域扩展 (p. 325) Amazon EKS 现已在北京(cn-north-1) 和宁夏 (cn-northwest-1) 区域可用。

February 26, 2020

Amazon FSx for Lustre CSI 驱动程序

增加了在 Kubernetes 1.14Amazon EKS 集群上安装Amazon FSx for Lustre CSI 驱动程序的主题。

December 23, 2019

限制对集群的公有访问终端节点的网络访问

现在,利用 Amazon EKS,您可以限制可与 Kubernetes API 服务器的公有访问终端节点通信的CIDR 范围。

December 20, 2019

在 VPC 外部解析集群的私有访问终端节点地址

现在,利用 Amazon EKS,您可以在 VPC 外部解析 KubernetesAPI 服务器的私有访问终端节点。

December 13, 2019

(测试版)Amazon EC2 A1Amazon EC2 实例节点

启动向 集群注册的 AmazonEC2 A1Amazon EC2 实例节点。Amazon EKS

December 4, 2019

326

Page 335: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

在 AWS Outpost 上创建集群 Amazon EKS 现在支持在 AWSOutposts 上创建集群。

December 3, 2019

AWS Fargate 上的 Amazon EKS Amazon EKS Kubernetes 集群现在支持在 Fargate 上运行 Pod。

December 3, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 加拿大 (中部) (ca-central-1) 区域中可用。

November 21, 2019

托管节点组 Amazon EKS 托管节点组为Amazon EKS Kubernetes 集群自动进行节点(Amazon EC2 实例)的预配置和生命周期管理。

November 18, 2019

Amazon EKS 平台版本更新 新平台版本,以解决CVE-2019-11253。

November 6, 2019

Amazon EKS 上已弃用Kubernetes 1.11

Amazon EKS 不再支持Kubernetes 版本 1.11。请将任何1.11 集群更新到版本 1.12 或更高版本以避免服务中断。

November 4, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 南美洲(圣保罗) (sa-east-1) 区域中可用。

October 16, 2019

Windows 支持 现在,运行 Kubernetes 1.14 版的Amazon EKS 集群支持 Windows工作负载。

October 7, 2019

Autoscaling 添加了一章,用于介绍 AmazonEKS 集群支持的不同类型的Kubernetes 自动扩展。

September 30, 2019

Kubernetes 控制面板更新 更新了在 Amazon EKS 集群上安装 Kubernetes 控制面板以使用Beta 2.0 版的主题。

September 28, 2019

Amazon EFS CSI 驱动程序 增加了在 Kubernetes 1.14Amazon EKS 集群上安装Amazon EFS CSI 驱动程序的主题。

September 19, 2019

Amazon EC2 Systems Manager优化 AMI ID 的 Amazon EKS 参数

添加了有关使用 Amazon EKS 参数检索经 Amazon EC2 SystemsManager 优化的 AMI ID 的主题。该参数使您无需查找 AMI IDs。

September 18, 2019

Amazon EKS 资源标记 管理 Amazon EKS 集群的标记。 September 16, 2019

Amazon EBS CSI 驱动程序 增加了在 Kubernetes 1.14Amazon EKS 集群上安装Amazon EBS CSI 驱动程序的主题。

September 9, 2019

针对 CVE-2019-9512 和CVE-2019-9514 进行修补的新的Amazon EKS 优化的 AMI

Amazon EKS 已更新Amazon EKS 优化 AMI 以解决 CVE-2019-9512 和CVE-2019-9514。

September 6, 2019

327

Page 336: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

宣布 Amazon EKS 中弃用Kubernetes 1.11

Amazon EKS 将于 2019 年 11月 4 日弃用 Kubernetes 版本1.11。从这一天起,您将不再能够创建新的 1.11 集群,并且运行 Kubernetes 1.11 版本的所有Amazon EKS 集群都将更新为最新可用的 Kubernetes 版本 1.12平台版本。

September 4, 2019

服务账户的 IAM 角色 通过 Amazon EKS 集群上服务账户的 IAM 角色,您可以将 IAM角色与 Kubernetes 服务账户关联。借助此功能,您不再需要向节点 IAM 角色提供扩展的权限,以便该节点上的 Pod 可以调用 AWSAPIs。

September 3, 2019

Kubernetes 版本 1.14 增加了新集群和版本升级的Kubernetes 版本 1.14 支持。

September 3, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 中东(巴林) (me-south-1) 区域中可用。

August 29, 2019

Amazon EKS 平台版本更新 新平台版本,以针对CVE-2019-9512 和CVE-2019-9514。

August 28, 2019

Amazon EKS 平台版本更新 新平台版本,以针对CVE-2019-11247 和CVE-2019-11249。

August 5, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 亚太地区(香港) (ap-east-1) 区域中可用。

July 31, 2019

Amazon EKS 上已弃用Kubernetes 1.10

Amazon EKS 不再支持Kubernetes 版本 1.10。请将任何1.10 集群更新到版本 1.11 或更高版本以避免服务中断。

July 30, 2019

增加了有关 ALB 入口控制器的主题

适用于 Kubernetes 的 AWS ALB入口控制器是一类控制器,在创建入口资源时,此控制器将触发 应用程序负载均衡器 的创建。

July 11, 2019

新 Amazon EKS 优化 AMI 从 kubectl 中删除不必要的AMIs 二进制文件。

July 3, 2019

Kubernetes 版本 1.13 针对新集群和版本升级增加了Kubernetes 版本 1.13 支持。

June 18, 2019

针对 AWS-2019-005 进行修补的新的 Amazon EKS 优化的 AMI

Amazon EKS 已更新 AmazonEKS 优化的 AMI,以解决AWS-2019-005 中描述的漏洞。

June 17, 2019

328

Page 337: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

宣布 Amazon EKS 中弃用Kubernetes 1.10

Amazon EKS 将于 2019 年 7月 22 日弃用 Kubernetes 版本1.10 。从这一天起,您将不再能够创建新的 1.10 集群,并且运行 Kubernetes 1.10 版本的所有Amazon EKS 集群都将更新为最新可用的 Kubernetes 版本 1.11平台版本。

May 21, 2019

Amazon EKS 平台版本更新 Kubernetes 1.11 和 1.10 集群的新平台版本支持 Kubelet 证书中使用自定义 DNS 名称并提高 etcd性能。

May 21, 2019

eksctl 入门 此入门指南可帮助您使用eksctl(用于在 Amazon EKS上创建和管理 Kubernetes 集群的简单命令行实用程序)来安装开始使用 Amazon EKS 所需的所有资源。

May 10, 2019

AWS CLI get-token 命令 (p. 325)

aws eks get-token 命令已添加到 ,因此,您不再需要安装适用于 Kubernetes 的 AWS CLIAWS 身份验证器来创建用于集群 API 服务器通信的客户端安全令牌。IAM将您的 AWS CLI 安装升级到最新版本以利用此新功能。有关更多信息,请参阅 https://docs.aws.amazon.com/cli/latest/userguide/installing.html 中的安装AWS 命令行界面AWS CommandLine Interface 用户指南。

May 10, 2019

Amazon EKS 平台版本更新 Kubernetes 1.12 集群的新平台版本支持 Kubelet 证书中使用自定义DNS 名称并提高etcd 性能。这修复了导致节点 Kubelet 守护程序每隔几秒请求新证书的错误。

May 8, 2019

Prometheus 教程 增加了将 Prometheus 部署到Amazon EKS 集群的主题。

April 5, 2019

Amazon EKS 控制层面日志记录 Amazon EKS 控制层面日志记录让您可以轻松地保护和运行集群,方法是将审计和诊断日志直接从Amazon EKS 控制层面提供到您的账户中的 CloudWatch Logs。

April 4, 2019

Kubernetes 版本 1.12 (p. 325) 增加了新集群和版本升级的Kubernetes 版本 1.12 支持。

March 28, 2019

增加了 App Mesh 入门指南 增加了如何开始使用 App Mesh和 Kubernetes 的文档。

March 27, 2019

Amazon EKS API 服务器终端节点私有访问

增加了如何禁用 Amazon EKS 集群的 Kubernetes API 服务器终端节点的公有访问的文档。

March 19, 2019

329

Page 338: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

增加了安装 Kubernetes MetricsServer 的主题

Kubernetes Metrics Server 是集群中资源使用情况数据的聚合器。

March 18, 2019

增加了相关开源项目的列表 这些开源项目扩展了在 AWS 上运行的 Kubernetes 集群的功能,包括 Amazon EKS 管理的集群。

March 15, 2019

增加了本地安装 Helm 的主题 Kubernetes 的 helm 包管理器帮助您在 Kubernetes 集群上安装和管理应用程序。本主题可帮助您在本地安装并运行 helm 和 tiller二进制文件,以便您可以在本地系统中使用 helm CLI 安装和管理图表。

March 11, 2019

Amazon EKS 平台版本更新 新平台版本将 Amazon EKSKubernetes 1.11 集群更新到补丁级别 1.11.8 以解决CVE-2019-1002100。

March 8, 2019

提高了集群限制 Amazon EKS 将您可以在区域中创建的集群数从 3 增加到 50。

February 13, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS 现已在欧洲(伦敦) (eu-west-2)、欧洲(巴黎) (eu-west-3) 和亚太地区(孟买) (ap-south-1) 区域可用。

February 13, 2019

针对 ALAS-2019-1156 进行修补的新的 Amazon EKS 优化的 AMI

Amazon EKS 已更新经 AmazonEKS 优化的 AMI 以解决ALAS-2019-1156 中描述的漏洞。

February 11, 2019

针对 ALAS2-2019-1141 进行修补的新的 Amazon EKS 优化的 AMI

Amazon EKS 已更新 AmazonEKS 优化 AMI,以解决CVEsALAS2-2019-1141 中引用的 。

January 9, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 亚太区域(首尔) (ap-northeast-2) 区域中可用。

January 9, 2019

Amazon EKS 区域扩展 (p. 325) Amazon EKS现已在以下附加区域中可用:欧洲(法兰克福) (eu-central-1)、亚太区域(东京)(ap-northeast-1)、亚太区域(新加坡) (ap-southeast-1)和 亚太区域(悉尼) (ap-southeast-2)。

December 19, 2018

Amazon EKS 集群更新 添加了有关 Amazon EKS 集群Kubernetes 版本更新和节点替换的文档。

December 12, 2018

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 欧洲(斯德哥尔摩) (eu-north-1) 区域中可用。

December 11, 2018

330

Page 339: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

Amazon EKS 平台版本更新 新平台版本将 Kubernetes 更新到补丁级别 1.10.11 以解决CVE-2018-1002105。

December 4, 2018

为 应用程序负载均衡器 接收控制器添加了 1.0.0 版本支持

应用程序负载均衡器 接收控制器发行版本 1.0.0,提供来自 AWS的正式支持。

November 20, 2018

添加了对 CNI 网络配置的支持 适用于 Kubernetes 的 AmazonVPC CNI 插件版本 1.2.1 现在支持辅助 Pod 网络接口的自定义网络配置。

October 16, 2018

添加了对MutatingAdmissionWebhook 和ValidatingAdmissionWebhook 的支持

Amazon EKS 平台版本1.10-eks.2 现在支持MutatingAdmissionWebhook和ValidatingAdmissionWebhook准入控制器。

October 10, 2018

添加了合作伙伴 AMI 信息 Canonical 已与 Amazon EKS 合作来创建可在您的集群中使用的节点 AMIs。

October 3, 2018

添加了有关 AWS CLI update-kubeconfig 命令的说明

Amazon EKS 向 AWS CLI 添加了update-kubeconfig,以简化用于访问集群的 kubeconfig 文件的创建过程。

September 21, 2018

新的经 Amazon EKS 优化的AMIs Amazon EKS 已更新经 AmazonEKS 优化的 AMIs(带和不带 GPU支持),以提供各种安全修复和 AMI优化。

September 13, 2018

Amazon EKS 区域扩展 (p. 325) Amazon EKS 目前在 欧洲(爱尔兰) (eu-west-1) 区域中可用。

September 5, 2018

Amazon EKS 平台版本更新 新平台版本支持 Kubernetes聚合层和 Horizontal PodAutoscaler(HPA)。

August 31, 2018

新的 Amazon EKS 优化的 AMIs和 GPU 支持

Amazon EKS 已更新 AmazonEKS 优化 AMI 以使用新的 AWSCloudFormation 节点模板和引导脚本。此外,还提供了新的具有GPU 支持的Amazon EKS经 优化的 AMI。

August 22, 2018

针对 ALAS2-2018-1058 进行修补的新的 Amazon EKS 优化的 AMI

Amazon EKS 已更新 AmazonEKS 优化 AMI,以解决CVEsALAS2-2018-1058 中引用的 。

August 14, 2018

Amazon EKS 优化的 AMI 构建脚本

Amazon EKS 已公开用于生成Amazon EKS 优化 AMI 的生成脚本的源代码。这些生成脚本现在在GitHub 上可用。

July 10, 2018

Amazon EKS 初始版本 (p. 325) 服务的初始文档发布 June 5, 2018

331

Page 340: Amazon EKS - 用户指南 - docs.aws.amazon.com · Amazon EKS 用户指南 How does Amazon EKS work? Amazon EKS 入门是很轻松的: 1.创建 Amazon EKS 集群中的 AWS 管理控制台

Amazon EKS 用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

cccxxxii