Este blog faz parte de uma série de blogs com várias partes que mostra como executar seus aplicativos no Kubernetes. Ele usará o Couchbaseum banco de dados de documentos distribuídos NoSQL de código aberto, como o Docker
contêiner.
A primeira parte (Couchbase no Kubernetes) explicou como iniciar o cluster do Kubernetes usando o Vagrant. Essa é uma maneira simples e fácil de desenvolver, testar e implantar
cluster do Kubernetes em seu computador local. Mas isso pode ser de uso limitado em breve, pois os recursos são limitados pelo computador local. Então, o que você faz?
O cluster do Kubernetes também pode ser instalado na Amazon. Esta segunda parte mostrará:
- Como configurar e iniciar o cluster do Kubernetes no Amazon Web Services
- Execute o contêiner do Docker no cluster do Kubernetes
- Expor o pod no Kubernetes como serviço
- Desligar o cluster
Aqui está uma visão geral rápida:
Vamos ver os detalhes!
Configurar o cluster do Kubernetes no Amazon Web Services
Primeiros passos no AWS EC2 fornecem instruções completas para iniciar o cluster do Kubernetes na Amazon. Certifique-se de ter os pré-requisitos (conta do AWS, AWS CLI, acesso total ao EC2)
antes de seguir estas instruções. O cluster do Kubernetes pode ser criado na Amazon como:
|
1 2 |
definir PROVEDOR DE KUBERNETES=aws ./agrupamento/cubo-para cima.sh |
Por padrão, isso provisiona um novo VPC e um cluster Kubernetes de 4 nós em us-west-2a (Oregon) com t2.micro instâncias em execução no Ubuntu. Isso significa que são criadas 5 AMIs (uma para o mestre e 4 para os nós de trabalho). Algumas
propriedades que merecem ser atualizadas:
- Conjunto
NUM_MINIONSpara qualquer número de nós necessários no cluster. Defina-a como 2 se quiser que apenas dois nós de trabalho sejam criados. - Cada tamanho de instância é 1.1.x é
t2.micro. DefinirTAMANHO_MESTREeMINION_SIZEvariáveis de ambiente param3.mediumcaso contrário, os nós vão se arrastar.
Se você baixou o Kubernetes de github.com/kubernetes/kubernetes/releasestodos os valores podem ser alterados em cluster/aws/config-default.sh. Iniciando o Kubernetes em
A Amazon mostra o seguinte registro:
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
./kubernetes/agrupamento/cubo-para cima.sh ... Início agrupamento usando provedor: aws ... chamando verificar-pré-requisitos ... chamando cubo-para cima Início agrupamento usando os distribuição: vívido Carregamento para Amazon S3 +++ Preparação servidor alcatrão para S3 Armazenamento: kubernetes-preparação-0eaf81fbc51209dd47c13b6d8b424149/desenvolvimento { "InstanceProfile": { "InstanceProfileId": "AIPAJMNMKZSXNWXQBHXHI", "Funções": [ { "RoleName": "kubernetes-master", "AssumeRolePolicyDocument": { "Versão": "2012-10-17", "Declaração": [ { "Ação": "sts:AssumeRole", "Efeito": "Permitir", "Principal": { "Serviço": "ec2.amazonaws.com" } } ] }, "CreateDate": "2016-02-29T23:19:17Z", "Caminho": "/", "RoleId": "AROAJW7ER37BPXX5KFTFS", "Arn": "arn:aws:iam::598307997273:role/kubernetes-master" } ], "Arn": "arn:aws:iam::598307997273:instance-profile/kubernetes-master", "CreateDate": "2016-02-29T23:19:19Z", "Caminho": "/", "InstanceProfileName": "kubernetes-master" } } { "InstanceProfile": { "InstanceProfileId": "AIPAILRAU7RF4R2SDCULG", "Caminho": "/", "Arn": "arn:aws:iam::598307997273:instance-profile/kubernetes-minion", "Funções": [ { "Caminho": "/", "AssumeRolePolicyDocument": { "Declaração": [ { "Efeito": "Permitir", "Ação": "sts:AssumeRole", "Principal": { "Serviço": "ec2.amazonaws.com" } } ], "Versão": "2012-10-17" }, "RoleName": "kubernetes-minion", "Arn": "arn:aws:iam::598307997273:role/kubernetes-minion", "RoleId": "AROAIBEPV6VW4IEE6MRHS", "CreateDate": "2016-02-29T23:19:21Z" } ], "InstanceProfileName": "kubernetes-minion", "CreateDate": "2016-02-29T23:19:22Z" } } Usando SSH chave com (AWS) impressão digital: 39:b3:cb:c1:af:6a:86:de:98:95:01:3d:9a:56:bb:8b Criação de vpc. Adição etiqueta para vpc-7b46ac1f: Nome=kubernetes-vpc Adição etiqueta para vpc-7b46ac1f: KubernetesCluster=kubernetes Usando VPC vpc-7b46ac1f Criação de sub-rede. Adição etiqueta para sub-rede-cc906fa8: KubernetesCluster=kubernetes Usando sub-rede sub-rede-cc906fa8 Criação de Internet Gateway. Usando Internet Gateway igw-40055525 Associação rota tabela. Criação de rota tabela Adição etiqueta para rtb-f2dc1596: KubernetesCluster=kubernetes Associação rota tabela rtb-f2dc1596 para sub-rede sub-rede-cc906fa8 Adição rota para rota tabela rtb-f2dc1596 Usando Rota Tabela rtb-f2dc1596 Criação de mestre segurança grupo. Criação de segurança grupo kubernetes-mestre-kubernetes. Adição etiqueta para sg-308b3357: KubernetesCluster=kubernetes Criação de lacaio segurança grupo. Criação de segurança grupo kubernetes-lacaio-kubernetes. Adição etiqueta para sg-3b8b335c: KubernetesCluster=kubernetes Usando mestre segurança grupo: kubernetes-mestre-kubernetes sg-308b3357 Usando lacaio segurança grupo: kubernetes-lacaio-kubernetes sg-3b8b335c Início Mestre Adição etiqueta para i-b71a6f70: Nome=kubernetes-mestre Adição etiqueta para i-b71a6f70: Função=kubernetes-mestre Adição etiqueta para i-b71a6f70: KubernetesCluster=kubernetes Em espera para mestre para ser pronto Tentativa 1 para verificar para mestre nodeWaiting para instância i-b71a6f70 para desova Dormir para 3 segundos... Em espera para instância i-b71a6f70 para desova Dormir para 3 segundos... Em espera para instância i-b71a6f70 para desova Dormir para 3 segundos... Em espera para instância i-b71a6f70 para desova Dormir para 3 segundos... Em espera para instância i-b71a6f70 para desova Dormir para 3 segundos... Em espera para instância i-b71a6f70 para desova Dormir para 3 segundos... [mestre em execução @52.34.244.195] Fixação persistente dados volume (vol-e072d316) para mestre { "Dispositivo": "/dev/sdb", "Estado": "anexando", "InstanceId": "i-b71a6f70", "VolumeId": "vol-e072d316", "AttachTime": "2016-03-02T18:10:15.985Z" } Tentativa 1 para verificar para SSH para mestre [ssh para mestre de trabalho] Tentativa 1 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 2 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 3 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 4 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 5 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 6 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 7 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 8 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 9 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 10 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 11 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 12 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 13 para verificar para sal-mestre [sal-mestre não de trabalho ainda] Tentativa 14 para verificar para sal-mestre [sal-mestre em execução] Criação de lacaio configuração Criação de dimensionamento automático grupo 0 lacaios iniciado; esperando 0 lacaios iniciado; esperando 0 lacaios iniciado; esperando 0 lacaios iniciado; esperando 2 lacaios iniciado; pronto Em espera 3 minutos para agrupamento para liquidação ..................Re-em execução sal estado superior Em espera para agrupamento inicialização. Isso vontade continuamente verificar para ver se o API para kubernetes é acessível. Isso pode loop para sempre se lá foi alguns não capturado erro durante iniciar para cima. Kubernetes agrupamento criado. agrupamento "aws_kubernetes" definir. usuário "aws_kubernetes" definir. contexto "aws_kubernetes" definir. trocado para contexto "aws_kubernetes". Escreveu configuração para aws_kubernetes para /Usuários/arungupta/.cubo/configuração Sanidade verificação agrupamento... Tentativa 1 para verificar Docker em nó @ 52.37.172.215 ...não de trabalho ainda Tentativa 2 para verificar Docker em nó @ 52.37.172.215 ...não de trabalho ainda Tentativa 3 para verificar Docker em nó @ 52.37.172.215 ...de trabalho Tentativa 1 para verificar Docker em nó @ 52.27.90.19 ...de trabalho Kubernetes agrupamento é em execução. O mestre é em execução em: https://52.34.244.195 O usuário nome e senha para uso é localizado em /Usuários/arungupta/.cubo/configuração. ... chamando validar-agrupamento Em espera para 2 pronto nós. 1 pronto nós, 2 registrado. Repetição de tentativas. Encontrado 2 nó(s). NOME RÓTULOS STATUS IDADE ip-172-20-0-92.us-oeste-2.compute.internal kubernetes.io/nome do host=ip-172-20-0-92.us-oeste-2.compute.internal Pronto 56s ip-172-20-0-93.us-oeste-2.compute.internal kubernetes.io/nome do host=ip-172-20-0-93.us-oeste-2.compute.internal Pronto 35s Validar saída: NOME STATUS MENSAGEM ERRO controlador-gerente Saudável ok nulo programador Saudável ok nulo etcd-0 Saudável {"saúde": "true" (verdadeiro)} nulo etcd-1 Saudável {"saúde": "true" (verdadeiro)} nulo Aglomerado validação bem-sucedido Feito, listagem agrupamento serviços: Kubernetes mestre é em execução em https://52.34.244.195 Elasticsearch é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging Heapster é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/heapster Kibana é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/kibana-logging KubeDNS é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/kube-dns KubeUI é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/kube-ui Grafana é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB é em execução em https://52.34.244.195/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb |
O console da Amazon mostra:
Três instâncias são criadas conforme mostrado - uma para o nó mestre e duas para os nós de trabalho. O nome de usuário e a senha do mestre do Kubernetes são armazenados em /Usuários/arungupta/.kube/config. Procure uma seção como:
|
1 2 3 4 5 6 |
- nome: aws_kubernetes usuário: cliente-certificado-dados: DADOS cliente-chave-dados: DADOS senha: 3FkxcAURLCWBXc9H nome de usuário: administrador |
Execute o contêiner do Docker no Kubernetes Cluster na Amazon
Agora que o cluster está em funcionamento, obtenha uma lista de todos os nós:
|
1 2 3 4 |
./kubernetes/agrupamento/kubectl.sh obter não NOME RÓTULOS STATUS IDADE ip-172-20-0-92.us-oeste-2.compute.internal kubernetes.io/nome do host=ip-172-20-0-92.us-oeste-2.compute.internal Pronto 18m ip-172-20-0-93.us-oeste-2.compute.internal kubernetes.io/nome do host=ip-172-20-0-93.us-oeste-2.compute.internal Pronto 18m |
Ele mostra dois nós de trabalho. Crie um novo pod do Couchbase:
|
1 2 |
./kubernetes/agrupamento/kubectl.sh executar couchbase --imagem=arungupta/couchbase controlador de replicação "couchbase" criado |
Observe como o nome da imagem pode ser especificado na CLI. Esse comando cria um controlador de replicação com um único pod. O pod usa arungupta/couchbase Imagem do Docker
que fornece um servidor Couchbase pré-configurado. Qualquer imagem do Docker pode ser especificada aqui. Obtenha todos os recursos RC:
|
1 2 3 |
./kubernetes/agrupamento/kubectl.sh obter rc CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE couchbase couchbase arungupta/couchbase executar=couchbase 1 12m |
Isso mostra o controlador de replicação que foi criado para você. Obtenha todos os pods:
|
1 2 3 |
./kubernetes/agrupamento/kubectl.sh obter po NOME PRONTO STATUS RESTARTS IDADE couchbase-kil4y 1/1 Em execução 0 12m |
A saída mostra o pod que é criado como parte do controlador de replicação. Obtenha mais detalhes sobre o Pod:
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
./kubernetes/agrupamento/kubectl.sh descrever po couchbase-kil4y Nome: couchbase-kil4y Namespace: padrão Imagem(s): arungupta/couchbase Nó: ip-172-20-0-93.us-oeste-2.compute.internal/172.20.0.93 Início Tempo: Quarta, 02 Mar 2016 10:25:47 -0800 Rótulos: executar=couchbase Status: Em execução Motivo: Mensagem: IP: 10.244.1.4 Replicação Controladores: couchbase (1/1 réplicas criado) Contêineres: couchbase: Contêineres ID: doca://1c33e4f28978a5169a5d166add7c763de59839ed1f12865f4643456efdc0c60e Imagem: arungupta/couchbase Imagem ID: doca://080e2e96b3fc22964f3dec079713cdf314e15942d6eb135395134d629e965062 QoS Nível: CPU: Estável Solicitações: CPU: 100m Estado: Em execução Iniciado: Quarta, 02 Mar 2016 10:26:18 -0800 Pronto: Verdadeiro Reiniciar Contagem: 0 Meio ambiente Variáveis: Condições: Tipo Status Pronto Verdadeiro Volumes: padrão-token-xuxn5: Tipo: Secreto (a segredo que deve preencher este volume) SecretName: padrão-token-xuxn5 Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Motivo Mensagem ───────── ──────── ───── ──── ───────────── ────── ─────── 13m 13m 1 {programador } Programado Com sucesso atribuído couchbase-kil4y para ip-172-20-0-93.us-oeste-2.compute.internal 13m 13m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} implicitamente necessário contêiner POD Puxado Contêineres imagem "gcr.io/google_containers/pause:0.8.0" já presente em máquina 13m 13m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} implicitamente necessário contêiner POD Criado Criado com doca id 3830f504a7b6 13m 13m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} implicitamente necessário contêiner POD Iniciado Iniciado com doca id 3830f504a7b6 13m 13m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} especificação.contêineres{couchbase} Puxar Puxar imagem "arungupta/couchbase" 12m 12m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} especificação.contêineres{couchbase} Puxado Com sucesso puxado imagem "arungupta/couchbase" 12m 12m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} especificação.contêineres{couchbase} Criado Criado com doca id 1c33e4f28978 12m 12m 1 {cubeta ip-172-20-0-93.us-oeste-2.compute.internal} especificação.contêineres{couchbase} Iniciado Iniciado com doca id 1c33e4f28978 |
Expor o pod no Kubernetes como serviço
Agora que nosso pod está em execução, como posso acessar o servidor Couchbase? Você precisa expô-lo fora do cluster do Kubernetes. O kubectl expose pega um pod, serviço ou controlador de replicação e o expõe como um serviço do Kubernetes. Vamos lá
expor o controlador de replicação criado anteriormente e expô-lo:
|
1 2 |
./kubernetes/agrupamento/kubectl.sh expor rc couchbase --alvo-porto=8091 --porto=8091 --tipo=Balanceador de carga serviço "couchbase" exposto |
Obtenha mais detalhes sobre o serviço:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
./kubernetes/agrupamento/kubectl.sh descrever serviço couchbase Nome: couchbase Namespace: padrão Rótulos: executar=couchbase Seletor: executar=couchbase Tipo: Balanceador de carga IP: 10.0.158.93 Balanceador de carga Ingresso: a44d3f016e0a411e5888f0206c9933da-1869988881.us-oeste-2.elb.amazonaws.com Porto: 8091/TCP NodePort: 32415/TCP Pontos finais: 10.244.1.4:8091 Sessão Afinidade: Nenhum Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Motivo Mensagem ───────── ──────── ───── ──── ───────────── ────── ─────── 7s 7s 1 {serviço-controlador } Criando o balanceador de carga Criação de carregar balanceador 5s 5s 1 {serviço-controlador } CriadoLoadBalancer Criado carregar balanceador |
O Balanceador de carga O atributo Ingress fornece o endereço do balanceador de carga que agora está acessível publicamente. Aguarde 3 minutos para que o balanceador de carga se estabilize. Acesse-o usando a porta 8091 e a página de login para
O Console da Web do Couchbase é exibido:

Digite as credenciais como "Administrator" e "password" para ver o console da Web:

Assim, você acabou de acessar seu pod fora do cluster do Kubernetes.
Encerrar o cluster do Kubernetes
Por fim, desligue o cluster usando cluster/kube-down.sh roteiro.
|
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
./kubernetes/agrupamento/cubo-para baixo.sh Trazendo para baixo agrupamento usando provedor: aws Exclusão ELBs em: vpc-7b46ac1f Em espera para ELBs para ser excluído Todos ELBs excluído Exclusão automático-dimensionamento grupo: kubernetes-lacaio-grupo Exclusão automático-dimensionamento lançamento configuração: kubernetes-lacaio-grupo Exclusão instâncias em VPC: vpc-7b46ac1f Em espera para instâncias para ser excluído Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-45077282 i-44077283 i-b71a6f70 Dormir para 3 segundos... Instâncias não ainda excluído: i-44077283 i-b71a6f70 Dormir para 3 segundos... Todos instâncias excluído Exclusão VPC: vpc-7b46ac1f Limpeza para cima segurança grupo: sg-308b3357 Limpeza para cima segurança grupo: sg-3b8b335c Limpeza para cima segurança grupo: sg-e3813984 Exclusão segurança grupo: sg-308b3357 Exclusão segurança grupo: sg-3b8b335c Exclusão segurança grupo: sg-e3813984 Feito |
Para uma limpeza completa, você ainda precisa excluir explicitamente o bucket do S3 onde os binários do Kubernetes estão armazenados.
Aproveite!

