Aracılığıyla paylaş


Kubernetes durum bilgisi olan bir uygulamayı Azure Stack Edge Pro GPU cihazınızda StorageClass ile çalıştırmak için kubectl kullanma

ŞUNLAR IÇIN GEÇERLIDIR:Pro GPU SKU için Evet Azure Stack Edge Pro - GPUPro 2 SKU için EvetAzure Stack Edge Pro 2Pro R SKU için EvetAzure Stack Edge Pro RMini R SKU için EvetAzure Stack Edge Mini R

Bu makalede depolamayı ve dağıtımı dinamik olarak sağlamak için StorageClass kullanarak Kubernetes'te durum bilgisi olan tek örnekli bir uygulamanın nasıl dağıtılacağı gösterilmektedir. Dağıtım, mevcut bir Kubernetes kümesindeki komutları kullanır kubectl ve MySQL uygulamasını dağıtır.

Bu yordam, Azure Stack Edge Pro cihazında Kubernetes depolama alanını gözden geçiren ve Kubernetes depolama kavramları hakkında bilgi sahibi olan kişilere yöneliktir.

Önkoşullar

Durum bilgisi olan uygulamayı dağıtabilmeniz için önce cihazınızda ve cihaza erişmek için kullanacağınız istemcide aşağıdaki önkoşulları tamamlayın:

Cihaz için

  • 1 düğümlü bir Azure Stack Edge Pro cihazında oturum açma kimlik bilgileriniz var.
    • Cihaz etkinleştirilir. Bkz . Cihazı etkinleştirme.
    • Cihaz, Azure portalı aracılığıyla yapılandırılmış işlem rolüne ve bir Kubernetes kümesine sahiptir. Bkz . İşlemi yapılandırma.

Cihaza erişen istemci için

  • Azure Stack Edge Pro cihazına erişmek için kullanılacak bir Windows istemci sisteminiz var.
    • İstemci Windows PowerShell 5.0 veya üzerini çalıştırıyor. Windows PowerShell'in en son sürümünü indirmek için Windows PowerShell'i Yükleme'ye gidin.

    • Desteklenen işletim sistemine sahip başka bir istemciniz de olabilir. Bu makalede, Bir Windows istemcisi kullanılırken yordam açıklanmaktadır.

    • Azure Stack Edge Pro cihazında Kubernetes kümesine erişme bölümünde açıklanan yordamı tamamladınız. Sahip olduğunuz:

      • komutuyla New-HcsKubernetesNamespace bir userns1 ad alanı oluşturuldu.
      • komutuyla bir kullanıcı user1 oluşturdunuz New-HcsKubernetesUser .
      • user1 komutu aracılığıyla erişim userns1 izni Grant-HcsKubernetesNamespaceAccess verildi.
      • İstemciye yüklendi kubectl ve kullanıcı yapılandırmasıyla dosyayı C:\Users\<username>\.kube dosyasına kaydettikubeconfig.
    • İstemci sürümünün kubectl Azure Stack Edge Pro cihazınızda çalışan Kubernetes ana sürümünden en fazla bir sürümün çarpıtıldığından emin olun.

      • İstemcide çalışan kubectl sürümünü denetlemek için kullanın kubectl version . Tam sürümü not edin.
      • Azure Stack Edge Pro cihazınızın yerel kullanıcı arabiriminde Genel Bakış'a gidin ve Kubernetes yazılım numarasını not edin.
      • Desteklenen Kubernetes sürümünde sağlanan eşlemeden uyumluluk için bu iki sürümü doğrulayın.

Azure Stack Edge Pro cihazınızda durum bilgisi olan bir uygulama dağıtmaya hazırsınız.

MySQL'i dağıtma

Şimdi bir Kubernetes Dağıtımı oluşturup PersistentVolumeClaim (PVC) kullanarak bunu yerleşik StorageClass'a bağlayarak durum bilgisi olan bir uygulama çalıştıracaksınız.

Durum bilgisi olan uygulama dağıtımlarını oluşturmak ve yönetmek için kullandığınız tüm kubectl komutların yapılandırmayla ilişkili ad alanını belirtmesi gerekir. Bir kubectl komutunda ad alanını belirtmek için kullanın kubectl <command> -n <your-namespace>.

  1. Ad alanınızdaki Kubernetes kümenizde çalışan podların listesini alın. Pod, Kubernetes kümenizde çalışan bir uygulama kapsayıcısı veya işlemdir.

    kubectl get pods -n <your-namespace>
    

    Aşağıda bir komut kullanımı örneği verilmiştir:

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

    Çıktı, kümenizde çalışan hiçbir uygulama olmadığından kaynak (pod) bulunamadığını belirtmelidir.

  2. Aşağıdaki YAML dosyalarını kullanacaksınız. Dosya, mysql-deployment.yml MySQL çalıştıran ve PVC'ye başvuran bir dağıtımı açıklar. Dosya, için /var/lib/mysqlbir birim bağlaması tanımlar ve ardından 20 GB'lık birimin arandığı bir PVC oluşturur. Dinamik bir BD sağlanır ve PVC bu BD'ye bağlıdır.

    Aşağıdaki mysql-deployment.yml dosyayı kopyalayın ve Azure Stack Edge Pro cihazına erişmek için kullandığınız Windows istemcisinde bir klasöre kaydedin.

    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. dosyasını kopyalayıp kaydettiğiniz mysql-pvc.yml klasöre mysql-deployment.ymlkaydedin. Ekli bir veri diskinde Azure Stack Edge Pro cihazının yerleşik StorageClass'ını kullanmak için, PVC nesnesindeki alanı olarak ase-node-local ayarlayın storageClassName ve accessModes olmalıdırReadWriteOnce.

    Not

    YAML dosyalarının doğru girintiye sahip olduğundan emin olun. Doğrulamak ve sonra kaydetmek için YAML lint ile kontrol edebilirsiniz.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim-sc
    spec:
      storageClassName: ase-node-local
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Dosyayı dağıtın mysql-pvc.yaml .

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

    Dağıtımın örnek çıktısı aşağıda verilmişti.

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

    Bu örnekte mysql-pv-claim-sc, oluşturulan PVC'nin adını not edin. Bunu sonraki bir adımda kullanacaksınız.

  5. Dosyanın içeriğini dağıtın mysql-deployment.yml .

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

    Dağıtımın örnek çıktısı aşağıda verilmişti.

    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. Dağıtım hakkındaki bilgileri görüntüleyin.

    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. Dağıtım tarafından oluşturulan podları listeleyin.

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

    Aşağıda örnek bir çıkış verilmişti.

    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. PersistentVolumeClaim öğesini inceleyin.

    kubectl describe pvc <your-pvc-name>

    Aşağıda örnek bir çıkış verilmişti.

    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>
    

MySQL'in çalıştığını doğrulama

Uygulamanın çalıştığını doğrulamak için şunu yazın:

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

İstendiğinde parolayı belirtin. Parola dosyanızda mysql-deployment yer alır.

Aşağıda örnek bir çıkış verilmişti.

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>

Dağıtımı silme

Dağıtımı silmek için dağıtılan nesneleri ada göre silin. Bu nesneler dağıtım, hizmet ve PVC'yi içerir.

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

Dağıtımı ve hizmeti sildiğinizde örnek çıktısını aşağıda bulabilirsiniz.

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

PVC'yi sildiğinizde örnek çıktısını aşağıda bulabilirsiniz.

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

Sonraki adımlar

Kubectl aracılığıyla ağ yapılandırmayı anlamak için bkz . Azure Stack Edge Pro cihazında durum bilgisi olmayan uygulama dağıtma