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:
- Añada un usuario en la organización de DevOps.
- Configure el proyecto de Azure DevOps.
- Administre el flujo de trabajo con Azure Boards.
- Crear recursos de Azure con la CLI de Azure.
- Crear variables de canalización en Azure Pipelines.
- Cree una conexión de servicio para autenticarse con Azure.
- Actualice el manifiesto de implementación de Kubernetes.
Agregar un usuario a la organización
Para completar este módulo, se requiere una suscripción de Azure. Puede comenzar 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 simplificar el proceso, use la misma cuenta de Microsoft para iniciar sesión en la suscripción de Azure y en la organización de Azure DevOps.
Si inicia sesión en Azure y Azure DevOps con cuentas de Microsoft diferentes, puede continuar agregando un usuario a su organización de DevOps en la cuenta de Microsoft asociada a su suscripción de Azure. Para obtener más información, consulte Adición de usuarios a su organización o proyecto. 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 la sesión de Azure DevOps e inicie sesión con la cuenta de Microsoft asociada a la suscripción de Azure.
Obtención del proyecto de Azure DevOps
En esta sección, ejecutará una plantilla para crear el proyecto en Azure DevOps.
Ejecución de la plantilla
Ejecute la plantilla para configurar el proyecto de Azure DevOps para este módulo:
En el portal del generador de demostraciones de Azure DevOps, siga estos pasos para ejecutar la plantilla:
Seleccione Iniciar sesión y acepte los términos de uso.
En la página Crear proyecto, seleccione la organización de Azure DevOps y escriba un nombre de proyecto, como Space Game - web - Kubernetes.
Seleccione Sí, quiero bifurcar este repositorio y, a continuación, Autorizar. Si aparece una ventana, conceda permiso para acceder a la cuenta de GitHub.
Importante
La selección de esta opción es necesaria para que la plantilla se conecte al repositorio de GitHub. Elija esta opción incluso si ya ha bifurcado el repositorio Space Game, ya que la plantilla usará la bifurcación existente.
Seleccione Crear proyecto y espere a que la plantilla termine de ejecutarse, lo que podría tardar unos minutos.
Seleccione Navegar al proyecto para acceder al proyecto de Azure DevOps.
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. Aunque no haya completado este módulo, es importante seguir los pasos de limpieza.
Establecimiento de la visibilidad del proyecto
La bifurcación del repositorio Space Game en GitHub inicialmente se establece en pública mientras que el proyecto creado por la plantilla de Azure DevOps se establece en 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
- Inicio rápido: Transformación del proyecto privado en público
- Configurar la visibilidad de un repositorio
Cambio del elemento de trabajo al estado En curso
En este paso, asignará un elemento de trabajo a usted mismo en Azure Boards y lo moverá al estado En curso. En escenarios reales, usted y el equipo tendrían que crear 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 en el trabajo en curso (WIP) para evitar que el equipo asuma demasiado trabajo al mismo tiempo.
Vaya a Boards in Azure DevOps, y seleccione Boards en el menú.
Asígnese el elemento de trabajo Crear versión de varios contenedores del sitio web orquestado con Kubernetes, seleccionando la flecha hacia abajo en la parte inferior de la tarjeta.
Arrastre el elemento de trabajo de la columna Tareas pendientes y colóquelo en la columna En curso. Moverá la tarea a la columna Listo al final de este módulo después de finalizar.
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, Cree una canalización de versión con Azure Pipelines, ha usado 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, se 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 se accede 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 configurada previamente con la CLI de Azure para su uso con la suscripción de Azure.
Importante
Para completar los ejercicios de este módulo, necesita una suscripción de Azure propia.
Iniciar Cloud Shell
Vaya a Azure Portal e inicie sesión.
Seleccione la opción Cloud Shell en el menú y, después, 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. Regiones como Este de EE. UU., Oeste de EE. UU. y Norte de Europa son ejemplos de estas áreas. A cada recurso de Azure, incluida una instancia de App Service, se le asocia una región.
Para simplificar el proceso de ejecución de comandos, comience configurando una región predeterminada. Una vez establecida una región predeterminada, los comandos posteriores usarán esa región de forma predeterminada, a menos que especifique explícitamente otra región.
En Cloud Shell, ejecute el comando siguiente para ver las regiones que están disponibles en su suscripción de Azure:
az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
Seleccione una región de la columna Nombre de la salida que esté geográficamente cerca de usted. Por ejemplo, puede escoger 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 la 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 instalación sea más cómodo y menos propenso a errores. Este enfoque ayuda a evitar errores tipográficos casuales 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 ciertos servicios en el paso siguiente.
resourceSuffix=$RANDOM
Cree nombres únicos globales para las instancias de Azure Container Registry y Azure Kubernetes Service. Tenga en cuenta que estos comandos usan comillas dobles, lo que indica a Bash que debe interpolar 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 última versión.
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 que se acceda a su sitio web desde Internet. Aun así, en la práctica, podría elegir configurar una red virtual de Azure que coloque el sitio web en una red que no sea enrutable a Internet y a la que solo usted y el equipo puedan acceder. Más adelante, puede volver a configurar la red para que el sitio web esté disponible para los usuarios.
Ejecute el siguiente comando para crear un grupo de recursos con el nombre que ha definido previamente:
az group create --name $rgName
Ejecute el comando
az acr create
para crear una instancia de Azure Container Registry con el nombre que ha definido previamente:az acr create \ --name $registryName \ --resource-group $rgName \ --sku Standard
Ejecute el comando
az aks create
para crear una instancia de AKS con el nombre que definió previamente. 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 podría tardar entre 10 y 15 minutos.
Cree una variable para almacenar el identificador de la entidad de servicio configurada 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 la instancia de Azure Container Registry:
acrId=$(az acr show \ --name $registryName \ --resource-group $rgName \ --query "id" \ --output tsv)
Ejecute el comando
az acr list
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 inicio de sesión del registro de contenedor. Necesitará esta información más adelante al configurar la canalización. Este es un ejemplo:
LoginServer -------------------------------- tailspinspacegame4692.azurecr.io
Ejecute el comando
az role assignment create
para crear una asignación de roles que autorice al clúster de AKS la conexión con 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. Aunque no haya completado este módulo, es importante seguir los pasos de limpieza.
Creación de un grupo de variables
En esta sección, agregará una variable a la canalización para almacenar el nombre del Azure Container Registry. 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, como 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 del aspecto que podría tener el 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 insertar los contenedores e indicar al clúster de AKS que los extraiga para actualizar el servicio implementado.
Importante
Asegúrese de haber iniciado sesión en Azure Portal y en 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.
En la esquina inferior de la página, seleccione Configuración del proyecto.
Seleccione Conexiones de servicio en la sección Canalizaciones.
Seleccione Nueva conexión de servicio, después Registro de Docker y, por último, 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 Valor Subscription Su suscripción de Azure Azure Container Registry Seleccione la instancia que creamos antes. Nombre de conexión de servicio Container Registry Connection (Conexión de Container Registry) Asegúrese de que esté seleccionada la opción Conceder permiso de acceso a todas las canalizaciones.
Cuando haya terminado, haga clic en Guardar.
Creación de una 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 clientes de AKS que usan tareas de Kubernetes.
Seleccione Nueva conexión de servicio, luego, seleccione Azure Resource Manager y, por último, Siguiente.
Seleccione Entidad de servicio (automática) y, después, Siguiente.
Seleccione Suscripción para el nivel de ámbito.
Escriba los valores siguientes para cada opción.
Configuración Valor Subscription Su suscripción de Azure Resource group Seleccione la instancia que creamos antes. Nombre de conexión de servicio Conexión del clúster de Kubernetes Asegúrese de que esté seleccionada la opción Conceder permiso de acceso a todas las canalizaciones.
Cuando haya terminado, haga clic en Guardar.
Creación de un entorno de canalización
Seleccione Canalizaciones y, después, 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 en 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 manifiesto siguiente 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
.