准备 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您的集群所在的 Regionus-east-2
CLUSTER_NAME集群名称gitlab-cluster
CLUSTER_VERSION您的 EKS 集群的版本1.21
NUM_NODES要求的节点数量2
MACHINE_TYPE要部署的节点类型m5.xlarge

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

shell
./scripts/eks_bootstrap_script up

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

shell
./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

shell
1eksctl utils associate-iam-oidc-provider --cluster **CLUSTER_NAME** --approve 2 3eksctl create iamserviceaccount \ 4 --name ebs-csi-controller-sa \ 5 --namespace kube-system \ 6 --cluster **CLUSTER_NAME** \ 7 --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ 8 --approve \ 9 --role-only \ 10 --role-name *ROLE_NAME* 11 12eksctl create addon --name aws-ebs-csi-driver --cluster **CLUSTER_NAME** --service-account-role-arn arn:aws:iam::*AWS_ACCOUNT_ID*:role/*ROLE_NAME* --force 13 14kubectl 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 记录中:

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

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