Milvus 오퍼레이터로 오브젝트 스토리지 구성하기
Milvus는 인덱스 파일 및 바이너리 로그와 같은 대규모 파일을 보존하기 위해 MinIO 또는 S3를 오브젝트 스토리지로 사용합니다. 이 항목에서는 Milvus 오퍼레이터와 함께 Milvus를 설치할 때 오브젝트 스토리지 종속성을 구성하는 방법을 소개합니다. 자세한 내용은 Milvus Operator 리포지토리에서 Milvus Operator로 오브젝트 스토리지 구성하기를 참조하세요.
이 항목에서는 Milvus Operator를 배포했다고 가정합니다.
밀버스 오퍼레이터를 사용하여 밀버스 클러스터를 시작하려면 구성 파일을 지정해야 합니다.
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
타사 종속성을 구성하려면 milvus_cluster_default.yaml
에서 코드 템플릿을 편집하기만 하면 됩니다. 다음 섹션에서는 각각 개체 스토리지, etcd 및 Pulsar를 구성하는 방법을 소개합니다.
오브젝트 스토리지 구성하기
Milvus 클러스터는 인덱스 파일 및 바이너리 로그와 같은 대용량 파일을 유지하기 위해 MinIO 또는 S3를 오브젝트 스토리지로 사용합니다. 개체 스토리지를 구성하려면 spec.dependencies.storage
에서 필수 필드를 추가하고, 가능한 옵션은 external
과 inCluster
입니다.
내부 오브젝트 스토리지
기본적으로 Milvus Operator는 Milvus용 클러스터 내 MinIO를 배포합니다. 다음은 이 MinIO를 내부 오브젝트 스토리지로 사용하는 방법을 보여주는 구성 예시입니다.
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
# Omit other fields ...
dependencies:
# Omit other fields ...
storage:
inCluster:
values:
mode: standalone
resources:
requests:
memory: 100Mi
deletionPolicy: Delete # Delete | Retain, default: Retain
pvcDeletion: true # default: false
위의 구성이 적용되면 클러스터 내 MinIO는 최대 100Mi의 메모리 제한으로 독립형 모드로 실행됩니다. 참고 사항
deletionPolicy
필드는 클러스터 내 MinIO의 삭제 정책을 지정합니다. 기본값은Delete
이며 대체 옵션으로Retain
이 있습니다.Delete
는 Milvus 인스턴스를 중지할 때 클러스터 내 오브젝트 스토리지가 삭제됨을 나타냅니다.Retain
는 클러스터 내 오브젝트 스토리지가 나중에 Milvus 인스턴스를 시작할 때 종속성 서비스로 유지됨을 나타냅니다.
pvcDeletion
필드는 클러스터 내 MinIO가 삭제될 때 PVC(퍼시스턴트 볼륨 클레임)를 삭제할지 여부를 지정합니다.
inCluster.values
아래의 필드는 Milvus 헬름 차트에 있는 필드와 동일하며 여기에서 찾을 수 있습니다.
외부 오브젝트 스토리지
템플릿 YAML 파일에서 external
을 사용하면 외부 오브젝트 스토리지 서비스를 사용함을 나타냅니다. 외부 오브젝트 저장소를 사용하려면 Milvus CRD의 spec.dependencies.storage
및 spec.config.minio
에서 필드를 올바르게 설정해야 합니다.
외부 오브젝트 스토리지로 아마존 웹 서비스(AWS) S3 사용
AK/SK로 AWS S3 액세스 구성하기
S3 버킷은 일반적으로 액세스 키와 액세스 비밀 키 한 쌍으로 액세스할 수 있습니다. 다음과 같이
Secret
오브젝트를 생성하여 쿠버네티스에 저장할 수 있습니다:# # change the <parameters> to match your environment apiVersion: v1 kind: Secret metadata: name: my-release-s3-secret type: Opaque stringData: accesskey: <my-access-key> secretkey: <my-secret-key>
그런 다음 AWS S3 버킷을 외부 오브젝트 스토리지로 구성할 수 있습니다:
# # change the <parameters> to match your environment apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: my-release labels: app: milvus spec: # Omit other fields ... config: minio: # your bucket name bucketName: <my-bucket> # Optional, config the prefix of the bucket milvus will use rootPath: milvus/my-release useSSL: true dependencies: storage: # enable external object storage external: true type: S3 # MinIO | S3 # the endpoint of AWS S3 endpoint: s3.amazonaws.com:443 # the secret storing the access key and secret key secretRef: "my-release-s3-secret"
역할로 AWS S3 액세스 구성하기
또는, 실제 AK/SK 대신 임시 자격 증명만 사용하도록 AssumeRole을 사용하여 Milvus가 AWS S3 버킷에 액세스하도록 할 수 있습니다.
이 방법을 선호하는 경우 AWS 콘솔에서 역할을 준비하고 일반적으로
arn:aws:iam::<your account id>:role/<role-name>
형식의 ARN을 가져와야 합니다.그런 다음 다음과 같이
ServiceAccount
오브젝트를 생성하여 Kubernetes에 저장합니다:apiVersion: v1 kind: ServiceAccount metadata: name: my-release-sa annotations: eks.amazonaws.com/role-arn: <my-role-arn>
모든 설정이 완료되면 템플릿 YAML 파일에서 위의
ServiceAccount
을 참조하고spec.config.minio.useIAM
을true
으로 설정하여 AssumeRole을 활성화합니다.apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: my-release labels: app: milvus spec: # Omit other fields ... components: # use the above ServiceAccount serviceAccountName: my-release-sa config: minio: # enable AssumeRole useIAM: true # Omit other fields ... dependencies: storage: # Omit other fields ... # Note: you must use regional endpoint here, otherwise the minio client that milvus uses will fail to connect endpoint: s3.<my-bucket-region>.amazonaws.com:443 secretRef: "" # we don't need to specify the secret here
외부 오브젝트 스토리지로 구글 클라우드 스토리지(GCS) 사용
AWS S3 오브젝트 스토리지만이 유일한 선택지는 아닙니다. Google Cloud와 같은 다른 퍼블릭 클라우드 제공업체의 오브젝트 스토리지 서비스를 사용할 수도 있습니다.
AK/SK별 GCS 액세스 구성
구성은 대부분 AWS S3를 사용할 때와 비슷합니다. 여전히
Secret
오브젝트를 생성하여 자격 증명을 쿠버네티스에 저장해야 합니다.# # change the <parameters> to match your environment apiVersion: v1 kind: Secret metadata: name: my-release-gcp-secret type: Opaque stringData: accesskey: <my-access-key> secretkey: <my-secret-key>
그런 다음 다음과 같이
endpoint
을storage.googleapis.com:443
으로 변경하고spec.config.minio.cloudProvider
을gcp
으로 설정하기만 하면 됩니다:# # change the <parameters> to match your environment apiVersion: milvus.io/v1beta1 kind: Milvus metadata: name: my-release labels: app: milvus spec: # Omit other fields ... config: minio: cloudProvider: gcp dependencies: storage: # Omit other fields ... endpoint: storage.googleapis.com:443
AssumeRole로 GCS 액세스 구성하기
AWS S3와 마찬가지로, GKE를 Kubernetes 클러스터로 사용하는 경우 임시 자격 증명을 사용하여 임시 자격 증명을 사용하여 GCS에 액세스할 수도 있습니다.
ServiceAccount
의 어노테이션은 AWS EKS의 어노테이션과 다릅니다. 역할 ARN 대신 GCP 서비스 계정 이름을 지정해야 합니다.apiVersion: v1 kind: ServiceAccount metadata: name: my-release-sa annotations: iam.gke.io/gcp-service-account: <my-gcp-service-account-name>
그런 다음 위의
ServiceAccount
을 사용하도록 Milvus 인스턴스를 구성하고 다음과 같이spec.config.minio.useIAM
을true
으로 설정하여 AssumeRole을 활성화할 수 있습니다:labels: app: milvus spec: # Omit other fields ... components: # use the above ServiceAccount serviceAccountName: my-release-sa config: minio: cloudProvider: gcp # enable AssumeRole useIAM: true # Omit other fields ...
다음 단계
Milvus Operator로 다른 Milvus 종속성을 구성하는 방법을 알아보세요: