Este blog explicará como executar um contêiner do Docker do Couchbase usando Serviço de contêineres do Amazon EC2 (Amazon ECS).
Muito obrigado a @moviolone por ajudar a entender os conceitos e colocar essa configuração em funcionamento.
O que é o Amazon ECS?
O Amazon ECS é um serviço de gerenciamento de contêineres que facilita a execução, a interrupção e o gerenciamento de contêineres do Docker em um cluster de instâncias do Amazon EC2. O Amazon ECS se integra bem ao restante da infraestrutura do AWS e elimina a necessidade de operar
seu próprio cluster ou sistemas de gerenciamento de configuração.
Uma pergunta óbvia a ser feita é como isso difere de outras estruturas de orquestração de contêineres, como Docker Swarm, Kubernetesou Mesos.
A primeira grande diferença é que cada uma dessas estruturas é de código aberto. No momento, a Amazon usa uma estrutura de orquestração proprietária. Uma grande vantagem do ECS é que, assim como o restante da infraestrutura do AWS, ele é um serviço gerenciado.
Assim, você só precisa se preocupar com a implantação dos contêineres, sem se preocupar com a infraestrutura.
Uma comparação melhor do ECS é com Docker para AWS/Azure (com o apoio do recém-introduzido Modo Swarm no Docker), Mecanismo de contêineres do Google (com o apoio do Kubernetes), DC/OS (com o apoio do Mesos), pois também são serviços gerenciados. Uma vantagem do ECS é que ele integra-se perfeitamente à infraestrutura da AWS como a implantação de instâncias de contêineres
usando Formação de nuvem modelos, dimensionamento de contêineres usando Grupo de dimensionamento automáticomapeamento de portas usando Grupos de segurança,
gerenciar o tráfego de entrada de contêineres usando Balanceador de carga elástico, visualizando os registros usando CloudWatch e outros. Se você já tiver comprado
a infraestrutura da Amazon, então o ECS parece ser uma boa opção.
Docker para AWS, anunciado na DockerCon, também é uma oferta semelhante nesse espaço.
No entanto, há alguns contras dos quais você também precisa estar ciente:
- Portabilidade - Aplicativo projetado Docker SwarmO Kubernetes e o Mesos podem ser executados em uma variedade de plataformas, como Amazon, Azure, GCE, OpenStack, no local, VMWare, data centers bare metal etc. Mas o ECS está vinculado apenas à Amazon. Você sabe
Considerar isso como um vendor lock-in? A Amazon pode lançar sua plataforma de orquestração ou agendador como um produto autônomo, mas isso não é muito comum. - Formato do contêiner - O serviço ECS é focado apenas em contêineres do Docker. Para todos os fins práticos, pelo menos atualmente, isso pode ser perfeitamente adequado. Não ouvi ou vi nenhuma implementação de contêineres Rkt ou
qualquer outro formato de contêiner. No entanto, isso pode mudar quando OCI-compliant runtimes start showing in the future.
Por fim, antes de nos aprofundarmos nos conceitos e no código, não há custo adicional para o Amazon EC2 Container Service. Você paga pelos recursos do AWS (por exemplo, instâncias do EC2 ou volumes EBS) que cria para armazenar e executar seu aplicativo.
Conceitos do Amazon ECS
Aqui está uma visão geral dos principais conceitos do ECS:
- Instância do contêiner: Uma instância AMI que está preparada para executar contêineres. Por padrão, cada instância da Amazon usa AMI Linux otimizada para Amazon ECS.
Essa é a imagem recomendada para executar o serviço de contêiner do ECS. Os principais componentes dessa imagem base são:- AMI do Amazon Linux
- Agente de contêineres do Amazon ECS - Ele gerencia o ciclo de vida dos contêineres em nome do ECS e permite que eles se conectem ao cluster.
- Mecanismo Docker (no momento em que este texto foi escrito, esta é a versão 1.11.1)
Outras imagens, como CoreOS, Suse ou Ubuntu, podem ser configuradas para atender a AMI de instância de contêiner especificação. Isso pode ser feito porque Código do agente ECS está disponível em código aberto.
- Tarefa: Uma tarefa é definida como um arquivo JSON e descreve um aplicativo que contém uma ou mais definições de contêiner. Isso geralmente aponta para imagens do Docker de um registro, mapeamento de porta/volume, etc.
- Serviço: O ECS mantém o "estado desejado" do seu aplicativo. Isso é feito por meio da criação de um serviço. Um serviço especifica
o número de instâncias de uma definição de tarefa que precisa ser executada em um determinado momento. Se a tarefa em um serviço se tornar insalubre ou parar de ser executada, o escalonador de serviços a devolverá. Ele garante que o estado desejado e o real
são compatíveis. Isso é o que proporciona resiliência no ECS. Novas tarefas em um serviço são equilibradas entre as zonas de disponibilidade em seu cluster. O agendador de serviços descobre quais instâncias de contêineres podem atender às necessidades de um serviço e o agenda
em uma instância de contêiner válida em uma zona de disponibilidade ideal (uma com o menor número de tarefas em execução).
Primeiros passos com o serviço de contêineres do Amazon EC2
Faça login em seu Console do AWS EC2 e clique no ícone Serviço de contêiner do EC2:
Clique no botão Comece a usar
para definir seu aplicativo.
Criar tarefa do ECS
No ECS, as cargas de trabalho do Docker são definidas como tarefas. Uma tarefa pode conter vários contêineres. Todos os contêineres de uma tarefa são co-localizados na mesma máquina. Insira os valores conforme mostrado:
Poucos itens
especificado nesta etapa:
- Definição da tarefa é a descrição de um aplicativo que contém uma ou mais definições de contêiner.
- Container name é o nome que será dado ao contêiner iniciado como parte dessa tarefa.
- Image permite especificar uma ou mais imagens que precisam ser iniciadas como contêineres como parte desse aplicativo. A imagem especificada aqui usa couchbase:latest como a imagem base e usa API REST do Couchbase para
configurar o servidor. Dockerfile para essa imagem fornecem mais detalhes sobre como essa imagem é preparada. - A memória máxima é a memória que precisa ser alocada para o contêiner (equivalente a
-m
Docker CLI switch). O Couchbase precisa de 1 GB para ser executado em desenvolvimento e, portanto, isso é especificado aqui. - E, por fim, os mapeamentos de porta (
-p
na CLI do Docker). A porta 8091 é necessária para a administração do Couchbase.
Mais detalhes sobre isso estão disponíveis em Parâmetros de definição de tarefas.
Criar serviço ECS
Clique em Próxima etapa
para configurar um serviço.
Forneça um nome de serviço. O estado desejado pode ser especificado aqui. Por enquanto, manteremos a simplicidade e lançaremos um contêiner do Couchbase de nó único. E como o estado desejado é executar um único contêiner, não é necessário ELB. Mais detalhes sobre isso estão disponíveis
em Parâmetros de definição de serviço.
Criar cluster do ECS
As tarefas são executadas em uma instância de contêiner, e essas instâncias precisam ser registradas em um cluster. Isso nos permite aumentar ou diminuir o cluster posteriormente para acomodar a execução de mais contêineres. Clique em Próxima etapa
para configurar o cluster.
Nesta imagem:
- Usar o nome padrão do cluster
- É criado um cluster homogêneo de instâncias de contêineres. m3.medium é um bom tamanho para executar o nó do Couchbase durante a fase inicial de desenvolvimento. A
c3.xlarge
ou uma imagem maior deve
ser usado para produção. Não deixe de ler Requisitos do Couchbase para conhecer os requisitos mínimos e recomendados de hardware e software. - Escolha uma chave de segurança criada anteriormente. Isso permitirá abrir uma conexão ssh com a instância do contêiner
- Uma nova função de IAM será criada para permitir que o agente do ECS se comunique com o serviço do ECS
As instâncias de contêineres em um cluster podem abranger várias zonas de disponibilidade e ser balanceadas com o ELB. Revise todas as opções especificadas:
Clique em
em Iniciar a instância e executar o serviço
para iniciar o serviço. O status a seguir é mostrado depois que o serviço é criado:
A saída mostra que as definições de cluster, serviço e tarefa foram criadas. Leva alguns minutos para que as instâncias sejam provisionadas e inicializadas e para que as tarefas sejam executadas nelas.
Exibir serviço e tarefa do ECS
Clique em Exibir serviço
para ver o serviço recém-criado.
Algumas coisas nessa imagem:
- O serviço mostra a definição da tarefa
couchbase:6
. A cada serviço é atribuída uma definição de tarefa e várias versões são indicadas pelo número no final. Nesse caso, algumas versões foram criadas anteriormente, mas, fora isso
o número da versão começa em1
. - A contagem desejada e em execução é mostrada como 1.
Percentual mínimo saudável
ePercentual máximo
são usados se for necessário implantar uma nova versão da definição da tarefa. Com os valores correspondentes 100% e 200%, uma nova versão da tarefa será implantada primeiro
e, em seguida, as versões mais antigas serão encerradas. Vamos brincar com esses números em um blog posterior.- A tarefa em execução é mostrada na parte inferior da tela. Clique no UUID para saber mais sobre a tarefa em execução.
A definição da tarefa mostra a instância do EC2 onde ela está sendo executada, o status atual, o mapeamento de portas e várias outras informações úteis. A parte crítica que precisamos examinar é o Link externo
. Esse URL é onde nosso Console da Web do Couchbase irá
ser acessível.
Console da Web do Couchbase
Clicar nesse link abrirá uma nova guia com Console da Web do Couchbase:
Digite o login como Administrador
e a senha como senha
. Eles são configurados em imagem de arungupta/couchbase. E aqui você
veja o Console da Web do Couchbase em toda a sua glória!
Este blog explicou como executar um contêiner do Docker do Couchbase usando Amazon ECS.
Blogs futuros mostrarão ...
- Configurar um cluster do Couchbase usando o ECS
- Implante um aplicativo de vários contêineres usando o Docker Compose (A v2 agora é compatível)
- Configurar o cluster do ECS usando a CLI
Oi Arun,
Posso saber qual é a diferença entre seu repositório do docker do couchbase e o repositório oficial do docker do couchbase? https://hub.docker.com/r/_/couchbase/? Alguma experiência com a corrida de cluster cross AZ?
Tigre
Oi Arun,
Implementei com sucesso o contêiner docker do couchbase no AWS. Sou capaz de fazer login e usar a interface do usuário do Couchbase. No entanto, não consigo me conectar ao Couchbase a partir do meu código Java em execução no meu computador local.
Tentei me conectar usando o CouchbaseClient e também a estrutura Java de dados do Springboot Spring.
Aqui está o erro:
Não foi possível obter uma configuração de Bucket válida.
2018-12-09 19:04:12.035 WARN com.couchbase.client.vbucket.ConfigurationProviderHTTP: Problemas de conexão com o URI http://asadss.dsdsad.asd4:8091/pools/default ...pulando
Oi Arun,
Ignore meu comentário. Não consegui criar regras de entrada em meu serviço ECS para habilitar as portas 8091-8093 e 11210 para comunicação TCP. Depois de definir as regras, estou conseguindo me conectar agora.
Para fins de posteridade, a abordagem acima não funcionará, pois o endereço IP no contêiner será alterado após a reinicialização.
Ao usar o CloudFormation para implementar clusters, tarefas e serviços do ECS, não é possível prever antecipadamente o nome do host atribuído ao contêiner CB.
Veja:
https://github.com/couchbase/docker/issues/82
https://github.com/couchbase/kubernetes/issues/27
Para obter uma implementação mais avançada em um cluster do Couchbase no ECS, usando sub-redes privadas e várias instâncias de contêiner do ECS, confira:
https://anton.belodedenko.me/couchbase-aws-ecs-docker/
Existem algumas pegadinhas, especialmente a alteração de endereços IP em um ambiente de nuvem essencialmente dinâmico.
- ab1