Compartir a través de


Implementación de una aplicación linux

Se aplica a: AKS en Azure Local 22H2, AKS en Windows Server

En esta guía se describe cómo implementar una aplicación de varios contenedores que incluye un front-end web y una instancia de base de datos de Redis en el clúster de Kubernetes en AKS habilitado por Azure Arc. También aprenderá a probar y escalar la aplicación.

En esta guía paso a paso se presupone un conocimiento básico de los conceptos de Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes.

Antes de empezar

Compruebe que tiene los siguientes requisitos previos:

  • Un clúster de AKS con al menos un nodo de trabajo de Linux que esté en funcionamiento.
  • Un archivo kubeconfig para obtener acceso al clúster.
  • El módulo de PowerShell de AksHci está instalado. Para obtener más información, consulte Install-AksHci.

Al realizar los procedimientos:

  • Ejecute los comandos en una ventana de PowerShell abierta con privilegios administrativos.
  • Asegúrese de que las cargas de trabajo específicas del SO se encuentran en el host de contenedor adecuado. Si el clúster de Kubernetes tiene una combinación de nodos de trabajo de Linux y Windows, puede usar selectores de nodos o taints y tolerations. Para obtener más información, consulte Uso de los selectores de nodo y la opción para rechazar o aceptarlos.

Nota:

La implementación de un clúster de destino que comparte una red con otro clúster de destino puede provocar conflictos de direcciones IP del equilibrador de carga. Los conflictos de direcciones IP pueden producirse si implementa dos cargas de trabajo que usan puertos diferentes en clústeres de destino que comparten el mismo AksHciClusterNetwork objeto. Debido a la forma en que las direcciones IP y las asignaciones de puertos se asignan dentro del proxy de alta disponibilidad, puede dar lugar a la asignación de direcciones IP duplicadas. Si esto ocurre, una o ambas cargas de trabajo pueden encontrar problemas de conectividad de red aleatorios hasta que vuelva a implementar las cargas de trabajo. Al volver a implementar las cargas de trabajo, puede usar el mismo puerto, que asigna una dirección IP de servicio a cada carga de trabajo, o bien puede volver a implementar las cargas de trabajo en clústeres de destino que usan objetos diferentes AksHciClusterNetwork .

Implementar la aplicación

Un archivo de manifiesto de Kubernetes define un estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar. En este tutorial se usa un manifiesto para crear todos los objetos necesarios para ejecutar la aplicación de votación de Azure. Este manifiesto incluye dos implementaciones de Kubernetes: una para las aplicaciones de Python de Azure Vote de ejemplo y la otra para una instancia de Redis. También se crean dos servicios de Kubernetes: un servicio interno para la instancia de Redis y un servicio externo para acceder a la aplicación Azure Vote desde Internet.

Cree un archivo denominado azure-vote.yaml y copie o pegue la siguiente definición de YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: <path to image>/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

Implemente la aplicación mediante el kubectl apply comando y especifique el nombre del manifiesto de YAML:

kubectl apply -f azure-vote.yaml

En la salida del ejemplo siguiente se muestran las implementaciones y los servicios que se crearon correctamente:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

Pruebas de la aplicación

Cuando se ejecuta la aplicación, un servicio de Kubernetes expone el front-end de la aplicación a Internet. Este proceso puede tardar unos minutos en completarse.

Para supervisar el progreso, use el kubectl get service comando con el --watch argumento :

kubectl get service azure-vote-front --watch

Inicialmente, external-IP para el servicio azure-vote-front se muestra como pendiente:

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

Cuando la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use CTRL-C para detener el proceso de kubectl inspección. En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

Para ver la aplicación Azure Vote en acción, abra un explorador web en la dirección IP externa del servicio.

Captura de pantalla de la página principal de la aplicación Azure Voting App, implementada en un clúster de Kubernetes en Azure.

Escalado de pods de la aplicación

Hemos creado una única réplica del front-end de azure Voting App y la instancia de Redis. Para ver el número y el estado de los pods del clúster, use el comando kubectl get:

kubectl get pods -n default

La salida del ejemplo siguiente muestra un pod de front-end y un pod de back-end:

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

Para cambiar el número de pods en la implementación azure-vote-front, use el comando kubectl scale. El ejemplo siguiente aumenta el número de pods de front-end a 5:

kubectl scale --replicas=5 deployment/azure-vote-front

Vuelva a ejecutar kubectl get pods para comprobar que se crearon pods adicionales. Tras un minuto aproximadamente, los pods adicionales están disponibles en el clúster:

kubectl get pods -n default
Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

Pasos siguientes

Uso de Azure Monitor para supervisar el clúster y la aplicación