Aracılığıyla paylaş


Hızlı Başlangıç: Azure veya Red Hat OpenShift'te SQL Server kapsayıcı kümesi dağıtma

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu hızlı başlangıçta, Azure Kubernetes Service (AKS) veya Red Hat OpenShift üzerinde kalıcı depolamaya sahip bir kapsayıcıda yüksek oranda kullanılabilir bir SQL Server örneğinin nasıl yapılandırleneceği gösterilmektedir. SQL Server örneği başarısız olursa, düzenleyici bunu yeni bir podda otomatik olarak yeniden oluşturur. Küme hizmeti ayrıca düğüm hatasına karşı dayanıklılık sağlar.

Bu hızlı başlangıçta kümeyi yönetmek için aşağıdaki komut satırı araçları kullanılır.

Küme hizmeti Komut satırı aracı
Azure Kubernetes Hizmeti (AKS) kubectl (Kubernetes CLI)
Azure Red Hat OpenShift oc (OpenShift CLI)

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.

  • Kubernetes kümesi. kubectlile AKS'de kubernetes kümesi oluşturma ve bu kümeye bağlanma hakkında daha fazla bilgi için bkz. Azure Kubernetes Service (AKS) kümesini dağıtma.

    Uyarı

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

  • Azure CLI. Azure CLI'nin en son sürümünü yüklemek için, Azure CLI yükleme kılavuzuna bakın .

SA parolası oluşturma

Sistem yöneticisi (sa) hesabının güvenliği güçlü bir parolayla sağlanmalıdır. Parolanız,SQL Server varsayılan parola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

  1. Kubernetes kümesinde bir sa parolası oluşturun. Kubernetes, parola gibi gizli bilgiler içeren hassas yapılandırma bilgilerini yönetebilir.

  2. Kubernetes'te mssqliçin <password> değerini tutan MSSQL_SA_PASSWORD adlı bir gizli dizi oluşturmak için aşağıdaki komutu çalıştırın. <password>'ı karmaşık parolanızla değiştirin.

    Önemli

    SA_PASSWORD ortam değişkeni kullanım dışıdır. Bunun yerine MSSQL_SA_PASSWORD kullanın.

    kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
    

Depolama oluşturma

Kubernetes kümesindeki bir veritabanı için kalıcı depolama kullanmanız gerekir. Aşağıdaki adımları kullanarak Kubernetes kümesinde kalıcı birim talebi kalıcı birim ve kalıcı birim talebi yapılandırabilirsiniz:

  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.

  2. 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ı hazırlayıcısı azure-diskşeklindedir. Depolama hesabı türü şeklindedir Standard_LRS. Kalıcı birim isteği mssql-data olarak adlandırılır. 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).

  3. Kubernetes'te kalıcı birim talebi oluşturun; burada <path to pvc.yaml file> dosyayı kaydettiğiniz konumdur:

    kubectl apply -f <path to pvc.yaml file>
    

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

    storageclass "azure-disk" created
    persistentvolumeclaim "mssql-data" created
    
  4. Kalıcı birim talebi olduğunu doğrulayın, burada <persistentVolumeClaim> kalıcı birim talebi adıdır:

    kubectl describe pvc <persistentVolumeClaim>
    

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

    kubectl describe pvc mssql-data
    

    Döndürülen meta veriler, Volume adlı bir değer içerir. Bu değer blob'un adıyla ilişkilendirilir.

    Name:          mssql-data
    Namespace:     default
    StorageClass:  azure-disk
    Status:        Bound
    Volume:        pvc-d169b88e-f26d-11e7-bc3e-0a58ac1f09a4
    Labels:        ‹none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration-{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{"volume.beta.   kubernetes.io/storage-class":"azure-disk"},"name":"mssq1-data...
                   pv.kubernetes.io/bind-completed-yes
                   pv.kubernetes.io/bound-by-controller=yes
                   volume.beta.kubernetes.io/storage-class=azure-disk
                   volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/azure-disk
    Capacity:      8Gi
    Access Modes:  RWO
    Events:        <none>
    

    Hacim için belirlenen değer, Azure portalındaki blob adının bir bölümüne denk gelir.

  5. Kalıcı hacmi doğrulayın.

    kubectl describe pv
    

    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şturun

SQL Server örneğini barındıran kapsayıcı, Kubernetesdağıtım nesnesi olarak tanımlanır. Dağıtım, çoğaltma kümesioluşturur. Çoğaltma kümesi podunuoluşturur.

SQL Server mssql-server-linux Docker görüntüsünü temel alarak kapsayıcıyı açıklamak için bir bildirim oluşturursunuz.

  • Bildirim, kalıcı birim talebine mssql-server ve Kubernetes kümesine mssql zaten uyguladığınız gizli diziye başvurur.
  • Bildirimde bir hizmet de açıklanır. Bu hizmet bir yük dengeleyicidir. Yük dengeleyici, SQL Server örneği kurtarıldıktan sonra IP adresinin kalıcı olduğunu garanti eder.
  • Bildirim, kaynak isteklerini ve sınırlarını açıklar. Bu gereksinimler, en düşük sistem gereksinimlerine dayanmaktadır.
  1. Dağıtımı açıklamak için bir bildirim (YAML dosyası) oluşturun. Aşağıdaki örnekte, SQL Server kapsayıcı görüntüsünü temel alan bir kapsayıcı da dahil olmak üzere bir dağıtım açıklanmaktadır.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mssql-deployment
    spec:
      replicas: 1
      selector:
         matchLabels:
           app: mssql
      template:
        metadata:
          labels:
            app: mssql
        spec:
          terminationGracePeriodSeconds: 30
          hostname: mssqlinst
          securityContext:
            fsGroup: 10001
          containers:
          - name: mssql
            image: mcr.microsoft.com/mssql/server:2022-latest
            resources:
              requests:
                memory: "2G"
                cpu: "2000m"
              limits:
                memory: "2G"
                cpu: "2000m"
            ports:
            - containerPort: 1433
            env:
            - name: MSSQL_PID
              value: "Developer"
            - name: ACCEPT_EULA
              value: "Y"
            - name: MSSQL_SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mssql
                  key: MSSQL_SA_PASSWORD
            volumeMounts:
            - name: mssqldb
              mountPath: /var/opt/mssql
          volumes:
          - name: mssqldb
            persistentVolumeClaim:
              claimName: mssql-data
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mssql-deployment
    spec:
      selector:
        app: mssql
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
      type: LoadBalancer
    

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

    Parametre Değer Description
    MSSQL_PID Developer Kapsayıcıyı SQL Server 2022 (16.x) 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 amaçlıysa, uygun sürümü (Enterprise, Standardveya Express) ayarlayın. Daha fazla bilgi için bkz . SQL Server'ı lisans etme.
    persistentVolumeClaim mssql-data Bu değer, kalıcı birim talebi için claimName kullanılan ada eşleyen bir giriş gerektirir. Bu öğretici mssql-data kullanır.
    name MSSQL_SA_PASSWORD Kapsayıcı görüntüsünü, bu bölümde tanımlandığı gibi parolayı sa ayaracak şekilde yapılandırır.
    valueFrom:
      secretKeyRef:
        name: mssql
        key: MSSQL_SA_PASSWORD
    

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

    Parametre Description
    securityContext Pod veya kapsayıcı için ayrıcalık ve erişim denetimi ayarlarını tanımlar. Bu durumda, pod düzeyinde belirtilir, bu nedenle tüm kapsayıcılar bu güvenlik bağlamını kullanır. Güvenlik bağlamında, fsGroup grubunun Grup Kimliği (GID) olan 10001değeriyle mssql tanımlarız. Bu değer, kapsayıcının tüm işlemlerinin aynı zamanda tamamlayıcı GID 10001 (mssql) parçası olduğu anlamına gelir. Birim /var/opt/mssql ve bu birimde oluşturulan tüm dosyaların sahibi GID 10001 (mssql grubu) olacaktır.

    Uyarı

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

    Dosyayı kaydedin. Örneğin, sqldeployment.yaml.

  2. Dosyayı kaydettiğiniz yer olan <path to sqldeployment.yaml file>'da dağıtımı oluşturun.

    kubectl apply -f <path to sqldeployment.yaml file>
    

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

    deployment "mssql-deployment" created
    service "mssql-deployment" created
    

    Dağıtım ve hizmet oluşturulur. SQL Server ö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.

    NAME                                READY    STATUS    RESTARTS   AGE
    mssql-deployment-3813464711-h312s   1/1      Running   0          17m
    

    Podun durumu Runningolarak görünüyor. Bu durum kapsayıcının hazır olduğunu gösterir. Dağıtım oluşturulduktan sonra, pod'un görünür hale gelmesi birkaç dakika sürebilir. Gecikmenin nedeni, kümenin mssql-server-linux görüntüsünü Microsoft Artifact Registry'den çekmesidir. Görüntü ilk kez çekildikten sonra, dağıtım yapılan düğümde görüntü zaten önbelleğe alınmışsa sonraki dağıtımlar daha hızlı olabilir.

  3. Hizmetlerin çalıştığını doğrulayın. Aşağıdaki komutu çalıştırın:

    kubectl get services
    

    Bu komut, çalışan hizmetleri ve hizmetlerin iç ve dış IP adreslerini döndürür. Hizmetin dış IP adresini not edin mssql-deployment . SQL Server'a bağlanmak için bu IP adresini kullanın.

    NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)          AGE
    kubernetes         ClusterIP      10.0.0.1      <none>          443/TCP          52m
    mssql-deployment   LoadBalancer   10.0.113.96   52.168.26.254   1433:30619/TCP   2m
    

    Kubernetes kümesindeki nesnelerin durumu hakkında daha fazla bilgi için aşağıdaki komutu çalıştırın. <MyResourceGroup> ve <MyKubernetesClustername>’i kaynak grubunuz ve Kubernetes küme adınız ile değiştirmeyi unutmayın.

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    
  4. Ayrıca aşağıdaki komutu çalıştırarak kapsayıcının kök olmayan olarak çalıştığını doğrulayabilirsiniz; burada <nameOfSqlPod> SQL Server podunuzun adıdır:

    kubectl.exe exec <nameOfSqlPod> -it -- /bin/bash
    

    mssqlçalıştırırsanız kullanıcı adını whoami olarak görebilirsiniz. mssql kök olmayan bir kullanıcıdır.

    whoami
    

SQL Server örneğine bağlanma

sa hesabını ve hizmetin dış IP adresini kullanarak Azure sanal ağının dışından bir uygulamaya bağlanabilirsiniz. OpenShift sırrı olarak yapılandırdığınız parolayı kullanın.

SQL Server örneğine bağlanmak için aşağıdaki uygulamaları kullanabilirsiniz.

sqlcmd ile bağlanma

sqlcmdile bağlanmak için aşağıdaki komutu çalıştırın.

sqlcmd -S <External IP address> -U sa -P "<password>"

<External IP address> mssql-deployment hizmetinin IP adresiyle ve <password> karmaşık parolanızla değiştirin.

Dikkat

Parolanız,SQL Server varsayılan parola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

Hata ve kurtarma doğrulaması yapın

Başarısızlığı ve kurtarmayı doğrulamak için podu aşağıdaki adımlarla silebilirsiniz:

  1. SQL Server çalıştıran podu listeleyin.

    kubectl get pods
    

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

  2. Podu silin.

    kubectl delete pod mssql-deployment-0
    

    mssql-deployment-0, pod adı için önceki adımda döndürülen değerdir.

Kubernetes, bir SQL Server örneğini kurtarmak için pod'u otomatik olarak yeniden oluşturur ve kalıcı depolamaya bağlanır. kubectl get pods kullanarak yeni bir pod dağıtıldığını doğrulayın. Yeni kapsayıcının IP adresinin aynı olduğunu doğrulamak için kullanın kubectl get services .

Kaynakları temizleme

Takip eden eğitimleri izlemeyecekseniz, gereksiz kaynaklarınızı temizleyin. Kaynak grubunu, kapsayıcı hizmetini ve tüm ilgili kaynakları kaldırmak için az group delete komutunu kullanın. <MyResourceGroup> değerini kümenizi içeren kaynak grubunun adıyla değiştirin.

az group delete --name <MyResourceGroup> --yes --no-wait