跳到主要内容

Kubernetes

Kubernetes 后端在独立的 Pod 内执行步骤。为管道的生命周期创建临时 PVC 以在步骤之间传输文件。

元数据标签

Woodpecker 向 Pod 添加一些标签以为工作流提供额外的上下文。这些标签可用于各种目的,例如简单调试或作为网络策略的选择器。

支持以下元数据标签:

  • woodpecker-ci.org/forge-id
  • woodpecker-ci.org/repo-forge-id
  • woodpecker-ci.org/repo-id
  • woodpecker-ci.org/repo-name
  • woodpecker-ci.org/repo-full-name
  • woodpecker-ci.org/branch
  • woodpecker-ci.org/org-id

私有注册表

除了在 UI 中指定的注册表外,您还可以在 Kubernetes Secrets 中提供注册表凭据来拉取管道 YAML 中定义的私有容器镜像。

将这些 Secrets 放在由 WOODPECKER_BACKEND_K8S_NAMESPACE 定义的命名空间中,并通过 WOODPECKER_BACKEND_K8S_PULL_SECRET_NAMES 向代理提供 Secret 名称。

步骤特定配置

资源

Kubernetes 后端还允许在每个步骤的基础上指定请求和限制,最常见的是 CPU 和内存。 我们建议为所有步骤添加 resources 定义以确保高效调度。

这是一个在 backend_options 部分下带有任意 resources 定义的示例定义:

steps:
- name: 'My kubernetes step'
image: alpine
commands:
- echo "Hello world"
backend_options:
kubernetes:
resources:
requests:
memory: 200Mi
cpu: 100m
limits:
memory: 400Mi
cpu: 1000m

如果您想按每个命名空间基础设置限制,可以使用限制范围

运行时类

runtimeClassName 指定将用于运行此 Pod 的 RuntimeClass 的名称。如果未指定 runtimeClassName,将使用默认的 RuntimeHandler。 有关指定运行时类的更多信息,请参阅 Kubernetes 文档

服务账户

serviceAccountName 指定 Pod 将挂载的 ServiceAccount 的名称。此服务账户必须在外部创建。 有关使用服务账户的更多信息,请参阅 Kubernetes 文档

steps:
- name: 'My kubernetes step'
image: alpine
commands:
- echo "Hello world"
backend_options:
kubernetes:
# 使用当前命名空间中的服务账户 `default`。
# 这通常与 woodpecker 部署的位置相同。
serviceAccountName: default

要通过服务账户为步骤提供对 Kubernetes API 的访问权限,请查看 RBAC 授权

节点选择器

nodeSelector 指定用于选择执行步骤的节点的标签。

这里定义的标签将附加到已包含 "kubernetes.io/arch" 的列表中。 默认情况下,"kubernetes.io/arch" 从代理的平台推断。可以通过在 backend_optionsnodeSelector 部分设置该标签来覆盖它。 如果没有手动覆盖,构建将随机分配给运行器并继承其各自的架构。

要覆盖这一点,需要在 backend_optionsnodeSelector 部分设置标签。 一个实际的例子是运行矩阵构建并将矩阵的特定元素委托给特定架构运行。 在这种情况下,必须在相应矩阵元素的矩阵部分定义任意键:

matrix:
include:
- NAME: runner1
ARCH: arm64

然后在步骤的 backend_options 部分使用相应环境变量的名称覆盖 nodeSelector

[...]
backend_options:
kubernetes:
nodeSelector:
kubernetes.io/arch: "${ARCH}"

如果您想按代理设置节点选择器,可以使用 WOODPECKER_BACKEND_K8S_POD_NODE_SELECTOR,或者如果您想按每个命名空间基础设置节点选择器,可以使用 PodNodeSelector 准入控制器。

容忍度

当您使用 nodeSelector 并且节点池配置了污点时,您需要指定容忍度。容忍度允许调度器调度具有匹配污点的 Pod。 有关使用容忍度的更多信息,请参阅 Kubernetes 文档

示例管道配置:

steps:
- name: build
image: golang
commands:
- go get
- go build
- go test
backend_options:
kubernetes:
serviceAccountName: 'my-service-account'
resources:
requests:
memory: 128Mi
cpu: 1000m
limits:
memory: 256Mi
nodeSelector:
beta.kubernetes.io/instance-type: Standard_D2_v3
tolerations:
- key: 'key1'
operator: 'Equal'
value: 'value1'
effect: 'NoSchedule'
tolerationSeconds: 3600
备注

由于 Kubernetes 后端配置文档内容很长,这里提供了主要配置部分的翻译。如需完整的配置选项列表和环境变量说明,请参考英文原版文档。