管理 Kubernetes 实例代理

使用 Kubernetes 代理时,请使用以下任务。

查看您的代理

安装的 agentk 版本能够在 代理(Agent) 选项卡上展示。

先决条件:

  • 您必须至少具有开发者角色。

查看代理列表:

  1. 在左侧导航栏,选择 搜素或前往 并找到包含您代理配置文件的项目。您无法从不包含代理配置文件的项目中查看注册的代理。
  2. 选择 运维 > Kubernetes 集群
  3. 选择 代理(Agent) 选项卡来查看通过代理链接到极狐GitLab 的集群。

在此页面上,您可以查看:

  • 当前项目的所有注册代理。
  • 连接状态。
  • 集群上安装的 agentk 版本。
  • 每个代理配置文件的路径。

配置代理

要配置您的代理:

  • 将内容添加到安装期间创建的 config.yaml 文件中。

您可以从代理列表中快速定位至代理配置文件。配置 一列中显示 config.yaml 文件的位置,或者显示如何创建一个。

代理配置文件管理不同的代理功能:

查看共享代理

  • 引入于极狐GitLab 16.1。

除了项目拥有的代理,您还可以查看使用 ci_access h额 user_access 关键字来共享的代理。一旦代理被共享给项目,它就会自动出现在项目代理的选项卡中。

要查看共享代理列表:

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 运维 > Kubernetes 集群
  3. 选择 代理 选项卡。

就会展示共享代理列表和集群。

查看代理的活动信息

活动日志可帮助您识别问题并获取故障排除所需的信息。您可以查看当前日期前一周的事件。查看代理的活动:

  1. 在左侧边栏中,选择 搜索或转到 并找到包含您的代理配置文件的项目。
  2. 选择 运维 > Kubernetes 集群
  3. 选择您要查看活动的代理。

活动清单包括:

  • 代理注册事件:创建新令牌时
  • 连接事件:当代理成功连接到集群时。

当您第一次连接代理或超过一个小时不活动后,连接状态会被记录。

Debug 代理

  • grpc_level 引入于 15.1 版本。

要调试代理的集群端组件(agentk),请根据可用选项设置日志级别:

  • error
  • info
  • debug

代理有两个记录器:

  • 通用记录器,默认为 info
  • 一个 gRPC 记录器,默认为 error

可以通过使用代理配置文件中的顶级 observability 部分,来更改其日志级别,例如将级别设置为 debugwarning

observability:
  logging:
    level: debug
    grpc_level: warn

grpc_level 设置为 info 或以下时,会出现大量 gRPC 日志。

提交配置更改并检查代理服务日志:

kubectl logs -f -l=app=gitlab-agent -n gitlab-agent

有关调试的更多信息,请参阅 疑难解答文档

重置代理令牌

  • 双令牌限制引入于极狐GitLab 16.1,使用名为 cluster_agents_limit_tokens_created 的功能标志。
  • 双令牌限制在极狐GitLab 16.2 中 GA,功能标志 cluster_agents_limit_tokens_created 被移除。

一个代理同时仅能有两个活跃令牌。

要在不停机的情况下重置代理令牌:

  1. 创建一个新令牌:
    1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
    2. 选择 运维 > Kubernetes 集群
    3. 选择您要为其创建令牌的代理。
    4. 访问令牌 选项卡上,选择 创建令牌
    5. 输入令牌的名称和描述(可选)并选择 创建令牌
  2. 安全存储生成的令牌。
  3. 使用令牌,在集群中安装代理
  4. 要删除您不再使用的令牌,请返回令牌列表并选择 撤销 ()。

删除代理

您可以使用 UIGraphQL API。代理和任何相关的令牌都会从极狐GitLab 中删除,但不会在您的 Kubernetes 集群中进行任何更改。您必须手动清理这些资源。

通过 UI 删除代理

要从 UI 中删除代理:

  1. 在左侧边栏中,选择 搜索或转到 并找到包含代理配置文件的项目。
  2. 选择 运维 > Kubernetes 集群
  3. 在表格中,在您的代理所在行的 选项 列中,选择垂直省略号 ()。
  4. 选择 删除代理

使用 GraphQL API 删除代理

  1. 从交互式 GraphQL 资源管理器中的查询中获取 <cluster-agent-token-id>
    • 对于 SaaS,访问 https://jihulab.com/-/graphql-explorer 打开 GraphQL Explorer。
    • 对于私有化部署实例,请转到 https://gitlab.example.com/-/graphql-explorer,将 gitlab.example.com 替换为您的实例的 URL。
    query{
      project(fullPath: "<full-path-to-agent-configuration-project>") {
        clusterAgent(name: "<agent-name>") {
          id
          tokens {
            edges {
              node {
                id
              }
            }
          }
        }
      }
    }
    
  2. 通过删除 clusterAgentToken 来使用 GraphQL 删除代理记录。

    mutation deleteAgent {
      clusterAgentDelete(input: { id: "<cluster-agent-id>" } ) {
        errors
      }
    }
    
    mutation deleteToken {
      clusterAgentTokenDelete(input: { id: "<cluster-agent-token-id>" }) {
        errors
      }
    }
    
  3. 验证删除是否成功。如果 Pod 日志中的输出包含 unauthenticated,则表示代理已成功移除:

    {
        "level": "warn",
        "time": "2021-04-29T23:44:07.598Z",
        "msg": "GetConfiguration.Recv failed",
        "error": "rpc error: code = Unauthenticated desc = unauthenticated"
    }
    
  4. 删除集群中的代理:

    kubectl delete -n gitlab-kubernetes-agent -f ./resources.yml