밀버스 오퍼레이터로 쿠버네티스에서 밀버스 실행하기
이 페이지는 밀버스 오퍼레이터를 사용하여 쿠버네티스에서 밀버스 인스턴스를 시작하는 방법을 설명한다.
개요
Milvus Operator는 전체 Milvus 서비스 스택을 배포하고 관리하여 Kubernetes(K8s) 클러스터를 대상으로 하는 데 도움이 되는 솔루션입니다. 이 스택에는 모든 Milvus 구성 요소와 etcd, Pulsar, MinIO와 같은 관련 종속 요소가 포함됩니다.
전제 조건
StorageClass를 설치합니다. 설치된 StorageClass는 아래와 같이 확인할 수 있습니다.
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false
설치 전 하드웨어 및 소프트웨어 요구 사항을 확인합니다.
Milvus를 설치하기 전에 Milvus 사이징 툴을 사용하여 데이터 크기에 따라 하드웨어 요구 사항을 추정하는 것이 좋습니다. 이렇게 하면 Milvus 설치를 위한 최적의 성능과 리소스 할당을 보장하는 데 도움이 됩니다.
이미지를 가져오는 데 문제가 발생하면 community@zilliz.com 으로 문의하여 문제에 대한 자세한 내용을 알려주시면 필요한 지원을 제공해 드리겠습니다.
Milvus 오퍼레이터 설치
밀버스 오퍼레이터는 쿠버네티스 커스텀 리소스 위에 밀버스 클러스터 커스텀 리소스를 정의합니다. 사용자 정의 리소스가 정의되면, 선언적 방식으로 K8s API를 사용하고 Milvus 배포 스택을 관리하여 확장성과 고가용성을 보장할 수 있습니다.
1. 인증서 관리자 설치
Milvus Operator는 cert-manager를 사용하여 웹훅 서버에 대한 인증서를 제공합니다.
- 헬름을 사용하여 Milvus Operator를 배포하기로 선택한 경우 이 단계를 안전하게 건너뛸 수 있습니다.
- 밀버스 오퍼레이터는 cert-manager 1.1.3 이상이 필요하다.
다음 명령을 실행하여 cert-manager를 설치합니다.
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
설치 프로세스가 끝나면 다음과 유사한 출력이 표시됩니다.
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created
namespace/cert-manager created
serviceaccount/cert-manager-cainjector created
...
service/cert-manager created
service/cert-manager-webhook created
deployment.apps/cert-manager-cainjector created
deployment.apps/cert-manager created
deployment.apps/cert-manager-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
아래와 같이 cert-manager 파드가 실행 중인지 확인할 수 있습니다:
$ kubectl get pods -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-848f547974-gccz8 1/1 Running 0 70s
cert-manager-cainjector-54f4cc6b5-dpj84 1/1 Running 0 70s
cert-manager-webhook-7c9588c76-tqncn 1/1 Running 0 70s
2. Milvus 오퍼레이터 설치
다음 중 한 가지 방법으로 Milvus Operator를 설치할 수 있습니다:
헬름으로 설치
다음 명령어를 실행하여 헬름으로 밀버스 오퍼레이터를 설치합니다.
$ helm install milvus-operator \
-n milvus-operator --create-namespace \
--wait --wait-for-jobs \
https://github.com/zilliztech/milvus-operator/releases/download/v1.0.1/milvus-operator-1.0.1.tgz
설치 프로세스가 끝나면 다음과 유사한 출력을 확인할 수 있습니다.
NAME: milvus-operator
LAST DEPLOYED: Thu Jul 7 13:18:40 2022
NAMESPACE: milvus-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Milvus Operator Is Starting, use `kubectl get -n milvus-operator deploy/milvus-operator` to check if its successfully installed
If Operator not started successfully, check the checker's log with `kubectl -n milvus-operator logs job/milvus-operator-checker`
Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md
Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml`
More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples
CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD
kubectl로 설치
다음 명령어를 실행하여 밀버스 오퍼레이터를 설치한다. kubectl
.
$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml
설치 프로세스가 끝나면 다음과 유사한 출력이 표시됩니다.
namespace/milvus-operator created
customresourcedefinition.apiextensions.k8s.io/milvusclusters.milvus.io created
serviceaccount/milvus-operator-controller-manager created
role.rbac.authorization.k8s.io/milvus-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/milvus-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/milvus-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/milvus-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/milvus-operator-proxy-rolebinding created
configmap/milvus-operator-manager-config created
service/milvus-operator-controller-manager-metrics-service created
service/milvus-operator-webhook-service created
deployment.apps/milvus-operator-controller-manager created
certificate.cert-manager.io/milvus-operator-serving-cert created
issuer.cert-manager.io/milvus-operator-selfsigned-issuer created
mutatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-mutating-webhook-configuration created
validatingwebhookconfiguration.admissionregistration.k8s.io/milvus-operator-validating-webhook-configuration created
다음과 같이 Milvus Operator 파드가 실행 중인지 확인할 수 있습니다:
$ kubectl get pods -n milvus-operator
NAME READY STATUS RESTARTS AGE
milvus-operator-5fd77b87dc-msrk4 1/1 Running 0 46s
Milvus 배포
1. Milvus 클러스터 배포
Milvus Operator 파드가 실행 중이면 다음과 같이 Milvus 클러스터를 배포할 수 있습니다.
$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
위의 명령은 기본 구성을 사용하여 별도의 파드에 구성 요소 및 종속 요소와 함께 Milvus 클러스터를 배포합니다. 이러한 설정을 사용자 정의하려면 Milvus 크기 조정 도구를 사용하여 실제 데이터 크기에 따라 구성을 조정한 다음 해당 YAML 파일을 다운로드하는 것이 좋습니다. 구성 매개변수에 대해 자세히 알아보려면 Milvus 시스템 구성 체크리스트를 참조하세요.
- 릴리스 이름에는 문자, 숫자 및 대시만 포함해야 합니다. 릴리스 이름에는 점을 사용할 수 없습니다.
- 모든 구성 요소가 단일 포드 내에 포함된 독립 실행형 모드로 Milvus 인스턴스를 배포할 수도 있습니다. 이렇게 하려면 위의 명령에서 구성 파일 URL을 다음과 같이 변경합니다.
https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml
2. Milvus 클러스터 상태 확인
다음 명령어를 실행하여 Milvus 클러스터 상태를 확인합니다.
$ kubectl get milvus my-release -o yaml
Milvus 클러스터가 준비되면 위 명령의 출력은 다음과 비슷해야 합니다. status.status
필드가 Unhealthy
으로 유지되면 Milvus 클러스터가 아직 생성 중입니다.
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
conditions:
- lastTransitionTime: "2021-11-02T05:59:41Z"
reason: StorageReady
status: "True"
type: StorageReady
- lastTransitionTime: "2021-11-02T06:06:23Z"
message: Pulsar is ready
reason: PulsarReady
status: "True"
type: PulsarReady
- lastTransitionTime: "2021-11-02T05:59:41Z"
message: Etcd endpoints is healthy
reason: EtcdReady
status: "True"
type: EtcdReady
- lastTransitionTime: "2021-11-02T06:12:36Z"
message: All Milvus components are healthy
reason: MilvusClusterHealthy
status: "True"
type: MilvusReady
endpoint: my-release-milvus.default:19530
status: Healthy
Milvus 오퍼레이터는 etcd, Pulsar, MinIO와 같은 Milvus 종속 요소를 생성한 다음 프록시, 코디네이터, 노드와 같은 Milvus 구성 요소를 생성합니다.
Milvus 클러스터가 준비되면, Milvus 클러스터의 모든 파드의 상태는 다음과 비슷해야 합니다.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 14m
my-release-etcd-1 1/1 Running 0 14m
my-release-etcd-2 1/1 Running 0 14m
my-release-milvus-datanode-5c686bd65-wxtmf 1/1 Running 0 6m
my-release-milvus-indexnode-5b9787b54-xclbx 1/1 Running 0 6m
my-release-milvus-proxy-84f67cdb7f-pg6wf 1/1 Running 0 6m
my-release-milvus-querynode-5bcb59f6-nhqqw 1/1 Running 0 6m
my-release-milvus-mixcoord-fdcccfc84-9964g 1/1 Running 0 6m
my-release-minio-0 1/1 Running 0 14m
my-release-minio-1 1/1 Running 0 14m
my-release-minio-2 1/1 Running 0 14m
my-release-minio-3 1/1 Running 0 14m
my-release-pulsar-bookie-0 1/1 Running 0 14m
my-release-pulsar-bookie-1 1/1 Running 0 14m
my-release-pulsar-bookie-init-h6tfz 0/1 Completed 0 14m
my-release-pulsar-broker-0 1/1 Running 0 14m
my-release-pulsar-broker-1 1/1 Running 0 14m
my-release-pulsar-proxy-0 1/1 Running 0 14m
my-release-pulsar-proxy-1 1/1 Running 0 14m
my-release-pulsar-pulsar-init-d2t56 0/1 Completed 0 14m
my-release-pulsar-recovery-0 1/1 Running 0 14m
my-release-pulsar-toolset-0 1/1 Running 0 14m
my-release-pulsar-zookeeper-0 1/1 Running 0 14m
my-release-pulsar-zookeeper-1 1/1 Running 0 13m
my-release-pulsar-zookeeper-2 1/1 Running 0 13m
3. Milvus로 로컬 포트 포워딩
다음 명령어를 실행하여 Milvus 클러스터가 서비스하는 포트를 가져옵니다.
$ kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
출력은 Milvus 인스턴스가 기본 포트 19530에서 서비스하고 있음을 보여줍니다.
독립 실행형 모드로 Milvus를 배포한 경우, 파드 이름을 my-release-milvus-proxy-xxxxxxxxxx-xxxxx
에서 my-release-milvus-xxxxxxxxxx-xxxxx
으로 변경합니다.
그런 다음 다음 명령을 실행하여 로컬 포트를 Milvus가 서비스하는 포트로 전달합니다.
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
선택적으로, 위의 명령에서 27017:19530
대신 :19530
을 사용하여 kubectl
이 로컬 포트를 할당하도록 하여 포트 충돌을 관리할 필요가 없도록 할 수 있다.
기본적으로 kubectl의 포트 포워딩은 localhost
에서만 수신 대기한다. 밀버스가 선택한 또는 모든 IP 주소에서 수신 대기하도록 하려면 address
플래그를 사용한다. 다음 명령은 호스트 머신의 모든 IP 주소에서 포트 포워딩을 수신 대기하도록 한다.
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
Milvus 제거
다음 명령을 실행하여 Milvus 클러스터를 제거합니다.
$ kubectl delete milvus my-release
- 기본 구성을 사용하여 Milvus 클러스터를 삭제하는 경우 etcd, Pulsar, MinIO와 같은 종속성은 삭제되지 않습니다. 따라서 다음에 동일한 Milvus 클러스터 인스턴스를 설치할 때 이러한 종속성이 다시 사용됩니다.
- Milvus 클러스터와 함께 종속성 및 프라이빗 가상 클라우드(PVC)를 삭제하려면 구성 파일을 참조하세요.
Milvus 운영자 제거
밀버스 오퍼레이터를 제거하는 방법에는 두 가지가 있다.
헬름으로 제거
$ helm -n milvus-operator uninstall milvus-operator
kubectl로 제거
$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.0.1/deploy/manifests/deployment.yaml
다음 단계
도커에 밀버스를 설치했다면, 이제 할 수 있다:
Hello Milvus를 확인하여 Milvus가 무엇을 할 수 있는지 확인합니다.
Milvus의 기본 작동에 대해 알아보세요:
Milvu 클러스터를 클라우드에 배포하세요:
Milvus 데이터 백업을 위한 오픈 소스 도구인 Milvus Backup을 살펴보세요.
Milvus 디버깅 및 동적 구성 업데이트를 위한 오픈 소스 도구인 Birdwatcher를 살펴보세요.
직관적인 Milvus 관리를 위한 오픈 소스 GUI 도구인 Attu를 살펴보세요.