在亚马逊网络服务(AWS)上使用 Elastic Container with Kubernetes(EKS)部署 Kubernetes#
AWS 已经发布了对 Kubernetes 的原生支持,该服务在特定区域可用。
本指南使用 AWS 来搭建一个集群。此过程参照了 Amazon EKS 入门中的步骤,并补充了一些原文中缺失的细节。
步骤#
为 EKS 服务角色创建一个 IAM 角色。创建角色的说明可以在这里找到。它应该包含以下策略:
AmazonEKSClusterPolicy
AmazonEKSServicePolicy
AmazonEC2ContainerRegistryReadOnly
(在用户界面中,选择 EKS 作为服务,然后按照默认步骤操作)
如果你还没有 VPC,请创建一个。这一步的可变性很大,因此留给用户自行操作。不过,你可以在 Amazon EKS 入门的“创建您的 Amazon EKS 集群 VPC”部分找到一种部署方法。
为 EKS 控制平面创建一个安全组。你不需要在此设置任何权限。下面的步骤将自动定义 EKS 控制平面与各个节点之间的访问控制。
创建你的 EKS 集群(使用用户界面)。使用第 1 步中的 IAM 角色和第 3 步中定义的安全组。集群名称将在整个过程中使用。我们将以
Z2JHKubernetesCluster
为例。安装 kubectl 和 aws-iam-authenticator。请参考 Amazon EKS 入门中的“为 Amazon EKS 配置 kubectl”部分。
配置 kubeconfig。另请参阅 Amazon EKS 入门中的“步骤 2:为 Amazon EKS 配置 kubectl”。
你可以从 AWS 的用户界面获取
endpoint-url
(端点 URL)和base64-encoded-ca-cert
(base64 编码的 CA 证书)。cluster-name
是在第 4 步中指定的名称。如果你在 AWS 配置中使用了配置文件(profiles),可以取消env
块的注释,并将你的配置文件指定为aws-profile
。apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws-iam-authenticator args: - "token" - "-i" - "<cluster-name>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
验证 kubectl 是否正常工作
kubectl get svc
应返回
kubernetes
和ClusterIP
使用 CloudFormation 创建节点
请参阅 Amazon EKS 入门中的“步骤 3:启动并配置 Amazon EKS 工作节点”。
警告:如果你尝试在私有网络上部署,CloudFormation 模板会为每个工作节点创建一个公有 IP。但如果你只指定了私有子网,将没有路由可以访问该 IP。无论如何,如果你希望修正此问题,可以编辑 CloudFormation 模板,将
Resources.NodeLaunchConfig.Properties.AssociatePublicIpAddress
的值从'true'
改为'false'
。创建一个 AWS 身份验证 ConfigMap
这是为了让工作节点能够找到主平面(master plane)。
请参阅 Amazon EKS 入门中的“步骤 3:启动并配置 Amazon EKS 工作节点”。
集群自动伸缩器#
如果你想进行一些优化,你需要先部署集群自动伸缩器(Cluster Autoscaler, CA)。