Menyebarkan aplikasi stateless Kubernetes melalui kubectl pada perangkat Azure Stack Edge Pro GPU Anda
BERLAKU UNTUK: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Artikel ini menjelaskan cara menyebarkan aplikasi stateless menggunakan perintah kubectl pada kluster Kubernetes yang ada. Artikel ini juga memandu Anda melalui proses pembuatan dan pengaturan pod di aplikasi stateless Anda.
Prasyarat
Sebelum dapat membuat kluster Kubernetes dan menggunakan alat baris perintah kubectl
, Anda harus memastikan bahwa:
Anda memiliki informasi masuk ke perangkat Azure Stack Edge Pro 1-node.
Windows PowerShell 5.0 atau yang lebih baru diinstal pada sistem klien Windows untuk mengakses perangkat Azure Stack Edge Pro. Anda juga dapat memiliki klien lain dengan Sistem operasi yang didukung. Artikel ini menjelaskan prosedur saat menggunakan klien Windows. Untuk mengunduh versi terbaru dari Windows PowerShell, buka Menginstal Windows PowerShell.
Komputasi diaktifkan di perangkat Azure Stack Edge Pro. Untuk mengaktifkan komputasi, buka halaman Komputasi di antarmuka pengguna lokal perangkat. Lalu pilih antarmuka jaringan yang ingin Anda aktifkan untuk komputasi. Klik Aktifkan. Mengaktifkan komputasi menghasilkan pembuatan sakelar virtual pada perangkat Anda pada antarmuka jaringan tersebut. Untuk informasi selengkapnya, lihat Mengaktifkan jaringan komputasi di Azure Stack Edge Pro Anda.
Perangkat Azure Stack Edge Pro Anda memiliki server kluster Kubernetes yang berjalan yaitu versi v1.9 atau yang lebih baru. Untuk informasi selengkapnya, lihat Membuat dan mengelola kluster Kubernetes di perangkat Microsoft Azure Stack Edge Pro.
Anda sudah menginstal
kubectl
.
Menyebarkan aplikasi stateless
Sebelum kita mulai, Anda harus sudah:
- Membuat kluster Kubernetes.
- Menyiapkan namespace.
- Mengaitkan pengguna dengan namespace.
- Menyimpan konfigurasi pengguna ke
C:\Users\<username>\.kube
. - Menginstal
kubectl
.
Sekarang Anda dapat mulai menjalankan dan mengelola penyebaran aplikasi stateless di perangkat Azure Stack Edge Pro. Sebelum Anda mulai menggunakan kubectl
, Anda perlu memverifikasi bahwa Anda memiliki versi yang benar dari kubectl
.
Memverifikasi bahwa Anda memiliki versi kubectl yang benar dan menyiapkan konfigurasi
Untuk memeriksa versi kubectl
:
Verifikasi bahwa versi
kubectl
lebih besar atau sama dengan 1.9:kubectl version
Contoh output ditunjukkan di bawah ini:
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"}
Dalam hal ini, versi klien kubectl adalah v1.15.2 dan kompatibel untuk melanjutkan.
Dapatkan daftar pod yang berjalan pada kluster Kubernetes Anda. Pod merupakan sebuah kontainer aplikasi, atau proses, yang berjalan pada kluster Kubernetes Anda.
kubectl get pods -n <namespace-string>
Contoh penggunaan perintah diperlihatkan di bawah ini:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
Output{i>
Perintah akan mengisi struktur direktori "C:\Users\<username>\.kube" dengan file konfigurasi. Alat baris perintah kubectl akan menggunakan file-file ini untuk membuat dan mengelola aplikasi stateless pada kluster Kubernetes Anda.
Periksa struktur direktori "C:\Users\<username>\.kube" secara manual untuk memverifikasi bahwa kubectl telah mengisinya dengan subfolder berikut:
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
Catatan
Untuk melihat daftar semua perintah kubectl, ketik kubectl --help
.
Membuat aplikasi stateless menggunakan penyebaran
Sekarang setelah Anda memverifikasi bahwa versi baris perintah kubectl sudah benar dan Anda memiliki file konfigurasi yang dibutuhkan, Anda dapat membuat penyebaran aplikasi stateless.
Pod adalah unit eksekusi dasar dari aplikasi Kubernetes, unit terkecil dan paling sederhana dalam model objek Kubernetes yang Anda buat atau sebarkan. Pod juga merangkum sumber daya penyimpanan, IP jaringan yang unik, dan opsi yang mengatur bagaimana kontainer harus berjalan.
Jenis aplikasi stateless yang Anda buat adalah penyebaran server web nginx.
Semua perintah kubectl yang Anda gunakan untuk membuat dan mengelola penyebaran aplikasi stateless perlu untuk menentukan namespace yang terkait dengan konfigurasi. Anda membuat namespace saat terhubung ke kluster pada perangkat Azure Stack Edge Pro dalam tutorial Membuat dan mengelola kluster Kubernetes pada perangkat Microsoft Azure Stack Edge Pro dengan New-HcsKubernetesNamespace
.
Untuk menentukan namespace dalam perintah kubectl, gunakan kubectl <command> -n <namespace-string>
.
Ikuti langkah-langkah berikut untuk membuat penyebaran nginx:
Sebarkan aplikasi stateless dengan membuat objek penyebaran Kubernetes:
kubectl apply -f <yaml-file> -n <namespace-string>
Dalam contoh ini, jalur ke file YAML aplikasi adalah sumber eksternal.
Berikut adalah sampel penggunaan perintah dan outputnya:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
Atau, Anda dapat menyimpan markdown berikut ke komputer lokal Anda dan mengganti jalur dan nama file dalam parameter -f. Misalnya, "C:\Kubernetes\deployment.yaml". Konfigurasi untuk penyebaran aplikasi adalah:
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
Perintah ini membuat penyebaran nginx default yang memiliki dua pod untuk menjalankan aplikasi Anda.
Dapatkan deskripsi dari penyebaran nginx Kubernetes yang Anda buat:
kubectl describe deployment nginx-deployment -n <namespace-string>
Sampel penggunaan perintah, dengan output, diperlihatkan di bawah ini:
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
Untuk pengaturan replika, Anda akan melihat:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
Pengaturan replika menunjukkan bahwa spesifikasi penyebaran Anda memerlukan dua pod, dan pod tersebut dibuat dan diperbarui dan siap digunakan.
Catatan
Set replika menggantikan pod yang dihapus atau dihentikan karena suatu alasan, seperti dalam kasus kegagalan node perangkat atau peningkatan perangkat yang mengganggu. Untuk alasan ini, sebaiknya Anda menggunakan sekumpulan replika meskipun aplikasi Anda hanya memerlukan satu {i>pod
Untuk mencantumkan pod dalam penyebaran Anda:
kubectl get pods -l app=nginx -n <namespace-string>
Sampel penggunaan perintah, dengan output, diperlihatkan di bawah ini:
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
Output memverifikasi bahwa kami memiliki dua pod dengan nama unik yang dapat kami referensikan menggunakan kubectl.
Untuk melihat informasi pada satu pod dalam penyebaran:
kubectl describe pod <podname-string> -n <namespace-string>
Sampel penggunaan perintah, dengan output, diperlihatkan di bawah ini:
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
Menskalakan ulang penyebaran aplikasi dengan meningkatkan jumlah replika
Setiap pod dimaksudkan untuk menjalankan satu instans dari aplikasi yang diberikan. Jika ingin menskalakan aplikasi secara horizontal untuk menjalankan beberapa instans, Anda dapat menambah jumlah pod menjadi satu untuk setiap instans. Dalam Kubernetes, ini disebut sebagai replikasi. Anda dapat menambah jumlah pod dalam penyebaran aplikasi dengan menerapkan file YAML baru. File YAML mengubah pengaturan replika menjadi 4, yang meningkatkan jumlah pod dalam penyebaran Anda menjadi empat pod. Untuk meningkatkan jumlah pod dari 2 menjadi 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
Atau, Anda dapat menyimpan markdown berikut ke komputer lokal Anda dan mengganti jalur dan nama file untuk parameter -f untuk kubectl apply
. Misalnya, "C:\Kubernetes\deployment-scale.yaml". Konfigurasi untuk skala penyebaran aplikasi adalah:
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
Untuk memverifikasi bahwa penyebaran memiliki empat pod:
kubectl get pods -l app=nginx
Contoh output untuk penyebaran penskalaan ulang dari dua hingga empat pod ditunjukkan di bawah ini:
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
Seperti yang dapat dilihat dari output, sekarang Anda memiliki empat pod dalam penyebaran yang dapat menjalankan aplikasi Anda.
Menghapus Penyebaran
Untuk menghapus penyebaran, termasuk semua pod, Anda harus menjalankan kubectl delete deployment
yang menentukan nama penyebaran penyebaran nginx dan nama namespace. Menghapus penyebaran:
kubectl delete deployment nginx-deployment -n <namespace-string>
Contoh penggunaan perintah, dengan output, ditunjukkan di bawah ini:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted