Een nieuwe database hosten met Behulp van Azure Cosmos DB
Nu we de basisconcepten van externe statussen hebben bekeken en hoe we hiermee omgaan met kubernetes, gaan we de resources maken die de toepassing van uw vrachtbedrijf ondersteunen en vervolgens de toepassing zelf maken.
Een brongroep maken
Belangrijk
U hebt uw eigen Azure-abonnement nodig om deze oefening te kunnen uitvoeren. Dit kan kosten met zich meebrengen. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Meld u aan bij Azure Portal met uw eigen abonnement.
Open Cloud Shell en selecteer Bash.
Maak een Azure-resourcegroep met behulp van de
az group create
opdracht en geef een regio op. In dit voorbeeld wordt een resourcegroep met de naam rg-ship-manager gemaakt in de regio Eastus :az group create --name rg-ship-manager --location eastus
Dit proces kan even duren.
De status maken
Zoals we eerder hebben beschreven, is het mogelijk, maar niet aanbevolen om de status in Kubernetes af te handelen. Het beheren van een maximaal beschikbare toepassingsstatus kan te moeilijk worden wanneer u de status zelf moet beheren.
Om dit probleem op te lossen, externaliseren we de status naar een toepassing die gespecialiseerd is in het omgaan met externe status: Azure Cosmos DB.
Notitie
Hoewel we een Azure Cosmos DB-exemplaar maken als onderdeel van de vereiste resources om de toepassing uit te voeren, hebben Azure Kubernetes Service (AKS) en Azure Cosmos DB niet met elkaar te maken.
Maak Bash-variabelen om de azure Cosmos DB-accountnaam en de naam van de resourcegroep op te slaan voor gebruik in de rest van de module.
export RESOURCE_GROUP=rg-ship-manager export COSMOSDB_ACCOUNT_NAME=contoso-ship-manager-$RANDOM
Maak een nieuw Azure Cosmos DB-account met behulp van de
az cosmosdb create
opdracht.az cosmosdb create --name $COSMOSDB_ACCOUNT_NAME --resource-group $RESOURCE_GROUP --kind MongoDB
Dit proces kan even duren.
Maak een nieuwe database met behulp van de
az cosmosdb mongodb database create
opdracht. In dit voorbeeld heeft de database de naam contoso-ship-manager.az cosmosdb mongodb database create --account-name $COSMOSDB_ACCOUNT_NAME --resource-group $RESOURCE_GROUP --name contoso-ship-manager
Controleer of de database is gemaakt met behulp van de
az cosmosdb mongodb database list
opdracht.az cosmosdb mongodb database list --account-name $COSMOSDB_ACCOUNT_NAME --resource-group $RESOURCE_GROUP -o table
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
Name ResourceGroup -------------------- --------------- contoso-ship-manager rg-ship-manager
Nu u een externe status hebt gemaakt om alle gegevens van de ship manager-toepassing op te slaan, gaan we de AKS-resource maken om de toepassing zelf op te slaan.
Het AKS-cluster maken
Maak een Bash-variabele om de clusternaam op te slaan voor gebruik in de rest van de module.
AKS_CLUSTER_NAME=ship-manager-cluster
Maak een AKS-cluster met behulp van de
az aks create
opdracht.az aks create --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --node-count 3 \ --generate-ssh-keys \ --node-vm-size Standard_B2s \ --enable-addons http_application_routing
Dit proces kan even duren.
Notitie
Alle Azure-services stellen standaardlimieten en quota in voor resources en functies, inclusief gebruiksbeperkingen voor bepaalde VM-SKU's (virtuele machines). Als er een fout optreedt waarin wordt voorgesteld dat de gewenste VM-SKU niet beschikbaar is in de regio die u hebt geselecteerd, moet u dit quotum waarschijnlijk verhogen via een ondersteuning voor Azure-aanvraag (voor probleemtype selecteert u Quotum).
Download de kubectl-configuratie met behulp van de
az aks get-credentials
opdracht.az aks get-credentials --name $AKS_CLUSTER_NAME --resource-group $RESOURCE_GROUP
Als u berichten over bestaande clusters ontvangt, bijvoorbeeld:
A different object named ship-manager-cluster already exists in your kubeconfig file. Overwrite? (y/n):
Voer in
y
om te overschrijven.Test de configuratie met behulp van de
kubectl get nodes
opdracht.kubectl get nodes
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 3m19s v1.27.7 aks-nodepool1-12345678-vmss000001 Ready agent 3m25s v1.27.7 aks-nodepool1-12345678-vmss000002 Ready agent 3m20s v1.27.7
De toepassing implementeren
Als u de toepassing wilt maken, moet u de YAML-bestanden maken om te implementeren in Kubernetes.
De back-end-API implementeren
Haal uw Azure Cosmos DB-database op verbindingsreeks met behulp van de
az cosmosdb keys list
opdracht.az cosmosdb keys list --type connection-strings -g $RESOURCE_GROUP -n $COSMOSDB_ACCOUNT_NAME --query "connectionStrings[0].connectionString" -o tsv
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
mongodb://contoso-ship-manager-12345678.documents.azure.com:10255/?ssl=true&replicaSet=globaldb
Maak een nieuw bestand met de naam backend-deploy.yml en plak de volgende implementatiespecificatie:
apiVersion: apps/v1 kind: Deployment metadata: name: ship-manager-backend spec: replicas: 1 selector: matchLabels: app: ship-manager-backend template: metadata: labels: app: ship-manager-backend spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:backend name: ship-manager-backend resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 3000 name: http env: - name: DATABASE_MONGODB_URI value: "{your database connection string}" - name: DATABASE_MONGODB_DBNAME value: contoso-ship-manager
Vervang de
{your database connection string}
tijdelijke aanduiding door de database verbindingsreeks die u in de vorige stap hebt opgehaald.Notitie
Vergeet niet om aanhalingstekens
"
toe te voegen aan de omgevingsvariabelen, omdat de verbindingsreeks soms ongeldige YAML-tekens bevat. U kunt overwegen geheimen te gebruiken als een veilige manier om verbindingsreeks op te slaan en op te halen in AKS.Sla het bestand op en sluit het bestand.
Pas de implementatie van de back-end-API toe met behulp van de
kubectl apply
opdracht.kubectl apply -f backend-deploy.yml
Er wordt een bericht weergegeven dat lijkt op de volgende voorbeelduitvoer:
deployment.apps/ship-manager-backend created
Als u deze toepassing beschikbaar wilt maken voor iedereen, moet u een service en inkomend verkeer maken.
Haal het adres van uw cluster-API-server op met behulp van de
az aks show
opdracht.az aks show -g $RESOURCE_GROUP -n $AKS_CLUSTER_NAME -o tsv --query fqdn
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io
Maak een nieuw bestand met de naam backend-network.yml en plak de volgende netwerkspecificatie:
apiVersion: v1 kind: Service metadata: name: ship-manager-backend spec: type: ClusterIP ports: - port: 80 targetPort: 3000 selector: app: ship-manager-backend --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ship-manager-backend spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <host-name> http: paths: - backend: service: name: ship-manager-backend port: number: 80 path: / pathType: Prefix
Vervang de
<host-name>
tijdelijke aanduiding door de verbindingsreeks die u in de vorige stap hebt opgehaald.Sla het bestand op en sluit het bestand.
Pas de back-endnetwerkimplementatie toe met behulp van de
kubectl apply
opdracht.kubectl apply -f backend-network.yml
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
service/ship-manager-backend created ingress.networking.k8s.io/ship-manager-backend created
U hebt toegang tot de API via de hostnaam die u in uw toegangsbeheerobjectresource hebt geplakt. De Azure DNS-zoneresource kan er vijf minuten over doen om de DNS-detectie te voltooien. Als u de API niet meteen kunt openen, wacht u een paar minuten en probeert u het opnieuw.
Controleer de status van inkomend verkeer door een query uit te voeren op Kubernetes voor de beschikbare ingresses met behulp van de
kubectl get ingress
opdracht.kubectl get ingress
Zodra het veld ADDRESS in de uitvoer is ingevuld, betekent dit dat het inkomend verkeer is geïmplementeerd en dat het klaar is om te worden geopend, zoals wordt weergegeven in de volgende voorbeelduitvoer:
NAME CLASS HOSTS ADDRESS PORTS AGE ship-manager-backend webapprouting.kubernetes.azure.com ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io xx.xx.xx.xx 80 2m40s
De front-end-interface implementeren
Maak een nieuw bestand met de naam frontend-deploy.yml en plak de volgende implementatiespecificatie:
apiVersion: apps/v1 kind: Deployment metadata: name: ship-manager-frontend spec: replicas: 1 selector: matchLabels: app: ship-manager-frontend template: metadata: labels: app: ship-manager-frontend spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:frontend name: ship-manager-frontend imagePullPolicy: Always resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 volumeMounts: - name: config mountPath: /usr/src/app/dist/config.js subPath: config.js volumes: - name: config configMap: name: frontend-config --- apiVersion: v1 kind: ConfigMap metadata: name: frontend-config data: config.js: | const config = (() => { return { 'VUE_APP_BACKEND_BASE_URL': 'http://{YOUR_BACKEND_URL}', } })()
Vervang de
{YOUR_BACKEND_URL}
tijdelijke aanduiding door de hostnaam-URL van de back-end-API die u in de vorige sectie hebt opgehaald.Sla het bestand op en sluit het bestand.
Pas de front-endimplementatie toe met behulp van de
kubectl apply
opdracht.kubectl apply -f frontend-deploy.yml
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
deployment.apps/ship-manager-frontend created configmap/frontend-config created
Vervolgens kunt u de netwerkresources maken die deze toepassing moet openen voor het web.
Maak een nieuw bestand met de naam frontend-network.yml en plak de volgende netwerkspecificatie:
apiVersion: v1 kind: Service metadata: name: ship-manager-frontend spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: app: ship-manager-frontend --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ship-manager-frontend spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <host-name> http: paths: - backend: service: name: ship-manager-frontend port: number: 80 path: / pathType: Prefix
Vervang de
<host-name>
tijdelijke aanduiding door de verbindingsreeks die u in de vorige sectie hebt opgehaald.Sla het bestand op en sluit het bestand.
Pas de front-endnetwerkimplementatie toe met behulp van de
kubectl apply
opdracht.kubectl apply -f frontend-network.yml
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
service/ship-manager-frontend created ingress.networking.k8s.io/ship-manager-frontend created
U hebt toegang tot de API via de hostnaam die u in uw toegangsbeheerobjectresource hebt geplakt. De Azure DNS-zoneresource kan er vijf minuten over doen om de DNS-detectie te voltooien. Als u de API niet meteen kunt openen, wacht u een paar minuten en probeert u het opnieuw.
Controleer de status van inkomend verkeer door een query uit te voeren op Kubernetes voor de beschikbare ingresses met behulp van de
kubectl get ingress
opdracht.kubectl get ingress
Zodra het veld ADDRESS in de uitvoer is ingevuld, betekent dit dat het inkomend verkeer is geïmplementeerd en dat het klaar is om te worden geopend, zoals wordt weergegeven in de volgende voorbeelduitvoer:
NAME CLASS HOSTS ADDRESS PORTS AGE ship-manager-backend webapprouting.kubernetes.azure.com ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io xx.xx.xx.xx 80 2m40s ship-manager-frontend webapprouting.kubernetes.azure.com ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io xx.xx.xx.xx 80 100s
U hebt nu toegang tot de URL vanaf de hostnaam van de toegangsbeheerobjectresource om de toepassing Ship manager te gebruiken.