Distribuera ett tillståndslöst Kubernetes-program via kubectl på din Azure Stack Edge Pro GPU-enhet
GÄLLER FÖR: Azure Stack Edge Pro – GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Den här artikeln beskriver hur du distribuerar ett tillståndslöst program med kubectl-kommandon i ett befintligt Kubernetes-kluster. Den här artikeln beskriver också hur du skapar och konfigurerar poddar i ditt tillståndslösa program.
Förutsättningar
Innan du kan skapa ett Kubernetes-kluster och använda kubectl
kommandoradsverktyget måste du se till att:
Du har inloggningsuppgifter till en Azure Stack Edge Pro-enhet med en nod.
Windows PowerShell 5.0 eller senare installeras på ett Windows-klientsystem för att få åtkomst till Azure Stack Edge Pro-enheten. Du kan också ha en annan klient med ett operativsystem som stöds. Den här artikeln beskriver proceduren när du använder en Windows-klient. Om du vill ladda ned den senaste versionen av Windows PowerShell går du till Installera Windows PowerShell.
Beräkning är aktiverat på Azure Stack Edge Pro-enheten. Om du vill aktivera beräkning går du till sidan Beräkning i enhetens lokala användargränssnitt. Välj sedan ett nätverksgränssnitt som du vill aktivera för beräkning. Välj Aktivera. Om du aktiverar beräkning skapas en virtuell växel på enheten i nätverksgränssnittet. Mer information finns i Aktivera beräkningsnätverk i Azure Stack Edge Pro.
Din Azure Stack Edge Pro-enhet har en Kubernetes-klusterserver som körs som är version v1.9 eller senare. Mer information finns i Skapa och hantera ett Kubernetes-kluster på Microsoft Azure Stack Edge Pro-enhet.
Du har installerat
kubectl
.
Distribuera ett tillståndslöst program
Innan vi börjar bör du ha:
- Skapade ett Kubernetes-kluster.
- Konfigurera ett namnområde.
- En användare har associerats med namnområdet.
- Sparade användarkonfigurationen till
C:\Users\<username>\.kube
. - Installerad
kubectl
.
Nu kan du börja köra och hantera tillståndslösa programdistributioner på en Azure Stack Edge Pro-enhet. Innan du börjar använda kubectl
måste du kontrollera att du har rätt version av kubectl
.
Kontrollera att du har rätt version av kubectl och konfigurera konfigurationen
Så här kontrollerar du versionen av kubectl
:
Kontrollera att versionen av
kubectl
är större eller lika med 1.9:kubectl version
Ett exempel på utdata visas nedan:
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"}
I det här fallet är klientversionen av kubectl v1.15.2 och är kompatibel för att fortsätta.
Hämta en lista över poddar som körs i kubernetes-klustret. En podd är en programcontainer eller process som körs på ditt Kubernetes-kluster.
kubectl get pods -n <namespace-string>
Ett exempel på kommandoanvändning visas nedan:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
Utdata ska ange att inga resurser (poddar) hittas eftersom det inte finns några program som körs i klustret.
Kommandot fyller katalogstrukturen i "C:\Users\<username>\.kube" med konfigurationsfiler. Kommandoradsverktyget kubectl använder dessa filer för att skapa och hantera tillståndslösa program i kubernetes-klustret.
Kontrollera katalogstrukturen i "C:\Users\<username>\.kube" manuellt för att kontrollera att kubectl har fyllt i den med följande undermappar:
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
Kommentar
Om du vill visa en lista över alla kubectl-kommandon skriver du kubectl --help
.
Skapa ett tillståndslöst program med hjälp av en distribution
Nu när du har kontrollerat att kubectl-kommandoradsversionen är korrekt och du har de konfigurationsfiler som krävs kan du skapa en tillståndslös programdistribution.
En podd är den grundläggande körningsenheten för ett Kubernetes-program, den minsta och enklaste enheten i Kubernetes-objektmodellen som du skapar eller distribuerar. En podd kapslar också in lagringsresurser, en unik nätverks-IP och alternativ som styr hur containrar ska köras.
Den typ av tillståndslöst program som du skapar är en nginx-webbserverdistribution.
Alla kubectl-kommandon som du använder för att skapa och hantera tillståndslösa programdistributioner måste ange det namnområde som är associerat med konfigurationen. Du skapade namnområdet när du var ansluten till klustret på Azure Stack Edge Pro-enheten i självstudien Skapa och hantera ett Kubernetes-kluster på Microsoft Azure Stack Edge Pro-enheten med New-HcsKubernetesNamespace
.
Om du vill ange namnområdet i ett kubectl-kommando använder du kubectl <command> -n <namespace-string>
.
Följ dessa steg för att skapa en nginx-distribution:
Tillämpa ett tillståndslöst program genom att skapa ett Kubernetes-distributionsobjekt:
kubectl apply -f <yaml-file> -n <namespace-string>
I det här exemplet är sökvägen till programmets YAML-fil en extern källa.
Här är ett exempel på hur kommandot används och dess utdata:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
Du kan också spara följande markdown på den lokala datorn och ersätta sökvägen och filnamnet i parametern -f . Till exempel "C:\Kubernetes\deployment.yaml". Konfigurationen för programdistributionen skulle vara:
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
Det här kommandot skapar en standard-nginx-distribution som har två poddar för att köra ditt program.
Hämta beskrivningen av Kubernetes nginx-deployment som du skapade:
kubectl describe deployment nginx-deployment -n <namespace-string>
Ett exempel på användning av kommandot, med utdata, visas nedan:
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
För replikinställningen visas:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
Replikinställningen anger att distributionsspecifikationen kräver två poddar och att poddarna har skapats och uppdaterats och är redo att användas.
Kommentar
En replikuppsättning ersätter poddar som tas bort eller avslutas av någon anledning, till exempel vid enhetsnodfel eller en störande enhetsuppgradering. Därför rekommenderar vi att du använder en replikuppsättning även om programmet bara kräver en enda podd.
Så här listar du poddarna i distributionen:
kubectl get pods -l app=nginx -n <namespace-string>
Ett exempel på användning av kommandot, med utdata, visas nedan:
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
Utdata verifierar att vi har två poddar med unika namn som vi kan referera till med kubectl.
Så här visar du information om en enskild podd i distributionen:
kubectl describe pod <podname-string> -n <namespace-string>
Ett exempel på användning av kommandot, med utdata, visas nedan:
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
Skala om programdistributionen genom att öka antalet repliker
Varje podd är avsedd att köra en enda instans av ett visst program. Om du vill skala programmet vågrätt för att köra flera instanser kan du öka antalet poddar till en för varje instans. I Kubernetes kallas detta replikering. Du kan öka antalet poddar i programdistributionen genom att använda en ny YAML-fil. YAML-filen ändrar replikinställningen till 4, vilket ökar antalet poddar i distributionen till fyra poddar. Så här ökar du antalet poddar från 2 till 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
Du kan också spara följande markdown på den lokala datorn och ersätta sökvägen och filnamnet med parametern -f för kubectl apply
. Till exempel "C:\Kubernetes\deployment-scale.yaml". Konfigurationen för programdistributionsskalan skulle vara:
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
Så här kontrollerar du att distributionen har fyra poddar:
kubectl get pods -l app=nginx
Exempel på utdata för en omskalningsdistribution från två till fyra poddar visas nedan:
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
Som du kan se från utdata har du nu fyra poddar i distributionen som kan köra ditt program.
Ta bort en distribution
Om du vill ta bort distributionen, inklusive alla poddar, måste du köra kubectl delete deployment
och ange namnet på distributionen nginx-deployment och namnområdesnamnet. Så här tar du bort distributionen:
kubectl delete deployment nginx-deployment -n <namespace-string>
Ett exempel på kommandoanvändning, med utdata, visas nedan:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted