Este blog mostrará como criar contêineres com estado no Kubernetes usando o Amazon EBS. O Couchbase Server é um contêiner com estado. Isso significa que o estado do contêiner precisa ser carregado com ele. No Kubernetes, a menor unidade atômica de execução
um contêiner é um pod. Portanto, um contêiner do Couchbase Server será executado como um pod. E, por padrão, todos os dados armazenados no Couchbase Server são armazenados no mesmo host.
Esse número é explicado originalmente em Cluster do Kubernetes na Amazon e exposição do serviço Couchbase. Além disso, essa figura mostra o armazenamento local do host.
Os pods são efêmeros e podem ser reiniciados em um host diferente. A Volume do Kubernetes sobrevive a todos os contêineres que são executados no pod, e os dados são preservados durante as reinicializações do contêiner. No entanto
o volume deixará de existir quando um pod deixar de existir. Isso é resolvido pelos Volumes Persistentes, que fornecem armazenamento persistente e com escopo de cluster para aplicativos que exigem dados de longa duração.
- Provisão: O administrador provisiona um armazenamento em rede no cluster, como volumes do AWS ElasticBlockStore. Isso é chamado de
PersistentVolume
. - Solicitar armazenamento: O usuário solicita armazenamento para pods usando reivindicações. As reivindicações podem especificar níveis de recursos (CPU e memória), tamanhos específicos e modos de acesso (por exemplo, pode ser montado uma vez para leitura/gravação ou várias vezes somente para gravação).
Isso é chamado dePersistentVolumeClaim
. - Usar reivindicação: As reivindicações são montadas como volumes e usadas em pods para armazenamento.
Especificamente, este blog mostrará como usar um AWS ElasticBlockStore como PersistentVolume
, crie um PersistentVolumeClaim
e, em seguida, reivindicá-lo em uma cápsula.
O código-fonte completo deste blog está em: github.com/arun-gupta/couchbase-kubernetes.
Provisionamento do AWS Elastic Block Storage
Seguindo restrições precisam ser atendidas se o Amazon ElasticBlockStorage for usado como um PersistentVolume com o Kubernetes:
- os nós nos quais os pods estão sendo executados devem ser instâncias do AWS EC2
- essas instâncias precisam estar na mesma região e zona de disponibilidade que o volume EBS
- O EBS suporta apenas uma única instância do EC2 montando um volume
Crie um AWS Elastic Block Storage:
1 |
aws ec2 criar-volume --região nós-oeste-2 --disponibilidade-zona nós-oeste-2a --tamanho 5 --volume-tipo gp2 |
A região us-west-2
região e us-west-2a
é usada aqui. Portanto, o cluster do Kubernetes precisa ser iniciado
na mesma região e zona de disponibilidade também. Isso mostra a saída como:
1 2 3 4 5 6 7 8 9 10 11 |
{ "AvailabilityZone" (Zona de disponibilidade): "us-west-2a", "Criptografado": falso, "VolumeType": "gp2", "VolumeId": "vol-47f59cce", "Estado": "criando", "Iops": 100, "SnapshotId": "", "CreateTime": "2016-07-29T21:57:43.343Z", "Tamanho": 5 } |
Verifique se o volume está disponível como:
1 |
aws --região nós-oeste-2 ec2 descrever-volumes --volume-id vol-47f59cce |
Ele mostra a saída como:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "Volumes": [ { "AvailabilityZone" (Zona de disponibilidade): "us-west-2a", "Anexos": [], "Criptografado": falso, "VolumeType": "gp2", "VolumeId": "vol-47f59cce", "Estado": "disponível", "Iops": 100, "SnapshotId": "", "CreateTime": "2016-07-29T21:57:43.343Z", "Tamanho": 5 } ] } |
Observe o identificador exclusivo do volume em VolumeId
atributo. Você também pode verificar o bloco EBS no Console do AWS:
Iniciar o cluster do Kubernetes
Baixar Kubernetes 1.3.3, descompacte-o e inicie o cluster na Amazon:
1 2 |
exportação PROVEDOR DE KUBERNETES=aws KUBE_AWS_ZONE=nós-oeste-2a TAMANHO DO NÓ=m3.grande NUM_NODES=3 ./kubernetes/agrupamento/cubo-para cima.sh |
Três pontos a serem observados aqui:
- A zona na qual o cluster é iniciado é explicitamente definida como
us-west-1a
. Isso corresponde à zona em que o volume de armazenamento do EBS foi criado. - Por padrão, o tamanho de cada nó é
m3.medium
. Aqui ele está definido comom3.large
. - Por padrão, são criados 1 nó mestre e 4 nós de trabalho. Aqui, apenas 3 nós de trabalho são criados.
Isso mostrará a saída 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 127 128 129 |
... 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.ISohbaGM/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 AIPAJF3XKLNKOXOTQOCTkubernetes-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 AIPAIYSH5DJA4UPQIP4Bkubernetes-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-fa3d6c9e: Nome=kubernetes-vpc Adição etiqueta para vpc-fa3d6c9e: KubernetesCluster=kubernetes Usando VPC vpc-fa3d6c9e Adição etiqueta para dopt-3aad625e: Nome=kubernetes-dhcp-opção-definir Adição etiqueta para dopt-3aad625e: KubernetesCluster=kubernetes Usando DHCP opção definir dopt-3aad625e Criação de sub-rede. Adição etiqueta para sub-rede-e11f5985: KubernetesCluster=kubernetes Usando sub-rede sub-rede-e11f5985 Criação de Internet Gateway. Usando Internet Gateway igw-5c748f38 Associação rota tabela. Criação de rota tabela Adição etiqueta para rtb-84fcf1e0: KubernetesCluster=kubernetes Associação rota tabela rtb-84fcf1e0 para sub-rede sub-rede-e11f5985 Adição rota para rota tabela rtb-84fcf1e0 Usando Rota Tabela rtb-84fcf1e0 Criação de mestre segurança grupo. Criação de segurança grupo kubernetes-mestre-kubernetes. Adição etiqueta para sg-91590bf7: KubernetesCluster=kubernetes Criação de lacaio segurança grupo. Criação de segurança grupo kubernetes-lacaio-kubernetes. Adição etiqueta para sg-9d590bfb: KubernetesCluster=kubernetes Usando mestre segurança grupo: kubernetes-mestre-kubernetes sg-91590bf7 Usando lacaio segurança grupo: kubernetes-lacaio-kubernetes sg-9d590bfb Criação de mestre disco: tamanho 20 GB, tipo gp2 Adição etiqueta para vol-def79e57: Nome=kubernetes-mestre-pd Adição etiqueta para vol-def79e57: KubernetesCluster=kubernetes Alocados Elástico IP para mestre: 52.40.216.69 Adição etiqueta para vol-def79e57: kubernetes.io/mestre-ip=52.40.216.69 Geração de certificados para alternativo-nomes: IP:52.40.216.69,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-5a7cebf5: Nome=kubernetes-mestre Adição etiqueta para i-5a7cebf5: Função=kubernetes-mestre Adição etiqueta para i-5a7cebf5: KubernetesCluster=kubernetes Em espera para mestre para ser pronto Tentativa 1 para verificar para mestre nodeWaiting para instância i-5a7cebf5 para ser em execução (atualmente pendente) Dormir para 3 segundos... Em espera para instância i-5a7cebf5 para ser em execução (atualmente pendente) Dormir para 3 segundos... Em espera para instância i-5a7cebf5 para ser em execução (atualmente pendente) Dormir para 3 segundos... Em espera para instância i-5a7cebf5 para ser em execução (atualmente pendente) Dormir para 3 segundos... [mestre em execução] Fixação IP 52.40.216.69 para instância i-5a7cebf5 Fixação persistente dados volume (vol-def79e57) para mestre 2016-07-29T22:00:36.909Z /dev/sdb i-5a7cebf5 fixação vol-def79e57 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 3 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ó @ 52.42.0.65 ...não de trabalho ainda Tentativa 2 para verificar Docker em nó @ 52.42.0.65 ...não de trabalho ainda Tentativa 3 para verificar Docker em nó @ 52.42.0.65 ...de trabalho Tentativa 1 para verificar Docker em nó @ 52.36.195.201 ...de trabalho Tentativa 1 para verificar Docker em nó @ 52.43.35.173 ...de trabalho Kubernetes agrupamento é em execução. O mestre é em execução em: https://52.40.216.69 O usuário nome e senha para uso é localizado em /Usuários/arungupta/.cubo/configuração. ... chamando validar-agrupamento Encontrado 3 nó(s). NOME STATUS IDADE ip-172-20-0-26.us-oeste-2.compute.internal Pronto 1m ip-172-20-0-27.us-oeste-2.compute.internal Pronto 1m ip-172-20-0-28.us-oeste-2.compute.internal Pronto 1m Validar saída: NOME STATUS MENSAGEM ERRO controlador-gerente Saudável ok programador 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.216.69 Elasticsearch é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging Heapster é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/heapster Kibana é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/kibana-logging KubeDNS é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/kube-dns kubernetes-painel de controle é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard Grafana é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB é em execução em https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb Para mais depurar e diagnosticar agrupamento problemas, uso 'kubectl cluster-info dump'. |
Leia mais detalhes sobre como iniciar um Cluster Kubernetes na Amazon.
Pod do servidor Couchbase sem armazenamento persistente
Vamos criar um pod do Couchbase Server sem armazenamento persistente. Isso significa que, se o pod for reprogramado em um host diferente, ele não terá acesso aos dados criados nele. Aqui estão as etapas rápidas para executar um pod do Couchbase Server e
expô-lo fora do cluster:
1 2 3 |
kubectl.sh executar couchbase --imagem=arungupta/couchbase kubectl.sh expor implantação couchbase --alvo-porto=8091 --porto=8091 --tipo=Balanceador de carga kubectl.sh descrever serviço couchbase |
Leia mais detalhes em Cluster Kubernetes na Amazon. O último comando mostra o endereço do balanceador de carga de entrada. Acesse o Console da Web do Couchbase Server em :8091
.
Faça login no console usando Administrador
login e senha
senha. A página principal do Console da Web do Couchbase Server é exibida:
Um padrão amostra de viagem
já foi criado pelo arungupta/couchbase imagem. Esse balde é mostrado no Compartimentos de dados
guia:
Clique em Criar novo bucket de dados
para criar um novo bucket de dados. Dê um nome a ele k8s
, assuma todos os padrões e clique em Criar
para criar o bucket:
O bucket criado é mostrado no Compartimentos de dados
guia:
Verificar o status do pod:
1 2 3 |
kubectl.sh obter po NOME PRONTO STATUS RESTARTS IDADE couchbase-2646907196-memz2 1/1 Em execução 0 53m |
Excluir o pod:
1 2 |
kubectl.sh excluir po couchbase-2646907196-memz2 cápsula "couchbase-2646907196-memz2" excluído |
Veja o novo pod sendo criado:
1 2 3 4 |
kubectl.sh obter -w po NOME PRONTO STATUS RESTARTS IDADE couchbase-2646907196-memz2 1/1 Encerramento 0 53m couchbase-2646907196-wo6ve 1/1 Em execução 0 3s |
Acesse o Console da Web novamente e veja que o bucket não existe:
Vamos limpar os recursos criados:
1 2 |
kubectl.sh excluir serviço couchbase kubectl.sh excluir implantação couchbase |
Pod do Couchbase Server com armazenamento persistente
Agora, vamos expor um pod do Couchbase Server com armazenamento persistente. Conforme discutido acima, vamos criar um pod PersistentVolume
e reivindicar o volume.
Solicitar armazenamento
Como qualquer outro recurso do Kubernetes, um volume persistente é criado usando um arquivo de descrição de recurso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
gentil: PersistentVolume Versão da API: v1 metadados: nome: couchbase-pv rótulos: tipo: amazonEBS especificação: capacidade: armazenamento: 5Gi accessModes: - ReadWriteOnce awsElasticBlockStore: volumeID: vol-47f59cce fsType: ext4 |
As informações importantes aqui são:
- Criação de um armazenamento de 5 GB
- O armazenamento pode ser montado por apenas um nó para leitura/gravação
- especifica o ID do volume criado anteriormente
Leia mais detalhes sobre a definição desse arquivo em kubernetes.io/docs/user-guide/persistent-volumes/. Esse arquivo está disponível em: github.com/arun-gupta/couchbase-kubernetes/blob/master/pv/couchbase-pv.yml.
O volume em si pode ser criado como:
1 |
kubectl criar -f couchbase-pv.yml |
e mostra a saída:
1 |
volume persistente "couchbase-pv" criado |
Usar reivindicação
A PersistentVolumeClaim
pode ser criado usando esse arquivo de recurso:
1 2 3 4 5 6 7 8 9 10 11 12 |
gentil: PersistentVolumeClaim Versão da API: v1 metadados: nome: couchbase-pvc rótulos: tipo: amazonEBS especificação: accessModes: - ReadWriteOnce recursos: solicitações: armazenamento: 5Gi |
Em nosso caso, tanto o PersistentVolume quanto o PersistentVolumeClaim têm 5 GB, mas não precisam ter. Leia mais detalhes sobre a definição desse arquivo em kubernetes.io/docs/user-guide/persistent-volumes/#persistentvolumeclaims.
Esse arquivo está em github.com/arun-gupta/couchbase-kubernetes/blob/master/pv/couchbase-pvc.yml. A reivindicação pode ser criada como:
1 |
kubectl criar -f couchbase-pvc.yml |
e mostra a saída:
1 |
reclamação de volume persistente "couchbase-pvc" criado |
Criar RC com reivindicação de volume persistente
Crie um controlador de replicação do Couchbase usando esse arquivo de recurso:
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 |
Versão da API: v1 gentil: ReplicationController metadados: nome: couchbase especificação: réplicas: 1 modelo: metadados: nome: couchbase-rc-cápsula rótulos: nome: couchbase-rc-cápsula contexto: couchbase-pv especificação: contêineres: - nome: couchbase-rc-cápsula imagem: arungupta/couchbase volumeMounts: - mountPath: "/opt/couchbase/var" nome: mypd portos: - containerPort: 8091 - containerPort: 8092 - containerPort: 8093 - containerPort: 11210 volumes: - nome: mypd persistentVolumeClaim: claimName: couchbase-pvc |
As partes principais aqui são:
- O recurso define um controlador de replicação usando
arungupta/couchbase
Imagem do Docker volumeMounts
definem quais volumes serão montados./opt/couchbase/var
é o diretório em que o Couchbase Server armazena todos os dados.volumes
definir diferentes volumes que podem ser usados nessa definição de RC
Crie o RC como:
1 |
kubectl criar -f couchbase-rc.yml |
e mostra a saída:
1 |
controlador de replicação "couchbase" criado |
Verificar se há pod como kubectl.sh get -w po
para ver:
1 2 3 4 5 |
kubectl.sh obter -w po NOME PRONTO STATUS RESTARTS IDADE couchbase-jx3fn 0/1 ContainerCreating (Criação de contêineres) 0 3s NOME PRONTO STATUS RESTARTS IDADE couchbase-jx3fn 1/1 Em execução 0 20s |
Expor o RC como um serviço:
1 2 |
kubectl.sh expor rc couchbase --alvo-porto=8091 --porto=809--tipo=Balanceador de carga serviço "couchbase" exposto |
Obtenha todos os serviços:
1 2 3 4 |
kubectl.sh obter serviço NOME CLUSTER-IP EXTERNO-IP PORTO(S) IDADE couchbase 10.0.49.129 a6179426155e2... 8091/TCP 19s kubernetes 10.0.0.1 443/TCP 1h |
Descreva o serviço como kubectl.sh describe svc couchbase
para ver:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Nome: couchbase Namespace: padrão Rótulos: contexto=couchbase-pv nome=couchbase-cápsula Seletor: contexto=couchbase-pv,nome=couchbase-cápsula Tipo: Balanceador de carga IP: 10.0.49.129 Balanceador de carga Ingresso: a6179426155e211e6b664022b850255f-1850736155.us-oeste-2.elb.amazonaws.com Porto: 8091/TCP NodePort: 31636/TCP Pontos finais: 10.244.1.3:8091 Sessão Afinidade: Nenhum Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Tipo Motivo Mensagem --------- -------- ----- ---- ------------- -------- ------ ------- 31s 31s 1 {serviço-controlador } Normal Criando o balanceador de carga Criação de carregar balanceador 29s 29s 1 {serviço-controlador } Normal CriadoLoadBalancer Criado carregar balanceador |
Aguarde cerca de 3 minutos para que o balanceador de carga se estabeleça. Acesse o console da Web do servidor Couchbase em :8091
. Mais uma vez, apenas amostra de viagem
existe. Ele é criado por arungupta/couchbase
imagem usada na definição de RC.
Mostrar contêineres com estado
Vamos criar um novo bucket. Dê a ele um nome kubernetes-pv
, assuma todos os padrões e clique no botão Create (Criar) para criar o bucket.
O balde agora é exibido no console:
Encerre o pod do Couchbase Server e veja o estado sendo restaurado. Obtenha os pods novamente:
1 2 3 |
kubectl.sh obter po NOME PRONTO STATUS RESTARTS IDADE couchbase-jx3fn 1/1 Em execução 0 7m |
Excluir o pod:
1 2 |
kubectl.sh excluir po couchbase-jx3fn cápsula "couchbase-jx3fn" excluído |
O pod é recriado:
1 2 3 4 5 6 |
kubectl.sh obter -w po NOME PRONTO STATUS RESTARTS IDADE couchbase-jx3fn 1/1 Encerramento 0 8m couchbase-qq6wu 0/1 ContainerCreating (Criação de contêineres) 0 4s NOME PRONTO STATUS RESTARTS IDADE couchbase-qq6wu 1/1 Em execução 0 5s |
E agora, quando você acessa o Console da Web do Couchbase, o bucket criado anteriormente ainda existe:
Isso ocorre porque os dados foram armazenados no armazenamento de backup do EBS.
Limpar o cluster do Kubernetes
Desligar 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
KUBE_AWS_ZONE=nós-oeste-2a TAMANHO DO NÓ=m3.grande NUM_NODES=3 ./kubernetes/agrupamento/cubo-para baixo.sh Trazendo para baixo agrupamento usando provedor: aws Exclusão ELBs em: vpc-fa3d6c9e Em espera para ELBs para ser excluído Todos ELBs excluído Exclusão instâncias em VPC: vpc-fa3d6c9e 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 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-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Em espera para instância i-8b7aed24 para ser encerrado (atualmente fechamento-para baixo) Dormir para 3 segundos... Todos instâncias excluído Liberação Elástico IP: 52.40.216.69 Exclusão volume vol-def79e57 Limpeza para cima recursos em VPC: vpc-fa3d6c9e Limpeza para cima segurança grupo: sg-91590bf7 Limpeza para cima segurança grupo: sg-9d590bfb Limpeza para cima segurança grupo: sg-e97b298f Exclusão segurança grupo: sg-91590bf7 Exclusão segurança grupo: sg-9d590bfb Exclusão segurança grupo: sg-e97b298f Exclusão VPC: vpc-fa3d6c9e Feito |
E desconecte o volume:
1 |
aws ec2 excluir-volume --região nós-oeste-2 --volume-id vol-47f59cce |
O código-fonte completo deste blog está em: github.com/arun-gupta/couchbase-kubernetes.
Aproveite!
Belo artigo. Obrigado por tê-lo elaborado.
Uma suposição claramente declarada é que o exemplo foi para uma única AZ. No entanto, para uso real na produção, você deve implantar seu cluster k8s em várias AZs, o que é bastante fácil com
kops
. Isso dificulta muito a implantação de PVs. Não consegui encontrar nenhum bom exemplo de como fazer isso. Você sabe de algum? Ou talvez esteja disposto a atualizar este exemplo para dar suporte a vários AZs?Lendo os documentos do k8s, parece que precisaríamos usar um recurso StorageClass para cada AZ, marcar o
PersistantVolume
para a classe, mas não consigo descobrir como obter umImplantação
(ou ReplicationController) para escolher oClasse de armazenamento
com base na AZ em que está, que não é conhecida até que o local seja agendado em um nó.Além disso, o
amostra de viagem
não apareceu para mim em nenhuma das vezes, não que isso seja importante. E a segundakubectl.sh expose rc couchbase --target-port=8091 --port=809--type=LoadBalancer
deve serkubectl expose rc couchbase --target-port=8091 --port=8091 --type=LoadBalancer
Também pode ser interessante atualizá-lo para usar
kops
(ou consulte seu outro excelente artigo sobre como fazer isso) e substituaReplicationController
comImplantação
.Você encontrou uma solução para isso? Estou tentando criar um cluster CB com PVs. Tudo parece funcionar na primeira vez em que eles são iniciados, mas quando eu elimino um pod cd, o novo pod não consegue mais entrar no cluster CB, seu ip parece estar bloqueado e o pod mestre CB não consegue se conectar de volta ao novo worker.
Saúde