Bagikan melalui


Gunakan kubectl untuk menjalankan aplikasi stateful Kubernetes dengan StorageClass 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 menunjukkan cara menyebarkan aplikasi stateful satu instans di Kube menggunakan StorageClass untuk menyediakan penyimpanan dan penyebaran secara dinamis. Penyebaran menggunakan perintah kubectl pada kluster Kube yang ada dan menyebarkan aplikasi MySQL.

Prosedur ini ditujukan bagi mereka yang telah meninjau ulang penyimpanan Kube pada perangkat Azure Stack Edge Pro dan sudah tidak asing lagi dengan konsep penyimpanan Kube.

Prasyarat

Sebelum menyebarkan aplikasi stateful, lengkapi prasyarat berikut di perangkat Anda serta klien yang akan Anda gunakan untuk mengakses perangkat:

Untuk perangkat

  • Anda memiliki informasi masuk ke perangkat Azure Stack Edge Pro 1-node.

Untuk klien yang mengakses perangkat

  • Anda memiliki sistem klien Windows yang akan digunakan untuk mengakses perangkat Azure Stack Edge Pro.
    • Klien menjalankan Windows PowerShell 5.0 atau yang lebih baru. Untuk mengunduh Windows PowerShell versi terbaru, buka Memasang Windows PowerShell.

    • Anda dapat menggunakan klien lain dengan Sistem operasi yang didukung dengan baik. Artikel ini menjelaskan prosedur saat menggunakan klien Windows.

    • Anda telah menyelesaikan prosedur yang dijelaskan dalam Mengakses kluster Kubernetes pada perangkat Azure Stack Edge Pro. Anda telah:

      • Membuat namespace userns1 melalui perintah New-HcsKubernetesNamespace.
      • Membuat pengguna user1 melalui perintah New-HcsKubernetesUser.
      • Memberikan akses user1 ke userns1 melalui perintah Grant-HcsKubernetesNamespaceAccess.
      • Diinstal kubectl pada klien dan simpan kubeconfig file dengan konfigurasi pengguna ke C:\Users\<username>\.kube.
    • Memastikan versi klien kubectl dipasang tidak melebihi satu versi dari versi master Kubernetes yang berjalan di perangkat Azure Stack Edge Pro Anda.

      • Menggunakan kubectl version untuk memeriksa versi kubectl yang berjalan pada klien. Catat versi lengkapnya.
      • Di IU lokal perangkat Azure Stack Edge Pro, buka Gambaran umum dan catat nomor perangkat lunak Kube.
      • Verifikasi kedua versi ini untuk kompatibilitas dari pemetaan yang disediakan dalam versi Kubernetes yang Didukung.

Anda siap untuk menyebarkan aplikasi stateful di perangkat Azure Stack Edge Pro Anda.

Menyebarkan MySQL

Anda sekarang akan menjalankan aplikasi stateful dengan membuat Kubernetes Deployment dan menghubungkannya ke PV yang Anda buat pada langkah sebelumnya menggunakan PersistentVolumeClaim (PVC).

Semua perintah kubectl yang Anda gunakan untuk membuat dan mengelola penyebaran aplikasi stateful perlu menentukan namespace yang terkait dengan konfigurasi. Untuk menentukan namespace dalam perintah kubectl, gunakan kubectl <command> -n <your-namespace>.

  1. Dapatkan daftar pod yang berjalan pada kluster Kube di namespace Anda. Pod merupakan sebuah kontainer aplikasi, atau proses, yang berjalan pada kluster Kubernetes Anda.

    kubectl get pods -n <your-namespace>
    

    Berikut adalah contoh penggunaan perintah:

     C:\Users\user>kubectl get pods -n "userns1"
     No resources found in userns1 namespace.    
     C:\Users\user>
    

    Output{i>

  2. Anda akan menggunakan file YAML berikut. File mysql-deployment.yml menjelaskan penyebaran yang menjalankan MySQL dan mereferensikan PVC. File mendefinisikan pemasangan volume untuk /var/lib/mysql, dan kemudian membuat PVC yang membutuhkan volume sebesar 20-GB. PV dinamis disediakan dan PVC terikat dengan PV ini.

    Salin dan simpan file mysql-deployment.yml berikut ini ke dalam folder di klien Windows yang Anda gunakan untuk mengakses perangkat Azure Stack Edge Pro.

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      ports:
      - port: 3306
      selector:
        app: mysql
      clusterIP: None
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            env:
              # Use secret in real usage
            - name: MYSQL_ROOT_PASSWORD
              value: password
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
          volumes:
          - name: mysql-persistent-storage
            persistentVolumeClaim:
              claimName: mysql-pv-claim-sc
    
  3. Salin dan simpan sebagai file mysql-pvc.yml ke folder yang sama tempat Anda menyimpan mysql-deployment.yml. Untuk menggunakan StorageClass bawaan yang perangkat Azure Stack Edge Pro pada disk data terlampir, storageClassName atur bidang di objek PVC ke dan ase-node-local accessModes harus ReadWriteOnce.

    Catatan

    Pastikan bahwa file YAML memiliki indentasi yang benar. Anda dapat memeriksa dengan YAML lint untuk validasi dan kemudian simpan.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim-sc
    spec:
      storageClassName: ase-node-local
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Sebarkan file mysql-pvc.yaml.

    kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>

    Berikut adalah sampel output{i>

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pvc.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim-sc created
    C:\Users\user>
    

    Perhatikan nama PVC yang dibuat - dalam contoh ini, mysql-pv-claim-sc. Anda akan menggunakannya di langkah selanjutnya.

  5. Sebarkan isi file mysql-deployment.yml.

    kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>

    Berikut adalah sampel output{i>

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
    service/mysql created
    deployment.apps/mysql created
    C:\Users\user>
    
  6. Tampilkan informasi tentang penyebaran.

    kubectl describe deployment <app-label> -n <your-user-namespace>

    C:\Users\user>kubectl describe deployment mysql -n userns1
    Name:               mysql
    Namespace:          userns1
    CreationTimestamp:  Thu, 20 Aug 2020 11:14:25 -0700
    Labels:             <none>
    Annotations:        deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"mysql","namespace":"userns1"},"spec":{"selector":{"matchL...
    Selector:           app=mysql
    Replicas:           1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:       Recreate
    MinReadySeconds:    0
    Pod Template:
      Labels:  app=mysql
      Containers:
       mysql:
        Image:      mysql:5.6
        Port:       3306/TCP
        Host Port:  0/TCP
        Environment:
          MYSQL_ROOT_PASSWORD:  password
        Mounts:
          /var/lib/mysql from mysql-persistent-storage (rw)
      Volumes:
       mysql-persistent-storage:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  mysql-pv-claim-sc
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-695c4d9dcd (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  24s   deployment-controller  Scaled up replica set mysql-695c4d9dcd to 1
    C:\Users\user>
    
  7. Daftar Pod yang dibuat oleh penyebaran.

    kubectl get pods -l <app=label> -n <your-user-namespace>

    Berikut ini adalah sampel output.

    C:\Users\user>kubectl get pods -l app=mysql -n userns1
    NAME                     READY   STATUS    RESTARTS   AGE
    mysql-695c4d9dcd-rvzff   1/1     Running   0          40s
    C:\Users\user>
    
  8. Periksa PersistentVolumeClaim.

    kubectl describe pvc <your-pvc-name>

    Berikut ini adalah sampel output.

    C:\Users\user>kubectl describe pvc mysql-pv-claim-sc -n userns1
    Name:          mysql-pv-claim-sc
    Namespace:     userns1
    StorageClass:  ase-node-local
    Status:        Bound
    Volume:        pvc-dc48253c-82dc-42a4-a7c6-aaddc97c9b8a
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim-sc","namespace":"userns1"},"spec":{"...
                   pv.kubernetes.io/bind-completed: yes
                   pv.kubernetes.io/bound-by-controller: yes
                   volume.beta.kubernetes.io/storage-provisioner: rancher.io/local-path
                   volume.kubernetes.io/selected-node: k8s-3q7lhq2cl-3q7lhq2
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      20Gi
    Access Modes:  RWO
    VolumeMode:    Filesystem
    Mounted By:    mysql-695c4d9dcd-rvzff
    Events:
      Type    Reason                 Age                From                                                                                                Message
      ----    ------                 ----               ----                                                                                                -------
      Normal  WaitForFirstConsumer   71s (x2 over 77s)  persistentvolume-controller                                                                         waiting for first consumer to be created before binding
      Normal  ExternalProvisioning   62s                persistentvolume-controller                                                                         waiting for a volume to be created, either by external provisioner "rancher.io/local-path" or manually created by system administrator
      Normal  Provisioning           62s                rancher.io/local-path_local-path-provisioner-6b84988bf9-tx8mz_1896d824-f862-4cbf-912a-c8cc0ca05574  External provisioner is provisioning volume for claim "userns1/mysql-pv-claim-sc"
      Normal  ProvisioningSucceeded  60s                rancher.io/local-path_local-path-provisioner-6b84988bf9-tx8mz_1896d824-f862-4cbf-912a-c8cc0ca05574  Successfully provisioned volume pvc-dc48253c-82dc-42a4-a7c6-aaddc97c9b8a
    C:\Users\user>
    

Verifikasi bahwa MySQL sedang berjalan

Untuk memverifikasi bahwa aplikasi sedang berjalan, ketik:

kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql -p

Ketika diminta, berikan kata sandi. Kata sandi ada di file mysql-deployment Anda.

Berikut ini adalah sampel output.

C:\Users\user>kubectl exec mysql-695c4d9dcd-rvzff -i -t -n userns1 -- mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.49 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Menghapus penyebaran

Untuk menghapus penyebaran, hapus objek yang disebarkan menurut nama. Objek ini termasuk penyebaran, layanan, dan PVC.

kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>

Berikut merupakan sampel output saat Anda menghapus penyebaran dan layanan.

C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>

Berikut merupakan sampel output saat Anda menghapus PVC.

C:\Users\user>kubectl delete pvc mysql-pv-claim-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>

Langkah berikutnya

Untuk memahami cara mengonfigurasi jaringan melalui kubectl, lihat Menerapkan aplikasi stateless pada perangkat Azure Stack Edge Pro