Zelfstudie: Een Linux-app implementeren

Van toepassing op: AKS op Azure Stack HCI 22H2, AKS op Windows Server

In deze zelfstudie wordt beschreven hoe u een app met meerdere containers implementeert die een webfront-end en een Redis-database-exemplaar bevat op uw Kubernetes-cluster in AKS die is ingeschakeld door Azure Arc. U leert ook hoe u uw app kunt testen en schalen.

In deze zelfstudie wordt ervan uitgegaan dat u basiskennis hebt van Kubernetes-concepten. Zie Kubernetes core concepts (Kernconcepten van Kubernetes) voor meer informatie.

Voordat u begint

Controleer of u de volgende vereisten hebt:

  • Een AKS-cluster met ten minste één Linux-werkknooppunt dat actief is.
  • Een kubeconfig-bestand voor toegang tot het cluster.
  • De AksHci PowerShell-module is geïnstalleerd. Zie Install-AksHci voor meer informatie.

Wanneer u de procedures voor de zelfstudie uitvoert:

  • Voer de opdrachten uit in een PowerShell-venster dat is geopend met beheerdersbevoegdheden.
  • Zorg ervoor dat besturingssysteemspecifieke workloads op de juiste containerhost terechtkomen. Als uw Kubernetes-cluster een combinatie van Linux- en Windows-werkknooppunten heeft, kunt u knooppuntkiezers of taints en toleranties gebruiken. Zie knooppuntkiezers en taints en toleranties gebruiken voor meer informatie.

Notitie

Het implementeren van een doelcluster dat een netwerk deelt met een ander doelcluster kan leiden tot IP-adresconflicten van de load balancer. IP-adresconflicten kunnen optreden als u twee workloads implementeert die gebruikmaken van verschillende poorten in doelclusters die hetzelfde AksHciClusterNetwork object delen. Vanwege de manier waarop de IP-adressen en poorttoewijzingen worden toegewezen in de ha-proxy, kan dit leiden tot toewijzing van dubbele IP-adressen. Als dit gebeurt, kunnen een of beide workloads willekeurige netwerkverbindingsproblemen ondervinden totdat u uw workloads opnieuw implementeert. Wanneer u uw workloads opnieuw implementeert, kunt u dezelfde poort gebruiken, waarmee een SERVICE-IP-adres aan elke workload wordt toegewezen, of u kunt uw workloads opnieuw implementeren op doelclusters die verschillende AksHciClusterNetwork objecten gebruiken.

De app implementeren

Een Kubernetes-manifestbestand definieert een gewenste status voor het cluster, zoals welke containerinstallatiekopieën moeten worden uitgevoerd. In deze zelfstudie wordt een manifest gebruikt om alle objecten te maken die nodig zijn om de Azure Vote-app uit te voeren. Dit manifest bevat twee Kubernetes-implementaties: een voor de voorbeeld-Azure Vote Python-apps en de andere voor een Redis-exemplaar. Er worden ook twee Kubernetes-services gemaakt: een interne service voor het Redis-exemplaar en een externe service voor toegang tot de Azure Vote-app vanaf internet.

Maak een bestand met de naam azure-vote.yaml en kopieer/plak de volgende YAML-definitie:

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: mcr.microsoft.com/azuredocs/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

Implementeer de app met behulp van de kubectl apply opdracht en geef de naam van uw YAML-manifest op:

kubectl apply -f azure-vote.yaml

In de volgende voorbeelduitvoer ziet u implementaties en services die zijn gemaakt:

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

De app testen

Wanneer de app wordt uitgevoerd, maakt een Kubernetes-service de app-front-end beschikbaar op internet. Dit proces kan enkele minuten duren.

Als u de voortgang wilt bewaken, gebruikt u de kubectl get service opdracht met het --watch argument :

kubectl get service azure-vote-front --watch

In eerste instantie wordt het EXTERNAL-IP-adres voor de service azure-vote-front weergegeven als in behandeling:

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

Wanneer het EXTERN IP-adres verandert van in behandeling in een werkelijk openbaar IP-adres, gebruikt u Ctrl+C om het kubectl watch proces te stoppen. In de volgende voorbeelduitvoer ziet u een geldig openbaar IP-adres dat aan de service is toegewezen:

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

Open een webbrowser naar het externe IP-adres van uw service om de Azure Vote-app te zien.

Schermopname van de startpagina van de Azure Voting App-toepassing, geïmplementeerd in een Kubernetes-cluster in Azure.

Toepassingspods schalen

We hebben één replica van de front-end en redis-instantie van de Azure Voting App gemaakt. Als u het aantal en de status van pods in uw cluster wilt zien, gebruikt u de kubectl get opdracht:

kubectl get pods -n default

In het volgende voorbeeld van uitvoer ziet u één pod voor de front-end en één voor 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

Als u het aantal pods in de implementatie azure-vote-front wilt wijzigen, gebruikt u de kubectl scale opdracht . In het volgende voorbeeld wordt het aantal pods voor de front-end verhoogd naar 5:

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

Voer kubectl get pods opnieuw uit om te controleren of er extra pods zijn gemaakt. Na ongeveer een minuut zijn de extra pods beschikbaar in uw cluster:

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

Volgende stappen

Gebruik Azure Monitor om uw cluster en toepassing te bewaken.