Kubectl 任务
Azure DevOps Services
使用此任务通过运行 kubectl 命令来部署、配置或更新 Kubernetes 群集。
服务连接
该任务适用于两种服务连接类型:Azure 资源管理器和 Kubernetes 服务连接,如下所述。
Azure 资源管理器
| 参数 | 说明 |
|---|---|
connectionType服务连接类型 | 使用任何其他群集的 Azure Kubernetes 服务 或 Kubernetes 服务连接时, (Azure 资源管理器必需) 。 默认值:Azure 资源管理器 |
azureSubscriptionEndpointAzure 订阅 | (Azure 服务连接所需的) 名称。 |
azureResourceGroup资源组 | (订阅中资源组的必需) 名称。 |
kubernetesClusterKubernetes 群集 | (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 服务连接
| 参数 | 说明 |
|---|---|
kubernetesServiceEndpointKubernetes 服务连接 | (需要) 选择 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 容器注册表 |
azureSubscriptionAzure 订阅 | (如果 secretType == dockerRegistry 和 containerRegistryType == Azure 容器注册表) Azure 资源管理器服务连接范围限定为包含要为其设置 ImagePullSecret 的Azure 容器注册表的订阅,则 (必需。 |
azureContainerRegistryAzure 容器注册表 | (如果 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 可将配置项目与映像内容分离,以保持容器化应用程序的可移植性。
| 参数 | 说明 |
|---|---|
configMapNameConfigMapName | (ConfigMap 的可选) 名称。 |
forceUpdateConfigMap强制更新配置映射 | (可选) 删除配置映射(如果存在)并创建具有更新值的新配置映射。 默认值:false |
useConfigMapFile使用文件 | (可选) 通过指定目录从单个文件或从多个文件创建 ConfigMap。 默认值:false |
configMapFileConfigMap 文件 | 如果 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.0、 1.x.0、 4.x.0、 6.10.0、 >=6.10.0 默认值:1.13.2 |
checkLatest检查最新版本 | (可选) 如果为 true,则执行 kubectl 最新版本的检查。 默认值:false |
specifyLocation指定位置 | (所需的) kubectl.exe文件的完整路径。 |
cwd工作目录 | (Kubectl 命令的可选) 工作目录。 默认值:$ (System.DefaultWorkingDirectory) |
outputFormat输出格式 | (可选) 可接受的值: json 或 YAML。 默认值:json。 可以将它显式保留为空,就像默认为 kubectl 的 outputFormat 一样 outputFormat: '' |
故障排除
我的 Kubernetes 群集位于防火墙后面,而我使用的是托管代理。 我该如何部署到此群集?
通过允许托管代理的 IP 地址,你可以授予托管代理通过防火墙进行访问的权限。 有关更多详细信息,请参阅代理 IP 范围
开源
此任务在 GitHub 上开放源代码。 欢迎提供反馈和建议。