GitLab 管理的集群(已弃用)
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed
此功能在 GitLab 14.5 中被弃用。 要将您的集群连接到 GitLab,请使用 GitLab Kubernetes 代理。 要管理应用程序,请使用 集群项目管理模板。
在 GitLab 自托管版上,默认情况下此功能不可用。要启用此功能,管理员可以启用名为 certificate_based_clusters 的功能标志。
您可以选择让 GitLab 为您管理集群。如果您的集群由 GitLab 管理,您项目的资源会自动创建。有关创建资源的详细信息,请参阅访问控制部分。
如果您选择自行管理集群,则不会自动创建项目特定的资源。如果您使用的是 Auto DevOps,您必须明确提供 KUBE_NAMESPACE 部署变量供您的部署作业使用。否则,会为您创建一个命名空间。
请注意,手动管理由 GitLab 创建的资源(如命名空间和服务账户)可能会导致意外错误。如果发生这种情况,请尝试清除集群缓存。
清除集群缓存
如果您允许 GitLab 管理您的集群,GitLab 会存储为您项目创建的命名空间和服务账户的缓存版本。如果您手动修改集群中的这些资源,此缓存可能会与您的集群不同步。这可能导致部署作业失败。
要清除缓存:
- 转到您项目的 Operate > Kubernetes clusters 页面,然后选择您的集群。
- 展开 Advanced settings 部分。
- 选择 Clear cluster cache。
基础域名
指定基础域名会自动将 KUBE_INGRESS_BASE_DOMAIN 设置为部署变量。
如果您使用 Auto DevOps,此域名将用于不同的阶段。例如,自动审查应用和自动部署。
该域名应配置通配符 DNS 指向 Ingress IP 地址。您可以选择:
- 使用您的域名提供商创建指向 Ingress IP 地址的
A记录。 - 使用
nip.io或xip.io等服务输入通配符 DNS 地址。例如,192.168.1.1.xip.io。
要确定外部 Ingress IP 地址或外部 Ingress 主机名:
-
如果集群在 GKE 上:
- 在 Advanced settings 中选择 Google Kubernetes Engine 链接, 或直接访问 Google Kubernetes Engine 仪表板。
- 选择正确的项目和集群。
- 选择 Connect。
- 在本地终端或使用 Cloud Shell 执行
gcloud命令。
-
如果集群不在 GKE 上:请遵循您 Kubernetes 提供商的具体说明,使用正确的凭据配置
kubectl。 以下示例的输出显示您集群的外部端点。然后可以使用此信息设置 DNS 条目和转发规则,以允许外部访问您部署的应用程序。
根据您的 Ingress,可以通过多种方式获取外部 IP 地址。此列表提供了通用解决方案和一些 GitLab 特定的方法:
-
通常,您可以通过运行以下命令列出所有负载均衡器的 IP 地址:
kubectl get svc --all-namespaces -o jsonpath='{range.items[?(@.status.loadBalancer.ingress)]}{.status.loadBalancer.ingress[*].ip} ' -
如果您使用 Applications 安装了 Ingress,请运行:
kubectl get service --namespace=gitlab-managed-apps ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}' -
某些 Kubernetes 集群返回的是主机名,如 Amazon EKS。对于这些平台,请运行:
kubectl get service --namespace=gitlab-managed-apps ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'如果您使用 EKS,还会创建一个 Elastic Load Balancer, 这会产生额外的 AWS 成本。
-
Istio/Knative 使用不同的命令。请运行:
kubectl get svc --namespace=istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip} '
如果您在某些 Kubernetes 版本中看到末尾有 %,请不要包含它。