Nasazení bezstavové aplikace Kubernetes prostřednictvím kubectl na zařízení Azure Stack Edge Pro GPU
PLATÍ PRO: Azure Stack Edge Pro – GPU
Azure Stack Edge Pro 2
Azure Stack Edge Pro R
Azure Stack Edge Mini R
Tento článek popisuje, jak nasadit bezstavovou aplikaci pomocí příkazů kubectl v existujícím clusteru Kubernetes. Tento článek vás také provede procesem vytváření a nastavování podů v bezstavové aplikaci.
Požadavky
Než budete moct vytvořit cluster Kubernetes a použít nástroj příkazového kubectl
řádku, musíte zajistit, aby:
Máte přihlašovací údaje k zařízení Azure Stack Edge Pro s 1 uzly.
Windows PowerShell 5.0 nebo novější je nainstalovaný v klientském systému Windows pro přístup k zařízení Azure Stack Edge Pro. Můžete mít i jakéhokoli jiného klienta s podporovaným operačním systémem. Tento článek popisuje postup při použití klienta systému Windows. Pokud si chcete stáhnout nejnovější verzi Windows PowerShellu, přejděte do části Instalace Windows PowerShellu.
Výpočetní prostředky jsou povolené na zařízení Azure Stack Edge Pro. Pokud chcete povolit výpočetní prostředky, přejděte na stránku Compute v místním uživatelském rozhraní zařízení. Pak vyberte síťové rozhraní, které chcete povolit pro výpočetní prostředky. Vyberte Povolit. Povolení výpočetních prostředků způsobí vytvoření virtuálního přepínače na vašem zařízení v daném síťovém rozhraní. Další informace najdete v tématu Povolení výpočetní sítě ve službě Azure Stack Edge Pro.
Vaše zařízení Azure Stack Edge Pro má server clusteru Kubernetes, na kterém běží verze 1.9 nebo novější. Další informace najdete v tématu Vytvoření a správa clusteru Kubernetes na zařízení Microsoft Azure Stack Edge Pro.
Máte nainstalovaný
kubectl
.
Nasazení bezstavové aplikace
Než začneme, měli byste mít:
- Vytvořili jste cluster Kubernetes.
- Nastavte obor názvů.
- Přidružte uživatele k oboru názvů.
- Uložili jsme konfiguraci uživatele do
C:\Users\<username>\.kube
souboru . - Nainstalováno
kubectl
.
Teď můžete začít spouštět a spravovat nasazení bezstavových aplikací na zařízení Azure Stack Edge Pro. Než začnete používat kubectl
, musíte ověřit, zda máte správnou verzi kubectl
.
Ověřte, že máte správnou verzi kubectl a nastavte konfiguraci.
Kontrola verze kubectl
:
Ověřte, že je verze
kubectl
větší nebo rovna 1.9:kubectl version
Příklad výstupu je uvedený níže:
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"}
V tomto případě je klientská verze kubectl v1.15.2 a je kompatibilní pro pokračování.
Získejte seznam podů spuštěných v clusteru Kubernetes. Pod je kontejner aplikace nebo proces spuštěný v clusteru Kubernetes.
kubectl get pods -n <namespace-string>
Příklad použití příkazů je uvedený níže:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
Výstup by měl uvést, že se nenašly žádné prostředky (pody), protože v clusteru nejsou spuštěné žádné aplikace.
Příkaz naplní adresářovou strukturu C:\Users\<username>\.kube konfiguračními soubory. Nástroj příkazového řádku kubectl tyto soubory použije k vytváření a správě bezstavových aplikací v clusteru Kubernetes.
Ručně zkontrolujte adresářovou strukturu C:\Users\username>\<.kube a ověřte, že je kubectl naplněný následujícími podsložkami:
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
Poznámka:
Pokud chcete zobrazit seznam všech příkazů kubectl, zadejte kubectl --help
.
Vytvoření bezstavové aplikace pomocí nasazení
Teď, když jste ověřili, že je verze příkazového řádku kubectl správná a máte požadované konfigurační soubory, můžete vytvořit bezstavové nasazení aplikace.
Pod je základní prováděcí jednotka aplikace Kubernetes, nejmenší a nejjednodušší jednotka v objektovém modelu Kubernetes, který vytvoříte nebo nasadíte. Pod také zapouzdřuje prostředky úložiště, jedinečnou síťovou IP adresu a možnosti, které řídí způsob spouštění kontejnerů.
Typ bezstavové aplikace, kterou vytvoříte, je nasazení webového serveru nginx.
Všechny příkazy kubectl, které používáte k vytváření a správě nasazení bezstavových aplikací, musí určit obor názvů přidružený ke konfiguraci. Vytvořili jste obor názvů při připojení ke clusteru na zařízení Azure Stack Edge Pro v kurzu Vytvoření a správa clusteru Kubernetes na zařízení Microsoft Azure Stack Edge Pro pomocí New-HcsKubernetesNamespace
.
Chcete-li zadat obor názvů v příkazu kubectl, použijte kubectl <command> -n <namespace-string>
.
Při vytváření nasazení nginx postupujte takto:
Použití bezstavové aplikace vytvořením objektu nasazení Kubernetes:
kubectl apply -f <yaml-file> -n <namespace-string>
V tomto příkladu je cesta k souboru YAML aplikace externím zdrojem.
Tady je ukázka použití příkazu a jeho výstupu:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
Případně můžete uložit následující markdown do místního počítače a nahradit cestu a název souboru v parametru -f . Například C:\Kubernetes\deployment.yaml. Konfigurace nasazení aplikace by byla:
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
Tento příkaz vytvoří výchozí nasazení nginx, které má dva pody pro spuštění vaší aplikace.
Získejte popis nasazení nginx Kubernetes, které jste vytvořili:
kubectl describe deployment nginx-deployment -n <namespace-string>
Ukázkové použití příkazu s výstupem je znázorněno níže:
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
U nastavení replik se zobrazí:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
Nastavení replik označuje, že vaše specifikace nasazení vyžaduje dva pody a že tyto pody byly vytvořeny a aktualizovány a jsou připravené k použití.
Poznámka:
Sada replik nahrazuje pody, které jsou odstraněny nebo ukončeny z jakéhokoli důvodu, například v případě selhání uzlu zařízení nebo narušení upgradu zařízení. Z tohoto důvodu doporučujeme použít sadu replik, i když vaše aplikace vyžaduje jenom jeden pod.
Zobrazení seznamu podů v nasazení:
kubectl get pods -l app=nginx -n <namespace-string>
Ukázkové použití příkazu s výstupem je znázorněno níže:
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
Výstup ověří, že máme dva pody s jedinečnými názvy, na které můžeme odkazovat pomocí kubectl.
Zobrazení informací o jednotlivých podech v nasazení:
kubectl describe pod <podname-string> -n <namespace-string>
Ukázkové použití příkazu s výstupem je znázorněno níže:
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
Změna škálování nasazení aplikace zvýšením počtu replik
Každý pod je určený ke spuštění jedné instance dané aplikace. Pokud chcete škálovat aplikaci horizontálně tak, aby běžela více instancí, můžete pro každou instanci zvýšit počet podů na jeden. V Kubernetes se to označuje jako replikace. Počet podů v nasazení aplikace můžete zvýšit použitím nového souboru YAML. Soubor YAML změní nastavení replik na 4, což zvýší počet podů v nasazení na čtyři pody. Zvýšení počtu podů z 2 na 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
Případně můžete uložit následující markdown na místním počítači a nahradit cestu a název souboru parametru -f parametru kubectl apply
. Například C:\Kubernetes\deployment-scale.yaml. Konfigurace škálování nasazení aplikace by byla následující:
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
Ověření, že nasazení má čtyři pody:
kubectl get pods -l app=nginx
Příklad výstupu pro opětovné škálování nasazení ze dvou na čtyři pody je znázorněno níže:
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
Jak vidíte z výstupu, teď máte ve svém nasazení čtyři pody, které můžou spustit vaši aplikaci.
Odstranění nasazení
Pokud chcete odstranit nasazení, včetně všech podů, musíte spustit kubectl delete deployment
zadání názvu nasazení nginx-deployment a názvu oboru názvů. Odstranění nasazení:
kubectl delete deployment nginx-deployment -n <namespace-string>
Příklad použití příkazů s výstupem je uvedený níže:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted