Este blog é possível graças a este tuíte!
Tive uma ótima #Couchbase #Kubernetes sessão de hacking com @saturnismoAprendi muito, estou ansioso para ver outros blogs legais.
- Arun Gupta (@arungupta) 27 de fevereiro de 2016

O Kubernetes é um sistema de orquestração de código aberto do Google para contêineres do Docker. Ele gerencia aplicativos em contêineres em vários hosts e fornece mecanismos básicos para implantação, manutenção e dimensionamento de aplicativos. Ele permite que o usuário forneça primitivos declarativos para o estado desejado, por exemplo, "preciso de 5 servidores Couchbase". Os mecanismos de autocorreção do Kubernetes, como reinicialização automática, reprogramação e replicação de contêineres, garantem que esse estado seja atendido. O usuário apenas define o estado e o Kubernetes garante que o estado seja atendido em todos os momentos no cluster. Principais conceitos do Kubernetes explica os principais conceitos do Kubernetes. Esta série de blog em várias partes mostrará como executar Couchbase no Kubernetes de várias maneiras. A primeira parte começa com uma configuração simples usando o Vagrant.
Primeiros passos com o Kubernetes
Há várias maneiras de executar o Kubernetes, mas descobri que a maneira mais simples (não necessariamente previsível;) é executar usando o Vagrant.
- Faça o download da versão mais recente Lançamento do Kubernetes1.1.8 no momento da redação deste documento e expandir o arquivo.
- Inicie o cluster do Kubernetes como:
1234cd kubernetesexport KUBERNETES_PROVIDER=vagrant./cluster/kube-up.sh
Isso mostra a saída como:
12345678910111213141516171819202122232425kubernetes-1.1.8 > ./kubernetes/cluster/kube-up.sh... Starting cluster using provider: vagrant... calling verify-prereqs... calling kube-upBringing machine 'master' up with 'virtualbox' provider...Bringing machine 'minion-1' up with 'virtualbox' provider...==> master: Importing base box 'kube-fedora21'.... . .Validate output:NAME STATUS MESSAGE ERRORcontroller-manager Healthy ok nilscheduler Healthy ok niletcd-0 Healthy {"health": "true"} niletcd-1 Healthy {"health": "true"} nilCluster validation succeededDone, listing cluster services:Kubernetes master is running at https://10.245.1.2Heapster is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/heapsterKubeDNS is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/kube-dnsKubeUI is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/kube-uiGrafana is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/monitoring-grafanaInfluxDB is running at https://10.245.1.2/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb
Executar o Couchbase no cluster do Kubernetes
A maneira mais fácil de começar a executar um contêiner do Docker no Kubernetes é usar o execução do kubectl comando. O uso do comando é:
|
1 |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] |
O comando executa uma imagem específica, possivelmente replicada. A replicação da imagem é feita por meio da criação de um controlador de replicação para gerenciar o(s) contêiner(es) criado(s). A lista completa de opções para executar esse comando pode ser vista usando:
|
1 |
./cluster/kubectl.sh run --help |
Contêiner do Docker do Couchbase explica os diferentes contêineres do Docker para o Couchbase. Para este blog, usaremos o arungupta/couchbase pois essa imagem é pré-configurada.
|
1 |
./cluster/kubectl.sh run couchbase --image=arungupta/couchbase |
Isso mostra o resultado:
|
1 |
replicationcontroller "couchbase" created |
A saída confirma que um controlador de replicação foi criado. Vamos verificar isso:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE couchbase couchbase arungupta/couchbase run=couchbase 1 17s |
Agora, verifique as vagens:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get po NAME READY STATUS RESTARTS AGE couchbase-tzdhl 0/1 Pending 0 36s |
Vamos verificar o status do 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 45 |
./kubernetes/cluster/kubectl.sh describe pod couchbase-tzdhl Name: couchbase-tzdhl Namespace: default Image(s): arungupta/couchbase Node: 10.245.1.4/10.245.1.4 Start Time: Fri, 26 Feb 2016 18:05:10 -0800 Labels: run=couchbase Status: Running Reason: Message: IP: 10.246.67.2 Replication Controllers: couchbase (1/1 replicas created) Containers: couchbase: Container ID: docker://56dddb66bf60a590e588b972d5cae997ec96149066a9fb8075548c982eb14961 Image: arungupta/couchbase Image ID: docker://080e2e96b3fc22964f3dec079713cdf314e15942d6eb135395134d629e965062 QoS Tier: cpu: Burstable Requests: cpu: 100m State: Running Started: Fri, 26 Feb 2016 18:05:56 -0800 Ready: True Restart Count: 0 Environment Variables: Conditions: Type Status Ready True Volumes: default-token-clfeb: Type: Secret (a secret that should populate this volume) SecretName: default-token-clfeb Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 1m 1 {scheduler } Scheduled Successfully assigned couchbase-tzdhl to 10.245.1.4 1m 1m 1 {kubelet 10.245.1.4} implicitly required container POD Pulling Pulling image "gcr.io/google_containers/pause:0.8.0" 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Created Created with docker id 2dac5f81f4c2 59s 59s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Pulling Pulling image "arungupta/couchbase" 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Started Started with docker id 2dac5f81f4c2 59s 59s 1 {kubelet 10.245.1.4} implicitly required container POD Pulled Successfully pulled image "gcr.io/google_containers/pause:0.8.0" 19s 19s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Pulled Successfully pulled image "arungupta/couchbase" 18s 18s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Created Created with docker id 56dddb66bf60 18s 18s 1 {kubelet 10.245.1.4} spec.containers{couchbase} Started Started with docker id 56dddb66bf60 |
A quinta linha da saída informa que o IP do nó é 10.245.1.4. Isso será usado para acessar o Console da Web posteriormente. A última linha dessa saída mostra que o pod agora está pronto. A verificação do status do pod mostra novamente:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get po NAME READY STATUS RESTARTS AGE couchbase-tzdhl 1/1 Running 0 2m |
Console da Web do Couchbase no cluster do Kubernetes
Agora que seu contêiner do Couchbase está em execução no cluster do Kubernetes, talvez você queira visualizar o Console da Web. Cada pod recebe um endereço IP exclusivo, mas esse endereço só pode ser acessado dentro do cluster. Ele pode ser exposto usando o comando kubectl expose comando. Esse comando pega um controlador de replicação, serviço ou pod e o expõe como um novo serviço do Kubernetes. Isso pode ser feito com o comando:
|
1 2 |
./cluster/kubectl.sh expose rc couchbase --target-port=8091 --port=8091 --external-ip=10.245.1.4 service "couchbase" exposed |
Nesse comando:
--target-porté o nome ou o número da porta no contêiner para a qual o serviço deve direcionar o tráfego--portaé a porta em que o serviço deve atuar--external-ipé o endereço IP externo a ser definido para o serviço. Observe que esse endereço IP foi obtido comkubectl describe podanteriormente.
Agora, você pode acessar o Console da Web do Couchbase em https://10.245.1.4:8091 e ter a seguinte aparência:

Digite as credenciais de senha como Administrador/senha.

Pronto!
Converse conosco em StackOverflow ou Fóruns do Couchbase. Você também pode nos seguir em @couchbasedev e @couchbase.