{"id":2428,"date":"2017-01-06T10:12:08","date_gmt":"2017-01-06T10:12:07","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2428"},"modified":"2023-08-13T23:44:23","modified_gmt":"2023-08-14T06:44:23","slug":"multimaster-kubernetes-cluster-amazon-kops","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/multimaster-kubernetes-cluster-amazon-kops\/","title":{"rendered":"Cluster Kubernetes Multimaster na Amazon usando Kops"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/kubernetes-1.4-spring-boot-couchbase\/\">Primeiros passos com o Kubernetes 1.4 usando Spring Boot e Couchbase<\/a>\u00a0explica como come\u00e7ar a usar o Kubernetes 1.4 no Amazon Web Services. A<br \/>\nO servi\u00e7o Couchbase \u00e9 criado no cluster e um aplicativo Spring Boot armazena um documento JSON no banco de dados. Ele usa <code>kube-up.sh<\/code>\u00a0a partir do download do bin\u00e1rio do Kubernetes em <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/releases\/download\/v1.4.0\/kubernetes.tar.gz\">github.com\/kubernetes\/kubernetes\/releases\/download\/v1.4.0\/kubernetes.tar.gz<\/a> \u00a0para iniciar o cluster. Esse script \u00e9 capaz de criar um cluster do Kubernetes apenas com um \u00fanico mestre. Essa \u00e9 uma falha fundamental dos aplicativos distribu\u00eddos, em que o mestre se torna um ponto \u00fanico de falha.<\/p>\n<p>Conhe\u00e7a <a href=\"https:\/\/github.com\/kubernetes\/kops\">kops<\/a>\u00a0- abrevia\u00e7\u00e3o de Kubernetes Operations.<\/p>\n<p>Essa \u00e9 a maneira mais f\u00e1cil de colocar um cluster Kubernetes altamente dispon\u00edvel em funcionamento. O <code>kubectl<\/code> \u00e9 a CLI para executar comandos em clusters em execu\u00e7\u00e3o. Pense em <code>kops<\/code> como <em>kubectl para cluster<\/em>.<br \/>\nEste blog mostrar\u00e1 como criar um cluster Kubernetes altamente dispon\u00edvel na Amazon usando <code>kops<\/code>. Depois que o cluster for criado, ele criar\u00e1 um servi\u00e7o Couchbase nele e executar\u00e1 um aplicativo Spring Boot para armazenar o documento JSON<br \/>\nno banco de dados.<\/p>\n<p>Muito obrigado a <a href=\"https:\/\/github.com\/justinsb\">justinsb<\/a>, sarahz, <a href=\"https:\/\/github.com\/razic\">l\u00e2minas<\/a>, jaygorrell, shrugs, bkpandey e outros em <a href=\"https:\/\/github.com\/kubernetes\/community#slack-chat\">Canal do Kubernetes no Slack<\/a> por me ajudar com os detalhes!<\/p>\n<h2>Fa\u00e7a o download do kops e do kubectl<\/h2>\n<ul>\n<li>Baixar <a href=\"https:\/\/github.com\/kubernetes\/kops\/releases\">\u00daltima vers\u00e3o do Kops<\/a>. Este blog foi testado com <a href=\"https:\/\/github.com\/kubernetes\/kops\/releases\/download\/v1.4.1\/kops-darwin-amd64\">1.4.1<\/a> no OSX.Conjunto completo de comandos para<br \/>\n<code>kops<\/code> pode ser visto:<\/p>\n<pre class=\"lang:default decode:true\">kops-darwin-amd64 --help\r\nkops is kubernetes ops.\r\nIt allows you to create, destroy, upgrade and maintain clusters.\r\n\r\nUsage:\r\n  kops [command]\r\n\r\nAvailable Commands:\r\n  create         create resources\r\n  delete         delete clusters\r\n  describe       describe objects\r\n  edit           edit items\r\n  export         export clusters\/kubecfg\r\n  get            list or get objects\r\n  import         import clusters\r\n  rolling-update rolling update clusters\r\n  secrets        Manage secrets &amp; keys\r\n  toolbox        Misc infrequently used commands\r\n  update         update clusters\r\n  upgrade        upgrade clusters\r\n  version        Print the client version information\r\n\r\nFlags:\r\n      --alsologtostderr                  log to standard error as well as files\r\n      --config string                    config file (default is $HOME\/.kops.yaml)\r\n      --log_backtrace_at traceLocation   when logging hits line file:N, emit a stack trace (default :0)\r\n      --log_dir string                   If non-empty, write log files in this directory\r\n      --logtostderr                      log to standard error instead of files (default false)\r\n      --name string                      Name of cluster\r\n      --state string                     Location of state storage\r\n      --stderrthreshold severity         logs at or above this threshold go to stderr (default 2)\r\n  -v, --v Level                          log level for V logs\r\n      --vmodule moduleSpec               comma-separated list of pattern=N settings for file-filtered logging\r\n\r\nUse \"kops [command] --help\" for more information about a command.<\/pre>\n<\/li>\n<li>Baixar <code>kubectl<\/code>:\n<pre class=\"lang:default decode:true\">curl -Lo kubectl https:\/\/storage.googleapis.com\/kubernetes-release\/release\/v1.4.1\/bin\/darwin\/amd64\/kubectl &amp;&amp; chmod +x kubectl<\/pre>\n<\/li>\n<li>\u00a0Incluir <code>kubectl<\/code> em seu <code>PATH<\/code>.<\/li>\n<\/ul>\n<h2>Criar registros de Bucket e NS na Amazon<\/h2>\n<p>No momento, h\u00e1 um pouco de configura\u00e7\u00e3o envolvida, e esperamos que isso seja resolvido nas pr\u00f3ximas vers\u00f5es.\u00a0<a href=\"https:\/\/github.com\/kubernetes\/kops\/blob\/master\/docs\/aws.md\">Cria\u00e7\u00e3o de um cluster no AWS<\/a>\u00a0fornecem etapas detalhadas e mais informa\u00e7\u00f5es.<br \/>\nAqui est\u00e1 o que o blog seguiu:<\/p>\n<ul>\n<li>Escolha um dom\u00ednio onde o cluster do Kubernetes ser\u00e1 hospedado. Este blog usa <code>kubernetes.arungupta.me<\/code> dom\u00ednio. Voc\u00ea pode escolher um dom\u00ednio de n\u00edvel superior ou um subdom\u00ednio.<\/li>\n<li><a href=\"https:\/\/aws.amazon.com\/route53\/\">Amazon Route 53<\/a> \u00e9 um servi\u00e7o de DNS altamente dispon\u00edvel e dimension\u00e1vel. Fa\u00e7a login no <a href=\"https:\/\/console.aws.amazon.com\/console\/home\">Console da Amazon<\/a> e criou um <a href=\"https:\/\/console.aws.amazon.com\/route53\/home?region=us-west-1\">zona hospedada<\/a> para esse dom\u00ednio usando o servi\u00e7o Route 53.<br \/>\n<a href=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-hosted-zone-1024x555.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14400\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-hosted-zone-1024x555.png\" alt=\"kops-hosted-zone\" width=\"604\" height=\"327\" \/><\/a><br \/>\nA zona criada tem a mesma apar\u00eancia:<br \/>\n<a href=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-hosted-zone-created-1024x275.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14401\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-hosted-zone-created-1024x275.png\" alt=\"kops-hosted-zone-created\" width=\"604\" height=\"162\" \/><\/a><br \/>\nOs valores mostrados no <code>Valor<\/code> s\u00e3o importantes, pois ser\u00e3o usadas posteriormente para criar registros NS.<\/li>\n<li>Crie um bucket S3 usando <a href=\"https:\/\/console.aws.amazon.com\/s3\/home?region=us-west-1\">Console da Amazon<\/a> para armazenar a configura\u00e7\u00e3o do cluster - isso \u00e9 chamado de <code>loja estatal<\/code>.<br \/>\n<a href=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-s3-bucket-1024x496.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14407\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-s3-bucket-1024x496.png\" alt=\"kops-s3-bucket\" width=\"604\" height=\"293\" \/><\/a><\/li>\n<li>O dom\u00ednio <code>kubernetes.arungupta.me<\/code> est\u00e1 hospedado na GoDaddy. Para cada valor mostrado na coluna Value (Valor) da zona hospedada no Route53, crie um registro NS usando <a href=\"https:\/\/www.godaddy.com\/help\/accessing-the-domain-control-center-416\">Centro de Controle de Dom\u00ednios da GoDaddy<\/a>\u00a0para<br \/>\nSelecione o tipo de registro:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14403\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-godaddy-add-zone-record-1024x588.png\" alt=\"kops-godaddy-add-zone-record\" width=\"604\" height=\"347\" \/><br \/>\nPara cada valor, adicione o registro conforme mostrado:<br \/>\n<a href=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-godaddy-add-ns-record-1024x980.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14402\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-godaddy-add-ns-record-1024x980.png\" alt=\"kops-godaddy-add-ns-record\" width=\"604\" height=\"578\" \/><\/a><br \/>\nO conjunto completo de registros tem a seguinte apar\u00eancia:<br \/>\n<a href=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-godaddy-ns-records-1024x346.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14404\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-godaddy-ns-records-1024x346.png\" alt=\"kops-godaddy-ns-records\" width=\"604\" height=\"204\" \/><\/a><\/li>\n<\/ul>\n<h2>Iniciar o cluster multimaster do Kubernetes<\/h2>\n<p>Vamos entender um pouco sobre as regi\u00f5es e zonas da Amaz\u00f4nia:<\/p>\n<blockquote><p>O Amazon EC2 est\u00e1 hospedado em v\u00e1rios locais em todo o mundo. Esses locais s\u00e3o compostos por regi\u00f5es e zonas de disponibilidade. Cada regi\u00e3o \u00e9 uma \u00e1rea geogr\u00e1fica separada. Cada regi\u00e3o tem v\u00e1rios locais isolados, conhecidos como Zonas de Disponibilidade.<\/p><\/blockquote>\n<p>Um cluster Kubernetes altamente dispon\u00edvel pode ser criado entre zonas, mas n\u00e3o entre regi\u00f5es.<\/p>\n<ul>\n<li>Descubra as zonas de disponibilidade em uma regi\u00e3o:\n<pre class=\"lang:default decode:true\">aws ec2 describe-availability-zones --region us-west-2\r\n{\r\n    \"AvailabilityZones\": [\r\n        {\r\n            \"State\": \"available\", \r\n            \"RegionName\": \"us-west-2\", \r\n            \"Messages\": [], \r\n            \"ZoneName\": \"us-west-2a\"\r\n        }, \r\n        {\r\n            \"State\": \"available\", \r\n            \"RegionName\": \"us-west-2\", \r\n            \"Messages\": [], \r\n            \"ZoneName\": \"us-west-2b\"\r\n        }, \r\n        {\r\n            \"State\": \"available\", \r\n            \"RegionName\": \"us-west-2\", \r\n            \"Messages\": [], \r\n            \"ZoneName\": \"us-west-2c\"\r\n        }\r\n    ]\r\n}<\/pre>\n<\/li>\n<li>Crie um cluster com v\u00e1rios mestres:\n<pre class=\"lang:default decode:true\">kops-darwin-amd64 create cluster --name=kubernetes.arungupta.me --cloud=aws --zones=us-west-2a,us-west-2b,us-west-2c --master-size=m4.large --node-count=3 --node-size=m4.2xlarge --master-zones=us-west-2a,us-west-2b,us-west-2c --state=s3:\/\/kops-couchbase --yes<\/pre>\n<p>A maioria dos switches \u00e9 autoexplicativa. Alguns switches precisam de um pouco de explica\u00e7\u00e3o:<\/p>\n<ul>\n<li>Especifica\u00e7\u00e3o de v\u00e1rias zonas usando <code>--zonas-mestre<\/code> (deve ser um n\u00famero \u00edmpar) criar v\u00e1rios mestres no AZ<\/li>\n<li><code>--cloud=aws<\/code> \u00e9 opcional se a nuvem puder ser inferida das zonas<\/li>\n<li><code>-sim<\/code>\u00a0\u00e9 usado para especificar a cria\u00e7\u00e3o imediata do cluster. Caso contr\u00e1rio, somente o estado \u00e9 armazenado no bucket, e o cluster precisa ser criado separadamente.<\/li>\n<\/ul>\n<p>O conjunto completo de switches da CLI pode ser visto:<\/p>\n<pre class=\"lang:default decode:true\">.\/kops-darwin-amd64 create cluster --help\r\nCreates a k8s cluster.\r\n\r\nUsage:\r\n  kops create cluster [flags]\r\n\r\nFlags:\r\n      --admin-access string         Restrict access to admin endpoints (SSH, HTTPS) to this CIDR.  If not set, access will not be restricted by IP.\r\n      --associate-public-ip         Specify --associate-public-ip=[true|false] to enable\/disable association of public IP for master ASG and nodes. Default is 'true'. (default true)\r\n      --channel string              Channel for default versions and configuration to use (default \"stable\")\r\n      --cloud string                Cloud provider to use - gce, aws\r\n      --dns-zone string             DNS hosted zone to use (defaults to last two components of cluster name)\r\n      --image string                Image to use\r\n      --kubernetes-version string   Version of kubernetes to run (defaults to version in channel)\r\n      --master-size string          Set instance size for masters\r\n      --master-zones string         Zones in which to run masters (must be an odd number)\r\n      --model string                Models to apply (separate multiple models with commas) (default \"config,proto,cloudup\")\r\n      --network-cidr string         Set to override the default network CIDR\r\n      --networking string           Networking mode to use.  kubenet (default), classic, external. (default \"kubenet\")\r\n      --node-count int              Set the number of nodes\r\n      --node-size string            Set instance size for nodes\r\n      --out string                  Path to write any local output\r\n      --project string              Project to use (must be set on GCE)\r\n      --ssh-public-key string       SSH public key to use (default \"~\/.ssh\/id_rsa.pub\")\r\n      --target string               Target - direct, terraform (default \"direct\")\r\n      --vpc string                  Set to use a shared VPC\r\n      --yes                         Specify --yes to immediately create the cluster\r\n      --zones string                Zones in which to run the cluster\r\n\r\nGlobal Flags:\r\n      --alsologtostderr                  log to standard error as well as files\r\n      --config string                    config file (default is $HOME\/.kops.yaml)\r\n      --log_backtrace_at traceLocation   when logging hits line file:N, emit a stack trace (default :0)\r\n      --log_dir string                   If non-empty, write log files in this directory\r\n      --logtostderr                      log to standard error instead of files (default false)\r\n      --name string                      Name of cluster\r\n      --state string                     Location of state storage\r\n      --stderrthreshold severity         logs at or above this threshold go to stderr (default 2)\r\n  -v, --v Level                          log level for V logs\r\n      --vmodule moduleSpec               comma-separated list of pattern=N settings for file-filtered logging<\/pre>\n<\/li>\n<li>Depois que o cluster for criado, obtenha mais detalhes sobre o cluster:\n<pre class=\"lang:default decode:true\">kubectl cluster-info\r\nKubernetes master is running at https:\/\/api.kubernetes.arungupta.me\r\nKubeDNS is running at https:\/\/api.kubernetes.arungupta.me\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-dns\r\n\r\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.<\/pre>\n<\/li>\n<li>Verifique a vers\u00e3o do cliente e do servidor do cluster:\n<pre class=\"lang:default decode:true\">kubectl version\r\nClient Version: version.Info{Major:\"1\", Minor:\"4\", GitVersion:\"v1.4.1\", GitCommit:\"33cf7b9acbb2cb7c9c72a10d6636321fb180b159\", GitTreeState:\"clean\", BuildDate:\"2016-10-10T18:19:49Z\", GoVersion:\"go1.7.1\", Compiler:\"gc\", Platform:\"darwin\/amd64\"}\r\nServer Version: version.Info{Major:\"1\", Minor:\"4\", GitVersion:\"v1.4.3\", GitCommit:\"4957b090e9a4f6a68b4a40375408fdc74a212260\", GitTreeState:\"clean\", BuildDate:\"2016-10-16T06:20:04Z\", GoVersion:\"go1.6.3\", Compiler:\"gc\", Platform:\"linux\/amd64\"}<\/pre>\n<\/li>\n<li>Verifique todos os n\u00f3s do cluster:\n<pre class=\"lang:default decode:true\">kubectl get nodes \r\nNAME                                           STATUS    AGE\r\nip-172-20-111-151.us-west-2.compute.internal   Ready     1h\r\nip-172-20-116-40.us-west-2.compute.internal    Ready     1h\r\nip-172-20-48-41.us-west-2.compute.internal     Ready     1h\r\nip-172-20-49-105.us-west-2.compute.internal    Ready     1h\r\nip-172-20-80-233.us-west-2.compute.internal    Ready     1h\r\nip-172-20-82-93.us-west-2.compute.internal     Ready     1h<\/pre>\n<p>Ou descobrir apenas os n\u00f3s mestres:<\/p>\n<pre class=\"lang:default decode:true\">kubectl get nodes -l kubernetes.io\/role=master\r\nNAME                                           STATUS    AGE\r\nip-172-20-111-151.us-west-2.compute.internal   Ready     1h\r\nip-172-20-48-41.us-west-2.compute.internal     Ready     1h\r\nip-172-20-82-93.us-west-2.compute.internal     Ready     1h<\/pre>\n<\/li>\n<li>Verifique todos os clusters:\n<pre class=\"lang:default decode:true\">kops-darwin-amd64 get clusters --state=s3:\/\/kops-couchbase\r\nNAME   CLOUD ZONES\r\nkubernetes.arungupta.me aws us-west-2a,us-west-2b,us-west-2c<\/pre>\n<\/li>\n<\/ul>\n<h2>Complemento do painel do Kubernetes<\/h2>\n<p>Por padr\u00e3o, um cluster criado com o kops n\u00e3o tem o painel da interface do usu\u00e1rio. Mas ele pode ser adicionado como um complemento:<\/p>\n<pre class=\"lang:default decode:true\">kubectl create -f https:\/\/raw.githubusercontent.com\/kubernetes\/kops\/master\/addons\/kubernetes-dashboard\/v1.4.0.yaml\r\ndeployment \"kubernetes-dashboard-v1.4.0\" created\r\nservice \"kubernetes-dashboard\" created<\/pre>\n<p>Agora, os detalhes completos sobre o cluster podem ser vistos:<\/p>\n<pre class=\"lang:default decode:true\">kubectl cluster-info\r\nKubernetes master is running at https:\/\/api.kubernetes.arungupta.me\r\nKubeDNS is running at https:\/\/api.kubernetes.arungupta.me\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-dns\r\nkubernetes-dashboard is running at https:\/\/api.kubernetes.arungupta.me\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kubernetes-dashboard\r\n\r\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.<\/pre>\n<p>E o painel da interface do usu\u00e1rio do Kubernetes est\u00e1 no URL mostrado. No nosso caso, ele \u00e9 <code>https:\/\/api.kubernetes.arungupta.me\/ui<\/code> e se parece com isso:<br \/>\n<img decoding=\"async\" src=\"https:\/\/cms.cbauthx.com\/site\/_cmsinternal\/binaries\/content\/gallery\/website\/blogs\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-kubernetes-ui-1024x764.png\" \/><br \/>\nAs credenciais para acessar esse painel podem ser obtidas usando o <code>Visualiza\u00e7\u00e3o de configura\u00e7\u00e3o do kubectl<\/code> comando. Os valores s\u00e3o mostrados da seguinte forma:<\/p>\n<pre class=\"lang:default decode:true\">- name: kubernetes.arungupta.me-basic-auth\r\n  user:\r\n    password: PASSWORD\r\n    username: admin\r\n<\/pre>\n<h2>Implantar o servi\u00e7o Couchbase<\/h2>\n<p>Conforme explicado em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/kubernetes-1.4-spring-boot-couchbase\/\">Primeiros passos com o Kubernetes 1.4 usando Spring Boot e Couchbase<\/a>Vamos executar um servi\u00e7o do Couchbase:<\/p>\n<pre class=\"lang:default decode:true\">kubectl create -f ~\/workspaces\/kubernetes-java-sample\/maven\/couchbase-service.yml \r\nservice \"couchbase-service\" created\r\nreplicationcontroller \"couchbase-rc\" created<\/pre>\n<p>Esse arquivo de configura\u00e7\u00e3o est\u00e1 em\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/couchbase-service.yml\">github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/couchbase-service.yml<\/a>. Obtenha a lista de servi\u00e7os:<\/p>\n<pre class=\"lang:default decode:true\">kubectl get svc\r\nNAME                CLUSTER-IP     EXTERNAL-IP   PORT(S)                                AGE\r\ncouchbase-service   100.65.4.139           8091\/TCP,8092\/TCP,8093\/TCP,11210\/TCP   27s\r\nkubernetes          100.64.0.1             443\/TCP                                2h<\/pre>\n<p>Descreva o servi\u00e7o:<\/p>\n<pre class=\"lang:default decode:true\">kubectl describe svc\/couchbase-service\r\nName:   couchbase-service\r\nNamespace:  default\r\nLabels:   \r\nSelector:  app=couchbase-rc-pod\r\nType:   ClusterIP\r\nIP:   100.65.4.139\r\nPort:   admin 8091\/TCP\r\nEndpoints:  100.96.5.2:8091\r\nPort:   views 8092\/TCP\r\nEndpoints:  100.96.5.2:8092\r\nPort:   query 8093\/TCP\r\nEndpoints:  100.96.5.2:8093\r\nPort:   memcached 11210\/TCP\r\nEndpoints:  100.96.5.2:11210\r\nSession Affinity: None<\/pre>\n<p>Obtenha as c\u00e1psulas:<\/p>\n<pre class=\"lang:default decode:true\">kubectl get pods\r\nNAME                 READY     STATUS    RESTARTS   AGE\r\ncouchbase-rc-e35v5   1\/1       Running   0          1m<\/pre>\n<h2>Executar o aplicativo Spring Boot<\/h2>\n<p>O aplicativo Spring Boot \u00e9 executado no servi\u00e7o Couchbase e armazena um documento JSON nele. Inicie o aplicativo Spring Boot:<\/p>\n<pre class=\"lang:default decode:true\">kubectl create -f ~\/workspaces\/kubernetes-java-sample\/maven\/bootiful-couchbase.yml \r\njob \"bootiful-couchbase\" created<\/pre>\n<p>Esse arquivo de configura\u00e7\u00e3o est\u00e1 em\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/bootiful-couchbase.yml\">github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/bootiful-couchbase.yml<\/a>. Veja a lista de todos os pods:<\/p>\n<pre class=\"lang:default decode:true\">kubectl get pods --show-all\r\nNAME                       READY     STATUS      RESTARTS   AGE\r\nbootiful-couchbase-ainv8   0\/1       Completed   0          1m\r\ncouchbase-rc-e35v5         1\/1       Running     0          3m<\/pre>\n<p>Verifique os registros do pod completo:<\/p>\n<pre class=\"lang:default decode:true\">kubectl logs bootiful-couchbase-ainv8\r\n\r\n  .   ____          _            __ _ _\r\n \/\\ \/ ___'_ __ _ _(_)_ __  __ _    \r\n( ( )___ | '_ | '_| | '_ \/ _` |    \r\n \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\r\n  '  |____| .__|_| |_|_| |___, | \/ \/ \/ \/\r\n =========|_|==============|___\/=\/_\/_\/_\/\r\n :: Spring Boot ::        (v1.4.0.RELEASE)\r\n\r\n2016-11-02 18:48:56.035  INFO 7 --- [           main] org.example.webapp.Application           : Starting Application v1.0-SNAPSHOT on bootiful-couchbase-ainv8 with PID 7 (\/maven\/bootiful-couchbase.jar started by root in \/)\r\n2016-11-02 18:48:56.040  INFO 7 --- [           main] org.example.webapp.Application           : No active profile set, falling back to default profiles: default\r\n2016-11-02 18:48:56.115  INFO 7 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@108c4c35: startup date [Wed Nov 02 18:48:56 UTC 2016]; root of context hierarchy\r\n2016-11-02 18:48:57.021  INFO 7 --- [           main] com.couchbase.client.core.CouchbaseCore  : CouchbaseEnvironment: {sslEnabled=false, sslKeystoreFile='null', sslKeystorePassword='null', queryEnabled=false, queryPort=8093, bootstrapHttpEnabled=true, bootstrapCarrierEnabled=true, bootstrapHttpDirectPort=8091, bootstrapHttpSslPort=18091, bootstrapCarrierDirectPort=11210, bootstrapCarrierSslPort=11207, ioPoolSize=8, computationPoolSize=8, responseBufferSize=16384, requestBufferSize=16384, kvServiceEndpoints=1, viewServiceEndpoints=1, queryServiceEndpoints=1, searchServiceEndpoints=1, ioPool=NioEventLoopGroup, coreScheduler=CoreScheduler, eventBus=DefaultEventBus, packageNameAndVersion=couchbase-java-client\/2.2.8 (git: 2.2.8, core: 1.2.9), dcpEnabled=false, retryStrategy=BestEffort, maxRequestLifetime=75000, retryDelay=ExponentialDelay{growBy 1.0 MICROSECONDS, powers of 2; lower=100, upper=100000}, reconnectDelay=ExponentialDelay{growBy 1.0 MILLISECONDS, powers of 2; lower=32, upper=4096}, observeIntervalDelay=ExponentialDelay{growBy 1.0 MICROSECONDS, powers of 2; lower=10, upper=100000}, keepAliveInterval=30000, autoreleaseAfter=2000, bufferPoolingEnabled=true, tcpNodelayEnabled=true, mutationTokensEnabled=false, socketConnectTimeout=1000, dcpConnectionBufferSize=20971520, dcpConnectionBufferAckThreshold=0.2, dcpConnectionName=dcp\/core-io, callbacksOnIoPool=false, queryTimeout=7500, viewTimeout=7500, kvTimeout=2500, connectTimeout=5000, disconnectTimeout=25000, dnsSrvEnabled=false}\r\n2016-11-02 18:48:57.245  INFO 7 --- [      cb-io-1-1] com.couchbase.client.core.node.Node      : Connected to Node couchbase-service\r\n2016-11-02 18:48:57.291  INFO 7 --- [      cb-io-1-1] com.couchbase.client.core.node.Node      : Disconnected from Node couchbase-service\r\n2016-11-02 18:48:57.533  INFO 7 --- [      cb-io-1-2] com.couchbase.client.core.node.Node      : Connected to Node couchbase-service\r\n2016-11-02 18:48:57.638  INFO 7 --- [-computations-4] c.c.c.core.config.ConfigurationProvider  : Opened bucket books\r\n2016-11-02 18:48:58.152  INFO 7 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup\r\nBook{isbn=978-1-4919-1889-0, name=Minecraft Modding with Forge, cost=29.99}\r\n2016-11-02 18:48:58.402  INFO 7 --- [           main] org.example.webapp.Application           : Started Application in 2.799 seconds (JVM running for 3.141)\r\n2016-11-02 18:48:58.403  INFO 7 --- [       Thread-5] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@108c4c35: startup date [Wed Nov 02 18:48:56 UTC 2016]; root of context hierarchy\r\n2016-11-02 18:48:58.404  INFO 7 --- [       Thread-5] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown\r\n2016-11-02 18:48:58.410  INFO 7 --- [      cb-io-1-2] com.couchbase.client.core.node.Node      : Disconnected from Node couchbase-service\r\n2016-11-02 18:48:58.410  INFO 7 --- [       Thread-5] c.c.c.core.config.ConfigurationProvider  : Closed bucket books<\/pre>\n<p>O painel atualizado agora tem a seguinte apar\u00eancia:<br \/>\n<a href=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-dashboard-with-apps-1024x482.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14409\" src=\"\/wp-content\/original-assets\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-dashboard-with-apps-1024x482.png\" alt=\"kops-dashboard-with-apps\" width=\"604\" height=\"284\" \/><\/a><\/p>\n<h2>Excluir o cluster do Kubernetes<\/h2>\n<p>O cluster do Kubernetes pode ser exclu\u00eddo como:<\/p>\n<pre class=\"lang:default decode:true\">kops-darwin-amd64 delete cluster --name=kubernetes.arungupta.me --state=s3:\/\/kops-couchbase --yes\r\nTYPE   NAME           ID\r\nautoscaling-config master-us-west-2a.masters.kubernetes.arungupta.me-20161101235639   master-us-west-2a.masters.kubernetes.arungupta.me-20161101235639\r\nautoscaling-config master-us-west-2b.masters.kubernetes.arungupta.me-20161101235639   master-us-west-2b.masters.kubernetes.arungupta.me-20161101235639\r\nautoscaling-config master-us-west-2c.masters.kubernetes.arungupta.me-20161101235639   master-us-west-2c.masters.kubernetes.arungupta.me-20161101235639\r\nautoscaling-config nodes.kubernetes.arungupta.me-20161101235639      nodes.kubernetes.arungupta.me-20161101235639\r\nautoscaling-group master-us-west-2a.masters.kubernetes.arungupta.me     master-us-west-2a.masters.kubernetes.arungupta.me\r\nautoscaling-group master-us-west-2b.masters.kubernetes.arungupta.me     master-us-west-2b.masters.kubernetes.arungupta.me\r\nautoscaling-group master-us-west-2c.masters.kubernetes.arungupta.me     master-us-west-2c.masters.kubernetes.arungupta.me\r\nautoscaling-group nodes.kubernetes.arungupta.me        nodes.kubernetes.arungupta.me\r\ndhcp-options  kubernetes.arungupta.me         dopt-9b7b08ff\r\niam-instance-profile masters.kubernetes.arungupta.me        masters.kubernetes.arungupta.me\r\niam-instance-profile nodes.kubernetes.arungupta.me        nodes.kubernetes.arungupta.me\r\niam-role  masters.kubernetes.arungupta.me        masters.kubernetes.arungupta.me\r\niam-role  nodes.kubernetes.arungupta.me        nodes.kubernetes.arungupta.me\r\ninstance  master-us-west-2a.masters.kubernetes.arungupta.me     i-8798eb9f\r\ninstance  master-us-west-2b.masters.kubernetes.arungupta.me     i-eca96ab3\r\ninstance  master-us-west-2c.masters.kubernetes.arungupta.me     i-63fd3dbf\r\ninstance  nodes.kubernetes.arungupta.me        i-21a96a7e\r\ninstance  nodes.kubernetes.arungupta.me        i-57fb3b8b\r\ninstance  nodes.kubernetes.arungupta.me        i-5c99ea44\r\ninternet-gateway kubernetes.arungupta.me         igw-b624abd2\r\nkeypair   kubernetes.kubernetes.arungupta.me-18:90:41:6f:5f:79:6a:a8:d5:b6:b8:3f:10:d5:d3:f3 kubernetes.kubernetes.arungupta.me-18:90:41:6f:5f:79:6a:a8:d5:b6:b8:3f:10:d5:d3:f3\r\nroute-table  kubernetes.arungupta.me         rtb-e44df183\r\nroute53-record  api.internal.kubernetes.arungupta.me.       Z6I41VJM5VCZV\/api.internal.kubernetes.arungupta.me.\r\nroute53-record  api.kubernetes.arungupta.me.        Z6I41VJM5VCZV\/api.kubernetes.arungupta.me.\r\nroute53-record  etcd-events-us-west-2a.internal.kubernetes.arungupta.me.    Z6I41VJM5VCZV\/etcd-events-us-west-2a.internal.kubernetes.arungupta.me.\r\nroute53-record  etcd-events-us-west-2b.internal.kubernetes.arungupta.me.    Z6I41VJM5VCZV\/etcd-events-us-west-2b.internal.kubernetes.arungupta.me.\r\nroute53-record  etcd-events-us-west-2c.internal.kubernetes.arungupta.me.    Z6I41VJM5VCZV\/etcd-events-us-west-2c.internal.kubernetes.arungupta.me.\r\nroute53-record  etcd-us-west-2a.internal.kubernetes.arungupta.me.     Z6I41VJM5VCZV\/etcd-us-west-2a.internal.kubernetes.arungupta.me.\r\nroute53-record  etcd-us-west-2b.internal.kubernetes.arungupta.me.     Z6I41VJM5VCZV\/etcd-us-west-2b.internal.kubernetes.arungupta.me.\r\nroute53-record  etcd-us-west-2c.internal.kubernetes.arungupta.me.     Z6I41VJM5VCZV\/etcd-us-west-2c.internal.kubernetes.arungupta.me.\r\nsecurity-group  masters.kubernetes.arungupta.me        sg-3e790f47\r\nsecurity-group  nodes.kubernetes.arungupta.me        sg-3f790f46\r\nsubnet   us-west-2a.kubernetes.arungupta.me       subnet-3cdbc958\r\nsubnet   us-west-2b.kubernetes.arungupta.me       subnet-18c3f76e\r\nsubnet   us-west-2c.kubernetes.arungupta.me       subnet-b30f6deb\r\nvolume   us-west-2a.etcd-events.kubernetes.arungupta.me      vol-202350a8\r\nvolume   us-west-2a.etcd-main.kubernetes.arungupta.me      vol-0a235082\r\nvolume   us-west-2b.etcd-events.kubernetes.arungupta.me      vol-401f5bf4\r\nvolume   us-west-2b.etcd-main.kubernetes.arungupta.me      vol-691f5bdd\r\nvolume   us-west-2c.etcd-events.kubernetes.arungupta.me      vol-aefe163b\r\nvolume   us-west-2c.etcd-main.kubernetes.arungupta.me      vol-e9fd157c\r\nvpc   kubernetes.arungupta.me         vpc-e5f50382\r\n\r\ninternet-gateway:igw-b624abd2 still has dependencies, will retry\r\nkeypair:kubernetes.kubernetes.arungupta.me-18:90:41:6f:5f:79:6a:a8:d5:b6:b8:3f:10:d5:d3:f3 ok\r\ninstance:i-5c99ea44 ok\r\ninstance:i-63fd3dbf ok\r\ninstance:i-eca96ab3 ok\r\ninstance:i-21a96a7e ok\r\nautoscaling-group:master-us-west-2a.masters.kubernetes.arungupta.me ok\r\nautoscaling-group:master-us-west-2b.masters.kubernetes.arungupta.me ok\r\nautoscaling-group:master-us-west-2c.masters.kubernetes.arungupta.me ok\r\nautoscaling-group:nodes.kubernetes.arungupta.me ok\r\niam-instance-profile:nodes.kubernetes.arungupta.me ok\r\niam-instance-profile:masters.kubernetes.arungupta.me ok\r\ninstance:i-57fb3b8b ok\r\ninstance:i-8798eb9f ok\r\nroute53-record:Z6I41VJM5VCZV\/etcd-events-us-west-2a.internal.kubernetes.arungupta.me. ok\r\niam-role:nodes.kubernetes.arungupta.me ok\r\niam-role:masters.kubernetes.arungupta.me ok\r\nautoscaling-config:nodes.kubernetes.arungupta.me-20161101235639 ok\r\nautoscaling-config:master-us-west-2b.masters.kubernetes.arungupta.me-20161101235639 ok\r\nsubnet:subnet-b30f6deb still has dependencies, will retry\r\nsubnet:subnet-3cdbc958 still has dependencies, will retry\r\nsubnet:subnet-18c3f76e still has dependencies, will retry\r\nautoscaling-config:master-us-west-2a.masters.kubernetes.arungupta.me-20161101235639 ok\r\nautoscaling-config:master-us-west-2c.masters.kubernetes.arungupta.me-20161101235639 ok\r\nvolume:vol-0a235082 still has dependencies, will retry\r\nvolume:vol-202350a8 still has dependencies, will retry\r\nvolume:vol-401f5bf4 still has dependencies, will retry\r\nvolume:vol-e9fd157c still has dependencies, will retry\r\nvolume:vol-aefe163b still has dependencies, will retry\r\nvolume:vol-691f5bdd still has dependencies, will retry\r\nsecurity-group:sg-3f790f46 still has dependencies, will retry\r\nsecurity-group:sg-3e790f47 still has dependencies, will retry\r\nNot all resources deleted; waiting before reattempting deletion\r\n internet-gateway:igw-b624abd2\r\n security-group:sg-3f790f46\r\n volume:vol-aefe163b\r\n route-table:rtb-e44df183\r\n volume:vol-401f5bf4\r\n subnet:subnet-18c3f76e\r\n security-group:sg-3e790f47\r\n volume:vol-691f5bdd\r\n subnet:subnet-3cdbc958\r\n volume:vol-202350a8\r\n volume:vol-0a235082\r\n dhcp-options:dopt-9b7b08ff\r\n subnet:subnet-b30f6deb\r\n volume:vol-e9fd157c\r\n vpc:vpc-e5f50382\r\ninternet-gateway:igw-b624abd2 still has dependencies, will retry\r\nvolume:vol-e9fd157c still has dependencies, will retry\r\nsubnet:subnet-3cdbc958 still has dependencies, will retry\r\nsubnet:subnet-18c3f76e still has dependencies, will retry\r\nsubnet:subnet-b30f6deb still has dependencies, will retry\r\nvolume:vol-0a235082 still has dependencies, will retry\r\nvolume:vol-aefe163b still has dependencies, will retry\r\nvolume:vol-691f5bdd still has dependencies, will retry\r\nvolume:vol-202350a8 still has dependencies, will retry\r\nvolume:vol-401f5bf4 still has dependencies, will retry\r\nsecurity-group:sg-3f790f46 still has dependencies, will retry\r\nsecurity-group:sg-3e790f47 still has dependencies, will retry\r\nNot all resources deleted; waiting before reattempting deletion\r\n subnet:subnet-b30f6deb\r\n volume:vol-e9fd157c\r\n vpc:vpc-e5f50382\r\n internet-gateway:igw-b624abd2\r\n security-group:sg-3f790f46\r\n volume:vol-aefe163b\r\n route-table:rtb-e44df183\r\n volume:vol-401f5bf4\r\n subnet:subnet-18c3f76e\r\n security-group:sg-3e790f47\r\n volume:vol-691f5bdd\r\n subnet:subnet-3cdbc958\r\n volume:vol-202350a8\r\n volume:vol-0a235082\r\n dhcp-options:dopt-9b7b08ff\r\nsubnet:subnet-18c3f76e still has dependencies, will retry\r\nsubnet:subnet-b30f6deb still has dependencies, will retry\r\ninternet-gateway:igw-b624abd2 still has dependencies, will retry\r\nsubnet:subnet-3cdbc958 still has dependencies, will retry\r\nvolume:vol-691f5bdd still has dependencies, will retry\r\nvolume:vol-0a235082 still has dependencies, will retry\r\nvolume:vol-202350a8 still has dependencies, will retry\r\nvolume:vol-401f5bf4 still has dependencies, will retry\r\nvolume:vol-aefe163b still has dependencies, will retry\r\nvolume:vol-e9fd157c still has dependencies, will retry\r\nsecurity-group:sg-3e790f47 still has dependencies, will retry\r\nsecurity-group:sg-3f790f46 still has dependencies, will retry\r\nNot all resources deleted; waiting before reattempting deletion\r\n internet-gateway:igw-b624abd2\r\n security-group:sg-3f790f46\r\n volume:vol-aefe163b\r\n route-table:rtb-e44df183\r\n volume:vol-401f5bf4\r\n subnet:subnet-18c3f76e\r\n security-group:sg-3e790f47\r\n volume:vol-691f5bdd\r\n subnet:subnet-3cdbc958\r\n volume:vol-202350a8\r\n volume:vol-0a235082\r\n dhcp-options:dopt-9b7b08ff\r\n subnet:subnet-b30f6deb\r\n volume:vol-e9fd157c\r\n vpc:vpc-e5f50382\r\nsubnet:subnet-b30f6deb still has dependencies, will retry\r\nvolume:vol-202350a8 still has dependencies, will retry\r\ninternet-gateway:igw-b624abd2 still has dependencies, will retry\r\nsubnet:subnet-18c3f76e still has dependencies, will retry\r\nvolume:vol-e9fd157c still has dependencies, will retry\r\nvolume:vol-aefe163b still has dependencies, will retry\r\nvolume:vol-401f5bf4 still has dependencies, will retry\r\nvolume:vol-691f5bdd still has dependencies, will retry\r\nsecurity-group:sg-3e790f47 still has dependencies, will retry\r\nsecurity-group:sg-3f790f46 still has dependencies, will retry\r\nsubnet:subnet-3cdbc958 still has dependencies, will retry\r\nvolume:vol-0a235082 still has dependencies, will retry\r\nNot all resources deleted; waiting before reattempting deletion\r\n internet-gateway:igw-b624abd2\r\n security-group:sg-3f790f46\r\n volume:vol-aefe163b\r\n route-table:rtb-e44df183\r\n subnet:subnet-18c3f76e\r\n security-group:sg-3e790f47\r\n volume:vol-691f5bdd\r\n volume:vol-401f5bf4\r\n volume:vol-202350a8\r\n subnet:subnet-3cdbc958\r\n volume:vol-0a235082\r\n dhcp-options:dopt-9b7b08ff\r\n subnet:subnet-b30f6deb\r\n volume:vol-e9fd157c\r\n vpc:vpc-e5f50382\r\nsubnet:subnet-18c3f76e ok\r\nvolume:vol-e9fd157c ok\r\nvolume:vol-401f5bf4 ok\r\nvolume:vol-0a235082 ok\r\nvolume:vol-691f5bdd ok\r\nsubnet:subnet-3cdbc958 ok\r\nvolume:vol-aefe163b ok\r\nsubnet:subnet-b30f6deb ok\r\ninternet-gateway:igw-b624abd2 ok\r\nvolume:vol-202350a8 ok\r\nsecurity-group:sg-3f790f46 ok\r\nsecurity-group:sg-3e790f47 ok\r\nroute-table:rtb-e44df183 ok\r\nvpc:vpc-e5f50382 ok\r\ndhcp-options:dopt-9b7b08ff ok\r\n\r\nCluster deleted<\/pre>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/cloud\/kubernetes\/\">couchbase.com\/containers<\/a> fornecem mais detalhes sobre como executar o Couchbase em diferentes estruturas de cont\u00eaineres. Mais informa\u00e7\u00f5es sobre o Couchbase:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/server\/\">Portal do desenvolvedor do Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/twitter.com\/couchbasedev\">@couchbasedev<\/a> ou <a href=\"https:\/\/twitter.com\/couchbase\">@couchbase<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase\u00a0explains how to get\u00a0started with Kubernetes \u00a01.4 on Amazon Web Services.\u00a0A Couchbase service is created in the cluster and a Spring Boot application\u00a0stores a JSON document in the database. It uses [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[],"ppma_author":[8933],"class_list":["post-2428","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Multimaster Kubernetes Cluster on Amazon - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/multimaster-kubernetes-cluster-amazon-kops\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multimaster Kubernetes Cluster on Amazon Using Kops\" \/>\n<meta property=\"og:description\" content=\"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase\u00a0explains how to get\u00a0started with Kubernetes \u00a01.4 on Amazon Web Services.\u00a0A Couchbase service is created in the cluster and a Spring Boot application\u00a0stores a JSON document in the database. It uses [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/multimaster-kubernetes-cluster-amazon-kops\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-06T10:12:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-14T06:44:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cms.cbauthx.com\/site\/_cmsinternal\/binaries\/content\/gallery\/website\/blogs\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-kubernetes-ui-1024x764.png\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Multimaster Kubernetes Cluster on Amazon Using Kops\",\"datePublished\":\"2017-01-06T10:12:07+00:00\",\"dateModified\":\"2023-08-14T06:44:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/\"},\"wordCount\":790,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/\",\"name\":\"Multimaster Kubernetes Cluster on Amazon - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-06T10:12:07+00:00\",\"dateModified\":\"2023-08-14T06:44:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multimaster Kubernetes Cluster on Amazon Using Kops\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Multimaster Kubernetes Cluster on Amazon - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/multimaster-kubernetes-cluster-amazon-kops\/","og_locale":"pt_BR","og_type":"article","og_title":"Multimaster Kubernetes Cluster on Amazon Using Kops","og_description":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase\u00a0explains how to get\u00a0started with Kubernetes \u00a01.4 on Amazon Web Services.\u00a0A Couchbase service is created in the cluster and a Spring Boot application\u00a0stores a JSON document in the database. It uses [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/multimaster-kubernetes-cluster-amazon-kops\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-06T10:12:07+00:00","article_modified_time":"2023-08-14T06:44:23+00:00","og_image":[{"url":"https:\/\/cms.cbauthx.com\/site\/_cmsinternal\/binaries\/content\/gallery\/website\/blogs\/november-2016\/multimaster-kubernetes-cluster-on-amazon-using-kops\/kops-kubernetes-ui-1024x764.png","type":"","width":"","height":""}],"author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Multimaster Kubernetes Cluster on Amazon Using Kops","datePublished":"2017-01-06T10:12:07+00:00","dateModified":"2023-08-14T06:44:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/"},"wordCount":790,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/","url":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/","name":"Multimaster Kubernetes Cluster on Amazon - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-06T10:12:07+00:00","dateModified":"2023-08-14T06:44:23+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/multimaster-kubernetes-cluster-amazon-kops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Multimaster Kubernetes Cluster on Amazon Using Kops"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE. Gupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre uma infinidade de t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","author_category":"","last_name":"Gupta","first_name":"Arun","job_title":"","user_url":"","description":"Arun Gupta \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE.\r\n\r\nGupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre diversos t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2428"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2428\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2428"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}