Kubectl 任务

Azure DevOps Services

使用此任务通过运行 kubectl 命令来部署、配置或更新 Kubernetes 群集。

服务连接

该任务适用于两种服务连接类型:Azure 资源管理器Kubernetes 服务连接,如下所述。

Azure 资源管理器

参数说明
connectionType
服务连接类型
使用任何其他群集的 Azure Kubernetes 服务 或 Kubernetes 服务连接时, (Azure 资源管理器必需) 。
默认值:Azure 资源管理器
azureSubscriptionEndpoint
Azure 订阅
(Azure 服务连接所需的) 名称。
azureResourceGroup
资源组
(订阅中资源组的必需) 名称。
kubernetesCluster
Kubernetes 群集
(AKS 群集的必需) 名称。
useClusterAdmin
使用群集管理员凭据
(可选) 使用群集管理员凭据而不是默认群集用户凭据。 这会忽略基于角色的访问控制。
namespace
命名空间
(可选) 运行 kubectl 命令的命名空间。 如果未指定,则使用默认命名空间。

此 YAML 示例演示如何使用 Azure 资源管理器来引用 Kubernetes 群集。 这与 kubectl 命令 之一和命令所需的相应值一起使用。

variables:
  azureSubscriptionEndpoint: Contoso
  azureContainerRegistry: contoso.azurecr.io
  azureResourceGroup: Contoso
  kubernetesCluster: Contoso
  useClusterAdmin: false

steps:
- task: Kubernetes@1
  displayName: kubectl apply
  inputs:
    connectionType: Azure Resource Manager
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    useClusterAdmin: $(useClusterAdmin)

Kubernetes 服务连接

参数说明
kubernetesServiceEndpoint
Kubernetes 服务连接
(需要) 选择 Kubernetes 服务连接。
namespace
命名空间
(可选) 运行 kubectl 命令的命名空间。 如果未指定,则使用默认命名空间。

此 YAML 示例演示如何使用 Kubernetes 服务连接来引用 Kubernetes 群集。 这与 kubectl 命令 之一和命令所需的相应值一起使用。

- task: Kubernetes@1
  displayName: kubectl apply
  inputs:
    connectionType: Kubernetes Service Connection
    kubernetesServiceEndpoint: Contoso

命令

命令输入接受以下 kubectl 命令之一:

应用创建删除exec公开获取登录注销日志运行设置顶部

参数说明
command
命令
(必需) 按文件名或 stdin 将配置应用于资源。
默认值:应用
useConfigurationFile
使用配置文件
(可选) 将 Kubernetes 配置文件与 kubectl 命令配合使用。 输入 Kubernetes 配置文件的文件名、目录或 URL。
默认值:false
arguments
参数
(指定 kubectl 命令的可选) 参数。

此 YAML 示例演示 了 apply 命令:

- task: Kubernetes@1
  displayName: kubectl apply using arguments
  inputs:
    connectionType: Azure Resource Manager
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: apply
    arguments: -f mhc-aks.yaml

此 YAML 示例演示了将配置文件与 apply 命令配合使用:

- task: Kubernetes@1
  displayName: kubectl apply using configFile
  inputs:
    connectionType: Azure Resource Manager
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureResourceGroup: $(azureResourceGroup)
    kubernetesCluster: $(kubernetesCluster)
    command: apply
    useConfigurationFile: true
    configuration: mhc-aks.yaml

机密

类型 机密 的 Kubernetes 对象旨在保存敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 将此信息放在机密中比在 Pod 定义或 Docker 映像中逐字放置更安全、更灵活。 Azure Pipelines 简化了 将 ImagePullSecrets 添加到服务帐户,或设置任何通用机密,如下所述。

ImagePullSecret

参数说明
secretType
机密类型
(必需) 创建或更新 ImagePullSecret 或任何其他泛型机密。 可接受的值:适用于 ImagePullSecret 的 dockerRegistry 或任何其他机密类型的 泛型
默认值:dockerRegistry
containerRegistryType
容器注册表类型
(必需) 可接受的值:Azure 容器注册表或任何其他注册表的容器注册表
默认值:Azure 容器注册表
azureSubscription
EndpointForSecrets

Azure 订阅
(如果 secretType == dockerRegistry 和 containerRegistryType == Azure 容器注册表) Azure 资源管理器服务连接范围限定为包含要为其设置 ImagePullSecret 的Azure 容器注册表的订阅,则 (必需。
azureContainerRegistry
Azure 容器注册表
(如果 secretType == dockerRegistry 和 containerRegistryType == Azure 容器注册表) 要为其设置 ImagePullSecret 的Azure 容器注册表,则 (必需。
secretName
机密名称
(可选) 机密名称。
forceUpdate
强制更新机密
(可选) 删除机密(如果存在)并创建具有更新值的新机密。
默认值:true

此 YAML 示例演示了 ImagePullSecrets 的设置:

    - task: Kubernetes@1
      displayName: kubectl apply for secretType dockerRegistry
      inputs:
        azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
        azureResourceGroup: $(azureResourceGroup)
        kubernetesCluster: $(kubernetesCluster)
        command: apply
        arguments: -f mhc-aks.yaml
        secretType: dockerRegistry
        containerRegistryType: Azure Container Registry
        azureSubscriptionEndpointForSecrets: $(azureSubscriptionEndpoint)
        azureContainerRegistry: $(azureContainerRegistry)
        secretName: mysecretkey2
        forceUpdate: true

通用机密

参数说明
secretType
机密类型
(必需) 创建或更新 ImagePullSecret 或任何其他泛型机密。 可接受的值:适用于 ImagePullSecret 的 dockerRegistry 或任何其他机密类型的 泛型
默认值:dockerRegistry
secretArguments
参数
(可选) 指定要在机密中插入的键和文本值。 例如: --from-literal=key1=value1 --from-literal=key2="top secret"
secretName
机密名称
(可选) 机密名称。

此 YAML 示例基于 为 secretArguments 输入指定的文本值创建泛型机密:

    - task: Kubernetes@1
      displayName: secretType generic with literal values
      inputs:
        azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
        azureResourceGroup: $(azureResourceGroup)
        kubernetesCluster: $(kubernetesCluster)
        command: apply
        arguments: -f mhc-aks.yaml
        secretType: generic
        secretArguments: --from-literal=contoso=5678
        secretName: mysecretkey

管道变量可用于传递用于指定文本值的参数,如下所示:

    - task: Kubernetes@1
      displayName: secretType generic with pipeline variables
      inputs:
        azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
        azureResourceGroup: $(azureResourceGroup)
        kubernetesCluster: $(kubernetesCluster)
        command: apply
        arguments: -f mhc-aks.yaml
        secretType: generic
        secretArguments: --from-literal=contoso=$(contosovalue)
        secretName: mysecretkey

ConfigMap

使用 ConfigMaps 可将配置项目与映像内容分离,以保持容器化应用程序的可移植性。

参数说明
configMapName
ConfigMapName
(ConfigMap 的可选) 名称。
forceUpdateConfigMap
强制更新配置映射
(可选) 删除配置映射(如果存在)并创建具有更新值的新配置映射。
默认值:false
useConfigMapFile
使用文件
(可选) 通过指定目录从单个文件或从多个文件创建 ConfigMap。
默认值:false
configMapFile
ConfigMap 文件
如果 useConfigMapFile == true) 指定包含 configMaps 的文件或目录,则 (必需。 请注意,这将使用 --from-file 参数。
configMapArguments
参数
(可选) 指定要在 configMap 中插入的键和文本值。 例如: --from-literal=key1=value1 --from-literal=key2="top secret"

此 YAML 示例通过指向 ConfigMap 文件创建 ConfigMap:

    - task: Kubernetes@1
      displayName: kubectl apply
      inputs:
        configMapName: myconfig
        useConfigMapFile: true
        configMapFile: src/configmap

此 YAML 示例通过将文本值直接指定为 configMapArguments 输入,并将 forceUpdate 设置为 true 来创建 ConfigMap:

    - task: Kubernetes@1
      displayName: configMap with literal values
      inputs:
        azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
        azureResourceGroup: $(azureResourceGroup)
        kubernetesCluster: $(kubernetesCluster)
        command: apply
        arguments: -f mhc-aks.yaml
        secretType: generic
        secretArguments: --from-literal=contoso=$(contosovalue)
        secretName: mysecretkey4
        configMapName: myconfig
        forceUpdateConfigMap: true
        configMapArguments: --from-literal=myname=contoso

可以使用管道变量在创建 ConfigMap 时传递文本值,如下所示:

    - task: Kubernetes@1
      displayName: configMap with pipeline variables
      inputs:
        azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
        azureResourceGroup: $(azureResourceGroup)
        kubernetesCluster: $(kubernetesCluster)
        command: apply
        arguments: -f mhc-aks.yaml
        secretType: generic
        secretArguments: --from-literal=contoso=$(contosovalue)
        secretName: mysecretkey4
        configMapName: myconfig
        forceUpdateConfigMap: true
        configMapArguments: --from-literal=myname=$(contosovalue)

高级

参数说明
versionOrLocation
版本
(可选) 显式选择要使用的 kubectl 版本,或指定 kubectl 二进制文件) 的路径 (位置。
默认值:版本
versionSpec
版本规范
(如果 versionOrLocation == 版本) 要使用的 kubectl 版本,则 (必需。 示例: 1.7.01.x.04.x.06.10.0>=6.10.0
默认值:1.13.2
checkLatest
检查最新版本
(可选) 如果为 true,则执行 kubectl 最新版本的检查。
默认值:false
specifyLocation
指定位置
(所需的) kubectl.exe文件的完整路径。
cwd
工作目录
(Kubectl 命令的可选) 工作目录。
默认值:$ (System.DefaultWorkingDirectory)
outputFormat
输出格式
(可选) 可接受的值: jsonYAML
默认值:json。
可以将它显式保留为空,就像默认为 kubectl 的 outputFormat 一样outputFormat: ''

故障排除

我的 Kubernetes 群集位于防火墙后面,而我使用的是托管代理。 我该如何部署到此群集?

通过允许托管代理的 IP 地址,你可以授予托管代理通过防火墙进行访问的权限。 有关更多详细信息,请参阅代理 IP 范围

开源

此任务在 GitHub 上开放源代码。 欢迎提供反馈和建议。