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.
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