Introdução
Imagine que você está indo se encontrar com um cliente importante no centro de São Francisco, CA, e recebeu um e-mail com detalhes sobre para quem ligar quando chegar ao saguão do escritório. Você está no saguão, mas a recepção da rede móvel está totalmente inoperante. Você tenta abrir o cliente de e-mail, mas ele precisa de conexão de rede sempre que você inicia o aplicativo. Tenho certeza de que a incapacidade de ler o e-mail sem conectividade levará a uma experiência frustrante para o usuário.
Para evitar essas situações, os aplicativos agora são criados com o off-line primeiro paradigma. Isso significa simplesmente que a funcionalidade do aplicativo não é afetada pela falta intermitente de conectividade de rede. Além disso, o primeiro off-line geralmente implica a capacidade de sincronizar dados entre dispositivos de borda e o banco de dados de back-end.
Muitas soluções de banco de dados relacionais ou mesmo não relacionais tratam o celular e o backend como dois problemas separados, portanto, criar aplicativos off-line primeiro com essas soluções pontuais é praticamente impossível.
O Couchbase, por outro lado, é o principal fornecedor de uma solução de borda para a nuvem totalmente integrada. Couchbase Lite product é o banco de dados incorporado para os dispositivos de borda (onde você pode executar consultas declarativas localmente no dispositivo), Gateway de sincronização é a tecnologia de gel que permite a sincronização de dados dos dispositivos de borda com o Cluster do Couchbase.
Neste artigo, vamos nos concentrar na implantação do Couchabse Cluster e do Sync Gateway na plataforma Kubernetes. O objetivo é que você obtenha experiência em primeira mão trabalhando com essas tecnologias e entenda a mecânica por trás de cada uma delas.
Mais uma lição que eu gostaria que você tirasse deste artigo são algumas das práticas recomendadas ao implementar essa solução em sua própria nuvem privada ou pública.
Práticas recomendadas
Como ouço essas perguntas de muitos dos meus clientes corporativos, decidi abordá-las primeiro falando sobre algumas das práticas recomendadas quando se trata de implementar o Couchbase na plataforma Kubernetes.
- Sempre execute análise de dimensionamento do cluster do Couchbase primeiro, para planejar qual instância do EC2, tipos de dispositivos de armazenamento e espaço seriam necessários para o cluster. As estimativas de dimensionamento permanecem as mesmas para o cluster do Kubernetes, como seria feito para o cluster no local.
No entanto, lembre-se de que, no K8s, estamos fazendo o dimensionamento dos nós do Kubernetes, onde os pods do Couchbase serão executados. É aí que a segunda prática recomendada entra em cena. - Uso
spec.antiAffinity=true
em couchbase-cluster.yaml durante a implantação do cluster na produção. Esse campo especifica se dois pods nesse cluster podem ou não ser implantados no mesmo nó do Kubernetes. Do ponto de vista da alta disponibilidade, não queremos colocar mais de um pod em cada um dos nós do K8s, de modo que a falha de um único nó derrube apenas um único pod. - No ambiente Kubernetes, é aconselhável gerenciar o posicionamento de pods em tipos de nós predefinidos (grande, xlarge, 4xlarge etc.), de modo que os recursos desejados possam ser garantidos no momento da implantação do cluster ou da recuperação automática. Você pode usar
spec.servers[].pod.spec.nodeSelector
(conforme mencionado em cluster couchbase.yaml), que especifica um mapa de valores-chave das restrições no posicionamento de nós para pods. Para que um pod seja elegível para execução em um nó, o nó deve ter cada um dos pares de valores-chave indicados como rótulos. - Uma última observação antes de começarmos a diversão: se o seu cluster K8s tiver nós homogêneos e você não quiser usar o
seletor de nó
para determinar o posicionamento do pod e, em seguida, use o método spec.servers[].resources para definirsolicitações
elimites
. Novamente, isso ajudará a colocar pods com um pool predefinido de recursos.
OBSERVAÇÃO: No exemplo abaixo, usaremos
nodeSelector
para colocar os respectivos tipos de pod nogrupos de nós
para garantir os recursos desejados.
Pré-requisitos
Certifique-se de que você tenha uma conta AWS configurada (instruções fora do escopo deste blog) e que todas as ferramentas necessárias para experimentar essas instruções estejam prontas. Aqui está a lista de itens de que você precisa:
- Faça o download da versão mais recente Operador autônomo do Couchbase e descompacte-o no computador local. O pacote Operator contém ferramentas de linha de comando que você usará para instalar o Operator.
- Instalação e configuração kubectl em seu computador local - o kubectl é uma interface de linha de comando para executar comandos em clusters do Kubernetes.
- Instale a versão mais recente CLI DO AWS - A CLI da AWS é uma ferramenta unificada que permite interagir com os serviços da AWS usando comandos em seu shell de linha de comando. Neste caso, usaremos a CLI da AWS para nos comunicarmos de forma segura com o cluster do Kubernetes em execução na AWS.
Quando você tiver cli do aws
com as credenciais da sua conta, você pode passar para a seção de criação de um cluster do Kubernetes.
Etapa 1: criar um cluster K8s com vários nós
O Kubernetes (K8s) nos oferece a flexibilidade de provisionar máquinas de computação de tamanhos diferentes (vCPU, RAM, tamanho do disco) em um único cluster do Kubernetes para que os requisitos de recursos de vários serviços gerenciados possam ser atendidos em um único cluster do K8s.
Vamos aproveitar a mesma flexibilidade e oferecer três NodeGroups
que usaremos posteriormente para hospedar um conjunto específico de serviços do Couchbase.
1.1. Crie um cluster EKS na região de sua escolha
Primeiro, vamos implantar um cluster K8s em us-west-2
região e em duas zonas de disponibilidade us-west-2a/b
. Você pode mencionar um vpc-cidr
de acordo com suas necessidades, mas, neste exemplo, usaremos o bloco 172.16.0.0/20
fornecendo-nos um intervalo de mais de 4K (212) endereços IP, o que deve ser mais do que suficiente para nós.
1 2 3 4 5 6 |
$ eksctl criar agrupamento --nome k8sEKS \ --versão 1.18 \ --região nós-oeste-2 \ --zonas nós-oeste-2a,nós-oeste-2b \ --vpc-cidr 172.16.0.0/20 \ --sem-nógrupo |
1.2. Criar grupos de nós separados
Vamos criar nógrupo
no cluster EKS para que possamos hospedar o Couchbase Dados
instâncias de serviço. Neste exemplo, usaremos m5.large (2 vCPU e 8 GB de RAM)
Máquinas EC2 como tipo de nó
mas o tamanho real do nó EC2 dependerá do planejamento da capacidade e do desempenho com base na sua carga de trabalho. Portanto, certifique-se de escolher o tipo certo de nós em sua implementação de produção.
1 2 3 4 5 6 7 8 |
$ eksctl criar nógrupo --agrupamento=k8sEKS \ --nome=m5l-piscina \ --nó-tipo m5.grande \ --região nós-oeste-2 \ --nós 2 \ --nós-min 2 \ --nós-máximo 4 \ --nó-ami automático |
Para hospedar Índice/Consulta
criaremos um nodegroup separado com mais computação e RAM. Neste exemplo, usaremos r5.large (2 vCPUs e 16 GB de RAM)
máquinas.
1 2 3 4 5 6 7 8 |
$ eksctl criar nógrupo --agrupamento=k8sEKS \ --nome=r5l-piscina \ --nó-tipo r5.grande \ --região nós-oeste-2 \ --nós 2 \ --nós-min 2 \ --nós-máximo 4 \ --nó-ami automático |
Por último, mas não menos importante, usaremos t2.xlarge (4 vCP e 16 GB de RAM)
para hospedar Gateway de sincronização
instância.
1 2 3 4 5 6 7 8 |
$ eksctl criar nógrupo --agrupamento=k8sEKS \ --nome=t2xl-piscina \ --nó-tipo t2.grande \ --região nós-oeste-2 \ --nós 1 \ --nós-min 1 \ --nós-máximo 2 \ --nó-ami automático |
Quando os três grupos de nós
estão prontos, podemos começar a rotular cada nó no nodegroup ou usar o rótulo pré-existente, mas primeiro confirme todos os grupos de nós
estão prontos:
1 2 3 4 5 6 |
$ eksctl obter grupos de nós --agrupamento=k8sEKS --região=nós-oeste-2 LUSTER NODEGROUP CRIADO MIN TAMANHO MAX TAMANHO DESEJADO CAPACIDADE INSTÂNCIA TIPO IMAGEM ID k8sEKS m5l-piscina 2020-07-24T18:58:02Z 2 4 2 m5.largeami-04387c277e83865b2 k8sEKS r5l-piscina 2020-07-24T18:58:09Z 2 4 2 r5.largeami-04387c277e83865b2 k8sEKS t2xl-piscina 2020-07-24T19:09:09Z 1 2 1 t2.xlargeami-04387c277e83865b2 |
1.3. Rotular nós EKS
Escolhemos três tipos diferentes de máquinas EC2 para hospedar dados
, Índice/Consulta
e gateway de sincronização
máquinas apenas para dedicar os serviços do Couchbase a uma nógrupo
tipo. Vamos usar um rótulo existente chamado beta.kubernetes.io/instance-type
para a seleção de nós. Esse rótulo estará disponível por padrão para que não seja necessário criar um novo rótulo. Você pode simplesmente ver os rótulos dos nós executando este cmd:
1 2 3 4 5 6 7 8 |
$ kubectl obter nós --show-rótulos NOME STATUS PAPÉIS IDADE VERSÃO RÓTULOS ip-172-16-0-12.us-oeste-2.compute.internal Pronto <nenhum> 21m v1.14.9-eks-a0a484 ...,beta.kubernetes.io/instância-tipo=t2.grande,... ip-172-16-0-127.us-oeste-2.compute.internal Pronto <nenhum> 32m v1.14.9-eks-a0a484 ...,beta.kubernetes.io/instância-tipo=m5.grande,... ip-172-16-3-234.us-oeste-2.compute.internal Pronto <nenhum> 32m v1.14.9-eks-a0a484 ...,beta.kubernetes.io/instância-tipo=m5.grande,... ip-172-16-1-29.us-oeste-2.compute.internal Pronto <nenhum> 32m v1.14.9-eks-a0a484 ...,beta.kubernetes.io/instância-tipo=r5.grande,... ip-172-16-3-119.us-oeste-2.compute.internal Pronto <nenhum> 32m v1.14.9-eks-a0a484 ...,beta.kubernetes.io/instância-tipo=r5.grande,... |
Neste exemplo, estaremos hospedando dados
serviço em m5.large
máquinas, índice/consulta
em r5.large
máquinas e gateway de sincronização
em t2.xlarge
máquina.
Em um ambiente de produção real, entendemos que você pode ter um tipo diferente de máquina, mas não essencialmente um tipo dedicado a um tipo específico de serviço do Couchbase. Nesse caso, você pode criar rótulos mutuamente exclusivos para cada tipo de nó.
Você usaria rótulo do kubectl
cmd para rotular todos os nós que você deseja usar somente para nós de dados desta forma:
1 |
$ kubectl rótulo nós 'ec2-node-ip' instanceType=dados |
Da mesma forma para rotular todos os nós de índice (consulta ou outro):
1 |
$ kubectl rótulo nós 'ec2-node-ip' instanceType=índice |
Depois de rotular todos os nós, você estará pronto para passar para a próxima seção.
OBSERVAÇÃO: Estamos usando beta.kubernetes.io/instance-type
como rótulo, portanto, não precisamos criar nenhum novo rótulo para os nós.
Etapa 2: Instalar a definição de recurso personalizado
A primeira etapa da instalação do Operator é instalar a definição de recurso personalizado (CRD) que descreve o Couchbase
tipos de recursos. Isso pode ser feito executando o comando abaixo no diretório do pacote Operator:
1 |
kubectl criar -f crd.yaml |
Etapa 3: Criar um espaço de nome
Os namespaces são uma forma de dividir os recursos do cluster entre vários usuários.
Os namespaces são uma forma de dividir os recursos do cluster entre vários usuários.
- Execute o seguinte comando para criar um namespace.
1 2 3 |
$ kubectl criar espaço de nome cbdb espaço de nome/cbdb criado |
- Confirme se o Namespace foi criado com sucesso.
1 2 3 4 5 |
$ kubectl obter Espaços de nomes NOME STATUS IDADE cbdb Ativo 34s padrão Ativo 5h20m |
Etapa 4: Instalar o operador
O operador é composto de dois componentes: um controlador de admissão dinâmico por cluster
(DAC) e um Operador por espaço de nome
. Consulte a seção arquitetura da operadora para obter informações adicionais sobre o que é necessário e considerações de segurança.
4.1. Instalar o controlador de admissão dinâmico (DAC)
O DAC permite que os recursos personalizados sejam modificados e interrogados antes que um recurso seja aceito e confirmado no etcd. A execução do DAC nos permite adicionar padrões sensatos às configurações do cluster do Couchbase, minimizando assim o tamanho das especificações. Ele também nos permite manter a compatibilidade com versões anteriores quando novos atributos são adicionados e precisam ser preenchidos. Isso torna a experiência de uso dos recursos do Couchbase semelhante à dos tipos de recursos nativos.
Vamos agora instalar o Dynamic Admission Controller.
- Abra uma janela do Terminal e vá para o diretório em que você descompactou o pacote Operator. Execute o seguinte comando para instalar o DAC no diretório
padrão
namespace.
1 2 3 4 5 6 7 8 9 10 11 |
$ caixa/cbopcfg gerar admissão --espaço de nome padrão | kubectl criar -f - conta de serviço/couchbase-operador-admissão criado papel de agrupamento.rbac.autorização.k8s.io/couchbase-operador-admissão criado aglutinação de papéis.rbac.autorização.k8s.io/couchbase-operador-admissão criado segredo/couchbase-operador-admissão criado implantação.aplicativos/couchbase-operador-admissão criado serviço/couchbase-operador-admissão criado mutatingwebhookconfiguration.admissãoregistro.k8s.io/couchbase-operador-admissão criado validando a configuração do webhook.admissãoregistro.k8s.io/couchbase-operador-admissão criado |
- Confirme se o controlador de admissão foi implantado com êxito.
1 2 3 4 |
$ kubectl obter implantações NOME PRONTO UP-PARA-DATA DISPONÍVEL IDADE couchbase-operador-admissão 1/1 1 1 48s |
4.2. Instalar o operador do Couchbase
Agora, vamos implementar o Operator no oficina
executando o seguinte comando.
1 2 3 4 5 6 7 |
$ caixa/cbopcfg gerar operador --espaço de nome cbdb | kubectl criar -f - conta de serviço/couchbase-operador criado função.rbac.autorização.k8s.io/couchbase-operador criado vinculação de função.rbac.autorização.k8s.io/couchbase-operador criado implantação.aplicativos/couchbase-operador criado serviço/couchbase-operador criado |
A execução do comando acima faz o download da imagem do Operator Docker e cria um arquivo implantaçãoque gerencia uma única instância do Operator. O Operator usa uma implantação para que possa reiniciar o pod se ele morrer.
Depois de executar o kubectl create
geralmente leva menos de um minuto para o Kubernetes implantar o Operator e para que ele esteja pronto para ser executado.
4.3. Verificar o status da implantação
Você pode usar o seguinte comando para verificar o status da implantação:
1 2 3 4 |
$ kubectl obter implantações -n cbdb NOME PRONTO UP-PARA-DATA DISPONÍVEL IDADE couchbase-operador 1/1 1 1 73s |
4.4. Verificar o status do Operador
Execute o seguinte comando para verificar se o Operator foi iniciado com êxito:
1 2 3 4 |
$ kubectl obter cápsulas -l aplicativo=couchbase-operador -n cbdb NOME PRONTO STATUS RESTARTS IDADE couchbase-operador-558fd8486c-788jr 1/1 Em execução 0 2m9s |
Se o Operator estiver ativo e em execução, o comando retornará uma saída em que o PRONTO shows de campo 1/1como, por exemplo:
Etapa 5. Implantar o cluster do Couchbase
Em um ambiente de produção em que o desempenho e o SLA do sistema são mais importantes, devemos sempre planejar a implantação do cluster do Couchbase usando volumes persistentes, pois isso ajuda:
- Recuperação de dados: Os volumes persistentes permitem que os dados associados aos pods sejam recuperados no caso de um pod ser encerrado. Isso ajuda a evitar a perda de dados e a construção demorada de índices ao usar serviços de dados ou de índices.
- Realocação de cápsulas: O Kubernetes pode decidir expulsar pods que atingem limites de recursos, como limites de CPU e memória. Os pods que têm backup com Volumes persistentes podem ser encerrados e reiniciados em nós diferentes sem incorrer em tempo de inatividade ou perda de dados.
- Provisionamento dinâmico: O Operator criará Persistent Volumes sob demanda à medida que seu cluster for dimensionado, aliviando a necessidade de pré-provisionar o armazenamento do cluster antes da implementação.
- Integração com a nuvem: O Kubernetes se integra aos provisionadores de armazenamento nativos disponíveis nos principais fornecedores de nuvem, como AWS e GCE.
5.1. Criar segredo para o console de administração do Couchbase
A primeira coisa que precisamos fazer é criar uma credencial secreta que será usada pelo console administrativo da Web durante o login. Por conveniência, um exemplo de segredo é fornecido no pacote Operator. Quando você o envia para o cluster do Kubernetes, o segredo define o nome de usuário como Administrator e a senha como password.
Para empurrar o secret.yaml em seu cluster do Kubernetes, execute o seguinte comando:
1 2 3 |
$ kubectl criar -f segredo.yaml -n cbdb Secreto/cb-administrador-autenticação criado |
5.2 Criar classe de armazenamento para o cluster k8s
Para usar o PersistentVolume nos serviços do Couchbase (dados, índice, pesquisa etc.), precisamos criar classes de armazenamento (sc-nas.yaml). Execute o kubectl para criar uma nova classe de armazenamento baseada em SSD:
1 2 3 4 |
$ kubectl criar -f sc-nas.yaml -n cbdb classe de armazenamento.armazenamento.k8s.io/nas criado |
5.3. Implantar o cluster do Couchbase
A especificação completa para implantar o cluster do Couchbase em 3 zonas diferentes usando volumes persistentes pode ser vista na seção couchbase-cluster.yaml . Esse arquivo, juntamente com outros arquivos YAML de amostra usados neste artigo, pode ser baixado deste repositório git.
Abra o arquivo YAML que você acabou de baixar e observe como estamos usando nodeSelector
para colocar os pods nos nós que têm o valor específico de beta.kubernetes.io/instance-type
etiqueta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
servidores: - nome: dados-serviço-2a tamanho: 1 serviços: - dados volumeMounts: padrão: pvc-padrão # /opt/couchbase/var/lib/couchbase dados: pvc-dados # /mnt/data cápsula: especificação: nodeSelector: beta.kubernetes.io/instância-tipo: m5.grande - nome: índice-quer-serviço-2a tamanho: 1 serviços: - índice - consulta volumeMounts: padrão: pvc-padrão índice: pvc-índice cápsula: especificação: nodeSelector: beta.kubernetes.io/instância-tipo: r5.grande |
Agora use kubectl
para implantar o cluster, mas certifique-se de que esteja usando couchbase-cluster.yaml do git, e não o arquivo de mesmo nome presente no diretório de trabalho atual.
1 2 3 |
$ kubectl criar -f couchbase-agrupamento.yaml -n cbdb --salvar-configuração conjunto de sofás.couchbase.com/cbdemo criado |
Isso iniciará a implantação do cluster do Couchbase e, se tudo correr bem, teremos quatro pods do cluster do Couchbase hospedando os serviços de acordo com o arquivo de configuração acima. Para verificar o progresso, execute este comando, que observará (argumento -w) o progresso da criação dos pods:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl obter cápsulas -n cbdb -w NOME PRONTO STATUS RESTARTS IDADE cbdemo-0000 0/1 Em execução 0 1m cbdemo-0001 0/1 Em execução 0 53s cbdemo-0002 0/1 Em execução 0 20s couchbase-operador-558fd8486c-788jr 1/1 Em execução 0 21m cbdemo-0003 0/1 Pendente 0 3s cbdemo-0003 0/1 Pendente 0 3s cbdemo-0003 0/1 ContainerCreating (Criação de contêineres) 0 3s cbdemo-0003 0/1 Em execução 0 18s cbdemo-0001 1/1 Em execução 0 2m cbdemo-0000 1/1 Em execução 0 2m cbdemo-0002 1/1 Em execução 0 1m cbdemo-0003 1/1 Em execução 0 1m |
Para visualizar qual pod está sendo executado em qual nó, você pode executar:
1 2 3 4 5 6 7 8 |
$ kubectl obter cápsulas -em todo o mundo -n cbdb NOME PRONTO STATUS RESTARTS IDADE IP NÓ NOMEADO NÓ PRONTIDÃO GATES cbdemo-0000 1/1 Em execução 0 10m 172.16.2.134 ip-172-16-3-234.us-oeste-2.compute.internal <nenhum> <nenhum> cbdemo-0001 1/1 Em execução 0 10m 172.16.1.116 ip-172-16-0-127.us-oeste-2.compute.internal <nenhum> <nenhum> cbdemo-0002 1/1 Em execução 0 9m51s 172.16.1.5 ip-172-16-1-29.us-oeste-2.compute.internal <nenhum> <nenhum> cbdemo-0003 1/1 Em execução 0 9m3s 172.16.2.98 ip-172-16-3-119.us-oeste-2.compute.internal <nenhum> <nenhum> couchbase-operador-558fd8486c-r2tcc 1/1 Em execução 0 31m 172.16.1.230 ip-172-16-0-12.us-oeste-2.compute.internal <nenhum> <nenhum> |
Você notaria que Índice/Consulta
O serviço está sendo executado no pod cbdemo-0002
e cbdemo-0003
que é hospedado nos nós EKS com rótulo beta.kubernetes.io/instance-type: r5.large
e dados
pods de serviço (cbdemo-0000
, cbdemo-0001
) são colocados em nós EKS com rótulo beta.kubernetes.io/instance-type: m5.large
. Isso significa que nodeSelector
definido em couchbase-cluster.yaml aplicou com sucesso o posicionamento de pods nos nós com os recursos desejados.
Nesse ponto, você pode fazer o encaminhamento de porta da seguinte forma:
1 2 3 4 |
$ kubectl porto-avançar cbdemo-0000 18091:18091 -n cbdb Encaminhamento de 127.0.0.1:18091 -> 18091 Encaminhamento de [::1]:18091 -> 18091 |
E acesse o console da Web digitando https://localhost:18091 no navegador.
Etapa 6. Implantação de um cluster do Sync Gateway
Grande progresso até agora na implantação de um cluster do Couchbase com várias zonas e altamente disponível usando volumes de armazenamento persistentes. Agora, antes de começarmos a implementar o Sync Gateway, precisamos nos certificar de mais duas coisas:
6.1 Pré-requisitos do Sync Gateway
- Temos um bucket disponível no qual o aplicativo cliente e o Sync Gateway gravarão os dados. Ainda não temos nenhum bucket disponível para gravação, portanto, vamos criar um bucket
preparação
do balde doConsole da Web
.
Figura 2: Preparação
bucket criado com 2 GB de espaço.
OBSERVAÇÃO: Usamos 2 GB de RAM para esse bucket, mas no ambiente de produção você atribuiria a RAM com base nas estimativas de dimensionamento que você ou o arquiteto de soluções do Couchbase fizeram para o seu caso de uso comercial.
- Temos um usuário RBAC em vigor com o nome
Acesso a aplicativos
no nível do balde.
Podemos simplesmente criar um Couchbase
User como geralmente fazemos, mas para tornar isso um pouco mais interessante, vamos usar um externo
(também conhecido como LDAP). Na seção couchbase-cluster.yaml você pode encontrar detalhes de um terceiro Servidor de teste LDAP que usamos neste exemplo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
segurança: adminSecret: cb-administrador-autenticação rbac: gerenciado: falso ldap: anfitriões: - ldap.fóruns.com porto: 389 bindDN: "cn=read-only-admin,dc=example,dc=com" bindSecret: cb-administrador-autenticação authenticationEnabled: verdadeiro userDNMapping: modelo: "uid=%u,dc=example,dc=com" authorizationEnabled: falso |
Se você quiser se conectar a um servidor LDAP diferente, basta atualizar ldap detalhes do servidor no couchbase-cluster.yaml e aplicar as alterações. Voltemos à criação de um usuário e à atribuição do nível de bucket Acesso a aplicativos
função.
Figura 3: Usando newton
como o usuário externo, que será automaticamente confirmado como existe
.
Figura 4: Detalhes do usuário após clicar no botão Adicionar usuário
botão.
Até agora, tudo bem. O usuário do Bucket e do RBAC está pronto, portanto, podemos prosseguir com a configuração do Gateway de sincronização
.
6.2 Configuração do gateway de sincronização
Para que Gateway de sincronização
Para nos comunicarmos com o Couchbase Cluster, precisamos fornecer detalhes do banco de dados, do bucket e da credencial. Usaremos o banco de dados
string de conexão como couchbase://cbdemo-srv.cbdb.svc.cluster.local
como pode ser visto no trecho abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
... }, "bancos de dados": { "cbdemo": { "servidor": "couchbase://cbdemo-srv.cbdb.svc.cluster.local", "bucket" (balde): "staging" (preparação), "nome de usuário": "newton", "senha": "senha", "allow_conflicts": falso, "revs_limit": 20, "enable_shared_bucket_access": verdadeiro, "import_docs": verdadeiro, "sync": `função(doc, oldDoc) { canal(doc.canais); }`, } ... |
Uma coisa que eu gostaria de destacar é que, com Sync Gateway 2.7
(ou superior), os clientes corporativos agora podem designar vários nós do Sync Gateway como nós de importação (para lidar com as gravações do Couchbase Server), o que proporciona maior resiliência. Portanto, estamos usando import_docs: true
no arquivo de configuração.
Você pode encontrar todos os outros atributos de configuração em sgw-config.yaml file. Usaremos esse arquivo para criar o segredo e salvar as configurações nele também.
1 2 3 |
$ kubectl criar -f sgw-configuração.yaml -n cbdb --salvar-configuração segredo/sincronização-portal criado |
Para visualizar sgw-config
executar secretamente o cmd abaixo:
1 2 3 4 5 6 7 |
$ kubectl obter segredo -n cbdb NOME TIPO DADOS IDADE cb-administrador-autenticação Opaco 2 4h couchbase-operador-token-p4qzb kubernetes.io/serviço-conta-token 3 4h padrão-token-x7cvw kubernetes.io/serviço-conta-token 3 4h sgw-configuração Opaco 1 30s |
6.3 Controlador de implantação
Depois de definir o segredo e a configuração, estamos quase prontos para implantar Gateway de sincronização
em nosso cluster Kubernetes. Ajuste o réplicas
e GOMAXPROCS
com base em seus requisitos de produção, mas, neste exemplo, vamos implantar duas réplicas com um máximo de uma única vCPU por réplica.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Versão da API: aplicativos/v1 gentil: Implantação metadados: nome: sincronização-portal especificação: réplicas: 2 seletor: matchLabels: aplicativo: sincronização-portal modelo: metadados: rótulos: aplicativo: sincronização-portal especificação: contêineres: - nome: sincronização-portal imagem: couchbase/sincronização-portal:2.7.3-empresa volumeMounts: - nome: configuração mountPath: /etc/portais de sincronização readOnly: verdadeiro env: - nome: GOMAXPROCS valor: "1" volumes: - nome: configuração segredo: secretName: sincronização-portal |
Implementar sgw-deployment.yaml arquivo via kubectl
cmd:
1 2 3 |
$ kubectl criar -f sgw-implantação.yaml -n cbdb --salvar-configuração implantação.extensões/sincronização-portal criado |
Você pode visualizar o progresso da implantação executando:
1 2 3 4 5 |
$ kubectl obter implantações sincronização-portal -n cbdb $ kubectl obter implantações sincronização-portal -n cbdb NOME PRONTO UP-PARA-DATA DISPONÍVEL IDADE sincronização-portal 2/2 2 2 98s |
Como pode ser visto acima, as duas instâncias de réplica estão em funcionamento e agora só precisamos colocar um balanceador de carga na frente.
6.4 Implantar um balanceador de carga
Em uma implementação de produção, você provavelmente terá um ou mais nós do Sync Gateway liderados por um balanceador de carga.
Você implantará o balanceador de carga usando o Balanceador de carga do Kubernetes serviço. O serviço de balanceador de carga fornece um endereço IP acessível externamente e roteia o tráfego para as portas corretas no cluster.
- Crie um novo arquivo chamado sgw-lb.yaml com os seguintes atributos. Observe que estamos encaminhando tanto a 4984 (porta de acesso público) quanto a 4985 (porta de administração)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
gentil: Serviço Versão da API: v1 metadados: nome: sgw-lb especificação: tipo: Balanceador de carga seletor: aplicativo: sincronização-portal portos: - nome: http protocolo: TCP porto: 4984 porta de destino: 4984 - nome: http2 protocolo: TCP porto: 4985 porta de destino: 4985 |
Observação Estamos encaminhando a 4984 (porta de acesso público) e a 4985 (porta de administração) por meio do balanceador de carga.
- Implante o balanceador de carga usando sgw-lb.yaml arquivo.
1 2 3 |
$ kubectl criar -f sgw-lb.yaml -n cbdb serviço/sgw-carregar-balanceador criado |
- Verifique os pods que o balanceador de carga está direcionando.
Se tudo estiver implantado corretamente, você verá algo semelhante ao seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ kubectl descrever serviço sgw-carregar-balanceador -n cbdb Nome: sgw-carregar-balanceador Namespace: cbdb Rótulos: <nenhum> Anotações: <nenhum> Seletor: aplicativo=sincronização-portal Tipo: Balanceador de carga IP: 10.100.106.138 Balanceador de carga Ingresso: a8ce.nós-oeste-2.elb.amazonaws.com Porto: <não definido> 4984/TCP Porta de destino: 4984/TCP NodePort: <não definido> 31066/TCP Pontos finais: 172.16.11.2:4984, 172.16.11.3:4984 Sessão Afinidade: Nenhum Externo Tráfego Política: Aglomerado Eventos: Tipo Motivo Idade De Mensagem ---- ------ ---- ---- ------- Normal Garantia do balanceador de carga 3m serviço-controlador Garantir carregar balanceador Normal Balanceador de carga garantido (EnsuredLoadBalancer) 3m serviço-controlador Garantido carregar balanceador |
Anote os Ingresso do LoadBalancer
valor.
6.5 Teste a instalação
Quando o Load Balancer estiver on-line, poderemos confirmar a acessibilidade do cluster do Sync Gateway por meio de Ingresso do LoadBalancer
(conforme mencionado na saída acima). Basta usar enrolar
cmd:
1 |
enrolar http://a8ce.us-west-2.elb.amazonaws.com:4984 |
Ele deve retornar o seguinte.
1 2 |
{"couchdb":"Bem-vindo","vendor" (fornecedor):{"name" (nome):"Couchbase Sync \ Gateway","versão":"2.7"},"versão":"Couchbase Sync Gateway/2.7.3(3;33d352f) EE"} |
Pronto! O Sync Gateway está totalmente funcional e pronto para assumir a carga de trabalho do aplicativo cliente (via Couchbase Lite).
6.5.1 Teste de leitura/escrita de documentos
Em um blog separado, discutirei como é possível desenvolver aplicativos para os dispositivos de borda usando Couchbase Lite mas para testar a sanidade de nossa configuração de ponta a ponta, podemos executar rapidamente operações simples de POST e GET usando Gateway de sincronização
API REST pública.
Vamos usar o comando curl para inserir alguns documentos:
1 2 3 4 5 |
$ enrolar -u administrador:senha -X POST "http://a8ce.us-west-2.elb.amazonaws.com:4984/cbdemo/" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"id\":\"doc3\",\"channels\":\"newton\"}" saída {"id":"c4988cff19c632a724e13d4390b23b82","ok":verdadeiro,"rev":"1-f99195111681fe7361b74eb5ebca23d4"} |
O primeiro documento foi inserido e a chave do documento foi gerada automaticamente como c4988cff19c632a724e13d4390b23b82
.
1 2 3 4 5 |
$ enrolar -u administrador:senha -X POST "http://a8ce.us-west-2.elb.amazonaws.com:4984/cbdemo/" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"id\":\"doc4\",\"channels\":\"newton\"}" saída {"id":"8f02cab34faa17d61ca89aa05ade372e","ok":verdadeiro,"rev":"1-68b03bf8df34c5854d852e3b549d0572"} |
O segundo documento também foi inserido com sucesso, usando credenciais de administrador e a chave de documento gerada automaticamente é 8f02cab34faa17d61ca89aa05ade372e
.
Agora podemos obter o documento executando a operação GET usando o Sync Gateway API REST pública:
1 2 3 4 5 |
$ enrolar -u administrador:senha -X OBTER "http://a8ce.us-west-2.elb.amazonaws.com:4984/cbdemo/c4988cff19c632a724e13d4390b23b82" -H "accept: application/json" -H "Content-Type: application/json" saída {"_id":"c4988cff19c632a724e13d4390b23b82","_rev":"1-f99195111681fe7361b74eb5ebca23d4","canais":"foo","id":"doc3"} |
Conclusão
O Couchbase Sync Gateway é a tecnologia crítica de sincronização de dados que permite que os desenvolvedores de aplicativos criem soluções de borda para a nuvem. Neste artigo, usamos a versão mais recente do Couchbase Autonomous Operator para instalar o cluster do Couchbase e o Sync Gateway na plataforma Kubernetes da nuvem pública. Em artigos futuros, vou me basear neste artigo e mostrar como você pode fazer muitas outras coisas de nível empresarial (como criptografia, LDAP, desenvolvimento do Couchbase Lite e muito mais). Até lá, bom aprendizado.