{"id":2398,"date":"2017-01-06T07:51:53","date_gmt":"2017-01-06T07:51:53","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2398"},"modified":"2025-10-09T07:19:12","modified_gmt":"2025-10-09T14:19:12","slug":"kubernetes-1-4-spring-boot-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/","title":{"rendered":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase"},"content":{"rendered":"<p>Kubernetes 1.4 was released earlier this week. Read the <a href=\"https:\/\/blog.kubernetes.io\/2016\/09\/kubernetes-1.4-making-it-easy-to-run-on-kuberentes-anywhere.html\">blog announcement<\/a> and\u00a0<a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/blob\/master\/CHANGELOG.md\/#v140\">CHANGELOG<\/a>.<br \/>\nThere are quite a few\u00a0new features in this release but the key ones that I&#8217;m excited about are:<\/p>\n<ul>\n<li>Install Kubernetes using <code><a href=\"https:\/\/kubernetes.io\/docs\/getting-started-guides\/kubeadm\/\">kubeadm<\/a><\/code> command. This is in addition to the usual mechanism of downloading from\u00a0https:\/\/github.com\/kubernetes\/kubernetes\/releases. The<br \/>\n<code>kubeadm init<\/code> and <code>kubeadm join<\/code> commands looks very similar to\u00a0<code>docker swarm init<\/code> and <code>docker swarm join<\/code>\u00a0for <a href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Docker Swarm Mode<\/a>.<\/li>\n<li><a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/federation\/replicasets\/\">Federated Replica Sets<\/a><\/li>\n<li>ScheduledJob\u00a0allows to run batch jobs at regular intervals.<\/li>\n<li><a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/node-selection\/\">Constraining pods to a node<\/a>\u00a0and affinity and anti-affinity of pods<\/li>\n<li><a href=\"https:\/\/kubernetes.io\/docs\/admin\/rescheduler\/#guaranteed-scheduling-of-critical-add-on-pods\">Priority scheduling<\/a> of pods<\/li>\n<li>Nice looking <a href=\"https:\/\/github.com\/kubernetes\/dashboard#kubernetes-dashboard\">Kubernetes Dashboard<\/a> (more on this later)<\/li>\n<\/ul>\n<p>This blog will show:<\/p>\n<ul>\n<li>Create a Kubernetes cluster using\u00a0Amazon Web Services<\/li>\n<li>Create a Couchbase service<\/li>\n<li>Run a Spring Boot application that stores a JSON document in Couchbase<\/li>\n<\/ul>\n<p>All the resource description files\u00a0in this\u00a0blog are\u00a0at <a href=\"https:\/\/github.com\/arun-gupta\/kubernetes-java-sample\/tree\/master\/maven\">github.com\/arun-gupta\/kubernetes-java-sample\/tree\/master\/maven<\/a>.<\/p>\n<h2>Start Kubernetes Cluster<\/h2>\n<p>Download binary <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> and extract Include <code>kubernetes\/cluster<\/code> in PATH Start<br \/>\na 2-node Kubernetes cluster:<\/p>\n<pre class=\"lang:default decode:true\">NUM_NODES=2 NODE_SIZE=m3.medium KUBERNETES_PROVIDER=aws kube-up.sh<\/pre>\n<p>The log will be shown as:<\/p>\n<pre class=\"lang:default decode:true\">... Starting cluster in us-west-2a using provider aws\r\n... calling verify-prereqs\r\n... calling kube-up\r\nStarting cluster using os distro: jessie\r\nUploading to Amazon S3\r\n+++ Staging server tars to S3 Storage: kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\r\nupload: ..\/..\/..\/..\/..\/var\/folders\/81\/ttv4n16x7p390cttrm_675y00000gn\/T\/kubernetes.XXXXXX.bCmvLbtK\/s3\/bootstrap-script to s3:\/\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/bootstrap-script\r\nUploaded server tars:\r\n  SERVER_BINARY_TAR_URL: https:\/\/s3.amazonaws.com\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/kubernetes-server-linux-amd64.tar.gz\r\n  SALT_TAR_URL: https:\/\/s3.amazonaws.com\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/kubernetes-salt.tar.gz\r\n  BOOTSTRAP_SCRIPT_URL: https:\/\/s3.amazonaws.com\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/bootstrap-script\r\nINSTANCEPROFILE arn:aws:iam::598307997273:instance-profile\/kubernetes-master 2016-07-29T15:13:35Z AIPAJF3XKLNKOXOTQOCT4 kubernetes-master \/\r\nROLES arn:aws:iam::598307997273:role\/kubernetes-master 2016-07-29T15:13:33Z \/ AROAI3Q2KFBD5PCKRXCRM kubernetes-master\r\nASSUMEROLEPOLICYDOCUMENT 2012-10-17\r\nSTATEMENT sts:AssumeRole Allow\r\nPRINCIPAL ec2.amazonaws.com\r\nINSTANCEPROFILE arn:aws:iam::598307997273:instance-profile\/kubernetes-minion 2016-07-29T15:13:39Z AIPAIYSH5DJA4UPQIP4BE kubernetes-minion \/\r\nROLES arn:aws:iam::598307997273:role\/kubernetes-minion 2016-07-29T15:13:37Z \/ AROAIQ57MPQYSHRPQCT2Q kubernetes-minion\r\nASSUMEROLEPOLICYDOCUMENT 2012-10-17\r\nSTATEMENT sts:AssumeRole Allow\r\nPRINCIPAL ec2.amazonaws.com\r\nUsing SSH key with (AWS) fingerprint: SHA256:dX\/5wpWuUxYar2NFuGwiZuRiydiZCyx4DGoZ5\/jL\/j8\r\nCreating vpc.\r\nAdding tag to vpc-6b5b4b0f: Name=kubernetes-vpc\r\nAdding tag to vpc-6b5b4b0f: KubernetesCluster=kubernetes\r\nUsing VPC vpc-6b5b4b0f\r\nAdding tag to dopt-8fe770eb: Name=kubernetes-dhcp-option-set\r\nAdding tag to dopt-8fe770eb: KubernetesCluster=kubernetes\r\nUsing DHCP option set dopt-8fe770eb\r\nCreating subnet.\r\nAdding tag to subnet-623a0206: KubernetesCluster=kubernetes\r\nUsing subnet subnet-623a0206\r\nCreating Internet Gateway.\r\nUsing Internet Gateway igw-251eab41\r\nAssociating route table.\r\nCreating route table\r\nAdding tag to rtb-d43cedb3: KubernetesCluster=kubernetes\r\nAssociating route table rtb-d43cedb3 to subnet subnet-623a0206\r\nAdding route to route table rtb-d43cedb3\r\nUsing Route Table rtb-d43cedb3\r\nCreating master security group.\r\nCreating security group kubernetes-master-kubernetes.\r\nAdding tag to sg-d20ca0ab: KubernetesCluster=kubernetes\r\nCreating minion security group.\r\nCreating security group kubernetes-minion-kubernetes.\r\nAdding tag to sg-cd0ca0b4: KubernetesCluster=kubernetes\r\nUsing master security group: kubernetes-master-kubernetes sg-d20ca0ab\r\nUsing minion security group: kubernetes-minion-kubernetes sg-cd0ca0b4\r\nCreating master disk: size 20GB, type gp2\r\nAdding tag to vol-99a30b11: Name=kubernetes-master-pd\r\nAdding tag to vol-99a30b11: KubernetesCluster=kubernetes\r\nAllocated Elastic IP for master: 52.40.9.27\r\nAdding tag to vol-99a30b11: kubernetes.io\/master-ip=52.40.9.27\r\nGenerating certs for alternate-names: IP:52.40.9.27,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\r\nStarting Master\r\nAdding tag to i-f95bdae1: Name=kubernetes-master\r\nAdding tag to i-f95bdae1: Role=kubernetes-master\r\nAdding tag to i-f95bdae1: KubernetesCluster=kubernetes\r\nWaiting for master to be ready\r\nAttempt 1 to check for master nodeWaiting for instance i-f95bdae1 to be running (currently pending)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be running (currently pending)\r\nSleeping for 3 seconds...\r\n [master running]\r\nAttaching IP 52.40.9.27 to instance i-f95bdae1\r\nAttaching persistent data volume (vol-99a30b11) to master\r\n2016-09-29T05:14:28.098Z \/dev\/sdb i-f95bdae1 attaching vol-99a30b11\r\ncluster \"aws_kubernetes\" set.\r\nuser \"aws_kubernetes\" set.\r\ncontext \"aws_kubernetes\" set.\r\nswitched to context \"aws_kubernetes\".\r\nuser \"aws_kubernetes-basic-auth\" set.\r\nWrote config for aws_kubernetes to \/Users\/arungupta\/.kube\/config\r\nCreating minion configuration\r\nCreating autoscaling group\r\n 0 minions started; waiting\r\n 0 minions started; waiting\r\n 0 minions started; waiting\r\n 0 minions started; waiting\r\n 2 minions started; ready\r\nWaiting for cluster initialization.\r\n\r\n  This will continually check to see if the API for kubernetes is reachable.\r\n  This might loop forever if there was some uncaught error during start\r\n  up.\r\n\r\n..............................................................................................................................................................................................................................Kubernetes cluster created.\r\nSanity checking cluster...\r\nAttempt 1 to check Docker on node @ 54.70.225.33 ...working\r\nAttempt 1 to check Docker on node @ 54.71.36.48 ...working\r\n\r\nKubernetes cluster is running.  The master is running at:\r\n\r\n  https:\/\/52.40.9.27\r\n\r\nThe user name and password to use is located in \/Users\/arungupta\/.kube\/config.\r\n\r\n... calling validate-cluster\r\nWaiting for 2 ready nodes. 0 ready nodes, 0 registered. Retrying.\r\nWaiting for 2 ready nodes. 0 ready nodes, 0 registered. Retrying.\r\nWaiting for 2 ready nodes. 0 ready nodes, 0 registered. Retrying.\r\nWaiting for 2 ready nodes. 0 ready nodes, 2 registered. Retrying.\r\nWaiting for 2 ready nodes. 0 ready nodes, 2 registered. Retrying.\r\nFound 2 node(s).\r\nNAME                                         STATUS    AGE\r\nip-172-20-0-111.us-west-2.compute.internal   Ready     39s\r\nip-172-20-0-112.us-west-2.compute.internal   Ready     42s\r\nValidate output:\r\nNAME                 STATUS    MESSAGE              ERROR\r\nscheduler            Healthy   ok                   \r\ncontroller-manager   Healthy   ok                   \r\netcd-0               Healthy   {\"health\": \"true\"}   \r\netcd-1               Healthy   {\"health\": \"true\"}   \r\nCluster validation succeeded\r\nDone, listing cluster services:\r\n\r\nKubernetes master is running at https:\/\/52.40.9.27\r\nElasticsearch is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/elasticsearch-logging\r\nHeapster is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/heapster\r\nKibana is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kibana-logging\r\nKubeDNS is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-dns\r\nkubernetes-dashboard is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kubernetes-dashboard\r\nGrafana is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-grafana\r\nInfluxDB is running at https:\/\/52.40.9.27\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-influxdb\r\n\r\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.<\/pre>\n<p>This shows that the\u00a0Kubernetes cluster has started successfully.<\/p>\n<h2>Deploy\u00a0Couchbase\u00a0Service<\/h2>\n<p>Create Couchbase service and replication controller:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh create -f couchbase-service.yml\r\nservice \"couchbase-service\" created\r\nreplicationcontroller \"couchbase-rc\" created<\/pre>\n<p>The configuration file is at <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>. This creates a Couchbase service\u00a0and<br \/>\nthe backing replication controller. Name of the service is <code>couchbase-service<\/code>. This will be used later by the\u00a0Spring Boot application to communicate with the database. Check the status of pods:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get -w pods\r\nNAME                 READY     STATUS              RESTARTS   AGE\r\ncouchbase-rc-gu9gl   0\/1       ContainerCreating   0          6s\r\nNAME                 READY     STATUS    RESTARTS   AGE\r\ncouchbase-rc-gu9gl   1\/1       Running   0          2m<\/pre>\n<p>Note, how the\u00a0pod status changes from ContainerCreating to Running. The image is downloaded and started in the meanwhile.<\/p>\n<h2>Run Spring Boot Application<\/h2>\n<p>Run the application:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh create -f bootiful-couchbase.yml \r\npod \"bootiful-couchbase\" created<\/pre>\n<p>The configuration file is at\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>. In this\u00a0service,<br \/>\n<code>COUCHBASE_URI<\/code> environment variable\u00a0value is set to <code>couchbase-service<\/code>. This is the service name created earlier. Docker image used for this service is <code>arungupta\/bootiful-couchbase<\/code> and is created using<br \/>\n<a href=\"https:\/\/github.com\/fabric8io\/docker-maven-plugin\">fabric8-maven-plugin<\/a> as shown at\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/webapp\/pom.xml#L57-L68\">github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/webapp\/pom.xml#L57-L68<\/a>.<br \/>\nSpecifically, the command for the Docker image is:<\/p>\n<pre class=\"lang:default decode:true\">java -Dspring.couchbase.bootstrap-hosts=$COUCHBASE_URI -jar \/maven\/${project.artifactId}.jar<\/pre>\n<p>This ensures that <code>COUCHBASE_URI<\/code> environment variable is overriding <code>spring.couchbase.bootstrap-hosts<\/code> property as\u00a0defined in <a href=\"https:\/\/github.com\/arun-gupta\/kubernetes-java-sample\/blob\/master\/maven\/webapp\/src\/main\/resources\/application.properties\">application.properties<\/a> of the Spring Boot application. Get the logs:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh logs -f bootiful-couchbase\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-09-29 05:37:29.227  INFO 5 --- [           main] org.example.webapp.Application           : Starting Application v1.0-SNAPSHOT on bootiful-couchbase with PID 5 (\/maven\/bootiful-couchbase.jar started by root in \/)\r\n2016-09-29 05:37:29.259  INFO 5 --- [           main] org.example.webapp.Application           : No active profile set, falling back to default profiles: default\r\n2016-09-29 05:37:29.696  INFO 5 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4ccabbaa: startup date [Thu Sep 29 05:37:29 UTC 2016]; root of context hierarchy\r\n2016-09-29 05:37:34.375  INFO 5 --- [           main] c.c.client.core.env.CoreEnvironment      : ioPoolSize is less than 3 (1), setting to: 3\r\n2016-09-29 05:37:34.376  INFO 5 --- [           main] c.c.client.core.env.CoreEnvironment      : computationPoolSize is less than 3 (1), setting to: 3\r\n2016-09-29 05:37:35.026  INFO 5 --- [           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=3, computationPoolSize=3, 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-09-29 05:37:36.063  INFO 5 --- [      cb-io-1-1] com.couchbase.client.core.node.Node      : Connected to Node couchbase-service\r\n2016-09-29 05:37:36.256  INFO 5 --- [      cb-io-1-1] com.couchbase.client.core.node.Node      : Disconnected from Node couchbase-service\r\n2016-09-29 05:37:37.727  INFO 5 --- [      cb-io-1-2] com.couchbase.client.core.node.Node      : Connected to Node couchbase-service\r\n2016-09-29 05:37:38.316  INFO 5 --- [-computations-3] c.c.c.core.config.ConfigurationProvider  : Opened bucket books\r\n2016-09-29 05:37:40.655  INFO 5 --- [           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-09-29 05:37:41.497  INFO 5 --- [           main] org.example.webapp.Application           : Started Application in 14.64 seconds (JVM running for 16.631)\r\n2016-09-29 05:37:41.514  INFO 5 --- [       Thread-5] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@4ccabbaa: startup date [Thu Sep 29 05:37:29 UTC 2016]; root of context hierarchy\r\n2016-09-29 05:37:41.528  INFO 5 --- [       Thread-5] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown\r\n2016-09-29 05:37:41.577  INFO 5 --- [      cb-io-1-2] com.couchbase.client.core.node.Node      : Disconnected from Node couchbase-service\r\n2016-09-29 05:37:41.578  INFO 5 --- [       Thread-5] c.c.c.core.config.ConfigurationProvider  : Closed bucket books<\/pre>\n<p>The main output statement to look in this is<\/p>\n<pre class=\"lang:default decode:true\">Book{isbn=978-1-4919-1889-0, name=Minecraft Modding with Forge, cost=29.99}<\/pre>\n<p>This indicates that the JSON document is upserted (either inserted or updated) in the\u00a0Couchbase database.<\/p>\n<h2>Kubernetes Dashboard<\/h2>\n<p><a href=\"https:\/\/github.com\/kubernetes\/dashboard#kubernetes-dashboard\">Kubernetes Dashboard<\/a>\u00a0is look more comprehensive and claimed to have 90% parity with the CLI. Use\u00a0<span class=\"s1\"><code>kubectl.sh config view<\/code> command to view the configuration information about the cluster. It looks like:<\/span><\/p>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nclusters:\r\n- cluster:\r\n    certificate-authority-data: REDACTED\r\n    server: https:\/\/52.40.9.27\r\n  name: aws_kubernetes\r\ncontexts:\r\n- context:\r\n    cluster: aws_kubernetes\r\n    user: aws_kubernetes\r\n  name: aws_kubernetes\r\ncurrent-context: aws_kubernetes\r\nkind: Config\r\npreferences: {}\r\nusers:\r\n- name: aws_kubernetes\r\n  user:\r\n    client-certificate-data: REDACTED\r\n    client-key-data: REDACTED\r\n    token: 3GuTCLvFnINHed9dWICICidlrSv8C0kg\r\n- name: aws_kubernetes-basic-auth\r\n  user:\r\n    password: 8pxC121Oj7kN0nCa\r\n    username: admin<\/pre>\n<p>The\u00a0<code>clusters.cluster.server<\/code> property value shows the location of Kubernetes master. The <code>users<\/code> property show\u00a0two users that can be used to access the dashboard.\u00a0Second one uses basic authentication and so copy the<br \/>\n<code>username<\/code> and <code>password<\/code> property value. In our case, Dashboard UI is accessible at\u00a0https:\/\/52.40.9.27\/ui.<br \/>\n<a href=\"\/wp-content\/original-assets\/september-2016\/getting-started-with-kubernetes-1.4-using-spring-boot-and-couchbase\/kubernetes-dashboard-1.4-1024x746.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14300\" src=\"\/wp-content\/original-assets\/september-2016\/getting-started-with-kubernetes-1.4-using-spring-boot-and-couchbase\/kubernetes-dashboard-1.4-1024x746.png\" alt=\"kubernetes-dashboard-1-4\" width=\"604\" height=\"440\" \/><\/a><br \/>\nAll the Kubernetes resources can be easily seen in this fancy dashboard.<\/p>\n<h2>Shutdown Kubernetes Cluster<\/h2>\n<p>Finally, shutdown the Kubernetes cluster:<\/p>\n<pre class=\"lang:default decode:true\">kube-down.sh\r\nBringing down cluster using provider: aws\r\nDeleting instances in VPC: vpc-6b5b4b0f\r\nDeleting auto-scaling group: kubernetes-minion-group-us-west-2a\r\nDeleting auto-scaling launch configuration: kubernetes-minion-group-us-west-2a\r\nDeleting auto-scaling group: kubernetes-minion-group-us-west-2a\r\nWaiting for instances to be deleted\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-f95bdae1 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nAll instances deleted\r\nReleasing Elastic IP: 52.40.9.27\r\nDeleting volume vol-99a30b11\r\nCleaning up resources in VPC: vpc-6b5b4b0f\r\nCleaning up security group: sg-cd0ca0b4\r\nCleaning up security group: sg-d20ca0ab\r\nDeleting security group: sg-cd0ca0b4\r\nDeleting security group: sg-d20ca0ab\r\nDeleting VPC: vpc-6b5b4b0f\r\nDone<\/pre>\n<p><a href=\"https:\/\/www.couchbase.com\/products\/cloud\/kubernetes\/\">https:\/\/www.couchbase.com\/products\/cloud\/kubernetes<\/a> provide more details about running Couchbase using different orchestration frameworks. Further references:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/forums\/\">Couchbase Forums<\/a> or\u00a0<a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\">StackOverflow<\/a><\/li>\n<li>Follow us at <a href=\"https:\/\/twitter.com\/couchbasedev\">@couchbasedev<\/a> or <a href=\"https:\/\/twitter.com\/couchbase\">@couchbase<\/a><\/li>\n<li>Read more about <a href=\"https:\/\/developer.couchbase.com\/server\">Couchbase Server<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes 1.4 was released earlier this week. Read the blog announcement and\u00a0CHANGELOG. There are quite a few\u00a0new features in this release but the key ones that I&#8217;m excited about are: Install Kubernetes using kubeadm command. This is in addition to [&hellip;]<\/p>\n","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-2398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase - 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\/kubernetes-1-4-spring-boot-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase\" \/>\n<meta property=\"og:description\" content=\"Kubernetes 1.4 was released earlier this week. Read the blog announcement and\u00a0CHANGELOG. There are quite a few\u00a0new features in this release but the key ones that I&#8217;m excited about are: Install Kubernetes using kubeadm command. This is in addition to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-06T07:51:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:19:12+00:00\" \/>\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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase\",\"datePublished\":\"2017-01-06T07:51:53+00:00\",\"dateModified\":\"2025-10-09T14:19:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/\"},\"wordCount\":517,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/\",\"name\":\"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-06T07:51:53+00:00\",\"dateModified\":\"2025-10-09T14:19:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kubernetes-1-4-spring-boot-couchbase\\\/#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\\\/kubernetes-1-4-spring-boot-couchbase\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g8900a75409c646948fe0bd80f6240337\",\"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\\\/author\\\/arun-gupta\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase - 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\/kubernetes-1-4-spring-boot-couchbase\/","og_locale":"en_US","og_type":"article","og_title":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase","og_description":"Kubernetes 1.4 was released earlier this week. Read the blog announcement and\u00a0CHANGELOG. There are quite a few\u00a0new features in this release but the key ones that I&#8217;m excited about are: Install Kubernetes using kubeadm command. This is in addition to [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-06T07:51:53+00:00","article_modified_time":"2025-10-09T14:19:12+00:00","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":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase","datePublished":"2017-01-06T07:51:53+00:00","dateModified":"2025-10-09T14:19:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/"},"wordCount":517,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/","name":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-06T07:51:53+00:00","dateModified":"2025-10-09T14:19:12+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-1-4-spring-boot-couchbase\/#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\/kubernetes-1-4-spring-boot-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with Kubernetes 1.4 using Spring Boot and Couchbase"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g8900a75409c646948fe0bd80f6240337","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\/author\/arun-gupta\/"}]}},"acf":[],"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","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2398"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2398\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2398"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}