AzureFunctionOnKubernetes@1 - Kubernetes v1 上的 Azure 函数任务

将 Azure 函数部署到 Kubernetes 群集。

语法

# Azure Function on Kubernetes v1
# Deploy Azure function to Kubernetes cluster.
- task: AzureFunctionOnKubernetes@1
  inputs:
  # Service Connections
    connectionType: 'Kubernetes Service Connection' # 'Azure Resource Manager' | 'Kubernetes Service Connection'. Required. Service connection type. Default: Kubernetes Service Connection.
    dockerRegistryServiceConnection: # string. Required. Docker registry service connection. 
    #kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when connectionType = Kubernetes Service Connection. Kubernetes service connection. 
    #azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when connectionType = Azure Resource Manager. Azure subscription. 
    #azureResourceGroup: # string. Required when connectionType = Azure Resource Manager. Resource group. 
    #kubernetesCluster: # string. Required when connectionType = Azure Resource Manager. Kubernetes cluster. 
  # Commands
    #namespace: # string. Kubernetes namespace. 
    #secretName: # string. Secret Name. 
    #dockerHubNamespace: # string. Docker Hub namespace. 
    appName: # string. Required. Application Name. 
    #functionRootDirectory: # string. Function root directory. 
    #waitForStability: true # boolean. Wait for stability. Default: true.
    #arguments: # string. Arguments.

输入

connectionType - 服务连接类型
string. 必需。 允许的值:Azure Resource ManagerKubernetes Service Connection。 默认值:Kubernetes Service Connection

选择 Kubernetes 服务连接类型。

  • Kubernetes Service Connection - 允许提供 KubeConfig 文件、指定服务帐户或使用 Azure 订阅 选项导入 AKS 实例。 使用 Azure 订阅 选项导入 AKS 实例需要在服务连接配置时访问 Kubernetes 群集。
  • Azure Resource Manager - 允许选择 AKS 实例。 在服务连接配置时不访问 Kubernetes 群集。

有关更多信息,请参见备注


dockerRegistryServiceConnection - Docker 注册表服务连接
string. 必需。

选择 Docker 注册表服务连接。


kubernetesServiceConnection - Kubernetes 服务连接
输入别名: kubernetesServiceEndpointstring. 当 connectionType = Kubernetes Service Connection 时,需要此选项。

选择 Kubernetes 服务连接。


azureSubscriptionConnection - Azure 订阅
输入别名: azureSubscriptionEndpointstring. 当 connectionType = Azure Resource Manager 时,需要此选项。

选择包含Azure 容器注册表的 Azure 资源管理器 订阅。注意:若要配置新服务连接,请从列表中选择 Azure 订阅,然后单击“授权”。 如果未列出订阅,或者想要使用现有的服务主体,可以使用“添加”或“管理”按钮设置 Azure 服务连接。


azureResourceGroup - 资源组
string. 当 connectionType = Azure Resource Manager 时,需要此选项。

选择 Azure 资源组。


kubernetesCluster - Kubernetes 群集
string. 当 connectionType = Azure Resource Manager 时,需要此选项。

选择 Azure 托管群集。


namespace - Kubernetes 命名空间
string.

Kubernetes 命名空间。


secretName - 机密名称
string.

包含函数配置数据的 Kubernetes 机密 (,例如AzureWebJobsStorage: Azure storage connection string) 。


dockerHubNamespace - Docker Hub命名空间
string.

Docker Hub命名空间。 专用Docker Hub存储库是必需的。


appName - 应用程序名称
string. 必需。

应用程序名称。 创建的 Kubernetes 对象使用此名称。 这应遵循资源名称的 Kubernetes 命名约定。


functionRootDirectory - 函数根目录
string.

函数根目录。 应包含 host.json。 Docker 生成和推送从此目录执行。


waitForStability - 等待稳定
boolean. 默认值:true

等待 Kubernetes 对象达到所需状态。


arguments - 参数
string.

将参数传递给 命令。 例如:
--no-docker --service-type NodePort。


任务控制选项

除了任务输入,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

无。

备注

访问 AKS 时的 Kubernetes 服务连接注意事项

可以使用以下任一选项创建 Kubernetes 服务连接。

  • KubeConfig
  • 服务帐户
  • Azure 订阅

选择 Kubernetes 服务连接身份验证方法的屏幕截图。

选择 Azure 订阅 选项时,Azure DevOps 需要在服务连接配置时访问 Kubernetes。 无法创建服务连接的原因可能有多种,例如,你 创建了专用群集 ,或者该群集 禁用了本地帐户。 在这些情况下,Azure DevOps 无法在服务连接配置时连接到群集,你将看到停滞的 “加载命名空间” 屏幕。

选择 Kubernetes 服务连接身份验证对话框的屏幕截图,该对话框在加载命名空间时停滞不前。

从 Kubernetes 1.24 开始, 默认情况下不再创建生存期较长的令牌。 Kubernetes 建议不要使用生存期较长的令牌。 因此,使用使用 Azure 订阅 选项创建的 Kubernetes 服务连接的任务无法访问进行身份验证所需的永久令牌,并且无法访问 Kubernetes 群集。 这还会导致冻结“ 加载命名空间” 对话框。

使用 Azure 资源管理器 服务连接访问 AKS

对于 AKS 客户,Azure 资源管理器 服务连接类型提供了连接到专用群集或禁用本地帐户的群集的最佳方法。 此方法不依赖于创建服务连接时的群集连接。 对 AKS 的访问延迟到管道运行时,其优点如下:

  • 可以从自承载代理或规模集代理执行对 (专用) AKS 群集的访问,并视线到群集。
  • 为使用 Azure 资源管理器 服务连接的每个任务创建令牌。 这可确保使用短期令牌连接到 Kubernetes,这是 Kubernetes 建议
  • 即使禁用了本地帐户,也可以访问 AKS。

服务连接常见问题解答

我收到以下错误消息:找不到任何与服务帐户关联的机密。 发生了什么?

你正在使用带有 Azure 订阅选项的 Kubernetes 服务连接。 我们将更新此方法以创建生存期较长的令牌。 这预计将在 5 月中旬推出。 但是,根据 Kubernetes 指南,建议开始使用 Azure 服务连接类型,而不是使用生存期较长的令牌。

我使用的是 AKS,不想更改任何内容,是否可以继续将任务与 Kubernetes 服务连接配合使用?

我们将更新此方法以创建生存期较长的令牌。 这预计将在 5 月中旬推出。 但是,请注意,此方法违反 Kubernetes 指南

我使用的是 Kubernetes 任务和 Kubernetes 服务连接,而不是 AKS。 我应该担心吗?

任务将继续像以前一样工作。

是否会删除 Kubernetes 服务连接类型?

我们的 Kubernetes 任务适用于任何 Kubernetes 群集,无论它们在何处运行。 Kubernetes 服务连接将继续存在。

我是 AKS 客户,一切正常,我应该采取行动吗?

无需更改任何内容。 如果在创建过程中使用 Kubernetes 服务连接并选择了 Azure 订阅,则应了解 有关使用长期令牌的 Kubernetes 指南

我正在创建 Kubernetes 环境,但无法选择使用服务连接

如果在环境创建期间无法访问 AKS,可以使用空环境并将输入设置为 connectionType Azure 资源管理器服务连接。

我已使用 Azure Active Directory RBAC 配置了 AKS,但管道不起作用。 这些更新会解决此问题吗?

启用 AAD RBAC 时访问 Kubernetes 与令牌创建无关。 为了防止交互式提示,我们将在将来的更新中支持 kubelogin

要求

要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置变量 任意
代理版本 所有支持的代理版本。
任务类别 部署