Help us learn about your current experience with the documentation. Take the survey.

创建 Amazon EKS 集群

你可以通过基础设施即代码(IaC)在 Amazon Elastic Kubernetes Service (EKS) 上创建集群。这个过程使用 AWS 和 Kubernetes Terraform 提供程序来创建 EKS 集群。你通过使用 GitLab agent for Kubernetes 将集群连接到 GitLab。

开始之前

  • 一个 Amazon Web Services (AWS) 账户,并配置好一组安全凭证
  • 一个可用于运行 GitLab CI/CD 管道的runner

步骤

  1. 导入示例项目
  2. 注册 Kubernetes agent
  3. 配置你的项目
  4. 部署你的集群

导入示例项目

要从 GitLab 使用基础设施即代码创建集群,你必须创建一个项目来管理集群。在本教程中,你从一个示例项目开始,并根据你的需求进行修改。

首先通过 URL 导入示例项目

要导入项目:

  1. 在 GitLab 中,在左侧边栏选择 Search or go to
  2. 选择 View all my projects
  3. 在页面右侧,选择 New project
  4. 选择 Import project
  5. 选择 Repository by URL
  6. 对于 Git repository URL,输入 https://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-eks.git
  7. 完成字段填写并选择 Create project

这个项目为你提供:

注册 agent

要创建 GitLab agent for Kubernetes:

  1. 在左侧边栏,选择 Operate > Kubernetes clusters
  2. 选择 Connect a cluster (agent)
  3. Select an agent 下拉列表中,选择 eks-agent 并选择 Register an agent
  4. GitLab 为 agent 生成一个注册令牌。请安全存储这个秘密令牌,因为你稍后会需要它。
  5. GitLab 提供了一个 agent 服务器(KAS)的地址,你稍后也会需要它。

设置 AWS 凭证

当你想要用 GitLab 验证 AWS 身份时,设置你的 AWS 凭证。

  1. 创建一个 IAM UserIAM Role

  2. 确保你的 IAM 用户或角色对你的项目有适当的权限。对于这个示例项目,你必须拥有以下 JSON 块中列出的权限。在设置你自己的项目时,你可以扩展这些权限。

    // IAM custom Policy definition
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
            "ec2:*",
            "eks:*",
            "elasticloadbalancing:*",
            "autoscaling:*",
            "cloudwatch:*",
            "logs:*",
            "kms:DescribeKey",
            "kms:TagResource",
            "kms:UntagResource",
            "kms:ListResourceTags",
            "kms:CreateKey",
            "kms:CreateAlias",
            "kms:ListAliases",
            "kms:DeleteAlias",
            "iam:AddRoleToInstanceProfile",
            "iam:AttachRolePolicy",
            "iam:CreateInstanceProfile",
            "iam:CreateRole",
            "iam:CreateServiceLinkedRole",
            "iam:GetRole",
            "iam:ListAttachedRolePolicies",
            "iam:ListRolePolicies",
            "iam:ListRoles",
            "iam:PassRole",
            "iam:DetachRolePolicy",
            "iam:ListInstanceProfilesForRole",
            "iam:DeleteRole",
            "iam:CreateOpenIDConnectProvider",
            "iam:CreatePolicy",
            "iam:TagOpenIDConnectProvider",
            "iam:GetPolicy",
            "iam:GetPolicyVersion",
            "iam:GetOpenIDConnectProvider",
            "iam:DeleteOpenIDConnectProvider",
            "iam:ListPolicyVersions",
            "iam:DeletePolicy"
          ],
          "Resource": "*"
        }
      ]
    }
  3. 为用户或角色创建访问密钥

  4. 保存你的访问密钥和秘密。你需要这些来用 GitLab 验证 AWS 身份。

配置你的项目

使用 CI/CD 环境变量来配置你的项目。

必需配置

  1. 在左侧边栏,选择 Settings > CI/CD
  2. 展开 Variables
  3. 将变量 AWS_ACCESS_KEY_ID 设置为你的 AWS 访问密钥 ID。
  4. 将变量 AWS_SECRET_ACCESS_KEY 设置为你的 AWS 秘密访问密钥。
  5. 将变量 TF_VAR_agent_token 设置为上一个任务中显示的 agent 令牌。
  6. 将变量 TF_VAR_kas_address 设置为上一个任务中显示的 agent 服务器地址。

可选配置

文件 variables.tf 包含其他变量,你可以根据需要覆盖它们:

  • TF_VAR_region:设置你的集群区域。
  • TF_VAR_cluster_name:设置你的集群名称。
  • TF_VAR_cluster_version:设置 Kubernetes 的版本。
  • TF_VAR_instance_type:设置 Kubernetes 节点的实例类型。
  • TF_VAR_instance_count:设置 Kubernetes 节点的数量。
  • TF_VAR_agent_namespace:设置 GitLab agent for Kubernetes 的 Kubernetes 命名空间。

查看 AWS Terraform providerKubernetes Terraform provider 文档以获取更多资源选项。

部署你的集群

配置好你的项目后,手动触发你的集群的部署。在 GitLab 中:

  1. 在左侧边栏,转到 Build > Pipelines
  2. Play ( play ) 旁边,选择下拉列表图标 ( chevron-lg-down )。
  3. 选择 Deploy 以手动触发部署作业。

当管道成功完成时,你可以查看新集群:

  • 在 AWS 中:从 EKS 控制台,选择 Amazon EKS > Clusters
  • 在 GitLab 中:在左侧边栏,选择 Operate > Kubernetes clusters

使用你的集群

部署集群后,它已连接到 GitLab 并准备就绪,可以部署。要检查连接:

  1. 在左侧边栏,选择 Operate > Kubernetes clusters
  2. 在列表中,查看 Connection status 列。

有关连接功能的更多信息,请参阅 GitLab agent for Kubernetes 文档

移除集群

默认情况下,清理作业不包含在你的管道中。要移除所有创建的资源,你必须在运行清理作业之前修改你的 GitLab CI/CD 模板。

要移除所有资源:

  1. 将以下内容添加到你的 .gitlab-ci.yml 文件中:

    stages:
      - init
      - validate
      - test
      - build
      - deploy
      - cleanup
    
    destroy:
      extends: .terraform:destroy
      needs: []
  2. 在左侧边栏,选择 Build > Pipelines 并选择最近的管道。

  3. 对于 destroy 作业,选择 Play ( play )。