准备 EKS 资源

对于功能齐全的 GitLab 实例,在部署 gitlab chart 之前,您需要一些资源。

创建 EKS 集群

为了更轻松地开始,提供了一个脚本来自动创建集群。或者,也可以手动创建集群。

先决条件:

要手动创建集群,请参阅 Amazon AWS Amazon EKS 入门。 将 EC2 托管节点用于 EKS 集群,而不是 Fargate。 Fargate 有许多限制,不支持与极狐GitLab Helm chart 一起使用。

使用脚本创建集群

bootstrap 脚本 已创建,用于自动化 EKS 用户的大部分设置过程。在执行脚本之前,您需要克隆这个仓库。

使用脚本可以:

  1. 创建新的 EKS 集群。
  2. 设置 kubectl,并将其连接到集群。

为了进行身份验证,eksctl 使用与 AWS 命令行相同的选项。 请参阅 AWS 文档了解如何使用环境变量配置文件

脚本从环境变量中读取各种参数,或者命令行参数和一个参数 updown 分别用于 bootstrap 和清理。

下表描述了所有变量。

变量 描述 默认值
REGION 您的集群所在的 Region us-east-2
CLUSTER_NAME 集群名称 gitlab-cluster
CLUSTER_VERSION 您的 EKS 集群的版本 1.21
NUM_NODES 要求的节点数量 2
MACHINE_TYPE 要部署的节点类型 m5.xlarge

通过传入所需的参数来运行脚本。 它可以使用默认参数。

./scripts/eks_bootstrap_script up

该脚本还可用于清理创建的 EKS 资源:

./scripts/eks_bootstrap_script down

手动创建集群

  • 我们建议使用 8vCPU 和 30GB RAM 的集群。

有关最新的说明,请参考 EKS 入门指南

管理员可能还需要考虑新的 AWS Service Operator for Kubernetes 来简化这个过程。

note启用 AWS Service Operator 需要一种管理集群内角色的方法。处理该管理任务的初始服务由第三方开发人员提供。管理员在规划部署时应牢记这一点。

持久卷管理

在 Kubernetes 上管理卷声明有两种方法:

  • 手动创建持久卷。
  • 通过动态配置自动创建持久卷。

我们目前建议使用手动配置持久卷。Amazon EKS 集群默认跨越多个区域。使用动态配置时,如果未配置为使用锁定到特定区域的 storage class,则会导致 pod 可能存在于与存储卷不同的区域中并且无法访问数据的情况。

有关详细信息,请参阅如何配置持久卷

在 Amazon EKS 1.23 及之后的集群中,无论是手动配置还是动态配置,都需要在集群上安装 Amazon EBS CSI add-on

eksctl utils associate-iam-oidc-provider --cluster **CLUSTER_NAME** --approve

eksctl create iamserviceaccount \
    --name ebs-csi-controller-sa \
    --namespace kube-system \
    --cluster **CLUSTER_NAME** \
    --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
    --approve \
    --role-only \
    --role-name *ROLE_NAME*

eksctl create addon --name aws-ebs-csi-driver --cluster **CLUSTER_NAME** --service-account-role-arn arn:aws:iam::*AWS_ACCOUNT_ID*:role/*ROLE_NAME* --force

kubectl annotate serviceaccount ebs-csi-controller-sa -n kube-system eks.amazonaws.com/role-arn=arn:aws:iam::*AWS_ACCOUNT_ID*:role/*ROLE_NAME*

外部访问

默认情况下,安装 GitLab Chart 将部署一个 Ingress,它将创建一个关联的 Elastic Load Balancer (ELB)。由于无法提前知道 ELB 的 DNS 名称,因此很难利用 Let’s Encrypt 自动提供 HTTPS 证书。

我们建议使用您自己的证书,然后使用 CNAME 记录将您想要的 DNS 名称映射到创建的 ELB。由于必须先创建 ELB,然后才能检索其主机名,因此请按照以下说明安装 GitLab。

note对于需要 AWS LoadBalancer 的环境,弹性负载均衡器 需要专门的配置。参见云提供商负载均衡器文档。

下一步

一旦集群启动并运行,继续安装 chart。通过 global.hosts.domain 选项设置域名,但通过global.hosts.externalIP 选项省略静态 IP 设置,除非您打算使用现有的弹性IP。

安装 Helm 后,您可以使用以下命令获取 ELB 的主机名以放置在 CNAME 记录中:

kubectl get ingress/RELEASE-webservice-default -ojsonpath='{.status.loadBalancer.ingress[0].hostname}'

RELEASE 应该替换为 helm install <RELEASE> 中使用的版本名称。