Parte 8 – Azure Container Instances

Hoy traemos como podemos tener nuestros containers en Azure Container Instances, a ver que os parece.

Quickstart – Deploy Docker container to container instance – Portal – Azure Container Instances | Microsoft Docs

Precio

El coste de los containers dependerá del número de CPU/Memoria desde 1GB/1CPU con un coste aprox. de 35€ mes arrancado todo el día para el Grupo de containers.

Precios de Container Instances | Microsoft Azure

Portal

Vamos a crearnos un Container instances desde Azure Portal, buscamos en el marketplace Container Instances.

Introducimos nuestros valores.

  • Subscripción, seleccionamos de nuestra lista si tenemos varias.
  • Resource Group, seleccionamos o creamos uno nuevo.
  • Container name, nombre para el container instance.
  • Region, seleccionar la que mejor nos venga.
  • Availability zones, si queremos alta disponibilidad (tiene coste adicional)
  • Image source, desde donde vamos a coger la imagen
  • Image type, Public/Private seleccionamos la deseada.
  • Image, nombre de la imagen en mi caso voy a seleccionar “nginx”.
  • OS type, Linux o Windows (Dependerá de la imagen)
  • Size, seleccionamos el hardware requerido.

En la pestaña de Networking podemos seleccionar Publi/Private/None, None no tendrá red estará aislado.

Private, necesitaremos seleccionar.

  • Virtual network, seleccionamos una vnet o creamos una nueva.
  • Subnet, lo mismo seleccionamos o creamos (no podemos usar una que contenga máquinas virtuales)
  • Ports, puertos que usaremos en el container.

Public, introducimos un nombre DNS público y puerto utilizados.

En advanced, seleccionamos la política de Reinicio y agregamos variable de entorno si se requiere.

Revisamos y creamos nuestro container instance.

Una vez creamos navegamos a la página y listo.

CLI

Ahora vamos a crear un container instances mediante Azure CLI.

Abriremos una conexión bash, para ello, podremos pinchar en el icono en la parte superior del portal de azure o abrir la web directamente shell.azure.com

Abrirá la conexión al CLI, en la parte superior izquierda, seleccionamos BASH

Crear Resource Group

Si no tenemos creado el resource group, realizaremos los siguientes pasos.

Seleccionamos la subscripción si tenemos varias.

az account subscription list -o table #Listado de subscripciones
az account set --subscription "Subscripción"

Creamos el Resource Group.

az account list-locations -o table #Listado de locations

az group create --name <Mi Resource Group> --location <Location Azure>

Crear vnet y Subnet

Si necesitamos una nueva red para nuestro entorno, lo crearemos con los siguientes comandos.

az network vnet create \
  --name <Nombre Vnet> \
  --resource-group <Mi Resource Group> \
  --subnet-name <Nombre Subnet> \
  --address-prefixes 10.10.0.0/16 \
  --subnet-prefixes 10.10.0.0/24

Crear Container Instance

Creamos nuestro container instance.

  • resource-group, Nombre del resource Group.
  • name, Nombre del container.
  • image, imagen a descargar.
  • dns-name-label, nombre dns publica.
  • ports, puertos para el container
  • vnet, Nombre de la virtual network (Requiere el parametro subnet)
  • subnet, Nombre de la Subnet (Requiere el parametro vnet)
#Acceso publico
az container create --resource-group <Mi Resource Group> --name Democontainer --image nginx  --dns-name-label aci-demo --ports 80

#Acceso Privado
az container create --resource-group <Mi Resource Group> --name <Nombre Container> --image nginx --ports 80 --subnet <Subnet> --vnet <virtual network>

Desplegar con YAML

Necesitaremos generar un fichero YAML con la configuración de nuestro Container Instance.

Yo voy a generar un container de Grafana y otro de Minecraft que vicio, sería algo como lo siguiente:

apiVersion: '2021-10-01'
location: francecentral
name: demo-container
properties:
  containers:
  - name: grafana
    properties:
      image: grafana/grafana-oss:latest
      resources:
        requests:
          cpu: 1.0
          memoryInGb: 1.0
      ports:
      - port: 3000
      environmentVariables:
      - name: GF_SECURITY_ADMIN_PASSWORD
        value: password
  - name: minecraft
    properties:
      image: itzg/minecraft-bedrock-server
      ports:
      - port: 19132
      resources:
        requests:
          cpu: 1.0
          memoryInGb: 1.0
      environmentVariables:
      - name: GAMEMODE
        value: survival
      - name: EULA
        value: TRUE
      - name: DIFFICULTY
        value: normal
      - name: SERVER_NAME
        value: MordorCraft
      - name: MAX_PLAYERS
        value: 1
  osType: Linux
  ipAddress:
    type: Public
    ports:
    - protocol: udp
      port: 19132
    - protocol: tcp
      port: 3000
tags: null
type: Microsoft.ContainerInstance/containerGroups

Abrimos la consola y subimos el fichero YAML

Podemos listar los ficheros para confirmar.

Lanzamos la creación del container con el nombre del fichero.

az container create --resource-group <ResourceGroup> --file <File>.yml

Me genera un container instance con mi IP publica y DNS con los 2 containers.

En containers, aparecerá su estado “running”.

Accedemos al grafana http://FQDN-IP:3000

Para el Minecraft me creo un servidor externo, y accedo para una partidita.

En el log del container aparecerán las conexiones y desconexiones de mi cuenta.

Volumen Azure Files

Ahora vamos a almacenar los datos de los container en un repositorio de Azure Files.

Montar un volumen de Azure Files en el grupo de contenedores – Azure Container Instances | Microsoft Docs

Storage Account

Nos crearemos un storage account para almacenar la información.

Portal

Vamos al portal a marketplace y buscamos storage Account.

Ponemos nuestro datos, vamos a lo barato “performance- standard” y “Redundancy- LRS”, el resto por defecto y vamos a crear.

Vamos al Storage Account > File Shares, creamos un share de tier Hot

En Access key, cogemos la key.

CLI

Para crealo con Azure CLI, utilizamos los siguientes comandos.

# Creación storage Account
az storage account create \
    --resource-group 'SPOKE-MPN-END1' \
    --name 'demomordorcontainer' \
    --location 'francecentral' \
    --sku Standard_LRS

# Creación de File Shares
az storage share create \
  --name 'containermordor' \
  --account-name 'demomordorcontainer'

#Conseguir el Access Key
STORAGE_KEY=$(az storage account keys list --resource-group 'SPOKE-MPN-END1' --account-name 'demomordorcontainer' --query "[0].value" --output tsv)
echo $STORAGE_KEY

YAML

Vamos a desplegar Minecraft almacenando los datos en nuestro storage account, creo un share llamado minecraft.

Creamos nuestro container con YAML, agregaremos los parametros de volumes.

apiVersion: '2021-10-01'
location: francecentral
name: demo-container
properties:
  containers:
  - name: minecraft
    properties:
      image: itzg/minecraft-bedrock-server
      ports:
      - port: 19132
        protocol: udp
      resources:
        requests:
          cpu: 1.0
          memoryInGb: 1.0
      environmentVariables:
      - name: GAMEMODE
        value: survival
      - name: EULA
        value: TRUE
      - name: DIFFICULTY
        value: normal
      - name: SERVER_NAME
        value: MordorCraft
      - name: MAX_PLAYERS
        value: 1
      volumeMounts:
      - mountPath: /data/worlds
        name: minecraftmordor         
  osType: Linux
  ipAddress:
    type: Public
    ports:
    - protocol: udp
      port: 19132
  volumes:
  - name: minecraftmordor
    azureFile:
      sharename: minecraft
      storageAccountName: demomordorcontainer
      storageAccountKey: GlCpm/gUEQBiVo0hhJCWs6m8/roHs7By+/RizDY0oomL9PhcuAHYXT+gvNEJSv95Ah7AQzstNBgo+ASt3k3WUA==      
tags: null
type: Microsoft.ContainerInstance/containerGroups

Si nos conectamos al container, veremos el montaje del disco.

Veremos los ficheros dentro de nuestro share.

Dejar un comentario

Tu dirección de correo electrónico no será publicada.