Kubernetes 도구를 사용하여 Azure Arc 지원 SQL Managed Instance를 배포합니다.

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

필수 조건

데이터 컨트롤러는 이미 만들어 놓은 상태일 것입니다.

Kubernetes 도구를 사용하여 SQL 관리형 인스턴스를 만들려면 Kubernetes 도구가 설치되어 있어야 합니다. 이 문서의 예제에서는 kubectl을 사용하지만 이와 마찬가지로, 관련 도구와 Kubernetes yaml/json에 익숙하다면 Kubernetes 대시보드, oc 또는 helm 등의 다른 Kubernetes 도구를 사용할 수도 있습니다.

kubectl 도구 설치

개요

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

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

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

Yaml 파일 만들기

템플릿 yaml 파일로 시작하여 사용자 지정 SQL Managed Instance yaml 파일을 만들 수 있습니다. 이 파일을 로컬 컴퓨터에 다운로드하여 텍스트 편집기에서 엽니다. VS Code처럼 yaml 파일에 대하여 구문 강조 표시와 린팅을 지원하는 텍스트 편집기를 사용합니다.

참고 항목

2022년 2월 릴리스부터 RWX(ReadWriteMany) 지원 스토리지 클래스를 백업용으로 지정해야 합니다. 액세스 모드에 대해 자세히 알아봅니다. 백업용 스토리지 클래스가 지정되지 않은 경우 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/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

로그인 및 암호 사용자 지정

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 Managed Instance의 이름을 sql2로 변경하는 경우 비밀 이름을 sql1-login-secret에서 sql2-login-secret으로 변경해야 합니다.

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

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

참고 항목

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

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

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

서비스 유형 사용자 지정

원하는 경우 서비스 유형을 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 관리형 인스턴스 생성을 완료하는 데는 몇 분 정도가 소요됩니다. 다음 명령을 사용하여 다른 터미널 창에서 진행률을 모니터링할 수 있습니다.

참고 항목

아래의 예제 명령은 sql1이라는 이름의 SQL 관리형 인스턴스와 arc라는 이름의 Kubernetes 네임스페이스를 만들었다고 가정합니다. 다른 네임스페이스/SQL 관리형 인스턴스 이름을 사용하였다면, 해당 이름을 arcsqlmi 대신 사용할 수 있습니다.

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에 연결