Configurar o armazenamento de mensagens com o Milvus Operator
O Milvus usa RocksMQ, Pulsar ou Kafka para gerenciar logs de alterações recentes, gerar logs de fluxo e fornecer assinaturas de log. Este tópico apresenta como configurar as dependências de armazenamento de mensagens quando você instala o Milvus com o Milvus Operator. Para obter mais detalhes, consulte Configurar o armazenamento de mensagens com o Milvus Operator no repositório do Milvus Operator.
Este tópico pressupõe que você tenha implantado o Milvus Operator.
É necessário especificar um arquivo de configuração para usar o Milvus Operator para iniciar um cluster do Milvus.
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
Só é necessário editar o modelo de código em milvus_cluster_default.yaml para configurar dependências de terceiros. As secções seguintes apresentam como configurar o armazenamento de objectos, etcd, e Pulsar respetivamente.
Antes de começar
A tabela abaixo mostra se o RocksMQ, o Pulsar, o Kafka e o Woodpecker são suportados no modo autônomo e de cluster do Milvus.
| RocksMQ | Pulsar | Kafka | Pica-pau | |
|---|---|---|---|---|
| Modo autónomo | ✔️ | ✔️ | ✔️ | ✔️ |
| Modo de cluster | ✖️ | ✔️ | ✔️ | ✔️ |
Existem também outras limitações para especificar o armazenamento de mensagens:
- Só é suportado um armazenamento de mensagens para uma instância Milvus. No entanto, continuamos a ter compatibilidade retroactiva com vários armazenamentos de mensagens definidos para uma instância. A prioridade é a seguinte:
- modo autónomo: RocksMQ (padrão) > Pulsar > Kafka
- modo de cluster: Pulsar (padrão) > Kafka
- O armazenamento de mensagens não pode ser alterado enquanto o sistema Milvus estiver a funcionar.
- Apenas a versão 2.x ou 3.x do Kafka é suportada.
- Limitações da atualização: Limitações da fila de mensagens: Ao atualizar para o Milvus v2.6.15, é necessário manter a escolha atual da fila de mensagens. Não é possível alternar entre sistemas de filas de mensagens diferentes durante a atualização. O suporte à mudança de sistemas de filas de mensagens estará disponível em versões futuras.
Configurar o RocksMQ
O RocksMQ é o armazenamento de mensagens padrão no Milvus standalone.
Atualmente, só é possível configurar o RocksMQ como o armazenamento de mensagens para o Milvus standalone com o Milvus Operator.
Exemplo de configuração
O exemplo a seguir configura um serviço RocksMQ.
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: milvus
spec:
mode: standalone
dependencies:
msgStreamType: rocksmq
rocksmq:
persistence:
enabled: true
pvcDeletion: true
persistentVolumeClaim:
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "local-path" # Specify your storage class
resources:
requests:
storage: 10Gi # Specify your desired storage size
components: {}
config: {}
Principais opções de configuração:
msgStreamType: rocksmq: Define explicitamente o RocksMQ como a fila de mensagenspersistence.enabled: Habilita o armazenamento persistente para os dados do RocksMQpersistence.pvcDeletion: Quando verdadeiro, o PVC será apagado quando a instância do Milvus for apagadapersistentVolumeClaim.spec: Especificação padrão do PVC do KubernetesaccessModes: NormalmenteReadWriteOncepara armazenamento em blocostorageClassName: Classe de armazenamento do seu clusterstorage: Tamanho do volume persistente
Configurar o Woodpecker
O Woodpecker é um Write-Ahead Log (WAL) nativo da nuvem, concebido para armazenamento de objectos. Ele oferece alta taxa de transferência, baixa sobrecarga operacional e escalabilidade contínua. Para obter mais detalhes, consulte Usar o Woodpecker.
Configurar o Pulsar
O Pulsar gerencia logs de alterações recentes, gera logs de fluxo de saída e fornece assinaturas de log. A configuração do Pulsar para armazenamento de mensagens é suportada tanto no Milvus standalone quanto no Milvus cluster. No entanto, com o Milvus Operator, só é possível configurar a Pulsar como armazenamento de mensagens para o Milvus cluster. Adicione os campos obrigatórios em spec.dependencies.pulsar para configurar a Pulsar.
pulsar suporta external e inCluster.
Pulsar externo
external indica o uso de um serviço Pulsar externo. Os campos usados para configurar um serviço Pulsar externo incluem:
external: Um valortrueindica que o Milvus usa um serviço Pulsar externo.endpoints: Os endpoints do Pulsar.
Exemplo de configuração
O exemplo seguinte configura um serviço Pulsar externo.
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies: # Optional
pulsar: # Optional
# Whether (=true) to use an existed external pulsar as specified in the field endpoints or
# (=false) create a new pulsar inside the same kubernetes cluster for milvus.
external: true # Optional default=false
# The external pulsar endpoints if external=true
endpoints:
- 192.168.1.1:6650
components: {}
config: {}
Pulsar interno
inCluster indica que quando um cluster Milvus é iniciado, um serviço Pulsar é iniciado automaticamente no cluster.
Exemplo
O exemplo a seguir configura um serviço Pulsar interno.
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
pulsar:
inCluster:
values:
components:
autorecovery: false
zookeeper:
replicaCount: 1
bookkeeper:
replicaCount: 1
resoureces:
limit:
cpu: '4'
memory: 8Gi
requests:
cpu: 200m
memory: 512Mi
broker:
replicaCount: 1
configData:
## Enable `autoSkipNonRecoverableData` since bookkeeper is running
## without persistence
autoSkipNonRecoverableData: "true"
managedLedgerDefaultEnsembleSize: "1"
managedLedgerDefaultWriteQuorum: "1"
managedLedgerDefaultAckQuorum: "1"
proxy:
replicaCount: 1
components: {}
config: {}
pulsar.inCluster.values como mostrado no exemplo anterior.Supondo que o arquivo de configuração tenha o nome milvuscluster.yaml, execute o seguinte comando para aplicar a configuração.
kubectl apply -f milvuscluster.yaml
Configurar o Kafka
O Pulsar é o armazenamento de mensagens padrão em um cluster Milvus. Se pretender utilizar o Kafka, adicione o campo opcional msgStreamType para configurar o Kafka.
kafka suporta external e inCluster.
Kafka externo
external indica a utilização de um serviço Kafka externo.
Os campos utilizados para configurar um serviço Kafka externo incluem:
external: Um valortrueindica que o Milvus utiliza um serviço Kafka externo.brokerList: A lista de corretores para os quais enviar as mensagens.
Exemplo de configuração
O exemplo seguinte configura um serviço Kafka externo.
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
config:
kafka:
# securityProtocol supports: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL
securityProtocol: PLAINTEXT
# saslMechanisms supports: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512
saslMechanisms: PLAIN
saslUsername: ""
saslPassword: ""
# Omit other fields ...
dependencies:
# Omit other fields ...
msgStreamType: "kafka"
kafka:
external: true
brokerList:
- "kafkaBrokerAddr1:9092"
- "kafkaBrokerAddr2:9092"
# ...
As configurações SASL são suportadas na versão v0.8.5 ou superior do operador.
Kafka interno
inCluster indica que quando um cluster Milvus é iniciado, um serviço Kafka é iniciado automaticamente no cluster.
Exemplo
O exemplo a seguir configura um serviço Kafka interno.
apiVersion: milvus.io/v1alpha1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
msgStreamType: "kafka"
kafka:
inCluster:
values: {} # values can be found in https://artifacthub.io/packages/helm/bitnami/kafka
components: {}
config: {}
Encontre os itens de configuração completos para configurar um serviço Kafka interno aqui. Adicione itens de configuração conforme necessário em kafka.inCluster.values.
Supondo que o ficheiro de configuração tenha o nome milvuscluster.yaml, execute o seguinte comando para aplicar a configuração.
kubectl apply -f milvuscluster.yaml
O que se segue
Saiba como configurar outras dependências do Milvus com o Milvus Operator: