Een stateless Kubernetes-toepassing implementeren via kubectl op uw Azure Stack Edge Pro GPU-apparaat
VAN TOEPASSING OP: Azure Stack Edge Pro - GPU
Azure Stack Edge Pro 2
Azure Stack Edge Pro R
Azure Stack Edge Mini R
In dit artikel wordt beschreven hoe u een staatloze toepassing implementeert met behulp van kubectl-opdrachten in een bestaand Kubernetes-cluster. In dit artikel wordt u ook begeleid bij het maken en instellen van pods in uw staatloze toepassing.
Vereisten
Voordat u een Kubernetes-cluster kunt maken en het kubectl
opdrachtregelprogramma kunt gebruiken, moet u ervoor zorgen dat:
U hebt aanmeldingsreferenties voor een Azure Stack Edge Pro-apparaat met 1 knooppunt.
Windows PowerShell 5.0 of hoger is geïnstalleerd op een Windows-clientsysteem voor toegang tot het Azure Stack Edge Pro-apparaat. U kunt ook elke andere client met een ondersteund besturingssysteem hebben. In dit artikel wordt de procedure beschreven bij het gebruik van een Windows-client. Als u de nieuwste versie van Windows PowerShell wilt downloaden, gaat u naar Windows PowerShell installeren.
Compute is ingeschakeld op het Azure Stack Edge Pro-apparaat. Als u compute wilt inschakelen, gaat u naar de pagina Compute in de lokale gebruikersinterface van het apparaat. Selecteer vervolgens een netwerkinterface die u wilt inschakelen voor berekeningen. Selecteer Inschakelen. Het inschakelen van rekenkracht resulteert in het maken van een virtuele switch op uw apparaat op die netwerkinterface. Zie Rekennetwerk inschakelen op uw Azure Stack Edge Pro voor meer informatie.
Uw Azure Stack Edge Pro-apparaat heeft een Kubernetes-clusterserver waarop versie v1.9 of hoger wordt uitgevoerd. Zie Een Kubernetes-cluster maken en beheren op een Microsoft Azure Stack Edge Pro-apparaat voor meer informatie.
U hebt geïnstalleerd
kubectl
.
Een staatloze toepassing implementeren
Voordat we beginnen, hebt u het volgende nodig:
- Er is een Kubernetes-cluster gemaakt.
- Stel een naamruimte in.
- Een gebruiker gekoppeld aan de naamruimte.
- De gebruikersconfiguratie is opgeslagen in
C:\Users\<username>\.kube
. - Geïnstalleerd
kubectl
.
U kunt nu beginnen met het uitvoeren en beheren van stateless toepassingsimplementaties op een Azure Stack Edge Pro-apparaat. Voordat u begint met het gebruik kubectl
, moet u controleren of u de juiste versie van kubectl
.
Controleer of u de juiste versie van kubectl hebt en configuratie hebt ingesteld
De versie van kubectl
:
Controleer of de versie
kubectl
groter of gelijk is aan 1.9:kubectl version
Hieronder ziet u een voorbeeld van de uitvoer:
PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
In dit geval is de clientversie van kubectl v1.15.2 en compatibel om door te gaan.
Haal een lijst op met de pods die worden uitgevoerd op uw Kubernetes-cluster. Een pod is een toepassingscontainer of -proces dat wordt uitgevoerd op uw Kubernetes-cluster.
kubectl get pods -n <namespace-string>
Hieronder ziet u een voorbeeld van het gebruik van opdrachten:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
De uitvoer moet aangeven dat er geen resources (pods) worden gevonden omdat er geen toepassingen worden uitgevoerd op uw cluster.
Met de opdracht wordt de mapstructuur van C:\Users\<username>\.kube gevuld met configuratiebestanden. Het opdrachtregelprogramma kubectl gebruikt deze bestanden om staatloze toepassingen in uw Kubernetes-cluster te maken en te beheren.
Controleer handmatig de mapstructuur van C:\Users\<username>\.kube om te controleren of kubectl deze heeft gevuld met de volgende submappen:
PS C:\Users\username> ls .kube Directory: C:\Users\user\.kube Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/18/2020 11:05 AM cache d----- 2/18/2020 11:04 AM http-cache -a---- 2/18/2020 10:41 AM 5377 config
Notitie
Als u een lijst met alle kubectl-opdrachten wilt weergeven, typt kubectl --help
u .
Een stateless toepassing maken met behulp van een implementatie
Nu u hebt gecontroleerd of de kubectl-opdrachtregelversie juist is en u de vereiste configuratiebestanden hebt, kunt u een stateless toepassingsimplementatie maken.
Een pod is de basisuitvoeringseenheid van een Kubernetes-toepassing, de kleinste en eenvoudigste eenheid in het Kubernetes-objectmodel dat u maakt of implementeert. Een pod bevat ook opslagbronnen, een uniek netwerk-IP en opties die bepalen hoe de container(s) moeten worden uitgevoerd.
Het type staatloze toepassing dat u maakt, is een nginx-webserverimplementatie.
Alle kubectl-opdrachten die u gebruikt om stateless toepassingsimplementaties te maken en beheren, moeten de naamruimte opgeven die is gekoppeld aan de configuratie. U hebt de naamruimte gemaakt terwijl u verbinding hebt gemaakt met het cluster op het Azure Stack Edge Pro-apparaat in de zelfstudie Een Kubernetes-cluster maken en beheren op Microsoft Azure Stack Edge Pro-apparaat met New-HcsKubernetesNamespace
.
Als u de naamruimte in een kubectl-opdracht wilt opgeven, gebruikt u kubectl <command> -n <namespace-string>
.
Volg deze stappen om een nginx-implementatie te maken:
Een staatloze toepassing toepassen door een Kubernetes-implementatieobject te maken:
kubectl apply -f <yaml-file> -n <namespace-string>
In dit voorbeeld is het pad naar het YAML-bestand van de toepassing een externe bron.
Hier volgt een voorbeeld van het gebruik van de opdracht en de uitvoer:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
U kunt ook de volgende markdown opslaan op uw lokale computer en het pad en de bestandsnaam in de parameter -f vervangen. Bijvoorbeeld C:\Kubernetes\deployment.yaml. De configuratie voor de implementatie van de toepassing is:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Met deze opdracht maakt u een standaard nginx-implementatie met twee pods om uw toepassing uit te voeren.
Haal de beschrijving op van de Kubernetes nginx-implementatie die u hebt gemaakt:
kubectl describe deployment nginx-deployment -n <namespace-string>
Hieronder ziet u een voorbeeld van het gebruik van de opdracht, met uitvoer:
PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1" Name: nginx-deployment Namespace: test1 CreationTimestamp: Tue, 18 Feb 2020 13:35:29 -0800 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl... Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.7.9 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-5754944d6c (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m22s deployment-controller Scaled up replica set nginx-deployment-5754944d6c to 2
Voor de instelling replica's ziet u het volgende:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
De replica-instelling geeft aan dat voor uw implementatiespecificatie twee pods zijn vereist en dat deze pods zijn gemaakt en bijgewerkt en klaar zijn voor gebruik.
Notitie
Een replicaset vervangt pods die om welke reden dan ook worden verwijderd of beëindigd, zoals in het geval van een storing in het apparaatknooppunt of een verstorende apparaatupgrade. Daarom raden we u aan om een replicaset te gebruiken, zelfs als voor uw toepassing slechts één pod is vereist.
De pods in uw implementatie weergeven:
kubectl get pods -l app=nginx -n <namespace-string>
Hieronder ziet u een voorbeeld van het gebruik van de opdracht, met uitvoer:
PS C:\Users\user> kubectl get pods -l app=nginx -n "test1" NAME READY STATUS RESTARTS AGE nginx-deployment-5754944d6c-7wqjd 1/1 Running 0 3m13s nginx-deployment-5754944d6c-nfj2h 1/1 Running 0 3m13s
De uitvoer controleert of we twee pods hebben met unieke namen waarnaar we kunnen verwijzen met behulp van kubectl.
Informatie over een afzonderlijke pod in uw implementatie weergeven:
kubectl describe pod <podname-string> -n <namespace-string>
Hieronder ziet u een voorbeeld van het gebruik van de opdracht, met uitvoer:
PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"
Name: nginx-deployment-5754944d6c-7wqjd
Namespace: test1
Priority: 0
Node: k8s-1d9qhq2cl-n1/10.128.46.184
Start Time: Tue, 18 Feb 2020 13:35:29 -0800
Labels: app=nginx
pod-template-hash=5754944d6c
Annotations: <none>
Status: Running
IP: 172.17.246.200
Controlled By: ReplicaSet/nginx-deployment-5754944d6c
Containers:
nginx:
Container ID: docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
Image: nginx:1.7.9
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 18 Feb 2020 13:35:35 -0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8gksw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8gksw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m58s default-scheduler Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
Normal Pulling 4m57s kubelet, k8s-1d9qhq2cl-n1 Pulling image "nginx:1.7.9"
Normal Pulled 4m52s kubelet, k8s-1d9qhq2cl-n1 Successfully pulled image "nginx:1.7.9"
Normal Created 4m52s kubelet, k8s-1d9qhq2cl-n1 Created container nginx
Normal Started 4m52s kubelet, k8s-1d9qhq2cl-n1 Started container nginx
De implementatie van de toepassing opnieuw schalen door het aantal replica's te verhogen
Elke pod is bedoeld om één exemplaar van een bepaalde toepassing uit te voeren. Als u uw toepassing horizontaal wilt schalen om meerdere exemplaren uit te voeren, kunt u het aantal pods verhogen naar één voor elk exemplaar. In Kubernetes wordt dit replicatie genoemd. U kunt het aantal pods in uw toepassingsimplementatie verhogen door een nieuw YAML-bestand toe te passen. Het YAML-bestand wijzigt de instelling voor replica's in 4, waardoor het aantal pods in uw implementatie wordt verhoogd naar vier pods. Het aantal pods verhogen van 2 tot en met 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
U kunt ook de volgende markdown opslaan op uw lokale computer en het pad en de bestandsnaam vervangen door de parameter -f voor kubectl apply
. Bijvoorbeeld C:\Kubernetes\deployment-scale.yaml. De configuratie voor de schaal van de toepassingsimplementatie is:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Update the replicas from 2 to 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
Controleer of de implementatie vier pods heeft:
kubectl get pods -l app=nginx
Voorbeelduitvoer voor een schaalaanpassingsimplementatie van twee tot vier pods wordt hieronder weergegeven:
PS C:\WINDOWS\system32> kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-148880595-4zdqq 1/1 Running 0 25s
nginx-deployment-148880595-6zgi1 1/1 Running 0 25s
nginx-deployment-148880595-fxcez 1/1 Running 0 2m
nginx-deployment-148880595-rwovn 1/1 Running 0 2m
Zoals u in de uitvoer kunt zien, hebt u nu vier pods in uw implementatie waarmee uw toepassing kan worden uitgevoerd.
Een implementatie verwijderen
Als u de implementatie wilt verwijderen, inclusief alle pods, moet kubectl delete deployment
u de naam van de implementatie nginx-deployment en de naamruimtenaam opgeven. De implementatie verwijderen:
kubectl delete deployment nginx-deployment -n <namespace-string>
Hieronder ziet u een voorbeeld van het gebruik van opdrachten, met uitvoer:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted