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 PersistentVolumeClaime, 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 create-volume --region us-west-2 --availability-zone us-west-2a --size 5 --volume-type 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": "us-west-2a", "Encrypted": false, "VolumeType": "gp2", "VolumeId": "vol-47f59cce", "State": "creating", "Iops": 100, "SnapshotId": "", "CreateTime": "2016-07-29T21:57:43.343Z", "Size": 5 } |
Verifique se o volume está disponível como:
|
1 |
aws --region us-west-2 ec2 describe-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": "us-west-2a", "Attachments": [], "Encrypted": false, "VolumeType": "gp2", "VolumeId": "vol-47f59cce", "State": "available", "Iops": 100, "SnapshotId": "", "CreateTime": "2016-07-29T21:57:43.343Z", "Size": 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 |
export KUBERNETES_PROVIDER=aws KUBE_AWS_ZONE=us-west-2a NODE_SIZE=m3.large NUM_NODES=3 ./kubernetes/cluster/kube-up.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 |
... Starting cluster in us-west-2a using provider aws ... calling verify-prereqs ... calling kube-up Starting cluster using os distro: jessie Uploading to Amazon S3 +++ Staging server tars to S3 Storage: kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel upload: ../../../../../var/folders/81/ttv4n16x7p390cttrm_675y00000gn/T/kubernetes.XXXXXX.ISohbaGM/s3/bootstrap-script to s3://kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149/devel/bootstrap-script Uploaded server tars: SERVER_BINARY_TAR_URL: 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 INSTANCEPROFILE arn:aws:iam::598307997273:instance-profile/kubernetes-master 2016-07-29T15:13:35Z AIPAJF3XKLNKOXOTQOCTkubernetes-master / ROLES arn:aws:iam::598307997273:role/kubernetes-master 2016-07-29T15:13:33Z / AROAI3Q2KFBD5PCKRXCRM kubernetes-master ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRole Allow PRINCIPAL ec2.amazonaws.com INSTANCEPROFILE arn:aws:iam::598307997273:instance-profile/kubernetes-minion 2016-07-29T15:13:39Z AIPAIYSH5DJA4UPQIP4Bkubernetes-minion / ROLES arn:aws:iam::598307997273:role/kubernetes-minion 2016-07-29T15:13:37Z / AROAIQ57MPQYSHRPQCT2Q kubernetes-minion ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRole Allow PRINCIPAL ec2.amazonaws.com Using SSH key with (AWS) fingerprint: SHA256:dX/5wpWuUxYar2NFuGwiZuRiydiZCyx4DGoZ5/jL/j8 Creating vpc. Adding tag to vpc-fa3d6c9e: Name=kubernetes-vpc Adding tag to vpc-fa3d6c9e: KubernetesCluster=kubernetes Using VPC vpc-fa3d6c9e Adding tag to dopt-3aad625e: Name=kubernetes-dhcp-option-set Adding tag to dopt-3aad625e: KubernetesCluster=kubernetes Using DHCP option set dopt-3aad625e Creating subnet. Adding tag to subnet-e11f5985: KubernetesCluster=kubernetes Using subnet subnet-e11f5985 Creating Internet Gateway. Using Internet Gateway igw-5c748f38 Associating route table. Creating route table Adding tag to rtb-84fcf1e0: KubernetesCluster=kubernetes Associating route table rtb-84fcf1e0 to subnet subnet-e11f5985 Adding route to route table rtb-84fcf1e0 Using Route Table rtb-84fcf1e0 Creating master security group. Creating security group kubernetes-master-kubernetes. Adding tag to sg-91590bf7: KubernetesCluster=kubernetes Creating minion security group. Creating security group kubernetes-minion-kubernetes. Adding tag to sg-9d590bfb: KubernetesCluster=kubernetes Using master security group: kubernetes-master-kubernetes sg-91590bf7 Using minion security group: kubernetes-minion-kubernetes sg-9d590bfb Creating master disk: size 20GB, type gp2 Adding tag to vol-def79e57: Name=kubernetes-master-pd Adding tag to vol-def79e57: KubernetesCluster=kubernetes Allocated Elastic IP for master: 52.40.216.69 Adding tag to vol-def79e57: kubernetes.io/master-ip=52.40.216.69 Generating certs for alternate-names: IP:52.40.216.69,IP:172.20.0.9,IP:10.0.0.1,DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local,DNS:kubernetes-master Starting Master Adding tag to i-5a7cebf5: Name=kubernetes-master Adding tag to i-5a7cebf5: Role=kubernetes-master Adding tag to i-5a7cebf5: KubernetesCluster=kubernetes Waiting for master to be ready Attempt 1 to check for master nodeWaiting for instance i-5a7cebf5 to be running (currently pending) Sleeping for 3 seconds... Waiting for instance i-5a7cebf5 to be running (currently pending) Sleeping for 3 seconds... Waiting for instance i-5a7cebf5 to be running (currently pending) Sleeping for 3 seconds... Waiting for instance i-5a7cebf5 to be running (currently pending) Sleeping for 3 seconds... [master running] Attaching IP 52.40.216.69 to instance i-5a7cebf5 Attaching persistent data volume (vol-def79e57) to master 2016-07-29T22:00:36.909Z /dev/sdb i-5a7cebf5 attaching vol-def79e57 cluster "aws_kubernetes" set. user "aws_kubernetes" set. context "aws_kubernetes" set. switched to context "aws_kubernetes". user "aws_kubernetes-basic-auth" set. Wrote config for aws_kubernetes to /Users/arungupta/.kube/config Creating minion configuration Creating autoscaling group 0 minions started; waiting 0 minions started; waiting 0 minions started; waiting 0 minions started; waiting 3 minions started; ready Waiting for cluster initialization. This will continually check to see if the API for kubernetes is reachable. This might loop forever if there was some uncaught error during start up. ..........................................................................................................................................................................................................Kubernetes cluster created. Sanity checking cluster... Attempt 1 to check Docker on node @ 52.42.0.65 ...not working yet Attempt 2 to check Docker on node @ 52.42.0.65 ...not working yet Attempt 3 to check Docker on node @ 52.42.0.65 ...working Attempt 1 to check Docker on node @ 52.36.195.201 ...working Attempt 1 to check Docker on node @ 52.43.35.173 ...working Kubernetes cluster is running. The master is running at: https://52.40.216.69 The user name and password to use is located in /Users/arungupta/.kube/config. ... calling validate-cluster Found 3 node(s). NAME STATUS AGE ip-172-20-0-26.us-west-2.compute.internal Ready 1m ip-172-20-0-27.us-west-2.compute.internal Ready 1m ip-172-20-0-28.us-west-2.compute.internal Ready 1m Validate output: NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"} etcd-1 Healthy {"health": "true"} Cluster validation succeeded Done, listing cluster services: Kubernetes master is running at https://52.40.216.69 Elasticsearch is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging Heapster is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/heapster Kibana is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/kibana-logging KubeDNS is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/kube-dns kubernetes-dashboard is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard Grafana is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana InfluxDB is running at https://52.40.216.69/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb To further debug and diagnose cluster problems, use '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 run couchbase --image=arungupta/couchbase kubectl.sh expose deployment couchbase --target-port=8091 --port=8091 --type=LoadBalancer kubectl.sh describe svc 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 get po NAME READY STATUS RESTARTS AGE couchbase-2646907196-memz2 1/1 Running 0 53m |
Excluir o pod:
|
1 2 |
kubectl.sh delete po couchbase-2646907196-memz2 pod "couchbase-2646907196-memz2" deleted |
Veja o novo pod sendo criado:
|
1 2 3 4 |
kubectl.sh get -w po NAME READY STATUS RESTARTS AGE couchbase-2646907196-memz2 1/1 Terminating 0 53m couchbase-2646907196-wo6ve 1/1 Running 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 delete svc couchbase kubectl.sh delete deployment 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 |
kind: PersistentVolume apiVersion: v1 metadata: name: couchbase-pv labels: type: amazonEBS spec: capacity: storage: 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 create -f couchbase-pv.yml |
e mostra a saída:
|
1 |
persistentvolume "couchbase-pv" created |
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 |
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: couchbase-pvc labels: type: amazonEBS spec: accessModes: - ReadWriteOnce resources: requests: storage: 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 create -f couchbase-pvc.yml |
e mostra a saída:
|
1 |
persistentvolumeclaim "couchbase-pvc" created |
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 |
apiVersion: v1 kind: ReplicationController metadata: name: couchbase spec: replicas: 1 template: metadata: name: couchbase-rc-pod labels: name: couchbase-rc-pod context: couchbase-pv spec: containers: - name: couchbase-rc-pod image: arungupta/couchbase volumeMounts: - mountPath: "/opt/couchbase/var" name: mypd ports: - containerPort: 8091 - containerPort: 8092 - containerPort: 8093 - containerPort: 11210 volumes: - name: mypd persistentVolumeClaim: claimName: couchbase-pvc |
As partes principais aqui são:
- O recurso define um controlador de replicação usando
arungupta/couchbaseImagem do Docker volumeMountsdefinem quais volumes serão montados./opt/couchbase/varé o diretório em que o Couchbase Server armazena todos os dados.volumesdefinir diferentes volumes que podem ser usados nessa definição de RC
Crie o RC como:
|
1 |
kubectl create -f couchbase-rc.yml |
e mostra a saída:
|
1 |
replicationcontroller "couchbase" created |
Verificar se há pod como kubectl.sh get -w po para ver:
|
1 2 3 4 5 |
kubectl.sh get -w po NAME READY STATUS RESTARTS AGE couchbase-jx3fn 0/1 ContainerCreating 0 3s NAME READY STATUS RESTARTS AGE couchbase-jx3fn 1/1 Running 0 20s |
Expor o RC como um serviço:
|
1 2 |
kubectl.sh expose rc couchbase --target-port=8091 --port=809--type=LoadBalancer service "couchbase" exposed |
Obtenha todos os serviços:
|
1 2 3 4 |
kubectl.sh get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE 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 |
Name: couchbase Namespace: default Labels: context=couchbase-pv name=couchbase-pod Selector: context=couchbase-pv,name=couchbase-pod Type: LoadBalancer IP: 10.0.49.129 LoadBalancer Ingress: a6179426155e211e6b664022b850255f-1850736155.us-west-2.elb.amazonaws.com Port: 8091/TCP NodePort: 31636/TCP Endpoints: 10.244.1.3:8091 Session Affinity: None Events: FirstSeen LastSeen Count From SubobjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 31s 31s 1 {service-controller } Normal CreatingLoadBalancer Creating load balancer 29s 29s 1 {service-controller } Normal CreatedLoadBalancer Created load balancer |
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 get po NAME READY STATUS RESTARTS AGE couchbase-jx3fn 1/1 Running 0 7m |
Excluir o pod:
|
1 2 |
kubectl.sh delete po couchbase-jx3fn pod "couchbase-jx3fn" deleted |
O pod é recriado:
|
1 2 3 4 5 6 |
kubectl.sh get -w po NAME READY STATUS RESTARTS AGE couchbase-jx3fn 1/1 Terminating 0 8m couchbase-qq6wu 0/1 ContainerCreating 0 4s NAME READY STATUS RESTARTS AGE couchbase-qq6wu 1/1 Running 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=us-west-2a NODE_SIZE=m3.large NUM_NODES=3 ./kubernetes/cluster/kube-down.sh Bringing down cluster using provider: aws Deleting ELBs in: vpc-fa3d6c9e Waiting for ELBs to be deleted All ELBs deleted Deleting instances in VPC: vpc-fa3d6c9e Deleting auto-scaling group: kubernetes-minion-group-us-west-2a Deleting auto-scaling launch configuration: kubernetes-minion-group-us-west-2a Deleting auto-scaling group: kubernetes-minion-group-us-west-2a Deleting auto-scaling group: kubernetes-minion-group-us-west-2a Waiting for instances to be deleted Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... Waiting for instance i-8b7aed24 to be terminated (currently shutting-down) Sleeping for 3 seconds... All instances deleted Releasing Elastic IP: 52.40.216.69 Deleting volume vol-def79e57 Cleaning up resources in VPC: vpc-fa3d6c9e Cleaning up security group: sg-91590bf7 Cleaning up security group: sg-9d590bfb Cleaning up security group: sg-e97b298f Deleting security group: sg-91590bf7 Deleting security group: sg-9d590bfb Deleting security group: sg-e97b298f Deleting VPC: vpc-fa3d6c9e Done |
E desconecte o volume:
|
1 |
aws ec2 delete-volume --region us-west-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
PersistantVolumepara a classe, mas não consigo descobrir como obter umImplantação(ou ReplicationController) para escolher oClasse de armazenamentocom 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 viagemnã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=LoadBalancerdeve serkubectl expose rc couchbase --target-port=8091 --port=8091 --type=LoadBalancerTambém pode ser interessante atualizá-lo para usar
kops(ou consulte seu outro excelente artigo sobre como fazer isso) e substituaReplicationControllercomImplantaçã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