Ejercicio: Configuración del entorno de Azure DevOps
En esta sección, configurará la organización de Azure DevOps para continuar con el resto de este módulo y creará un entorno de Azure Kubernetes Service (AKS) en el que implementar la aplicación.
Para lograr estos objetivos, hará lo siguiente:
- Agregue un usuario a la organización de Azure DevOps.
- Configure el proyecto de Azure DevOps.
- Administre el flujo de trabajo con Azure Boards.
- Cree recursos de Azure mediante la CLI de Azure.
- Cree variables de canalización en Azure Pipelines.
- Cree una conexión de servicio para autenticación con Azure.
- Actualice el manifiesto de implementación de Kubernetes.
Agregar un usuario a su organización
Para completar este módulo, se requiere una suscripción de Azure . Puede empezar a trabajar con Azure de forma gratuita.
Aunque no es necesario trabajar con Azure DevOps, es necesario implementar una suscripción de Azure en los recursos de Azure a través de Azure DevOps. Para que el proceso sea más sencillo, use la misma cuenta Microsoft para iniciar sesión tanto en la suscripción de Azure como en la organización de Azure DevOps.
Si inicia sesión en Azure y Azure DevOps con diferentes cuentas Microsoft, puede continuar agregando un usuario a su organización de DevOps en la cuenta microsoft asociada a su suscripción de Azure. Consulte Agregar usuarios a su organización o proyecto para obtener más detalles. Al agregar el usuario, seleccione el nivel de acceso Básico .
Después de agregar el usuario con el nivel de acceso Básico, cierre sesión en Azure DevOps e inicie sesión de nuevo con la cuenta Microsoft asociada a su suscripción de Azure.
Consigue el proyecto de Azure DevOps
En esta sección, ejecutará una plantilla para crear el proyecto en Azure DevOps.
Ejecución de la plantilla
Ejecute una plantilla que configura la organización de Azure DevOps.
Obtenga y ejecute el proyecto ADOGenerator en Visual Studio o el IDE que prefiera.
Cuando se le pida que escriba el número de plantilla de la lista de plantillas, escriba 40 para Automatizar implementaciones de varios contenedores en Azure Kubernetes Services con Azure Pipelines y presione Entrar.
Elija el método de autenticación. Puede configurar y usar un token de acceso personal (PAT) o usar el inicio de sesión del dispositivo.
Nota:
Si configura un PAT, asegúrese de autorizar los ámbitos necesarios. En este módulo, puede usar el acceso completo, pero en una situación real, debe asegurarse de conceder solo los ámbitos necesarios.
Escriba el nombre de la organización de Azure DevOps y presione Entrar.
Si se le solicita, escriba el PAT de Azure DevOps y presione Entrar.
Escriba un nombre de proyecto como Space Game - web - Kubernetes y presione Entrar.
Una vez creado el proyecto, vaya a la organización de Azure DevOps en el explorador (en
https://dev.azure.com/<your-organization-name>/
) y seleccione el proyecto.
Bifurcar el repositorio
Si aún no lo ha hecho, cree una bifurcación del repositorio mslearn-tailspin-spacegame-web-kubernetes .
En GitHub, vaya al repositorio mslearn-tailspin-spacegame-web-kubernetes .
Seleccione Bifurcar en la parte superior derecha de la pantalla.
Elija su cuenta de GitHub como propietario y, a continuación, seleccione Crear un fork.
Importante
La unidad Limpieza del entorno de Azure DevOps en este módulo incluye pasos cruciales para la limpieza. Se recomienda realizar estos pasos para evitar quedarse sin minutos de compilación gratuitos. Incluso si no finaliza este módulo, es importante seguir los pasos de limpieza.
Establecimiento de la visibilidad del proyecto
Inicialmente, tu bifurcación del repositorio Space Game en GitHub está configurada como pública, mientras que el proyecto creado por la plantilla de Azure DevOps está configurado como privado. Cualquier persona puede acceder a un repositorio público en GitHub, mientras que a un repositorio privado solo puede acceder usted y personas con las que decida compartirlo. Del mismo modo, en Azure DevOps, los proyectos públicos proporcionan acceso de solo lectura a los usuarios no autenticados, mientras que los privados requieren que los usuarios tengan acceso y se autentiquen para acceder a los servicios.
En este momento, no es necesario modificar ninguna de estas configuraciones para los fines de este módulo. Sin embargo, para sus proyectos personales, debe determinar la visibilidad y el acceso que desea conceder a otros usuarios. Por ejemplo, si el proyecto es de código abierto, podría elegir que tanto el repositorio de GitHub como el proyecto de Azure DevOps fueran públicos. Si el proyecto es de su propiedad, normalmente tanto el repositorio de GitHub como el proyecto de Azure DevOps son privados.
Más adelante encontrará los siguientes recursos útiles para determinar qué opción es mejor para su proyecto:
- Uso de proyectos privados y públicos
- Cambio de la visibilidad del proyecto a público o privado
- Configurar la visibilidad de un repositorio
Cambio del elemento de trabajo al estado En curso
En este paso, asignarás un elemento de trabajo a ti mismo en Azure Boards y lo moverás al estado En curso. En escenarios reales, usted y su equipo crearían elementos de trabajo al principio de cada sprint o iteración de trabajo.
La asignación de elementos de trabajo proporciona una lista de comprobación desde la que trabajar y proporciona a otros miembros del equipo visibilidad sobre el progreso y el trabajo restante. También ayuda a aplicar límites de trabajo en curso (WIP) para evitar que el equipo tome demasiado trabajo a la vez.
Vaya a Boards en Azure DevOps y seleccione Boards en el menú.
Asigne el Crear una versión de varios contenedores del sitio web orquestado con Kubernetes elemento de trabajo usted mismo seleccionando la flecha hacia abajo situada en la parte inferior de la tarjeta.
Arrastre y coloque el elemento de trabajo desde la columna To Do a la columna Doing. Moverá la tarea a la columna Listo al final de este módulo después de completarla.
Creación del entorno de Azure Kubernetes Service
En este paso, creará los recursos necesarios de Azure Kubernetes Service para implementar la nueva versión de contenedor del sitio web.
En el módulo anterior, Creación de una canalización de versión con Azure Pipelines, usó Azure Portal para crear recursos de Azure. Aunque el portal es útil para explorar las funcionalidades de Azure y realizar tareas básicas, la creación de componentes como Azure Kubernetes Service puede ser un proceso lento.
En este módulo, usará la CLI de Azure para crear los recursos necesarios para implementar y ejecutar la aplicación en Azure Kubernetes Service. Se puede acceder a la CLI de Azure desde un terminal o a través de Visual Studio Code. Sin embargo, en este módulo, accederá a la CLI de Azure desde Azure Cloud Shell. Cloud Shell es una experiencia de shell basada en explorador hospedada en la nube, que viene preconfigurada con la CLI de Azure para su uso con la suscripción de Azure.
Importante
Para completar los ejercicios de este módulo, necesita su propia suscripción de Azure.
Inicio de Cloud Shell
Vaya a Azure Portal e inicie sesión.
Seleccione la opción Cloud Shell en el menú y elija la experiencia de Bash cuando se le solicite.
Nota:
Cloud Shell necesita un recurso de Azure Storage para conservar los archivos que se creen en Cloud Shell. Al abrir Cloud Shell por primera vez, se le pedirá que cree un grupo de recursos, una cuenta de almacenamiento y un recurso compartido de Azure Files. Esta configuración se usa automáticamente para todas las sesiones de Cloud Shell futuras.
Selección de una región de Azure
Una región hace referencia a uno o varios centros de datos de Azure ubicados en un área geográfica. Las regiones como Este de EE. UU., Oeste de EE. UU. y Norte de Europa son ejemplos de tales áreas. Cada recurso de Azure, incluida una instancia de App Service, está asociado a una región.
Para simplificar la ejecución de comandos, comience estableciendo una región predeterminada. Una vez establecida una región predeterminada, los comandos posteriores usan esa región de forma predeterminada, a menos que especifique explícitamente otra región.
En Cloud Shell, ejecute el siguiente comando para enumerar las regiones disponibles en la suscripción de Azure:
az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
Seleccione una región en la columna Nombre de la salida que esté geográficamente cerca de usted. Por ejemplo, puede elegir eastasia o westus2.
Ejecute el siguiente comando para establecer la región predeterminada. Reemplace REGION por el nombre de la región que eligió anteriormente.
az configure --defaults ___location=<REGION>
En este ejemplo se establece
westus2
como región predeterminada.az configure --defaults ___location=westus2
Creación de variables de Bash
El uso de variables de Bash puede hacer que el proceso de configuración sea más cómodo y menos propenso a errores. Este enfoque ayuda a evitar errores tipográficos accidentales mediante la definición de cadenas de texto compartido como variables que se pueden usar en todo el script.
Desde Cloud Shell, genere un número aleatorio para simplificar la creación de nombres únicos globales para determinados servicios en el paso siguiente.
resourceSuffix=$RANDOM
Cree nombres únicos globales para la instancia de Azure Container Registry y Azure Kubernetes Service. Tenga en cuenta que estos comandos usan comillas dobles, lo que indica a Bash que interpole las variables mediante la sintaxis insertada.
registryName="tailspinspacegame${resourceSuffix}" aksName="tailspinspacegame-${resourceSuffix}"
Cree otra variable de Bash para almacenar el nombre del grupo de recursos.
rgName='tailspin-space-game-rg'
Busque la versión más reciente de AKS.
az aks get-versions
Anote la versión más reciente.
Creación de recursos de Azure
Nota:
En este tutorial, la configuración de red predeterminada se usa con fines de aprendizaje. Esta configuración permite acceder a su sitio web desde Internet. Sin embargo, en la práctica, puede optar por configurar una red virtual de Azure que coloque el sitio web en una red que no sea enrutable por Internet y que solo sea accesible por usted y su equipo. Más adelante, podría volver a configurar la red para que el sitio web esté disponible para los usuarios.
Ejecute el comando siguiente para crear un grupo de recursos con el nombre que definió anteriormente:
az group create --name $rgName
Ejecute el
az acr create
comando para crear una instancia de Azure Container Registry con el nombre que definió anteriormente:az acr create \ --name $registryName \ --resource-group $rgName \ --sku Standard
Ejecute el
az aks create
comando para crear una instancia de AKS con el nombre que definió anteriormente. Reemplace<latest-AKS-version>
por la versión que anotó anteriormente.az aks create \ --name $aksName \ --resource-group $rgName \ --enable-addons monitoring \ --kubernetes-version <latest-AKS-version> \ --generate-ssh-keys
Nota:
La finalización de la implementación de AKS puede tardar entre 10 y 15 minutos.
Cree una variable para almacenar el identificador del principal de servicio establecido para la instancia de AKS.
clientId=$(az aks show \ --resource-group $rgName \ --name $aksName \ --query "identityProfile.kubeletidentity.clientId" \ --output tsv)
Cree una variable para almacenar el identificador de Azure Container Registry:
acrId=$(az acr show \ --name $registryName \ --resource-group $rgName \ --query "id" \ --output tsv)
Ejecute el
az acr list
comando para recuperar la dirección URL del servidor de inicio de sesión de la instancia de Azure Container Registry (ACR):az acr list \ --resource-group $rgName \ --query "[].{loginServer: loginServer}" \ --output table
Asegúrese de tomar nota del servidor de acceso del registro de contenedores. Necesitará esta información más adelante al configurar la canalización. Este es un ejemplo:
LoginServer -------------------------------- tailspinspacegame4692.azurecr.io
Ejecute el
az role assignment create
comando para crear una asignación de roles para autorizar al clúster de AKS a conectarse a Azure Container Registry:az role assignment create \ --assignee $clientId \ --role AcrPull \ --scope $acrId
Importante
La unidad Limpieza del entorno de Azure DevOps en este módulo incluye pasos cruciales para la limpieza. Se recomienda realizar estos pasos para evitar quedarse sin minutos de compilación gratuitos. Incluso si no finaliza este módulo, es importante seguir los pasos de limpieza.
Creación de un grupo de variables
En esta sección, agregarás una variable a tu canalización para almacenar el nombre de tu registro de contenedores de Azure. Se recomienda definir el nombre de la instancia de Azure Container Registry como una variable en la configuración de la canalización en lugar de codificarlo de forma rígida. Esto hace que la configuración sea más reutilizable y, en caso de que el nombre de la instancia cambie, puede actualizar fácilmente la variable y desencadenar la canalización sin tener que modificar la configuración.
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Canalizaciones y, después, Biblioteca en el panel de navegación izquierdo.
Seleccione Grupos de variables y, a continuación, seleccione + Grupo de variables para agregar un nuevo grupo de variables.
En la sección Propiedades , escriba Release para el nombre del grupo de variables.
En la sección Variables , seleccione Agregar.
Escriba RegistryName como nombre de variable y, para el valor, escriba el servidor de inicio de sesión de Azure Container Registry, como tailspinspacegame4692.azurecr.io.
En la parte superior de la página, seleccione Guardar para guardar la variable de canalización. Este es un ejemplo de cómo podría parecer su grupo de variables
Creación de conexiones de servicio
El siguiente paso es crear conexiones de servicio que permitan a Azure Pipelines acceder a las instancias de Azure Container Registry y Azure Kubernetes Service. Al crear estas conexiones de servicio, Azure Pipelines puede empujar tus contenedores e indicar al clúster de Azure Kubernetes Service (AKS) que los extraiga y actualice el servicio desplegado.
Importante
Asegúrese de que ha iniciado sesión en Azure Portal y Azure DevOps con la misma cuenta de Microsoft.
Crear una conexión de servicio de Registro de Docker
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Configuración del proyecto en la esquina inferior de la página.
Seleccione Conexiones de servicio en la sección Canalizaciones .
Seleccione New service connection (Nueva conexión de servicio), Docker Registry (Registro de Docker) y, a continuación, seleccione Next (Siguiente).
Cerca de la parte superior de la página, seleccione Azure Container Registry y, a continuación, seleccione Entidad de servicio para el tipo de autenticación.
Escriba los valores siguientes para cada opción:
Configuración Importancia Suscripción Su suscripción de Azure Azure Registro de Contenedores Seleccione la que creó anteriormente. Nombre de conexión de servicio Conexión del Registro de Contenedores Asegúrese de que la casilla Conceder permiso de acceso a todas las canalizaciones está seleccionada.
Cuando haya terminado, haga clic en Guardar.
Crear conexión de servicio ARM
Ahora creará una conexión de servicio de Azure Resource Manager para autenticarse con el clúster de AKS. Estamos usando una conexión de servicio arm en lugar de Kubernetes porque los tokens de larga duración ya no se crean de forma predeterminada desde Kubernetes 1.24. Consulte esta entrada de blog de DevOps para obtener más detalles: Guía de conexión de servicio para los clientes de AKS que usan tareas de Kubernetes.
Seleccione Nueva conexión de servicio, luego, seleccione Azure Resource Manager y, por último, Siguiente.
Seleccione Principal de servicio (automático) y, a continuación, seleccione Siguiente.
Seleccione Suscripción para el nivel de ámbito.
Escriba los valores siguientes para cada opción.
Configuración Importancia Suscripción Su suscripción de Azure Grupo de recursos Seleccione la que creó anteriormente. Nombre de conexión de servicio Conexión de clúster de Kubernetes Asegúrese de que la casilla Conceder permiso de acceso a todas las canalizaciones está seleccionada.
Cuando haya terminado, haga clic en Guardar.
Creación de un entorno de canalización
Seleccione Canalizacionesy, a continuación, seleccione Entornos.
Seleccione Crear entorno para crear un nuevo entorno.
En el campo Nombre, escriba Dev.
Seleccione Ninguno en la sección Recurso y, a continuación, seleccione Crear para crear el entorno de canalización.
Actualización del manifiesto de implementación de Kubernetes
En esta sección, actualizará el manifiesto de Kubernetes deployment.yml para que apunte al registro de contenedor que creó anteriormente.
Vaya a la cuenta de GitHub y seleccione el repositorio que bifurcó para este módulo: mslearn-tailspin-spacegame-web-kubernetes.
Abra el archivo manifests/deployment.yml en modo de edición.
Cambie las referencias de la imagen del contenedor para usar su servidor de inicio de sesión de ACR. El siguiente manifiesto usa tailspinspacegame2439.azurecr.io como ejemplo.
apiVersion : apps/v1 kind: Deployment metadata: name: web spec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: tailspinspacegame4692.azurecr.io/web ports: - containerPort: 80 apiVersion : apps/v1 kind: Deployment metadata: name: leaderboard spec: replicas: 1 selector: matchLabels: app: leaderboard template: metadata: labels: app: leaderboard spec: containers: - name: leaderboard image: tailspinspacegame4692.azurecr.io/leaderboard ports: - containerPort: 80
Confirme los cambios en la rama
main
.