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

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 会存储为您项目创建的命名空间和服务账户的缓存版本。如果您手动修改集群中的这些资源,此缓存可能会与您的集群不同步。这可能导致部署作业失败。

要清除缓存:

  1. 转到您项目的 Operate > Kubernetes clusters 页面,然后选择您的集群。
  2. 展开 Advanced settings 部分。
  3. 选择 Clear cluster cache

基础域名

指定基础域名会自动将 KUBE_INGRESS_BASE_DOMAIN 设置为部署变量。 如果您使用 Auto DevOps,此域名将用于不同的阶段。例如,自动审查应用和自动部署。

该域名应配置通配符 DNS 指向 Ingress IP 地址。您可以选择:

  • 使用您的域名提供商创建指向 Ingress IP 地址的 A 记录。
  • 使用 nip.ioxip.io 等服务输入通配符 DNS 地址。例如,192.168.1.1.xip.io

要确定外部 Ingress IP 地址或外部 Ingress 主机名:

  • 如果集群在 GKE 上:

    1. Advanced settings 中选择 Google Kubernetes Engine 链接, 或直接访问 Google Kubernetes Engine 仪表板
    2. 选择正确的项目和集群。
    3. 选择 Connect
    4. 在本地终端或使用 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 版本中看到末尾有 %,请不要包含它。