Wdrażanie wystąpienia zarządzanego SQL włączonego przez usługę Azure Arc przy użyciu narzędzi platformy Kubernetes

W tym artykule pokazano, jak wdrożyć usługę Azure SQL Managed Instance dla usługi Azure Arc przy użyciu narzędzi Platformy Kubernetes.

Wymagania wstępne

Powinien już zostać utworzony kontroler danych.

Aby utworzyć wystąpienie zarządzane SQL przy użyciu narzędzi Kubernetes, musisz mieć zainstalowane narzędzia Kubernetes. Przykłady w tym artykule będą używane, kubectlale podobne podejścia mogą być używane z innymi narzędziami kubernetes, takimi jak pulpit nawigacyjny Kubernetes, oclub helm jeśli znasz te narzędzia i plik yaml/json platformy Kubernetes.

Instalowanie narzędzia kubectl

Omówienie

Aby utworzyć wystąpienie zarządzane SQL, należy wykonać następujące kroki:

  1. Tworzenie wpisu tajnego platformy Kubernetes w celu bezpiecznego przechowywania identyfikatora logowania administratora systemu i hasła
  2. Tworzenie zasobu niestandardowego usługi SQL Managed Instance na podstawie niestandardowej SqlManagedInstance definicji zasobu

Zdefiniuj oba te elementy w pliku yaml.

Tworzenie pliku yaml

Użyj pliku yaml szablonu jako punktu początkowego, aby utworzyć własny niestandardowy plik yaml wystąpienia zarządzanego SQL. Pobierz ten plik na komputer lokalny i otwórz go w edytorze tekstów. Użyj edytora tekstów, takiego jak PROGRAM VS Code , który obsługuje wyróżnianie składni i podszewkę dla plików yaml.

Uwaga

Począwszy od wersji z lutego 2022 r., ReadWriteMany należy określić klasę magazynu z obsługą RWX dla kopii zapasowych. Dowiedz się więcej o trybach dostępu. Jeśli dla kopii zapasowych nie określono żadnej klasy magazynu, zostanie użyta domyślna klasa magazynu na platformie Kubernetes. Jeśli wartość domyślna nie jest w stanie rwX, instalacja usługi SQL Managed Instance może zakończyć się niepowodzeniem.

Przykładowy plik yaml

Zobacz następujący przykład pliku yaml:

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: sql1-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v12
kind: SqlManagedInstance
metadata:
  name: sql1
  annotations:
    exampleannotation1: exampleannotationvalue1
    exampleannotation2: exampleannotationvalue2
  labels:
    examplelabel1: examplelabelvalue1
    examplelabel2: examplelabelvalue2
spec:
  dev: true #options: [true, false]
  licenseType: LicenseIncluded #options: [LicenseIncluded, BasePrice].  BasePrice is used for Azure Hybrid Benefits.
  tier: GeneralPurpose #options: [GeneralPurpose, BusinessCritical]
  security:
    adminLoginSecret: sql1-login-secret
  scheduling:
    default:
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
  services:
    primary:
      type: LoadBalancer
  storage:
    #backups:
    #  volumes:
    #  - className: azurefile # Backup volumes require a ReadWriteMany (RWX) capable storage class
    #    size: 5Gi
    data:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    datalogs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    logs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi

Dostosowywanie identyfikatora logowania i hasła

Wpis tajny kubernetes jest przechowywany jako ciąg zakodowany w formacie base64 — jeden dla nazwy użytkownika i jeden dla hasła. Musisz zakodować identyfikator logowania i hasło administratora systemu base64, a następnie umieścić je w lokalizacji zastępczej w data.password lokalizacji i data.username. Nie dołączaj < symboli i > podanych w szablonie.

Uwaga

W celu uzyskania optymalnego bezpieczeństwa użycie wartości sa nie jest dozwolone w przypadku logowania . Postępuj zgodnie z zasadami złożoności haseł.

Możesz użyć narzędzia online, aby zakodować żądaną nazwę użytkownika i hasło, lub użyć narzędzi interfejsu wiersza polecenia w zależności od platformy.

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

Dostosowywanie nazwy

Szablon ma wartość sql1 atrybutu name. Można zmienić tę wartość, ale musi zawierać znaki zgodne ze standardami nazewnictwa DNS. Należy również zmienić nazwę wpisu tajnego tak, aby był zgodny. Jeśli na przykład zmienisz nazwę wystąpienia zarządzanego SQL na sql2, musisz zmienić nazwę wpisu tajnego z sql1-login-secret na sql2-login-secret

Dostosowywanie wymagań dotyczących zasobów

Możesz zmienić wymagania dotyczące zasobów — limity pamięci RAM i rdzeni oraz żądania — zgodnie z potrzebami.

Uwaga

Aby dowiedzieć się więcej na temat zarządzania zasobami platformy Kubernetes, możesz dowiedzieć się więcej.

Wymagania dotyczące limitów zasobów i żądań:

  • Wartość limitu rdzeni jest wymagana do celów rozliczeniowych.
  • Pozostałe żądania zasobów i limity są opcjonalne.
  • Limit rdzeni i żądanie muszą być dodatnią wartością całkowitą, jeśli zostanie określona.
  • Co najmniej 1 rdzeń jest wymagany dla żądania rdzeni, jeśli określono.
  • Format wartości pamięci jest zgodny z notacją Kubernetes.
  • W przypadku żądania pamięci wymagane jest co najmniej 2 GB.
  • Ogólnie rzecz biorąc, należy mieć 4 GB pamięci RAM dla każdego 1 rdzenia dla przypadków użycia w środowisku produkcyjnym.

Dostosowywanie typu usługi

W razie potrzeby można zmienić typ usługi na NodePort. Zostanie przypisany losowy numer portu.

Dostosowywanie magazynu

Możesz dostosować klasy magazynu dla magazynu, aby dopasować je do środowiska. Jeśli nie masz pewności, które klasy magazynu są dostępne, uruchom polecenie kubectl get storageclass , aby je wyświetlić.

Szablon ma wartość defaultdomyślną .

Na przykład

storage:
    data:
      volumes:
      - className: default 

Ten przykład oznacza, że istnieje klasa magazynu o nazwie default — nie istnieje klasa magazynu, która jest domyślna. Opcjonalnie możesz również zmienić rozmiar magazynu. Aby uzyskać więcej informacji, zobacz Konfiguracja magazynu.

Tworzenie wystąpienia zarządzanego SQL

Po dostosowaniu pliku yaml wystąpienia zarządzanego SQL możesz utworzyć wystąpienie zarządzane SQL, uruchamiając następujące polecenie:

kubectl create -n <your target namespace> -f <path to your yaml file>

#Example
#kubectl create -n arc -f C:\arc-data-services\sqlmi.yaml

Monitorowanie stanu tworzenia

Tworzenie wystąpienia zarządzanego SQL potrwa kilka minut. Postęp można monitorować w innym oknie terminalu za pomocą następujących poleceń:

Uwaga

W poniższych przykładowych poleceniach przyjęto założenie, że utworzono wystąpienie zarządzane SQL o nazwie sql1 i przestrzeń nazw Kubernetes o nazwie arc. Jeśli użyto innej przestrzeni nazw/nazwy wystąpienia zarządzanego SQL, możesz zastąpić arc ciąg i sqlmi swoimi nazwami.

kubectl get sqlmi/sql1 --namespace arc
kubectl get pods --namespace arc

Możesz również sprawdzić stan tworzenia dowolnego określonego zasobnika. Uruchom program kubectl describe pod .... Użyj tego polecenia, aby rozwiązać wszelkie problemy. Na przykład:

kubectl describe pod/<pod name> --namespace arc

#Example:
#kubectl describe pod/sql1-0 --namespace arc

Rozwiązywanie problemów z wdrażaniem

Jeśli wystąpią problemy z wdrożeniem, zapoznaj się z przewodnikiem rozwiązywania problemów.

Połączenie do usługi SQL Managed Instance włączonej przez usługę Azure Arc