Kubernetes'te Azure SQL Edge kapsayıcısı dağıtma

Önemli

Azure SQL Edge artık ARM64 platformunu desteklememektedir.

Azure SQL Edge, Kubernetes üzerinde çalışan Azure IoT Edge aracılığıyla IoT Edge modülü olarak veya tek başına kapsayıcı podu olarak bir Kubernetes kümesine dağıtılabilir. Bu makalenin geri kalanında Kubernetes kümesinde tek başına kapsayıcı dağıtımına odaklanacağız. Kubernetes'te Azure IoT Edge dağıtma hakkında bilgi için bkz. Kubernetes'te Azure IoT Edge (önizleme).

Bu öğreticide, Kubernetes kümesindeki bir kapsayıcıda yüksek oranda kullanılabilir bir Azure SQL Edge örneğinin nasıl yapılandırılır gösterilmektedir.

  • SA parolası oluşturma
  • Depolama oluşturma
  • Dağıtımı oluşturma
  • SQL Server Management Studio (SSMS) ile bağlanma
  • Hatayı ve kurtarmayı doğrulama

Kubernetes 1.6 ve üzeri depolama sınıfları, kalıcı birim talepleri ve Azure disk birimi türü desteğine sahiptir. Azure SQL Edge örneklerinizi Kubernetes'te yerel olarak oluşturabilir ve yönetebilirsiniz. Bu makaledeki örnekte, paylaşılan disk yük devretme kümesi örneğine benzer bir yüksek kullanılabilirlik yapılandırması elde etmek için dağıtımın nasıl oluşturulacağı gösterilmektedir. Bu yapılandırmada Kubernetes, küme düzenleyici rolünü üstlenir. Kapsayıcıdaki bir Azure SQL Edge örneği başarısız olduğunda, düzenleyici aynı kalıcı depolamaya bağlanan kapsayıcının başka bir örneğini önyükler.

Kubernetes kümesindeki Azure SQL Edge diyagramı.

Yukarıdaki diyagramda, azure-sql-edgepod içindeki bir kapsayıcıdır. Kubernetes, kümedeki kaynakları düzenler. Çoğaltma kümesi, düğüm hatasından sonra pod'un otomatik olarak kurtarılmasını sağlar. Uygulamalar hizmete bağlanır. Bu durumda hizmet, hatasından sonra aynı kalan bir IP adresini barındıran bir yük dengeleyiciyi azure-sql-edgetemsil eder.

Aşağıdaki diyagramda azure-sql-edge kapsayıcı başarısız oldu. Düzenleyici olarak Kubernetes, çoğaltma kümesindeki iyi durumdaki örneklerin doğru sayısını garanti eder ve yapılandırmaya göre yeni bir kapsayıcı başlatır. Düzenleyici aynı düğümde yeni bir pod başlatır ve azure-sql-edge aynı kalıcı depolamaya yeniden bağlanır. Hizmet, yeniden oluşturulan azure-sql-edgeöğesine bağlanır.

Pod başarısız olduktan sonra Kubernetes kümesinde Azure SQL Edge diyagramı.

Aşağıdaki diyagramda kapsayıcıyı azure-sql-edge barındıran düğüm başarısız oldu. Düzenleyici yeni podu farklı bir düğümde başlatır ve azure-sql-edge aynı kalıcı depolama alanına yeniden bağlanır. Hizmet, yeniden oluşturulan azure-sql-edgeöğesine bağlanır.

Düğüm başarısız olduktan sonra Kubernetes kümesindeki Azure SQL Edge diyagramı.

Önkoşullar

  • Kubernetes kümesi

    • Öğretici bir Kubernetes kümesi gerektirir. Bu adımlarda kümeyi yönetmek için kubectl kullanılır.

    • Bu öğreticinin amacı doğrultusunda Azure SQL Edge'i dağıtmak için Azure Kubernetes Service kullanıyoruz. ile kubectlAKS'de tek düğümlü bir Kubernetes kümesi oluşturmak ve bu kümeye bağlanmak için bkz. Azure Kubernetes Service (AKS) kümesi dağıtma.

    Not

    Düğüm hatasına karşı koruma sağlamak için Kubernetes kümesi için birden fazla düğüm gerekir.

  • Azure CLI

    • Bu öğreticideki yönergeler Azure CLI 2.10.1'de doğrulanmıştır.

SQL Edge dağıtımı için Kubernetes ad alanı oluşturma

kubernetes kümesinde yeni bir ad alanı oluşturun. Bu ad alanı SQL Edge'i ve gerekli tüm yapıtları dağıtmak için kullanılır. Kubernetes ad alanları hakkında daha fazla bilgi için bkz. ad alanları.

kubectl create namespace <namespace name>

SA parolası oluşturma

Kubernetes kümesinde bir SA parolası oluşturun. Kubernetes parolalar gibi gizli diziler gibi hassas yapılandırma bilgilerini yönetebilir.

Aşağıdaki komut, SA hesabı için bir parola oluşturur:

kubectl create secret generic mssql --from-literal=SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n <namespace name>

değerini karmaşık bir parolayla değiştirin MyC0m9l&xP@ssw0rd .

Depolama oluşturma

Kubernetes kümesinde kalıcı birim ve kalıcı birim talebi yapılandırın. Aşağıdaki adımları tamamlayın:

  1. Depolama sınıfını ve kalıcı birim talebi tanımlamak için bir bildirim oluşturun. Bildirim depolama sağlamayı, parametreleri ve geri kazanma ilkesini belirtir. Kubernetes kümesi, kalıcı depolamayı oluşturmak için bu bildirimi kullanır.

    Aşağıdaki yaml örneği bir depolama sınıfı ve kalıcı birim talebi tanımlar. Bu Kubernetes kümesi Azure'da olduğundan depolama sınıfı sağlayıcısı azure-diskşeklindedir. Depolama hesabı türü şeklindedir Standard_LRS. Kalıcı birim talebi olarak adlandırılır mssql-data. Kalıcı birim talebi meta verileri, depolama sınıfına geri bağlayan bir ek açıklama içerir.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
         name: azure-disk
    provisioner: kubernetes.io/azure-disk
    parameters:
      storageaccounttype: Standard_LRS
      kind: managed
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mssql-data
      annotations:
        volume.beta.kubernetes.io/storage-class: azure-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
    

    Dosyayı kaydedin (örneğin, pvc.yaml).

  2. Kubernetes'te kalıcı birim talebi oluşturun.

    kubectl apply -f <Path to pvc.yaml file> -n <namespace name>
    

    <Path to pvc.yaml file> , dosyayı kaydettiğiniz konumdur.

    Kalıcı birim otomatik olarak bir Azure depolama hesabı olarak oluşturulur ve kalıcı birim talebine bağlıdır.

    Kalıcı birim talebi komutunun ekran görüntüsü.

  3. Kalıcı birim talebi doğrulayın.

    kubectl describe pvc <PersistentVolumeClaim>  -n <name of the namespace>
    

    <PersistentVolumeClaim> kalıcı birim talebi adıdır.

    Önceki adımda, kalıcı birim talebi olarak adlandırılır mssql-data. Kalıcı birim talebiyle ilgili meta verileri görmek için aşağıdaki komutu çalıştırın:

    kubectl describe pvc mssql-data  -n <namespace name>
    

    Döndürülen meta veriler adlı Volumebir değer içerir. Bu değer blobun adıyla eşler.

    Birim de dahil olmak üzere döndürülen meta verilerin ekran görüntüsü.

  4. Kalıcı birimi doğrulayın.

    kubectl describe pv -n <namespace name>
    

    kubectl otomatik olarak oluşturulan ve kalıcı birim talebine bağlı kalıcı birim hakkındaki meta verileri döndürür.

Dağıtımı oluşturma

Bu örnekte, Azure SQL Edge örneğini barındıran kapsayıcı bir Kubernetes dağıtım nesnesi olarak açıklanmıştır. Dağıtım bir çoğaltma kümesi oluşturur. Çoğaltma kümesi pod'unu oluşturur.

Bu adımda, Azure SQL Edge Docker görüntüsünü temel alarak kapsayıcıyı açıklamak için bir bildirim oluşturun. Bildirim kalıcı birim talebine mssql-data ve mssql Kubernetes kümesine zaten uyguladığınız gizli diziye başvurur. Bildirim bir hizmeti de açıklar. Bu hizmet bir yük dengeleyicidir. Yük dengeleyici, Azure SQL Edge örneği kurtarıldıktan sonra IP adresinin kalıcı olduğunu garanti eder.

  1. Dağıtımı açıklamak için bir bildirim (YAML dosyası) oluşturun. Aşağıdaki örnekte, Azure SQL Edge kapsayıcı görüntüsünü temel alan bir kapsayıcı dahil olmak üzere bir dağıtım açıklanır.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sqledge-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sqledge
      template:
        metadata:
          labels:
            app: sqledge
        spec:
          volumes:
            - name: sqldata
              persistentVolumeClaim:
                claimName: mssql-data
          containers:
            - name: azuresqledge
              image: mcr.microsoft.com/azure-sql-edge:latest
              ports:
                - containerPort: 1433
              volumeMounts:
                - name: sqldata
                  mountPath: /var/opt/mssql
              env:
                - name: MSSQL_PID
                  value: "Developer"
                - name: ACCEPT_EULA
                  value: "Y"
                - name: SA_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mssql
                      key: SA_PASSWORD
                - name: MSSQL_AGENT_ENABLED
                  value: "TRUE"
                - name: MSSQL_COLLATION
                  value: "SQL_Latin1_General_CP1_CI_AS"
                - name: MSSQL_LCID
                  value: "1033"
          terminationGracePeriodSeconds: 30
          securityContext:
            fsGroup: 10001
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sqledge-deployment
    spec:
      selector:
        app: sqledge
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
          name: sql
      type: LoadBalancer
    

    Önceki kodu adlı sqldeployment.yamlyeni bir dosyaya kopyalayın. Aşağıdaki değerleri güncelleştirin:

    • value: "Developer"MSSQL_PID: Kapsayıcıyı Azure SQL Edge Developer sürümünü çalıştıracak şekilde ayarlar. Geliştirici sürümü üretim verileri için lisanslı değildir. Dağıtım üretim kullanımına yönelikse, sürümü olarak Premiumayarlayın.

      Not

      Daha fazla bilgi için bkz. Edge Azure SQL lisans verme.

    • persistentVolumeClaim: Bu değer, kalıcı birim talebi için claimName: kullanılan ada eşleyen bir giriş gerektirir. Bu öğreticide mssql-data kullanılır.

    • name: SA_PASSWORD: Bu bölümde tanımlandığı gibi SA parolasını ayarlamak için kapsayıcı görüntüsünü yapılandırır.

      valueFrom:
        secretKeyRef:
          name: mssql
          key: SA_PASSWORD
      

      Kubernetes kapsayıcıyı dağıttığında, parolanın değerini almak için adlı mssql gizli diziye başvurur.

    Not

    Hizmet türü kullanılarak LoadBalancer Azure SQL Edge örneğine 1433 numaralı bağlantı noktasından uzaktan (İnternet üzerinden) erişilebilir.

    Dosyayı kaydedin (örneğin, sqledgedeploy.yaml).

  2. Dağıtımı oluşturun.

    kubectl apply -f <Path to sqledgedeploy.yaml file> -n <namespace name>
    

    <Path to sqldeployment.yaml file> , dosyayı kaydettiğiniz konumdur.

    Dağıtım komutunun ekran görüntüsü.

    Dağıtım ve hizmet oluşturulur. Azure SQL Edge örneği, kalıcı depolamaya bağlı bir kapsayıcıdadır.

    Podun durumunu görüntülemek için yazın kubectl get pod -n <namespace name>.

    Get pod komutunun ekran görüntüsü.

    Yukarıdaki görüntüde podun durumu şeklindedir Running. Bu durum kapsayıcının hazır olduğunu gösterir. Bu işlem birkaç dakika sürebilir.

    Not

    Dağıtım oluşturulduktan sonra pod'un görünmesi birkaç dakika sürebilir. Gecikmenin nedeni, kümenin Docker hub'ından Azure SQL Edge kapsayıcı görüntüsünü çekmesidir. Görüntü ilk kez çekildikten sonra, dağıtım görüntü üzerinde zaten önbelleğe alınmış bir düğümdeyse sonraki dağıtımlar daha hızlı olabilir.

  3. Hizmetlerin çalıştığını doğrulayın. Şu komutu çalıştırın:

    kubectl get services -n <namespace name>
    

    Bu komut, çalışan hizmetlerin yanı sıra hizmetlerin iç ve dış IP adreslerini döndürür. Hizmetin dış IP adresini not edin mssql-deployment . Azure SQL Edge'e bağlanmak için bu IP adresini kullanın.

    Hizmet al komutunun ekran görüntüsü.

    Kubernetes kümesindeki nesnelerin durumu hakkında daha fazla bilgi için şunu çalıştırın:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    

Azure SQL Edge örneğine bağlanma

Kapsayıcıyı açıklandığı gibi yapılandırdıysanız Azure sanal ağının dışından bir uygulamaya bağlanabilirsiniz. sa Hizmet için hesabı ve dış IP adresini kullanın. Kubernetes gizli dizisi olarak yapılandırdığınız parolayı kullanın. Azure SQL Edge örneğine bağlanma hakkında daha fazla bilgi için bkz. Azure SQL Edge'e bağlanma.

Hatayı ve kurtarmayı doğrulama

Hatayı ve kurtarmayı doğrulamak için pod'u silebilirsiniz. Aşağıdaki adımları uygulayın:

  1. Azure SQL Edge çalıştıran podları listeleyin.

    kubectl get pods -n <namespace name>
    

    Azure SQL Edge çalıştıran podun adını not edin.

  2. Podu silin.

    kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
    

    sqledge-deployment-7df66c9999-rc9xl pod adı için önceki adımdan döndürülen değerdir.

Kubernetes, bir Azure SQL Edge örneğini kurtarmak ve kalıcı depolamaya bağlanmak için podu otomatik olarak yeniden oluşturur. Yeni bir pod dağıtıldığını doğrulamak için kullanın kubectl get pods . Yeni kapsayıcının IP adresinin aynı olduğunu doğrulamak için kullanın kubectl get services .

Özet

Bu öğreticide, Azure SQL Edge kapsayıcılarını yüksek kullanılabilirlik için kubernetes kümesine dağıtmayı öğrendiniz.

  • SA parolası oluşturma
  • Depolama oluşturma
  • Dağıtımı oluşturma
  • Azure SQL Edge Management Studios (SSMS) ile bağlanma
  • Hatayı ve kurtarmayı doğrulama

Sonraki adımlar