O Kubernetes 1.4 foi lançado no início desta semana. Leia o artigo anúncio no blog e REGISTRO DE MUDANÇAS.
Há vários recursos novos nesta versão, mas os principais que me entusiasmam são:
- Instale o Kubernetes usando
kubeadm
comando. Isso é um acréscimo ao mecanismo usual de download do site https://github.com/kubernetes/kubernetes/releases. O comando
kubeadm init
eunião do kubeadm
Os comandos são muito semelhantes ainicialização do enxame de docas
ejunção de enxame de docas
para Modo Docker Swarm. - Conjuntos de réplicas federadas
- O ScheduledJob permite executar trabalhos em lote em intervalos regulares.
- Restringir pods a um nó e afinidade e antiafinidade dos pods
- Programação de prioridades de vagens
- Boa aparência Painel de controle do Kubernetes (mais sobre isso mais tarde)
Este blog mostrará:
- Criar um cluster Kubernetes usando o Amazon Web Services
- Criar um serviço Couchbase
- Executar um aplicativo Spring Boot que armazena um documento JSON no Couchbase
Todos os arquivos de descrição de recursos deste blog estão em github.com/arun-gupta/kubernetes-java-sample/tree/master/maven.
Iniciar o cluster do Kubernetes
Baixar binário github.com/kubernetes/kubernetes/releases/download/v1.4.0/kubernetes.tar.gz e extrair Incluir kubernetes/cluster
em PATH Iniciar
um cluster Kubernetes de 2 nós:
1 |
NUM_NODES=2 TAMANHO DO NÓ=m3.médio PROVEDOR DE KUBERNETES=aws cubo-para cima.sh |
O registro será mostrado como:
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 |
... Início agrupamento em nós-oeste-2a usando provedor aws ... chamando verificar-pré-requisitos ... chamando cubo-para cima Início agrupamento usando os distribuição: jessie Carregamento para Amazon S3 +++ Preparação servidor alcatrão para S3 Armazenamento: kubernetes-preparação-0eaf81fbc51209dd47c13b6d8b424149/desenvolvimento carregar: ../../../../../var/pastas/81/ttv4n16x7p390cttrm_675y00000gn/T/kubernetes.XXXXXX.bCmvLbtK/s3/bootstrap-script para s3://kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/bootstrap-script Carregado servidor alcatrão: URL_BINÁRIO_TAR DO SERVIDOR: https://s3.amazonaws.com/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/kubernetes-server-linux-amd64.tar.gz SALT_TAR_URL: https://s3.amazonaws.com/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/kubernetes-salt.tar.gz BOOTSTRAP_SCRIPT_URL: https://s3.amazonaws.com/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/bootstrap-script PERFIL DE INSTÂNCIA arn:aws:iam::598307997273:instância-perfil/kubernetes-mestre 2016-07-29T15:13:35Z AIPAJF3XKLNKOXOTQOCT4 kubernetes-mestre / PAPÉIS arn:aws:iam::598307997273:função/kubernetes-mestre 2016-07-29T15:13:33Z / AROAI3Q2KFBD5PCKRXCRM kubernetes-mestre DOCUMENTO POLÍTICO DA ASSUMEROLE 2012-10-17 DECLARAÇÃO pontos:AssumeRole Permitir PRINCIPAL ec2.amazonaws.com PERFIL DE INSTÂNCIA arn:aws:iam::598307997273:instância-perfil/kubernetes-lacaio 2016-07-29T15:13:39Z AIPAIYSH5DJA4UPQIP4BE kubernetes-lacaio / PAPÉIS arn:aws:iam::598307997273:função/kubernetes-lacaio 2016-07-29T15:13:37Z / AROAIQ57MPQYSHRPQCT2Q kubernetes-lacaio DOCUMENTO POLÍTICO DA ASSUMEROLE 2012-10-17 DECLARAÇÃO pontos:AssumeRole Permitir PRINCIPAL ec2.amazonaws.com Usando SSH chave com (AWS) impressão digital: SHA256:dX/5wpWuUxYar2NFuGwiZuRiydiZCyx4DGoZ5/jL/j8 Criação de vpc. Adição etiqueta para vpc-6b5b4b0f: Nome=kubernetes-vpc Adição etiqueta para vpc-6b5b4b0f: KubernetesCluster=kubernetes Usando VPC vpc-6b5b4b0f Adição etiqueta para dopt-8fe770eb: Nome=kubernetes-dhcp-opção-definir Adição etiqueta para dopt-8fe770eb: KubernetesCluster=kubernetes Usando DHCP opção definir dopt-8fe770eb Criação de sub-rede. Adição etiqueta para sub-rede-623a0206: KubernetesCluster=kubernetes Usando sub-rede sub-rede-623a0206 Criação de Internet Gateway. Usando Internet Gateway igw-251eab41 Associação rota tabela. Criação de rota tabela Adição etiqueta para rtb-d43cedb3: KubernetesCluster=kubernetes Associação rota tabela rtb-d43cedb3 para sub-rede sub-rede-623a0206 Adição rota para rota tabela rtb-d43cedb3 Usando Rota Tabela rtb-d43cedb3 Criação de mestre segurança grupo. Criação de segurança grupo kubernetes-mestre-kubernetes. Adição etiqueta para sg-d20ca0ab: KubernetesCluster=kubernetes Criação de lacaio segurança grupo. Criação de segurança grupo kubernetes-lacaio-kubernetes. Adição etiqueta para sg-cd0ca0b4: KubernetesCluster=kubernetes Usando mestre segurança grupo: kubernetes-mestre-kubernetes sg-d20ca0ab Usando lacaio segurança grupo: kubernetes-lacaio-kubernetes sg-cd0ca0b4 Criação de mestre disco: tamanho 20 GB, tipo gp2 Adição etiqueta para vol-99a30b11: Nome=kubernetes-mestre-pd Adição etiqueta para vol-99a30b11: KubernetesCluster=kubernetes Alocados Elástico IP para mestre: 52.40.9.27 Adição etiqueta para vol-99a30b11: kubernetes.io/mestre-ip=52.40.9.27 Geração de certificados para alternativo-nomes: IP:52.40.9.27,IP:172.20.0.9,IP:10.0.0.1,DNS:kubernetes,DNS:kubernetes.padrão,DNS:kubernetes.padrão.serviço,DNS:kubernetes.padrão.serviço.agrupamento.local,DNS:kubernetes-mestre Início Mestre Adição etiqueta para i-f95bdae1: Nome=kubernetes-mestre Adição etiqueta para i-f95bdae1: Função=kubernetes-mestre Adição etiqueta para i-f95bdae1: KubernetesCluster=kubernetes Em espera para mestre para ser pronto Tentativa 1 para verificar para mestre nodeWaiting para instância i-f95bdae1 para ser em execução (atualmente pendente) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser em execução (atualmente pendente) Dormir para 3 segundos... [mestre em execução] Fixação IP 52.40.9.27 para instância i-f95bdae1 Fixação persistente dados volume (vol-99a30b11) para mestre 2016-09-29T05:14:28.098Z /dev/sdb i-f95bdae1 fixação vol-99a30b11 agrupamento "aws_kubernetes" definir. usuário "aws_kubernetes" definir. contexto "aws_kubernetes" definir. trocado para contexto "aws_kubernetes". usuário "aws_kubernetes-basic-auth" definir. Escreveu configuração para aws_kubernetes para /Usuários/arungupta/.cubo/configuraçã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 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. Sanidade verificação agrupamento... Tentativa 1 para verificar Docker em nó @ 54.70.225.33 ...de trabalho Tentativa 1 para verificar Docker em nó @ 54.71.36.48 ...de trabalho Kubernetes agrupamento é em execução. O mestre é em execução em: https://52.40.9.27 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. 0 pronto nós, 0 registrado. Repetição de tentativas. Em espera para 2 pronto nós. 0 pronto nós, 0 registrado. Repetição de tentativas. Em espera para 2 pronto nós. 0 pronto nós, 0 registrado. Repetição de tentativas. Em espera para 2 pronto nós. 0 pronto nós, 2 registrado. Repetição de tentativas. Em espera para 2 pronto nós. 0 pronto nós, 2 registrado. Repetição de tentativas. Encontrado 2 nó(s). NOME STATUS IDADE ip-172-20-0-111.us-oeste-2.compute.internal Pronto 39s ip-172-20-0-112.us-oeste-2.compute.internal Pronto 42s Validar saída: NOME STATUS MENSAGEM ERRO programador Saudável ok controlador-gerente Saudável ok etcd-0 Saudável {"saúde": "true" (verdadeiro)} etcd-1 Saudável {"saúde": "true" (verdadeiro)} Aglomerado validação bem-sucedido Feito, listagem agrupamento serviços: Kubernetes mestre é em execução em https://52.40.9.27 Elasticsearch é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging Heapster é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/heapster Kibana é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/kibana-logging KubeDNS é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/kube-dns kubernetes-painel de controle é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard Grafana é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB é em execução em https://52.40.9.27/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb Para mais depurar e diagnosticar agrupamento problemas, uso 'kubectl cluster-info dump'. |
Isso mostra que o cluster do Kubernetes foi iniciado com êxito.
Implantar o serviço Couchbase
Crie o serviço Couchbase e o controlador de replicação:
1 2 3 |
kubectl.sh criar -f couchbase-serviço.yml serviço "couchbase-service" criado controlador de replicação "couchbase-rc" criado |
O arquivo de configuração está em github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/couchbase-service.yml. Isso cria um serviço Couchbase e
o controlador de replicação de apoio. O nome do serviço é serviço couchbase
. Isso será usado posteriormente pelo aplicativo Spring Boot para se comunicar com o banco de dados. Verifique o status dos pods:
1 2 3 4 5 |
kubectl.sh obter -w cápsulas NOME PRONTO STATUS RESTARTS IDADE couchbase-rc-gu9gl 0/1 ContainerCreating (Criação de contêineres) 0 6s NOME PRONTO STATUS RESTARTS IDADE couchbase-rc-gu9gl 1/1 Em execução 0 2m |
Observe como o status do pod muda de ContainerCreating para Running. A imagem é baixada e iniciada nesse meio tempo.
Executar o aplicativo Spring Boot
Execute o aplicativo:
1 2 |
kubectl.sh criar -f bonito-couchbase.yml cápsula "bootiful-couchbase" criado |
O arquivo de configuração está em github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/bootiful-couchbase.yml. Neste serviço,
COUCHBASE_URI
o valor da variável de ambiente é definido como serviço couchbase
. Esse é o nome do serviço criado anteriormente. A imagem do Docker usada para esse serviço é arungupta/bootiful-couchbase
e é criado usando
fabric8-maven-plugin conforme mostrado em github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/webapp/pom.xml#L57-L68.
Especificamente, o comando para a imagem do Docker é:
1 |
java -Dspring.couchbase.bootstrap-anfitriões=$COUCHBASE_URI -frasco /mentor/${projeto.artifactId}.frasco |
Isso garante que COUCHBASE_URI
está substituindo a variável de ambiente spring.couchbase.bootstrap-hosts
conforme definido em application.properties do aplicativo Spring Boot. Obtenha os registros:
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 |
kubectl.sh registros -f bonito-couchbase . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.0.RELEASE) 2016-09-29 05:37:29.227 INFO 5 --- [ main] org.example.webapp.Application : Iniciando o aplicativo v1.0-SNAPSHOT no bootiful-couchbase com PID 5 (/maven/bootiful-couchbase.jar iniciado pelo root em /) 2016-09-29 05:37:29.259 INFO 5 --- [ main] org.example.webapp.Application : Nenhum perfil ativo definido, voltando aos perfis padrão: default 2016-09-29 05:37:29.696 INFO 5 --- [ main] s.c.a.AnnotationConfigApplicationContext : Atualizando org.springframework.context.annotation.AnnotationConfigApplicationContext@4ccabbaa: data de inicialização [Thu Sep 29 05:37:29 UTC 2016]; raiz da hierarquia de contexto 2016-09-29 05:37:34.375 INFO 5 --- [ main] c.c.client.core.env.CoreEnvironment : ioPoolSize is less than 3 (1), setting to: 3 2016-09-29 05:37:34.376 INFO 5 --- [ main] c.c.client.core.env.CoreEnvironment : computationPoolSize is less than 3 (1), setting to: 3 2016-09-29 05:37:35.026 INFO 5 --- [ main] com.couchbase.client.core.CouchbaseCore : CouchbaseEnvironment: {sslEnabled=false, sslKeystoreFile='nulo', sslKeystorePassword='nulo', queryEnabled=falso, queryPort=8093, bootstrapHttpEnabled=verdadeiro, bootstrapCarrierEnabled=verdadeiro, bootstrapHttpDirectPort=8091, bootstrapHttpSslPort=18091, bootstrapCarrierDirectPort=11210, bootstrapCarrierSslPort=11207, ioPoolSize=3, computationPoolSize=3, responseBufferSize=16384, requestBufferSize=16384, kvServiceEndpoints=1, viewServiceEndpoints=1, queryServiceEndpoints=1, searchServiceEndpoints=1, ioPool=NioEventLoopGroup, coreScheduler=Agendador principal, eventBus=DefaultEventBus, packageNameAndVersion (nome do pacote e versão)=couchbase-java-cliente/2.2.8 (git: 2.2.8, núcleo: 1.2.9), dcpEnabled=falso, retryStrategy=BestEffort, maxRequestLifetime=75000, retryDelay=ExponentialDelay (Atraso Exponencial){crescerPor 1.0 MICROSSEGUNDOS, poderes de 2; inferior=100, superior=100000}, reconnectDelay=ExponentialDelay (Atraso Exponencial){crescerPor 1.0 MILISSEGUNDOS, poderes de 2; inferior=32, superior=4096}, observeIntervalDelay=ExponentialDelay (Atraso Exponencial){crescerPor 1.0 MICROSSEGUNDOS, poderes de 2; inferior=10, superior=100000}, keepAliveInterval=30000, autoreleaseAfter=2000, bufferPoolingEnabled=verdadeiro, tcpNodelayEnabled=verdadeiro, mutationTokensEnabled=falso, socketConnectTimeout=1000, dcpConnectionBufferSize=20971520, dcpConnectionBufferAckThreshold=0.2, dcpConnectionName=dcp/núcleo-io, callbacksOnIoPool=falso, tempo limite de consulta=7500, viewTimeout=7500, kvTimeout=2500, connectTimeout=5000, tempo limite de desconexão=25000, dnsSrvEnabled=falso} 2016-09-29 05:37:36.063 INFORMAÇÕES 5 --- [ cb-io-1-1] com.couchbase.cliente.núcleo.nó.Nó : Conectado para Nó couchbase-serviço 2016-09-29 05:37:36.256 INFORMAÇÕES 5 --- [ cb-io-1-1] com.couchbase.cliente.núcleo.nó.Nó : Desconectado de Nó couchbase-serviço 2016-09-29 05:37:37.727 INFORMAÇÕES 5 --- [ cb-io-1-2] com.couchbase.cliente.núcleo.nó.Nó : Conectado para Nó couchbase-serviço 2016-09-29 05:37:38.316 INFORMAÇÕES 5 --- [-cálculos-3] c.c.c.núcleo.configuração.Provedor de configuração : Aberto balde livros 2016-09-29 05:37:40.655 INFORMAÇÕES 5 --- [ principal] o.s.j.e.a.Exportador de AnotaçãoMBean : Registro feijões para JMX exposição em inicialização Livro{isbn=978-1-4919-1889-0, nome=Minecraft Modificação com Forja, custo=29.99} 2016-09-29 05:37:41.497 INFORMAÇÕES 5 --- [ principal] org.exemplo.aplicativo da web.Aplicativo : Iniciado Aplicativo em 14.64 segundos (JVM em execução para 16.631) 2016-09-29 05:37:41.514 INFORMAÇÕES 5 --- [ Tópico-5] s.c.a.AnnotationConfigApplicationContext : Fechamento org.estrutura de mola.contexto.anotação.AnnotationConfigApplicationContext@4ccabbaa: inicialização data [Assim Setembro 29 05:37:29 UTC 2016]; raiz de contexto hierarquia 2016-09-29 05:37:41.528 INFORMAÇÕES 5 --- [ Tópico-5] o.s.j.e.a.Exportador de AnotaçãoMBean : Cancelamento de registro JMX-exposto feijões em desligamento 2016-09-29 05:37:41.577 INFORMAÇÕES 5 --- [ cb-io-1-2] com.couchbase.cliente.núcleo.nó.Nó : Desconectado de Nó couchbase-serviço 2016-09-29 05:37:41.578 INFORMAÇÕES 5 --- [ Tópico-5] c.c.c.núcleo.configuração.Provedor de configuração : Fechado balde livros |
A principal instrução de saída a ser observada é
1 |
Livro{isbn=978-1-4919-1889-0, nome=Minecraft Modificação com Forja, custo=29.99} |
Isso indica que o documento JSON foi inserido (inserido ou atualizado) no banco de dados do Couchbase.
Painel de controle do Kubernetes
Painel de controle do Kubernetes parece mais abrangente e afirma ter 90% paridade com a CLI. Use Visualização da configuração do kubectl.sh
para visualizar as informações de configuração sobre o cluster. O resultado é semelhante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Versão da API: v1 agrupamentos: - agrupamento: certificado-autoridade-dados: REDUZIDO servidor: https://52.40.9.27 nome: aws_kubernetes contextos: - contexto: agrupamento: aws_kubernetes usuário: aws_kubernetes nome: aws_kubernetes atual-contexto: aws_kubernetes gentil: Configuração preferências: {} usuários: - nome: aws_kubernetes usuário: cliente-certificado-dados: REDUZIDO cliente-chave-dados: REDUZIDO token: 3GuTCLvFnINHed9dWICICidlrSv8C0kg - nome: aws_kubernetes-básico-autenticação usuário: senha: 8pxC121Oj7kN0nCa nome de usuário: administrador |
O clusters.cluster.server
mostra a localização do mestre do Kubernetes. O valor da propriedade usuários
mostram dois usuários que podem ser usados para acessar o painel. O segundo usa autenticação básica e, portanto, copia a propriedade
nome de usuário
e senha
valor da propriedade. Em nosso caso, a interface do usuário do painel pode ser acessada em https://52.40.9.27/ui.
Todos os recursos do Kubernetes podem ser facilmente visualizados nesse painel sofisticado.
Encerrar o cluster do Kubernetes
Por fim, desligue o cluster do Kubernetes:
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 |
cubo-para baixo.sh Trazendo para baixo agrupamento usando provedor: aws Exclusão instâncias em VPC: vpc-6b5b4b0f Exclusão automático-dimensionamento grupo: kubernetes-lacaio-grupo-nós-oeste-2a Exclusão automático-dimensionamento lançamento configuração: kubernetes-lacaio-grupo-nós-oeste-2a Exclusão automático-dimensionamento grupo: kubernetes-lacaio-grupo-nós-oeste-2a Em espera para instâncias para ser excluído Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-f95bdae1 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Todos instâncias excluído Liberação Elástico IP: 52.40.9.27 Exclusão volume vol-99a30b11 Limpeza para cima recursos em VPC: vpc-6b5b4b0f Limpeza para cima segurança grupo: sg-cd0ca0b4 Limpeza para cima segurança grupo: sg-d20ca0ab Exclusão segurança grupo: sg-cd0ca0b4 Exclusão segurança grupo: sg-d20ca0ab Exclusão VPC: vpc-6b5b4b0f Feito |
https://www.couchbase.com/products/cloud/kubernetes fornecem mais detalhes sobre a execução do Couchbase usando diferentes estruturas de orquestração. Outras referências:
- Fóruns do Couchbase ou StackOverflow
- Siga-nos em @couchbasedev ou @couchbase
- Leia mais sobre Servidor Couchbase