Tarea Kubectl

Azure Pipelines

Use esta tarea para implementar, configurar o actualizar un clúster de Kubernetes mediante la ejecución de comandos kubectl.

Conexión de servicio

La tarea funciona con dos tipos de conexión de servicio: Azure Resource Manager y Conexión de Kubernetes Service, que se describen a continuación.

Azure Resource Manager

ParámetrosDescripción
connectionType
Tipo de conexión de servicio
(Obligatorio) Azure Resource Manager cuando se usa Azure Kubernetes Service o conexión de Kubernetes Service para cualquier otro clúster.
Valor predeterminado: Azure Resource Manager
azureSubscriptionEndpoint
Suscripción de Azure
(Obligatorio) Nombre de la conexión de servicio de Azure.
azureResourceGroup
Resource group
(Obligatorio) Nombre del grupo de recursos dentro de la suscripción.
kubernetesCluster
Clúster de Kubernetes
(Obligatorio) Nombre del clúster de AKS.
useClusterAdmin
Uso de credenciales de administrador de clúster
(Opcional) Use credenciales de administrador de clúster en lugar de credenciales de usuario de clúster predeterminadas. Esto omitirá el control de acceso basado en rol.
namespace
Espacio de nombres
(Opcional) Espacio de nombres en el que se van a ejecutar los comandos kubectl. Si no se especifica, se usa el espacio de nombres predeterminado.

En este ejemplo de YAML se muestra Azure Resource Manager se usa para hacer referencia al clúster de Kubernetes. Se va a usar con uno de los comandos kubectl y los valores adecuados requeridos por el comando.

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)

Conexión de Kubernetes Service

ParámetrosDescripción
kubernetesServiceEndpoint
Conexión del servicio Kubernetes
(Obligatorio) Seleccione una conexión de servicio de Kubernetes.
namespace
Espacio de nombres
(Opcional) Espacio de nombres en el que se van a ejecutar los comandos kubectl. Si no se especifica, se usa el espacio de nombres predeterminado.

En este ejemplo de YAML se muestra cómo se usa una conexión de Kubernetes Service para hacer referencia al clúster de Kubernetes. Se va a usar con uno de los comandos kubectl y los valores adecuados requeridos por el comando.

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

Comandos:

La entrada del comando acepta uno de los siguientes comandos kubectl:

apply, create, delete, exec, expose, get, login, logout, logs, run, seto top.

ParámetrosDescripción
command
Comando
(Obligatorio) Aplica una configuración a un recurso por nombre de archivo o stdin.
Valor predeterminado: apply
useConfigurationFile
Uso de archivos de configuración
(Opcional) Use los archivos de configuración de Kubernetes con el comando kubectl. Escriba el nombre de archivo, el directorio o la dirección URL de los archivos de configuración de Kubernetes.
Valor predeterminado: false
arguments
Argumentos
(Opcional) Argumentos para el comando kubectl especificado.

En este ejemplo de YAML se muestra el comando 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

En este ejemplo de YAML se muestra el uso de un archivo de configuración con el comando 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

Secretos

Los objetos de Kubernetes de tipo secreto están diseñados para contener información confidencial, como contraseñas, tokens de OAuth y claves SSH. Colocar esta información en un secreto es más seguro y flexible que colocarla textualmente en una definición de pod o en una imagen de Docker. Azure Pipelines simplifica la adición de ImagePullSecrets a una cuenta de servicio o la configuración de cualquier secreto genérico, como se describe a continuación.

ImagePullSecret

ParámetrosDescripción
secretType
Tipo de secreto
(Obligatorio) Cree o actualice un objeto ImagePullSecret o cualquier otro secreto genérico. Valores aceptables: dockerRegistry para ImagePullSecret o genérico para cualquier otro tipo de secreto.
Valor predeterminado: dockerRegistry
containerRegistryType
Tipo de registro de contenedor
(Obligatorio) Valores aceptables: Azure Container Registryo Container Registry para cualquier otro registro.
Valor predeterminado: Azure Container Registry
azureSubscription
EndpointForSecrets

Suscripción de Azure
(Obligatorio si secretType == dockerRegistry y containerRegistryType == Azure Container Registry) Azure Resource Manager conexión de servicio en el ámbito de la suscripción que contiene la Azure Container Registry para la que se va a configurar ImagePullSecret.
azureContainerRegistry
Azure Container Registry
(Obligatorio si secretType == dockerRegistry y containerRegistryType == Azure Container Registry) El Azure Container Registry para el que se va a configurar ImagePullSecret.
secretName
Nombre del secreto
(Opcional) Nombre del secreto.
forceUpdate
Forzar el secreto de actualización
(Opcional) Elimine el secreto si existe y cree uno con valores actualizados.
Valor predeterminado: true.

En este ejemplo de YAML se muestra la configuración de 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

Secretos genéricos

ParámetrosDescripción
secretType
Tipo de secreto
(Obligatorio) Cree o actualice un objeto ImagePullSecret o cualquier otro secreto genérico. Valores aceptables: dockerRegistry para ImagePullSecret o genérico para cualquier otro tipo de secreto.
Valor predeterminado: dockerRegistry
secretArguments
Argumentos
(Opcional) Especifique las claves y los valores literales que se insertarán en el secreto. Por ejemplo: --from-literal=key1=value1 --from-literal=key2="top secret"
secretName
Nombre del secreto
(Opcional) Nombre del secreto.

En este ejemplo de YAML se crean secretos genéricos a partir de los valores literales especificados para la entrada 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

Las variables de canalización se pueden usar para pasar argumentos para especificar valores literales, como se muestra aquí:

    - 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 permite desacoplar artefactos de configuración del contenido de la imagen para mantener la portabilidad de las aplicaciones en contenedores.

ParámetrosDescripción
configMapName
ConfigMapName
(Opcional) Nombre de ConfigMap.
forceUpdateConfigMap
Forzar la actualización de configmap
(Opcional) Elimine el archivo configmap si existe y cree uno con valores actualizados.
Valor predeterminado: false
useConfigMapFile
Usar archivo
(Opcional) Cree un objeto ConfigMap a partir de un archivo individual o de varios archivos especificando un directorio.
Valor predeterminado: false
configMapFile
Archivo ConfigMap
(Obligatorio si useConfigMapFile == true) Especifique un archivo o directorio que contenga configMaps. Tenga en cuenta que usará el --from-file argumento .
configMapArguments
Argumentos
(Opcional) Especifique las claves y los valores literales que se insertarán en configMap. Por ejemplo: --from-literal=key1=value1 --from-literal=key2="top secret"

En este ejemplo de YAML se crea configMap señalando a un archivo ConfigMap:

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

En este ejemplo de YAML se crea un elemento ConfigMap especificando los valores literales directamente como entrada configMapArguments y estableciendo forceUpdate en true:

    - 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

Puede usar variables de canalización para pasar valores literales al crear ConfigMap, como se muestra aquí:

    - 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)

Avanzado

ParámetrosDescripción
versionOrLocation
Versión
(Opcional) Elija explícitamente la versión de kubectl que se va a usar o especifique la ruta de acceso (ubicación) del binario kubectl.
Valor predeterminado: versión
versionSpec
Especificación de versión
(Obligatorio si versionOrLocation == versión) Versión del kubectl que se va a usar. Ejemplos: 1.7.0, 1.x.0,4.x.0,6.10.0, =6.10.0
Valor predeterminado: 1.7.0
checkLatest
Comprobación de la versión más reciente
(Opcional) Si es true, se realiza una comprobación de la versión más reciente de kubectl.
Valor predeterminado: false
specifyLocation
Especificación de ubicación
(Obligatorio) Ruta de acceso completa al kubectl.exe archivo.
cwd
Directorio de trabajo
(Opcional) Directorio de trabajo para el comando Kubectl.
Valor predeterminado: $(System.DefaultWorkingDirectory)
outputFormat
Formato de salida
(Opcional) Valores aceptables: jsono YAML.
Valor predeterminado: json.
Puede dejarla en blanco explícitamente como el valor outputFormat: '' predeterminado de outputFormat del kubectl.

Solución de problemas

Mi clúster de Kubernetes está detrás de un firewall y estoy usando agentes hospedados. ¿Cómo se puede implementar en este clúster?

Puede conceder acceso a los agentes hospedados a través del firewall, permitiendo las direcciones IP de los agentes hospedados. Para más información, consulte el artículo sobre los intervalos IP del agente.

Código Abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.