准备 EKS 资源
对于功能齐全的 GitLab 实例,在部署 gitlab
chart 之前,您需要一些资源。
创建 EKS 集群
为了更轻松地开始,提供了一个脚本来自动创建集群。或者,也可以手动创建集群。
先决条件:
要手动创建集群,请参阅 Amazon AWS Amazon EKS 入门。 将 EC2 托管节点用于 EKS 集群,而不是 Fargate。 Fargate 有许多限制,不支持与极狐GitLab Helm chart 一起使用。
使用脚本创建集群
bootstrap 脚本 已创建,用于自动化 EKS 用户的大部分设置过程。在执行脚本之前,您需要克隆这个仓库。
使用脚本可以:
- 创建新的 EKS 集群。
- 设置
kubectl
,并将其连接到集群。
为了进行身份验证,eksctl
使用与 AWS 命令行相同的选项。 请参阅 AWS 文档了解如何使用环境变量或配置文件。
脚本从环境变量中读取各种参数,或者命令行参数和一个参数
up
或 down
分别用于 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 来简化这个过程。
持久卷管理
在 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。
下一步
一旦集群启动并运行,继续安装 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>
中使用的版本名称。