Bagikan melalui


Menyebarkan aplikasi stateless Kubernetes melalui kubectl pada perangkat Azure Stack Edge Pro GPU Anda

BERLAKU UNTUK: Ya untuk Pro GPU SKUAzure Stack Edge Pro - GPUYa untuk Pro 2 SKUAzure Stack Edge Pro 2Ya untuk Pro R SKUAzure Stack Edge Pro RYa untuk Mini R SKUAzure 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:

  1. Membuat kluster Kubernetes.
  2. Menyiapkan namespace.
  3. Mengaitkan pengguna dengan namespace.
  4. Menyimpan konfigurasi pengguna ke C:\Users\<username>\.kube.
  5. 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:

  1. 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.

  2. 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.

  3. 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:

  1. 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.

  2. 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

  3. 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.

  4. 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

Langkah berikutnya

Ringkasan Kubernetes