Os contêineres são feitos para serem efêmeros e, portanto, escalam muito bem para aplicativos sem estado. Os contêineres com estado, como o Couchbase, precisam ser tratados de forma diferente. Gerenciando a persistência para contêineres do Docker fornecem uma excelente visão geral de como gerenciar a persistência para contêineres com estado.
Este blog explicará como usar o Plug-ins de volume do Docker e Portworx para criar um contêiner com estado.
Por que a Portworx?
Portworx é um serviço de dados de contêiner fácil de implantar que oferece persistência, replicação, instantâneos, criptografia, RBAC seguro e muito mais. Alguns dos benefícios são:
- Volumes granulares de contêineres - A Portworx pode pegar vários volumes EBS por host, agregar a capacidade e derivar volumes virtuais (soft) granulares de contêineres por contêiner.
- HA de zona de disponibilidade cruzada - A Portworx protegerá os dados, em nível de bloco, em várias instâncias de computação em zonas de disponibilidade. Como os controladores de replicação reiniciam os pods em nós diferentes, os dados ainda estarão altamente disponíveis nesses nós.
- Suporte para operações de dados corporativos - A Portworx implementa snapshots granulares de contêineres, classe de serviço e classificação por níveis sobre os volumes físicos disponíveis.
- Facilidade de implementação e provisionamento - A própria Portworx é implantada como um contêiner e integrada às ferramentas de orquestração. O DevOps pode provisionar programaticamente o armazenamento granular do contêiner com qualquer propriedade, como tamanho, classe de serviço, chave de criptografia etc.
Configurar a instância do AWS EC2
A Portworx é executada somente no Linux ou no CoreOS. Configure uma instância do Ubuntu no AWS EC2:
- Inicie a instância do Ubuntu 14.04 com
m3.medium
tipo de instância. Certifique-se de adicionar a porta 8091 às regras de segurança de entrada. Isso permite que Console da Web do Couchbase para ficar acessível depois. - Faça login na instância do EC2 usando o comando:
ssh -i ~/.ssh/arun-cb-west1.pem ubuntu@
- Atualize a instância do Ubuntu:
sudo apt-get update
- Instalar o Docker:
curl -sSL https://get.docker.com/ | sh
. Instruções mais detalhadas estão disponíveis em Obter o Docker para Ubuntu. - Habilite o acesso não raiz para o comando docker:
sudo usermod -aG docker ubuntu
- Faça logout da instância do EC2 e faça login novamente
Criar volume do AWS EBS
- Crie um volume EBS de 10 GB usando o console do EC2, conforme explicado em documentos.
- Obtenha o ID da instância no console do EC2. Anexe esse volume à instância do EC2 usando esse ID de instância e use o nome de dispositivo padrão
/dev/sdf.
- Uso
lsblk
na instância do EC2 para verificar se o volume está anexado à instância:12345NOME MAJ:MIN RM TAMANHO RO TIPO PONTO DE MONTAGEMxvda 202:0 0 8G 0 disco└─xvda1 202:1 0 8G 0 parte /xvdb 202:16 0 30G 0 disco /mntxvdf 202:80 0 10G 0 disco
Contêineres Portworx
- A composição do armazenamento físico de cada nó, todos os volumes provisionados no cluster, bem como seus mapeamentos de contêineres, são armazenados em um cluster etcd. Inicie um cluster etcd:
12345doca executar -v \/dados/varlib/etcd \-p 4001:4001 \-d \portworx/etcd:mais recente - Por padrão, os volumes montados na raiz não podem ser compartilhados. Ative essa opção usando o comando:
1sudo montagem --fazer-compartilhada /
Isso é explicado com mais detalhes em Configuração do Ubuntu e montagens compartilhadas. - O contêiner do PX-Developer (px-dev) em um servidor com o Docker Engine transforma esse servidor em um nó de armazenamento de expansão horizontal. O PX-Enterprise, por outro lado, oferece suporte a vários clusters e várias nuvens, em que o armazenamento sob gerenciamento pode estar no local ou em uma nuvem pública como a AWS.
Para este blog, iniciaremos um contêiner px-dev:
123456789101112doca executar --reiniciar=sempre --nome px -d --rede=hospedeiro \--privilegiado=verdadeiro \-v /executar/doca/plugins:/executar/doca/plugins \-v /var/lib/osd:/var/lib/osd:compartilhada \-v /dev:/dev \-v /etc/pwx:/etc/pwx \-v /optar/pwx/caixa:/export_bin:compartilhada \-v /var/executar/doca.meia:/var/executar/doca.meia \-v /var/núcleos:/var/núcleos \-v /usr/src:/usr/src \--ipc=hospedeiro \portworx/px-dev -daemon -k etcd://localhost:4001 -c cluster1 -s /dev/xvdf
Detalhes completos sobre esse comando estão disponíveis em Executar o PX com o Docker. - Procure por registros que usem
registros do contêiner docker -f px
e fique atento às declarações a seguir:
1234tempo="2017-02-16T05:33:26Z" nível=informações mensagem="Inicializar o cliente do planejador e o relógio do planejador"tempo="2017-02-16T05:33:26Z" nível=informações mensagem="Iniciou uma observação do kvdb na chave: agendador/contêineres"tempo="2017-02-16T05:33:26Z" nível=informações mensagem="Iniciou uma observação do kvdb na chave: scheduler/volumes"tempo="2017-02-16T05:33:26Z" nível=informações mensagem="Iniciou uma observação do kvdb na chave: scheduler/nodes/list" - Verifique o status dos volumes anexados que estão disponíveis para a Portworx usando
sudo /opt/pwx/bin/pxctl status
para ver a saída:
12345678910111213141516Status: PX é operacionalNó ID: 679b79b1-f4c3-413e-a8e0-c527348647c9IP: 172.31.25.21Local Armazenamento Piscina: 1 piscinaPiscina IO_Prioridade Tamanho Usado Status Zona Região0 BAIXO 10 GiB 266 MiB Online a nós-oeste-1Local Armazenamento Dispositivos: 1 dispositivoDispositivo Caminho Mídia Tipo Tamanho Último-Escaneamento0:1 /dev/xvdf ARMAZENAMENTO MÉDIO_SSD 10 GiB 16 fevereiro 17 05:33 UTCtotal - 10 GiBAglomerado ResumoAglomerado ID: cluster1Nó IP: 172.31.25.21 - Capacidade: 266 MiB/10 GiB Online (Isso nó)Global Armazenamento PiscinaTotal Usado : 266 MiBTotal Capacidade : 10 GiB
Ele mostra a capacidade total disponível e utilizada.
Volume do Docker
- Vamos criar um volume do Docker:
1doca volume criar -d pxd -o tamanho=10G -o fs=ext4 --nome cbvol
Mais detalhes sobre esse comando estão em Criar volumes com o Docker. - Verifique a lista de volumes disponíveis usando
docker volume ls
comando:
1234CONDUTOR VOLUME NOMElocal 70f7b9a356df4c1f0c08e13a4e813f1ef3e174a91001f277a63b62d683a27159pxd cbvollocal f7bc5fa455a88638c106881f1bce98244b670e094d5fdc47917b53a88e46c073
Como mostrado,cbvol
é criado compxd
motorista.
Couchbase com Portworx Volume
- Crie um contêiner do Couchbase usando o volume do Portworx:
1234567doca contêiner executar \-d \--nome db \-v cbvol:/optar/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase
Observe como/opt/couchbase/var
onde todos os dados do Couchbase são armazenados no contêiner é mapeado para ocbvol
no host. Esse volume é mapeado pela Portworx. - Faça login no Console da Web do Couchbase em http://:8091, use o login
Administrador
esenha
como senha. - Vá para Data Buckets e crie um novo data bucket pwx:
- Na instância do EC2, veja a lista de contêineres:
12345ubuntu@ip-172-31-25-21:~$ doca contêiner lsCONTAINER ID IMAGEM COMANDO CRIADO STATUS PORTOS NOMES8ae763d9d53b arungupta/couchbase "/entrypoint.sh /o..." 5 minutos atrás Para cima 5 minutos 0.0.0.0:8091-8094->8091-8094/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18093/tcp db5423bcd9b426 portworx/px-dev "/docker-entry-poi..." 14 minutos atrás Para cima 14 minutos pxcf3c779a4459 portworx/etcd:mais recente "/entrypoint.sh /b..." 21 minutos atrás Para cima 21 minutos 2379-2380/tcp, 7001/tcp, 0.0.0.0:4001->4001/tcp youthful_jepsen
etcd
,px-dev
edb
estão em execução. - Matar o
db
contêiner:
1doca contêiner rm -f db - Reinicie o contêiner do banco de dados como:
1234567doca contêiner executar \-d \--nome db \-v cbvol:/optar/couchbase/var \-p 8091-8094:8091-8094 \-p 11210:11210 \arungupta/couchbase
Agora, porquecbvol
é mapeado para/opt/couchbase/var
novamente, os dados são preservados durante as reinicializações. Isso pode ser verificado acessando o Console da Web do Couchbase e verificando a variávelpwx
criado anteriormente.
Outra perspectiva interessante também está em Por que os bancos de dados não são para contêineres?. Só porque existe o Docker, isso não significa que todas as suas necessidades de banco de dados devam ser Dockerizadas. Mas, se você precisar, há muitas opções e elas podem ser usadas em aplicativos de nível de produção.
Deseja saber mais sobre como executar o Couchbase em contêineres?
[...] Fonte: blog.couchbase.com/stateful-docker-containers-portworx-couchbase/ [...]