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 contêiner do Docker.
A primeira parte (Couchbase no Kubernetes) explicou como iniciar o cluster do Kubernetes usando o Vagrant. A segunda parte (Kubernetes na Amazon) explicou como executar essa configuração no Amazon Web Services.
Esta terceira parte mostrará:
- Como configurar e iniciar o cluster do Kubernetes no Google Cloud
- 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 entrar em detalhes!
Primeiros passos com o Google Compute Engine fornecem instruções detalhadas sobre como configurar o Kubernetes no Google Cloud.
Download e configuração do Google Cloud SDK
É necessário um pouco de configuração se você nunca acessou o Google Cloud em sua máquina. Isso foi um pouco complicado e pode ser simplificado.
- Criar uma conta faturável em Google Cloud
- Instalar SDK do Google Cloud
- Configurar credenciais: gcloud auth login
- Crie um novo projeto do Google Cloud e dê um nome a ele
couchbase-em-kubernetes
- Defina o projeto:
gcloud config set project couchbase-on-kubernetes
- Definir zona padrão:
gcloud config set compute/zone us-central1-a
- Criar uma instância:
gcloud compute instances create example-instance --machine-type n1-standard-1 --image debian-8
- SSH na instância:
gcloud compute ssh exemplo-instância
- Excluir a instância:
gcloud compute instances delete example-instance
Configurar o cluster do Kubernetes no Google Cloud
O cluster do Kubernetes pode ser criado no Google Cloud como:
1 2 |
definir PROVEDOR DE KUBERNETES=gce ./agrupamento/cubo-para cima.sh |
Certifique-se de que PROVEDOR DE KUBERNETES
é definido como gce
ou não definir nada. Por padrão, isso provisiona um cluster Kubernetes de 4 nós com um mestre. Isso significa que são criadas 5 máquinas virtuais.
Se você baixou o Kubernetes de github.com/kubernetes/kubernetes/releasestodos os valores podem ser alterados em cluster/aws/config-default.sh
.
Iniciar o Kubernetes no Google Cloud mostra o seguinte registro. O SDK do Google Cloud estava se comportando de forma um pouco estranha, mas adotar os padrões parece funcionar:
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 |
./kubernetes/agrupamento/cubo-para cima.sh ... Início agrupamento usando provedor: gce ... chamando verificar-pré-requisitos Você ter especificado individual componentes para atualização. Se você são tentando para instalar novo componentes, uso: $ nuvem componentes instalar alfa Fazer você querer para executar instalar em vez disso (y/N)? Seu atual Nuvem SDK versão é: 99.0.0 Instalação componentes de versão: 99.0.0 ┌──────────────────────────────────────────────┐ │ Esses componentes vontade ser instalado. │ ├───────────────────────┬────────────┬─────────┤ │ Nome │ Versão │ Tamanho │ ├───────────────────────┼────────────┼─────────┤ │ nuvem Alfa Comandos │ 2016.01.12 │ < 1 MiB │ └───────────────────────┴────────────┴─────────┘ Para o mais recente completo liberação notas, por favor visita: https://cloud.google.com/sdk/release_notes Fazer você querer para continuar (Y/n)? ╔════════════════════════════════════════════════════════════╗ ╠═ Criação de atualização preparação área ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Instalação: nuvem Alfa Comandos ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Criação de backup e ativação novo instalação ═╣ ╚════════════════════════════════════════════════════════════╝ Desempenho postagem processamento etapas...feito. Atualização feito! Você ter especificado individual componentes para atualização. Se você são tentando para instalar novo componentes, uso: $ nuvem componentes instalar beta Fazer você querer para executar instalar em vez disso (y/N)? Seu atual Nuvem SDK versão é: 99.0.0 Instalação componentes de versão: 99.0.0 ┌─────────────────────────────────────────────┐ │ Esses componentes vontade ser instalado. │ ├──────────────────────┬────────────┬─────────┤ │ Nome │ Versão │ Tamanho │ ├──────────────────────┼────────────┼─────────┤ │ nuvem Beta Comandos │ 2016.01.12 │ < 1 MiB │ └──────────────────────┴────────────┴─────────┘ Para o mais recente completo liberação notas, por favor visita: https://cloud.google.com/sdk/release_notes Fazer você querer para continuar (Y/n)? ╔════════════════════════════════════════════════════════════╗ ╠═ Criação de atualização preparação área ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Instalação: nuvem Beta Comandos ═╣ ╠════════════════════════════════════════════════════════════╣ ╠═ Criação de backup e ativação novo instalação ═╣ ╚════════════════════════════════════════════════════════════╝ Desempenho postagem processamento etapas...feito. Atualização feito! Todos componentes são para cima para data. ... chamando cubo-para cima Seu ativo configuração é: [padrão] Projeto: couchbase-em-kubernetes Zona: nós-central1-b Criação de gs://kubernetes-staging-9479406781 Criação de gs://kubernetes-staging-9479406781/... +++ Preparação servidor alcatrão para Google Armazenamento: gs://kubernetes-staging-9479406781/devel +++ kubernetes-servidor-linux-amd64.alcatrão.gz carregado (sha1 = 1ff42f7c31837851d919a66fc07f34b9dbdacf28) +++ kubernetes-sal.alcatrão.gz carregado (sha1 = f307380ad6af7dabcf881b132146fa775c18dca8) Procurando para já existente recursos Início mestre e configurando firewalls Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/disks/kubernetes-master-pd]. NOME ZONA SIZE_GB TIPO STATUS kubernetes-mestre-pd nós-central1-b 20 pd-ssd PRONTO Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/regions/us-central1/addresses/kubernetes-master-ip]. Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/default-default-ssh]. Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-master-https]. NOME REDE SRC_RANGES REGRAS SRC_TAGS TARGET_TAGS padrão-padrão-ssh padrão 0.0.0.0/0 tcp:22 NOME REDE SRC_RANGES REGRAS SRC_TAGS TARGET_TAGS kubernetes-mestre-https padrão 0.0.0.0/0 tcp:443 kubernetes-mestre +++ Registro em log usando Fluentd para gcp ./kubernetes/agrupamento/../agrupamento/../agrupamento/gce/util.sh: linha 434: @: não vinculado variável ./kubernetes/agrupamento/../agrupamento/../agrupamento/gce/util.sh: linha 434: @: não vinculado variável ./kubernetes/agrupamento/../agrupamento/../agrupamento/gce/util.sh: linha 434: @: não vinculado variável ./kubernetes/agrupamento/../agrupamento/../agrupamento/gce/util.sh: linha 434: @: não vinculado variável Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/default-default-internal]. NOME REDE SRC_RANGES REGRAS SRC_TAGS TARGET_TAGS padrão-padrão-interno padrão 10.0.0.0/8 tcp:1-65535,udp:1-65535,icmp Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-minion-all]. NOME REDE SRC_RANGES REGRAS SRC_TAGS TARGET_TAGS kubernetes-lacaio-todos padrão 10.244.0.0/16 tcp,udp,icmp,esp,ah,sctp kubernetes-lacaio Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instances/kubernetes-master]. NOME ZONA TIPO DE MÁQUINA PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS kubernetes-mestre nós-central1-b n1-padrão-1 10.128.0.2 104.197.213.249 CORRIDA Criação de lacaios. ./kubernetes/agrupamento/../agrupamento/../agrupamento/gce/util.sh: linha 434: @: não vinculado variável ./kubernetes/agrupamento/../agrupamento/../agrupamento/gce/util.sh: linha 434: @: não vinculado variável Tentativa 1 para criar kubernetes-lacaio-modelo AVISO: Você ter selecionado a disco tamanho de sob [200 GB]. Isso pode resultado em ruim I/O desempenho. Para mais informações, ver: https://developers.google.com/compute/docs/disks/persistent-disks#pdperformance. Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/instanceTemplates/kubernetes-minion-template]. NOME TIPO DE MÁQUINA PREEMPTIBLE CREATION_TIMESTAMP kubernetes-lacaio-modelo n1-padrão-1 2016-03-03T14:01:14.322-08:00 Criado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instanceGroupManagers/kubernetes-minion-group]. NOME ZONA NOME_DA_INSTÂNCIA_BASE TAMANHO TAMANHO DO ALVO INSTANCE_TEMPLATE AUTOSCALADO kubernetes-lacaio-grupo nós-central1-b kubernetes-lacaio 4 kubernetes-lacaio-modelo Em espera para grupo para tornar-se estável, atual operações: criando: 4 Em espera para grupo para tornar-se estável, atual operações: criando: 4 Em espera para grupo para tornar-se estável, atual operações: criando: 4 Em espera para grupo para tornar-se estável, atual operações: criando: 4 Em espera para grupo para tornar-se estável, atual operações: criando: 4 Em espera para grupo para tornar-se estável, atual operações: criando: 4 Em espera para grupo para tornar-se estável, atual operações: criando: 3 Grupo é estável NOMES DE MINIONS=kubernetes-lacaio-1hmm kubernetes-lacaio-3x1d kubernetes-lacaio-h1ov kubernetes-lacaio-nshn Usando mestre: kubernetes-mestre (externo IP: 104.197.213.249) 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 "couchbase-on-kubernetes_kubernetes" definir. usuário "couchbase-on-kubernetes_kubernetes" definir. contexto "couchbase-on-kubernetes_kubernetes" definir. trocado para contexto "couchbase-on-kubernetes_kubernetes". usuário "couchbase-on-kubernetes_kubernetes-basic-auth" definir. Escreveu configuração para couchbase-em-kubernetes_kubernetes para /Usuários/arungupta/.cubo/configuração Kubernetes agrupamento é em execução. O mestre é em execução em: https://104.197.213.249 O usuário nome e senha para uso é localizado em /Usuários/arungupta/.cubo/configuração. ... chamando validar-agrupamento Em espera para 4 pronto nós. 0 pronto nós, 0 registrado. Repetição de tentativas. Em espera para 4 pronto nós. 0 pronto nós, 2 registrado. Repetição de tentativas. Em espera para 4 pronto nós. 0 pronto nós, 3 registrado. Repetição de tentativas. Em espera para 4 pronto nós. 0 pronto nós, 4 registrado. Repetição de tentativas. Em espera para 4 pronto nós. 3 pronto nós, 4 registrado. Repetição de tentativas. Em espera para 4 pronto nós. 3 pronto nós, 4 registrado. Repetição de tentativas. Encontrado 4 nó(s). NOME RÓTULOS STATUS IDADE kubernetes-lacaio-1hmm kubernetes.io/nome do host=kubernetes-lacaio-1hmm Pronto 1m kubernetes-lacaio-3x1d kubernetes.io/nome do host=kubernetes-lacaio-3x1d Pronto 52s kubernetes-lacaio-h1ov kubernetes.io/nome do host=kubernetes-lacaio-h1ov Pronto 1m kubernetes-lacaio-nshn kubernetes.io/nome do host=kubernetes-lacaio-nshn Pronto 1m 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://104.197.213.249 GLBCDefaultBackend é em execução em https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/default-http-backend Heapster é em execução em https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/heapster KubeDNS é em execução em https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/kube-dns KubeUI é em execução em https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/kube-ui Grafana é em execução em https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB é em execução em https://104.197.213.249/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb |
Há algumas variáveis não vinculadas e uma mensagem de AVISO, mas isso não parece prejudicar o script. O Google Cloud Console mostra:
Cinco instâncias são criadas conforme mostrado - uma para o nó mestre e quatro para os nós de trabalho.
Executar o contêiner do Docker no cluster do Kubernetes no Google Cloud
Agora que o cluster está em funcionamento, obtenha uma lista de todos os nós:
1 2 3 4 5 6 |
./kubernetes/agrupamento/kubectl.sh obter não NOME RÓTULOS STATUS IDADE kubernetes-lacaio-1hmm kubernetes.io/nome do host=kubernetes-lacaio-1hmm Pronto 47m kubernetes-lacaio-3x1d kubernetes.io/nome do host=kubernetes-lacaio-3x1d Pronto 46m kubernetes-lacaio-h1ov kubernetes.io/nome do host=kubernetes-lacaio-h1ov Pronto 47m kubernetes-lacaio-nshn kubernetes.io/nome do host=kubernetes-lacaio-nshn Pronto 47m |
Ele mostra quatro nós de trabalho. Crie um 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 do 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 48s |
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-s8v9r 1/1 Em execução 0 1m |
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-s8v9r Nome: couchbase-s8v9r Namespace: padrão Imagem(s): arungupta/couchbase Nó: kubernetes-lacaio-3x1d/10.128.0.3 Início Tempo: Assim, 03 Mar 2016 14:53:36 -0800 Rótulos: executar=couchbase Status: Em execução Motivo: Mensagem: IP: 10.244.3.3 Replicação Controladores: couchbase (1/1 réplicas criado) Contêineres: couchbase: Contêineres ID: doca://601ee2e4c822814c3969a241e37c97bf4d0d209f952f24707ab308192d289098 Imagem: arungupta/couchbase Imagem ID: doca://298618e67e495c2535abd17b60241565e456a4c9ee96c923ecf844a9dbcccced QoS Nível: CPU: Estável Solicitações: CPU: 100m Estado: Em execução Iniciado: Assim, 03 Mar 2016 14:54:46 -0800 Pronto: Verdadeiro Reiniciar Contagem: 0 Meio ambiente Variáveis: Condições: Tipo Status Pronto Verdadeiro Volumes: padrão-token-frsd7: Tipo: Secreto (a segredo que deve preencher este volume) SecretName: padrão-token-frsd7 Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Motivo Mensagem ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 1m 1 {cubeta kubernetes-lacaio-3x1d} implicitamente necessário contêiner POD Puxado Contêineres imagem "gcr.io/google_containers/pause:0.8.0" já presente em máquina 1m 1m 1 {programador } Programado Com sucesso atribuído couchbase-s8v9r para kubernetes-lacaio-3x1d 1m 1m 1 {cubeta kubernetes-lacaio-3x1d} implicitamente necessário contêiner POD Criado Criado com doca id c1de9da87f1e 1m 1m 1 {cubeta kubernetes-lacaio-3x1d} especificação.contêineres{couchbase} Puxar Puxar imagem "arungupta/couchbase" 1m 1m 1 {cubeta kubernetes-lacaio-3x1d} implicitamente necessário contêiner POD Iniciado Iniciado com doca id c1de9da87f1e 29s 29s 1 {cubeta kubernetes-lacaio-3x1d} especificação.contêineres{couchbase} Puxado Com sucesso puxado imagem "arungupta/couchbase" 29s 29s 1 {cubeta kubernetes-lacaio-3x1d} especificação.contêineres{couchbase} Criado Criado com doca id 601ee2e4c822 29s 29s 1 {cubeta kubernetes-lacaio-3x1d} especificação.contêineres{couchbase} Iniciado Iniciado com doca id 601ee2e4c822 |
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 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 Service:
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.37.150 Balanceador de carga Ingresso: 104.197.118.35 Porto: 8091/TCP NodePort: 30808/TCP Pontos finais: 10.244.3.3:8091 Sessão Afinidade: Nenhum Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Motivo Mensagem ───────── ──────── ───── ──── ───────────── ────── ─────── 2m 2m 1 {serviço-controlador } Criando o balanceador de carga Criação de carregar balanceador 1m 1m 1 {serviço-controlador } CriadoLoadBalancer Criado carregar balanceador |
O Ingresso do balanceador de carga
O atributo fornece o endereço IP 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 do Console da Web do Couchbase será exibida:
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 |
./kubernetes/agrupamento/cubo-para baixo.sh Trazendo para baixo agrupamento usando provedor: gce Você ter especificado individual componentes para atualização. Se você são tentando para instalar novo componentes, uso: $ nuvem componentes instalar alfa Fazer você querer para executar instalar em vez disso (y/N)? Todos componentes são para cima para data. Você ter especificado individual componentes para atualização. Se você são tentando para instalar novo componentes, uso: $ nuvem componentes instalar beta Fazer você querer para executar instalar em vez disso (y/N)? Todos componentes são para cima para data. Todos componentes são para cima para data. Seu ativo configuração é: [padrão] Projeto: couchbase-em-kubernetes Zona: nós-central1-b Trazendo para baixo agrupamento Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instanceGroupManagers/kubernetes-minion-group]. Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/instanceTemplates/kubernetes-minion-template]. Atualizado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instances/kubernetes-master]. Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/zones/us-central1-b/instances/kubernetes-master]. Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-master-https]. Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/firewalls/kubernetes-minion-all]. Exclusão rotas kubernetes-ad3beb92-e18b-11e5-8e71-42010a800002 Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/global/routes/kubernetes-ad3beb92-e18b-11e5-8e71-42010a800002]. Eliminado [https://www.googleapis.com/compute/v1/projects/couchbase-on-kubernetes/regions/us-central1/addresses/kubernetes-master-ip]. propriedade "clusters.couchbase-on-kubernetes_kubernetes" não definido. propriedade "users.couchbase-on-kubernetes_kubernetes" não definido. propriedade "users.couchbase-on-kubernetes_kubernetes-basic-auth" não definido. propriedade "contexts.couchbase-on-kubernetes_kubernetes" não definido. propriedade "current-context" (contexto atual) não definido. Liberado configuração para couchbase-em-kubernetes_kubernetes de /Usuários/arungupta/.cubo/configuração Feito |
Aproveite!