Aracılığıyla paylaş


Kubernetes durum bilgisi olan bir uygulamayı Azure Stack Edge Pro cihazınızda PersistentVolume 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, Bir PersistentVolume (PV) ve bir dağıtım 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.

Azure Stack Edge Pro, Azure SQL Edge kapsayıcılarının çalıştırılmasını da destekler ve bunlar burada MySQL için ayrıntılı olarak açıklandığı gibi benzer bir şekilde dağıtılabilir. Daha fazla bilgi için bkz . Azure SQL Edge.

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

Statik PV sağlama

Pv'yi statik olarak sağlamak için cihazınızda bir paylaşım oluşturmanız gerekir. SMB paylaşımınızda pv sağlamak için bu adımları izleyin.

Not

  • Bu nasıl yapılır makalesinde kullanılan belirli örnek NFS paylaşımlarıyla çalışmaz. Genel olarak, veritabanı olmayan uygulamalarla Azure Stack Edge cihazınızda NFS paylaşımları sağlanabilir.
  • Kalıcı depolama sağlamak üzere depolama birimlerini kullanan durum bilgisi olan uygulamaları dağıtmak için kullanmanızı StatefulSetöneririz. Bu örnek yalnızca bir çoğaltma ile kullanır Deployment ve geliştirme ve test için uygundur.
  1. Edge paylaşımı mı yoksa Edge yerel paylaşımı mı oluşturmak istediğinizi seçin. Paylaşım oluşturmak için Paylaşım ekleme başlığındaki yönergeleri izleyin. Paylaşımı Edge işlemiyle kullan onay kutusunu seçtiğinizden emin olun.

    PV için edge yerel paylaşımı

    1. Yeni bir paylaşım oluşturmak yerine, mevcut bir paylaşımı kullanmaya karar verirseniz, paylaşımı bağlamanız gerekir.

      Azure Stack Edge kaynağınızın Azure portalında Paylaşımlar'a gidin. Mevcut paylaşım listesinden, kullanmak istediğiniz paylaşımı seçin ve tıklayın.

      PV için mevcut yerel paylaşımı seçme

    2. Bağla'yı seçin ve istendiğinde bağlamayı onaylayın.

      PV için mevcut yerel paylaşımı bağlama

  2. Paylaşım adını not edin. Bu paylaşım oluşturulduğunda, oluşturduğunuz SMB paylaşımına karşılık gelen Kubernetes kümesinde otomatik olarak kalıcı bir birim nesnesi oluşturulur.

MySQL'i dağıtma

Şimdi bir Kubernetes Dağıtımı oluşturup bir PersistentVolumeClaim (PVC) kullanarak önceki adımda oluşturduğunuz PV'ye 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.

    Bu talep, önceki adımda paylaşımı oluşturduğunuzda statik olarak sağlanan mevcut PV'lerden memnundur. Cihazınızda, her paylaşım için 32 TB'lık büyük bir PV oluşturulur. PV, PVC tarafından belirlenen gereksinimleri karşılar ve PVC bu PV'ye bağlı olmalı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
    
  3. dosyasını kopyalayıp kaydettiğiniz mysql-pv.yml klasöre mysql-deployment.ymlkaydedin. ile kubectldaha önce oluşturduğunuz SMB paylaşımını kullanmak için, PVC nesnesindeki alanı paylaşımın adına ayarlayın volumeName .

    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
    spec:
      volumeName: <smb-share-name-here>
      storageClassName: ""
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Dosyayı dağıtın mysql-pv.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-pv.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim created
    
    C:\Users\user>
    

    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
    
  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:  Tue, 18 Aug 2020 09:44:58 -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
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Progressing    True    NewReplicaSetAvailable
      Available      True    MinimumReplicasAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-c85f7f79c (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  10m   deployment-controller  Scaled up replica set mysql-c85f7f79c 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-c85f7f79c-vzz7j   1/1     Running   1          14m
    
    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 -n userns1
    Name:          mysql-pv-claim
    Namespace:     userns1
    StorageClass:
    Status:        Bound
    Volume:        mylocalsmbshare1
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"userns1"},"spec":{"acc...
                   pv.kubernetes.io/bind-completed: yes
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      32Ti
    Access Modes:  RWO,RWX
    VolumeMode:    Filesystem
    Mounted By:    mysql-c85f7f79c-vzz7j
    Events:        <none>
    
    C:\Users\user>
    

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

MySQL çalıştıran bir poddaki bir kapsayıcıya karşı komut çalıştırmak için şunu yazın:

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

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

C:\Users\user>kubectl exec mysql-c85f7f79c-vzz7j -i -t -n userns1 -- mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
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 -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>

PVC silindikçe PV artık PVC'ye bağlı değildir. Paylaşım oluşturulduğunda BD sağlandığından, paylaşımı silmeniz gerekir. Şu adımları izleyin:

  1. Paylaşımı çıkarın. Azure portalında Azure Stack Edge kaynak > Paylaşımlarınıza gidin ve çıkarılmasını istediğiniz paylaşımı seçin ve tıklayın. Çıkar'ı seçin ve işlemi onaylayın. Paylaşım kaldırılana kadar bekleyin. Çıkarma, kubernetes kümesinden paylaşımı (ve dolayısıyla ilişkili PersistentVolume' yi) serbest bırakır.

    PV için yerel paylaşımı çıkarma

  2. Artık Sil'i seçip silme işlemini onaylayarak paylaşımınızı silebilirsiniz. Bu, paylaşımı ve ilgili BD'yi de silmelidir.

    PV için yerel paylaşımı silme

Sonraki adımlar

Depolamayı dinamik olarak sağlamayı anlamak için bkz . Azure Stack Edge Pro cihazında dinamik sağlama yoluyla durum bilgisi olan bir uygulama dağıtma