Menjalankan Milvus di Kubernetes dengan Milvus Operator

Halaman ini mengilustrasikan cara memulai instans Milvus di Kubernetes menggunakan Milvus Operator.

Gambaran umum

Milvus Operator adalah solusi yang membantu Anda men-deploy dan mengelola tumpukan layanan Milvus secara lengkap untuk menargetkan cluster Kubernetes (K8). Stack ini mencakup semua komponen Milvus dan dependensi yang relevan seperti etcd, Pulsar, dan MinIO.

Prasyarat

  • Buat cluster K8s.

  • Instal StorageClass. Anda dapat memeriksa StorageClass yang terinstal sebagai berikut.

    $ kubectl get sc
    
    NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
    standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false 
    
  • Periksa persyaratan perangkat keras dan perangkat lunak sebelum instalasi.

  • Sebelum menginstal Milvus, disarankan untuk menggunakan Milvus Sizing Tool untuk memperkirakan kebutuhan perangkat keras berdasarkan ukuran data Anda. Hal ini membantu memastikan kinerja dan alokasi sumber daya yang optimal untuk instalasi Milvus Anda.

Jika Anda mengalami masalah dalam menarik gambar, hubungi kami di community@zilliz.com dengan rincian tentang masalahnya, dan kami akan memberikan dukungan yang diperlukan.

Menginstal Milvus Operator

Milvus Operator mendefinisikan sumber daya khusus klaster Milvus di atas Sumber Daya Khusus Kubernetes. Ketika sumber daya khusus didefinisikan, Anda dapat menggunakan API K8s dengan cara deklaratif dan mengelola tumpukan penerapan Milvus untuk memastikan skalabilitas dan ketersediaan yang tinggi.

Jalankan perintah berikut untuk menginstal Milvus Operator dengan Helm.

$ helm install milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.0/milvus-operator-1.3.0.tgz

Anda akan melihat output yang mirip dengan berikut ini setelah proses instalasi berakhir.

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

Jika Anda telah menginstal Milvus Operator sebelumnya, lakukan upgrade menggunakan perintah berikut:

helm upgrade milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.3.0/milvus-operator-1.3.0.tgz

Jalankan perintah berikut untuk menginstal Milvus Operator dengan kubectl.

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml

Anda akan melihat output yang mirip dengan yang berikut ini setelah proses instalasi berakhir.

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

Anda dapat memeriksa apakah pod Milvus Operator telah berjalan sebagai berikut:

$ kubectl get pods -n milvus-operator

NAME                               READY   STATUS    RESTARTS   AGE
milvus-operator-5fd77b87dc-msrk4   1/1     Running   0          46s

Menyebarkan Milvus

1. Menyebarkan cluster Milvus

Setelah pod Milvus Operator berjalan, Anda dapat men-deploy cluster Milvus sebagai berikut.

$ kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

Perintah di atas men-deploy cluster Milvus dengan Woodpecker sebagai antrean pesan (disarankan untuk v2.6.15) dan semua komponen arsitektur baru termasuk Streaming Node.

Sorotan arsitektur dalam penerapan ini:

  • Antrian Pesan: Menggunakan Woodpecker (mengurangi pemeliharaan infrastruktur)
  • Streaming Node: Diaktifkan untuk pemrosesan data yang ditingkatkan
  • Koordinator Campuran: Komponen koordinator yang terkonsolidasi untuk meningkatkan efisiensi

Untuk menyesuaikan pengaturan ini, kami sarankan Anda menggunakan Milvus Sizing Tool untuk menyesuaikan konfigurasi berdasarkan ukuran data Anda yang sebenarnya, lalu mengunduh file YAML yang sesuai. Untuk mempelajari lebih lanjut tentang parameter konfigurasi, lihat Daftar Periksa Konfigurasi Sistem Milvus.

  • Nama rilis hanya boleh terdiri dari huruf, angka, dan tanda hubung. Titik tidak diperbolehkan dalam nama rilis.
  • Anda juga dapat menggunakan instans Milvus dalam mode mandiri, di mana semua komponennya berada dalam satu pod. Untuk melakukannya, ubah URL berkas konfigurasi pada perintah di atas menjadi https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_default.yaml

2. Memeriksa status cluster Milvus

Jalankan perintah berikut untuk memeriksa status cluster Milvus

$ kubectl get milvus my-release -o yaml

Setelah cluster Milvus Anda siap, keluaran dari perintah di atas akan serupa dengan yang berikut ini. Jika bidang status.status tetap Unhealthy, cluster Milvus Anda masih dalam proses pembuatan.

apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
...
status:
  conditions:
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    reason: StorageReady
    status: "True"
    type: StorageReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Pulsar is ready
    reason: PulsarReady
    status: "True"
    type: PulsarReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: Etcd endpoints is healthy
    reason: EtcdReady
    status: "True"
    type: EtcdReady
  - lastTransitionTime: "xxxx-xx-xxTxx:xx:xxZ"
    message: All Milvus components are healthy
    reason: MilvusClusterHealthy
    status: "True"
    type: MilvusReady
  endpoint: my-release-milvus.default:19530
  status: Healthy

Milvus Operator membuat dependensi Milvus, seperti etcd, Pulsar, dan MinIO, dan kemudian komponen Milvus, seperti proxy, koordinator, dan node.

Setelah cluster Milvus Anda siap, status semua pod dalam cluster Milvus akan serupa dengan yang berikut ini.

$ kubectl get pods

NAME                                             READY   STATUS    RESTARTS   AGE
my-release-etcd-0                                1/1     Running   0          2m36s
my-release-etcd-1                                1/1     Running   0          2m36s
my-release-etcd-2                                1/1     Running   0          2m36s
my-release-milvus-datanode-58955c65b9-j4j7s      1/1     Running   0          92s
my-release-milvus-mixcoord-686f84968f-jcv5d      1/1     Running   0          92s
my-release-milvus-proxy-646f48fc7c-4lctb         1/1     Running   0          92s
my-release-milvus-querynode-0-d89d7677b-x7j7q    1/1     Running   0          91s
my-release-milvus-streamingnode-556bdcc87c-2qwcc 1/1     Running   0          92s
my-release-minio-0                               1/1     Running   0          2m36s
my-release-minio-1                               1/1     Running   0          2m36s
my-release-minio-2                               1/1     Running   0          2m35s
my-release-minio-3                               1/1     Running   0          2m35s

3. Meneruskan port lokal ke Milvus

Jalankan perintah berikut untuk mendapatkan port di mana cluster Milvus Anda melayani.

$ kubectl get pod my-release-milvus-proxy-84f67cdb7f-pg6wf --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

Keluarannya menunjukkan bahwa instans Milvus melayani pada port default 19530.

Jika Anda telah menggunakan Milvus dalam mode mandiri, ubah nama pod dari my-release-milvus-proxy-xxxxxxxxxx-xxxxx menjadi my-release-milvus-xxxxxxxxxx-xxxxx.

Kemudian, jalankan perintah berikut untuk meneruskan porta lokal ke porta tempat Milvus melayani.

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

Secara opsional, Anda dapat menggunakan :19530 dan bukan 27017:19530 pada perintah di atas untuk membiarkan kubectl mengalokasikan porta lokal untuk Anda sehingga Anda tidak perlu mengelola konflik porta.

Secara default, penerusan porta kubectl hanya mendengarkan localhost. Gunakan flag address jika Anda ingin Milvus mendengarkan pada alamat IP yang dipilih atau semua alamat IP. Perintah berikut ini membuat port-forward mendengarkan semua alamat IP pada mesin host.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530

Sekarang, Anda dapat menyambung ke Milvus menggunakan port yang diteruskan.

(Opsional) Memperbarui konfigurasi Milvus

Anda dapat melihat dan memperbarui konfigurasi cluster Milvus Anda dengan memanggil perintah patch sebagai berikut:

  1. Jalankan perintah berikut untuk melihat pratinjau konfigurasi yang akan dibuat.

    Asummes berikut ini yang ingin Anda perbarui parameter spec.components.disableMetric menjadi false ms.

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' \
      --dry-run=client -o yaml
    

    Untuk item konfigurasi yang berlaku, lihat Konfigurasi Sistem.

  2. Perbarui konfigurasi.

    $ kubectl patch milvus my-release --type='merge'\
      -p '{"spec":{"components":{"disableMetric":false}}}' 
    

Mengakses Milvus WebUI

Milvus dilengkapi dengan alat GUI bawaan yang disebut Milvus WebUI yang dapat Anda akses melalui peramban. Milvus Web UI meningkatkan kemampuan pengamatan sistem dengan antarmuka yang sederhana dan intuitif. Anda dapat menggunakan Milvus Web UI untuk mengamati statistik dan metrik komponen dan ketergantungan Milvus, memeriksa detail basis data dan koleksi, dan membuat daftar konfigurasi Milvus yang terperinci. Untuk detail tentang Milvus Web UI, lihat Milvus WebUI

Untuk mengaktifkan akses ke Milvus Web UI, anda perlu melakukan port-forward proxy pod ke port lokal.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

Sekarang, Anda dapat mengakses Milvus Web UI di http://localhost:27018.

Copot pemasangan Milvus

Jalankan perintah berikut untuk menghapus instalan cluster Milvus.

$ kubectl delete milvus my-release
  • Ketika Anda menghapus cluster Milvus menggunakan konfigurasi default, dependensi seperti etcd, Pulsar, dan MinIO tidak terhapus. Oleh karena itu, pada saat Anda menginstal instans cluster Milvus yang sama, dependensi ini akan digunakan lagi.
  • Untuk menghapus dependensi dan klaim volume persisten (PVC) bersama dengan cluster Milvus, lihat file konfigurasi.

Menghapus Instalasi Operator Milvus

Ada juga dua cara untuk menghapus instalan Milvus Operator.

Copot pemasangan dengan Helm

$ helm -n milvus-operator uninstall milvus-operator

Copot pemasangan dengan kubectl

$ kubectl delete -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.0/deploy/manifests/deployment.yaml

Apa selanjutnya

Setelah menginstal Milvus di Docker, Anda dapat: