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ámetros | Descripción |
|---|---|
connectionTypeTipo 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 |
azureSubscriptionEndpointSuscripción de Azure | (Obligatorio) Nombre de la conexión de servicio de Azure. |
azureResourceGroupResource group | (Obligatorio) Nombre del grupo de recursos dentro de la suscripción. |
kubernetesClusterClúster de Kubernetes | (Obligatorio) Nombre del clúster de AKS. |
useClusterAdminUso 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. |
namespaceEspacio 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ámetros | Descripción |
|---|---|
kubernetesServiceEndpointConexión del servicio Kubernetes | (Obligatorio) Seleccione una conexión de servicio de Kubernetes. |
namespaceEspacio 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ámetros | Descripción |
|---|---|
commandComando | (Obligatorio) Aplica una configuración a un recurso por nombre de archivo o stdin. Valor predeterminado: apply |
useConfigurationFileUso 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 |
argumentsArgumentos | (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ámetros | Descripción |
|---|---|
secretTypeTipo 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 |
containerRegistryTypeTipo de registro de contenedor | (Obligatorio) Valores aceptables: Azure Container Registryo Container Registry para cualquier otro registro. Valor predeterminado: Azure Container Registry |
azureSubscriptionSuscripció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. |
azureContainerRegistryAzure Container Registry | (Obligatorio si secretType == dockerRegistry y containerRegistryType == Azure Container Registry) El Azure Container Registry para el que se va a configurar ImagePullSecret. |
secretNameNombre del secreto | (Opcional) Nombre del secreto. |
forceUpdateForzar 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ámetros | Descripción |
|---|---|
secretTypeTipo 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 |
secretArgumentsArgumentos | (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" |
secretNameNombre 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ámetros | Descripción |
|---|---|
configMapNameConfigMapName | (Opcional) Nombre de ConfigMap. |
forceUpdateConfigMapForzar la actualización de configmap | (Opcional) Elimine el archivo configmap si existe y cree uno con valores actualizados. Valor predeterminado: false |
useConfigMapFileUsar archivo | (Opcional) Cree un objeto ConfigMap a partir de un archivo individual o de varios archivos especificando un directorio. Valor predeterminado: false |
configMapFileArchivo ConfigMap | (Obligatorio si useConfigMapFile == true) Especifique un archivo o directorio que contenga configMaps. Tenga en cuenta que usará el --from-file argumento . |
configMapArgumentsArgumentos | (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ámetros | Descripción |
|---|---|
versionOrLocationVersió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 |
versionSpecEspecificació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 |
checkLatestComprobació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 |
specifyLocationEspecificación de ubicación | (Obligatorio) Ruta de acceso completa al kubectl.exe archivo. |
cwdDirectorio de trabajo | (Opcional) Directorio de trabajo para el comando Kubectl. Valor predeterminado: $(System.DefaultWorkingDirectory) |
outputFormatFormato 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.