Kubernetes 도구를 사용하여 Azure Arc 지원 SQL Managed Instance 만들기

이 문서에서는 Kubernetes 도구를 사용하여 Azure Arc용 Azure SQL Managed Instance 배포하는 방법을 보여 줍니다.

사전 요구 사항

데이터 컨트롤러를 이미 만들었어야 합니다.

Kubernetes 도구를 사용하여 SQL 관리형 인스턴스를 만들려면 Kubernetes 도구가 설치되어 있어야 합니다. 본 문서의 예제에서는 kubectl을 사용할 것이지만, Kubernetes 대시보드, oc 또는 helm과 같은 Kubernetes 도구나 Kubernetes yaml/json에 익숙한 상태라면 비슷한 방식에서 이러한 Kubernetes 도구를 사용할 수도 있습니다.

kubectl 도구 설치

개요

SQL Managed Instance 만들려면 다음을 수행해야 합니다.

  1. Kubernetes 비밀을 만들어 시스템 관리자 로그인 및 암호를 안전하게 저장합니다.
  2. 사용자 지정 리소스 정의에 SqlManagedInstance 따라 SQL Managed Instance 사용자 지정 리소스 만들기

yaml 파일에서 이러한 항목을 모두 정의합니다.

yaml 파일 만들기

템플릿 yaml 파일을 시작점으로 사용하여 사용자 지정 SQL 관리형 인스턴스 yaml 파일을 만듭니다. 해당 파일을 로컬 컴퓨터에 다운로드하여 텍스트 편집기에서 엽니다. yaml 파일에 대한 구문 강조 표시 및 린팅을 지원하는 VS Code 와 같은 텍스트 편집기를 사용합니다.

참고

2022년 2월 릴리스 ReadWriteMany 부터 백업에 RWX(지원 스토리지 클래스)를 지정해야 합니다. 액세스 모드에 대해 자세히 알아보세요. 백업에 대해 스토리지 클래스가 지정되지 않은 경우 Kubernetes의 기본 스토리지 클래스가 사용됩니다. 기본값이 RWX를 사용할 수 없는 경우 SQL Managed Instance 설치가 성공하지 못할 수 있습니다.

yaml 파일 예제

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/v7
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

로그인 및 암호 사용자 지정

Kubernetes 비밀은 Base64로 인코딩한 문자열로, 사용자 이름을 위하여 하나, 암호를 위하여 하나가 저장됩니다. 시스템 관리자 로그인 및 암호를 Base64로 인코딩하여 data.passworddata.username의 자리 표시자에 배치하여야 합니다. 템플릿에 제공된 <> 기호는 포함하지 마세요.

참고

최적의 보안을 위해 로그인 에 값을 sa 사용할 수 없습니다. 암호 복잡성 정책을 따르세요.

원하는 사용자 이름과 암호를 Base64로 인코딩하기 위하여 온라인 도구를 사용하거나, 플랫폼에 따라 기본 제공되는 CLI 도구를 사용할 수 있습니다.

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

이름 사용자 지정

템플릿에는 이름 특성에 대한 값 sql1 이 있습니다. 이 값을 변경할 수 있지만 DNS 명명 표준을 따르는 문자를 포함해야 합니다. 이에 일치하는 암호의 이름도 변경하여야 합니다. 예를 들어 SQL 관리되는 인스턴스 sql2의 이름을 로 변경하는 경우 비밀의 이름을 에서 로 sql1-login-secret 변경해야 합니다. sql2-login-secret

리소스 요구 사항 사용자 지정

필요에 따라 RAM 및 코어 제한과 요청 등의 리소스 요구 사항을 변경할 수 있습니다.

참고

Kubernetes 리소스 거버넌스에 대하여 자세히 알아볼 수 있습니다.

리소스 제한 및 요청에 대한 요구 사항:

  • 청구를 위하여 코어 제한 값은 필수입니다.
  • 리소스 요청 및 제한의 나머지 부분은 선택 사항입니다.
  • 지정하는 경우 코어 제한과 요청은 양의 정수 값이어야 합니다.
  • 지정하는 경우 코어 요청에는 최소 1코어가 필요합니다.
  • 메모리 값 형식은 Kubernetes 표기법을 따릅니다.
  • 지정된 경우 메모리 요청에 최소 2Gi가 필요합니다.
  • 일반적인 지침으로 프로덕션 사용 사례의 경우 각 1개 코어에 대해 4GB의 RAM이 있어야 합니다.

서비스 유형 사용자 지정

원하는 경우 서비스 유형을 NodePort로 변경할 수 있습니다. 그러면 임의의 포트 번호가 할당됩니다.

스토리지 사용자 지정

사용자 환경에 맞게 스토리지의 스토리지 클래스를 사용자 지정할 수 있습니다. 사용할 수 있는 스토리지 클래스를 잘 모르는 경우 명령을 kubectl get storageclass 실행하여 확인합니다.

템플릿의 기본값은 입니다 default.

예를 들면 다음과 같습니다.

storage:
    data:
      volumes:
      - className: default 

이 예제는 라는 default 스토리지 클래스가 있음을 의미합니다. 즉, 기본값인 스토리지 클래스가 없습니다. 필요에 따라 스토리지 크기를 변경할 수도 있습니다. 자세한 내용은 스토리지 구성을 참조하세요.

SQL 관리형 인스턴스 만들기

이제 SQL 관리형 인스턴스 yaml 파일을 사용자 지정하였으므로, 다음 명령을 실행하여 SQL 관리형 인스턴스를 만들 수 있습니다.

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

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

생성 상태 모니터링

SQL 관리형 인스턴스 생성을 완료하는 데는 몇 분 정도가 소요됩니다. 다음 명령을 사용하여 다른 터미널 창에서 진행률을 모니터링할 수 있습니다.

참고

아래 예제 명령은 이름이 arc인 및 Kubernetes 네임스페이스라는 sql1 SQL 관리되는 인스턴스를 만들었다고 가정합니다. 다른 네임스페이스/SQL 관리형 인스턴스 이름을 사용한 경우 및 sqlmi 를 이름으로 바꿀 arc 수 있습니다.

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

특정 Pod의 생성 상태를 확인할 수도 있습니다. kubectl describe pod ...을 실행합니다. 이 명령을 사용하여 문제를 해결합니다. 예를 들면 다음과 같습니다.

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

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

배포 문제 해결

배포에 문제가 발생하는 경우 문제 해결 가이드를 참조하세요.

다음 단계

Azure Arc 지원 SQL Managed Instance에 연결