{"id":2185,"date":"2017-01-03T19:36:36","date_gmt":"2017-01-03T19:36:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2185"},"modified":"2019-05-08T08:51:49","modified_gmt":"2019-05-08T15:51:49","slug":"kubernetes-cluster-google-cloud-expose-service","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/","title":{"rendered":"Kubernetes Cluster on Google Cloud and Expose Couchbase Service"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12277\" src=\"\/wp-content\/original-assets\/kubernetes-logo.png\" alt=\"kubernetes-logo\" width=\"154\" height=\"136\" \/><\/p>\n<p>This blog is part of a multi-part\u00a0blog series that shows how to run your applications\u00a0on Kubernetes. It will use the\u00a0<a href=\"https:\/\/developer.couchbase.com\/server\">Couchbase<\/a>, an open source NoSQL distributed document database, as the\u00a0\u00a0Docker container.<\/p>\n<p>The first part (<a href=\"https:\/\/www.couchbase.com\/blog\/couchbase-on-kubernetes\/\">Couchbase on Kubernetes<\/a>)\u00a0explained\u00a0how to start the\u00a0Kubernetes cluster using Vagrant. The second part (<a href=\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-amazon-expose-service\/\">Kubernetes\u00a0on Amazon<\/a>) explained\u00a0how run that setup on Amazon Web Services.<\/p>\n<p>This third\u00a0part will show:<\/p>\n<ul>\n<li>How to setup and start the\u00a0Kubernetes cluster on\u00a0Google Cloud<\/li>\n<li>Run Docker container in the Kubernetes cluster<\/li>\n<li>Expose Pod on Kubernetes as Service<\/li>\n<li>Shutdown the cluster<\/li>\n<\/ul>\n<p>Here is a quick overview:<\/p>\n<p><a href=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/kubernetes-cluster-google-cloud-couchbase-1024x600.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13718\" src=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/kubernetes-cluster-google-cloud-couchbase-1024x600.png\" alt=\"Kubernetes Cluster on Google Cloud\" width=\"604\" height=\"354\" \/><\/a><\/p>\n<p>Let&#8217;s get into details!<\/p>\n<p><a href=\"https:\/\/kubernetes.io\/v1.1\/docs\/getting-started-guides\/gce.html\">Getting Started with Google\u00a0Compute Engine<\/a>\u00a0provide detailed instructions on how to setup Kubernetes on Google Cloud.<\/p>\n<h2>Download and Configure Google\u00a0Cloud SDK<\/h2>\n<p>There is a bit of setup required if you&#8217;ve never\u00a0accessed Google Cloud on your machine. This was a bit overwhelming and wish can be simplified.<\/p>\n<ul>\n<li>Create a billable account on <a href=\"https:\/\/cloud.google.com\/\">Google Cloud<\/a><\/li>\n<li>Install <a href=\"https:\/\/cloud.google.com\/sdk\/\">Google Cloud SDK<\/a><\/li>\n<li>Configure credentials: gcloud auth login<\/li>\n<li>Create a new Google Cloud project and name it <code>couchbase-on-kubernetes<\/code><\/li>\n<li>Set the project: <code>gcloud config set project couchbase-on-kubernetes<\/code><\/li>\n<li>Set\u00a0default zone:\u00a0<code>gcloud config set compute\/zone us-central1-a<\/code><\/li>\n<li>Create an instance:\u00a0<code>gcloud compute instances create example-instance --machine-type n1-standard-1 --image debian-8<\/code><\/li>\n<li>SSH into the instance:\u00a0<code>gcloud compute ssh example-instance<\/code><\/li>\n<li>Delete the instance: <code>gcloud compute instances delete example-instance<\/code><\/li>\n<\/ul>\n<h2>Setup Kubernetes Cluster on Google Cloud<\/h2>\n<p>Kubernetes cluster can be created on Google Cloud\u00a0as:<\/p>\n<pre class=\"lang:default decode:true\">set KUBERNETES_PROVIDER=gce\r\n.\/cluster\/kube-up.sh<\/pre>\n<p>Make sure <code>KUBERNETES_PROVIDER<\/code> is either set to <code>gce<\/code> or not set at all. By default, this provisions\u00a0a 4 node Kubernetes cluster with one master. This means 5 Virtual Machines are created.<\/p>\n<p>If you downloaded Kubernetes from <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/releases\">github.com\/kubernetes\/kubernetes\/releases<\/a>, then all the values can be changed in\u00a0<code>cluster\/aws\/config-default.sh<\/code>.<\/p>\n<p>Starting Kubernetes on Google Cloud\u00a0shows the following log. Google Cloud SDK was behaving little weird but taking the defaults seem to work:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kube-up.sh \r\n... Starting cluster using provider: gce\r\n... calling verify-prereqs\r\nYou have specified individual components to update.  If you are trying\r\n to install new components, use:\r\n  $ gcloud components install alpha\r\n\r\nDo you want to run install instead (y\/N)?  \r\n\r\n\r\n\r\nYour current Cloud SDK version is: 99.0.0\r\nInstalling components from version: 99.0.0\r\n\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502     These components will be installed.      \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502          Name         \u2502  Version   \u2502   Size  \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 gcloud Alpha Commands \u2502 2016.01.12 \u2502 &lt; 1 MiB \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n\r\nFor the latest full release notes, please visit:\r\n  https:\/\/cloud.google.com\/sdk\/release_notes\r\n\r\nDo you want to continue (Y\/n)?  \r\n\r\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\r\n\u2560\u2550 Creating update staging area                             \u2550\u2563\r\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\r\n\u2560\u2550 Installing: gcloud Alpha Commands                        \u2550\u2563\r\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\r\n\u2560\u2550 Creating backup and activating new installation          \u2550\u2563\r\n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\r\n\r\nPerforming post processing steps...done.\r\n\r\nUpdate done!\r\n\r\nYou have specified individual components to update.  If you are trying\r\n to install new components, use:\r\n  $ gcloud components install beta\r\n\r\nDo you want to run install instead (y\/N)?  \r\n\r\n\r\n\r\nYour current Cloud SDK version is: 99.0.0\r\nInstalling components from version: 99.0.0\r\n\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502     These components will be installed.     \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502         Name         \u2502  Version   \u2502   Size  \u2502\r\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 gcloud Beta Commands \u2502 2016.01.12 \u2502 &lt; 1 MiB \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n\r\nFor the latest full release notes, please visit:\r\n  https:\/\/cloud.google.com\/sdk\/release_notes\r\n\r\nDo you want to continue (Y\/n)?  \r\n\r\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\r\n\u2560\u2550 Creating update staging area                             \u2550\u2563\r\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\r\n\u2560\u2550 Installing: gcloud Beta Commands                         \u2550\u2563\r\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\r\n\u2560\u2550 Creating backup and activating new installation          \u2550\u2563\r\n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\r\n\r\nPerforming post processing steps...done.\r\n\r\nUpdate done!\r\n\r\n\r\nAll components are up to date.\r\n... calling kube-up\r\nYour active configuration is: [default]\r\n\r\nProject: couchbase-on-kubernetes\r\nZone: us-central1-b\r\nCreating gs:\/\/kubernetes-staging-9479406781\r\nCreating gs:\/\/kubernetes-staging-9479406781\/...\r\n+++ Staging server tars to Google Storage: gs:\/\/kubernetes-staging-9479406781\/devel\r\n+++ kubernetes-server-linux-amd64.tar.gz uploaded (sha1 = 1ff42f7c31837851d919a66fc07f34b9dbdacf28)\r\n+++ kubernetes-salt.tar.gz uploaded (sha1 = f307380ad6af7dabcf881b132146fa775c18dca8)\r\nLooking for already existing resources\r\nStarting master and configuring firewalls\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/zones\/us-central1-b\/disks\/kubernetes-master-pd].\r\nNAME                 ZONE          SIZE_GB TYPE   STATUS\r\nkubernetes-master-pd us-central1-b 20      pd-ssd READY\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/regions\/us-central1\/addresses\/kubernetes-master-ip].\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/firewalls\/default-default-ssh].\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/firewalls\/kubernetes-master-https].\r\nNAME                NETWORK SRC_RANGES RULES  SRC_TAGS TARGET_TAGS\r\ndefault-default-ssh default 0.0.0.0\/0  tcp:22\r\nNAME                    NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS\r\nkubernetes-master-https default 0.0.0.0\/0  tcp:443          kubernetes-master\r\n+++ Logging using Fluentd to gcp\r\n.\/kubernetes\/cluster\/..\/cluster\/..\/cluster\/gce\/util.sh: line 434: @: unbound variable\r\n.\/kubernetes\/cluster\/..\/cluster\/..\/cluster\/gce\/util.sh: line 434: @: unbound variable\r\n.\/kubernetes\/cluster\/..\/cluster\/..\/cluster\/gce\/util.sh: line 434: @: unbound variable\r\n.\/kubernetes\/cluster\/..\/cluster\/..\/cluster\/gce\/util.sh: line 434: @: unbound variable\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/firewalls\/default-default-internal].\r\nNAME                     NETWORK SRC_RANGES RULES                        SRC_TAGS TARGET_TAGS\r\ndefault-default-internal default 10.0.0.0\/8 tcp:1-65535,udp:1-65535,icmp\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/firewalls\/kubernetes-minion-all].\r\nNAME                  NETWORK SRC_RANGES    RULES                    SRC_TAGS TARGET_TAGS\r\nkubernetes-minion-all default 10.244.0.0\/16 tcp,udp,icmp,esp,ah,sctp          kubernetes-minion\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/zones\/us-central1-b\/instances\/kubernetes-master].\r\nNAME              ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP     STATUS\r\nkubernetes-master us-central1-b n1-standard-1             10.128.0.2  104.197.213.249 RUNNING\r\nCreating minions.\r\n.\/kubernetes\/cluster\/..\/cluster\/..\/cluster\/gce\/util.sh: line 434: @: unbound variable\r\n.\/kubernetes\/cluster\/..\/cluster\/..\/cluster\/gce\/util.sh: line 434: @: unbound variable\r\nAttempt 1 to create kubernetes-minion-template\r\nWARNING: You have selected a disk size of under [200GB]. This may result in poor I\/O performance. For more information, see: https:\/\/developers.google.com\/compute\/docs\/disks\/persistent-disks#pdperformance.\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/instanceTemplates\/kubernetes-minion-template].\r\nNAME                       MACHINE_TYPE  PREEMPTIBLE CREATION_TIMESTAMP\r\nkubernetes-minion-template n1-standard-1             2016-03-03T14:01:14.322-08:00\r\nCreated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/zones\/us-central1-b\/instanceGroupManagers\/kubernetes-minion-group].\r\nNAME                    ZONE          BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE          AUTOSCALED\r\nkubernetes-minion-group us-central1-b kubernetes-minion       4           kubernetes-minion-template\r\nWaiting for group to become stable, current operations: creating: 4\r\nWaiting for group to become stable, current operations: creating: 4\r\nWaiting for group to become stable, current operations: creating: 4\r\nWaiting for group to become stable, current operations: creating: 4\r\nWaiting for group to become stable, current operations: creating: 4\r\nWaiting for group to become stable, current operations: creating: 4\r\nWaiting for group to become stable, current operations: creating: 3\r\nGroup is stable\r\nMINION_NAMES=kubernetes-minion-1hmm kubernetes-minion-3x1d kubernetes-minion-h1ov kubernetes-minion-nshn\r\nUsing master: kubernetes-master (external IP: 104.197.213.249)\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\nKubernetes cluster created.\r\ncluster \"couchbase-on-kubernetes_kubernetes\" set.\r\nuser \"couchbase-on-kubernetes_kubernetes\" set.\r\ncontext \"couchbase-on-kubernetes_kubernetes\" set.\r\nswitched to context \"couchbase-on-kubernetes_kubernetes\".\r\nuser \"couchbase-on-kubernetes_kubernetes-basic-auth\" set.\r\nWrote config for couchbase-on-kubernetes_kubernetes to \/Users\/arungupta\/.kube\/config\r\n\r\nKubernetes cluster is running.  The master is running at:\r\n\r\n  https:\/\/104.197.213.249\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 4 ready nodes. 0 ready nodes, 0 registered. Retrying.\r\nWaiting for 4 ready nodes. 0 ready nodes, 2 registered. Retrying.\r\nWaiting for 4 ready nodes. 0 ready nodes, 3 registered. Retrying.\r\nWaiting for 4 ready nodes. 0 ready nodes, 4 registered. Retrying.\r\nWaiting for 4 ready nodes. 3 ready nodes, 4 registered. Retrying.\r\nWaiting for 4 ready nodes. 3 ready nodes, 4 registered. Retrying.\r\nFound 4 node(s).\r\nNAME                     LABELS                                          STATUS    AGE\r\nkubernetes-minion-1hmm   kubernetes.io\/hostname=kubernetes-minion-1hmm   Ready     1m\r\nkubernetes-minion-3x1d   kubernetes.io\/hostname=kubernetes-minion-3x1d   Ready     52s\r\nkubernetes-minion-h1ov   kubernetes.io\/hostname=kubernetes-minion-h1ov   Ready     1m\r\nkubernetes-minion-nshn   kubernetes.io\/hostname=kubernetes-minion-nshn   Ready     1m\r\nValidate output:\r\nNAME                 STATUS    MESSAGE              ERROR\r\ncontroller-manager   Healthy   ok                   nil\r\nscheduler            Healthy   ok                   nil\r\netcd-0               Healthy   {\"health\": \"true\"}   nil\r\netcd-1               Healthy   {\"health\": \"true\"}   nil\r\nCluster validation succeeded\r\nDone, listing cluster services:\r\n\r\nKubernetes master is running at https:\/\/104.197.213.249\r\nGLBCDefaultBackend is running at https:\/\/104.197.213.249\/api\/v1\/proxy\/namespaces\/kube-system\/services\/default-http-backend\r\nHeapster is running at https:\/\/104.197.213.249\/api\/v1\/proxy\/namespaces\/kube-system\/services\/heapster\r\nKubeDNS is running at https:\/\/104.197.213.249\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-dns\r\nKubeUI is running at https:\/\/104.197.213.249\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-ui\r\nGrafana is running at https:\/\/104.197.213.249\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-grafana\r\nInfluxDB is running at https:\/\/104.197.213.249\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-influxdb<\/pre>\n<p>There are a couple of unbound variables and\u00a0a WARNING message, but that didn&#8217;t seem to break the script. Google Cloud\u00a0Console shows: <a href=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/google-cloud-compute-instances-kubernetes-cluster-1024x166.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13715\" src=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/google-cloud-compute-instances-kubernetes-cluster-1024x166.png\" alt=\"Google Cloud Compute Instances On Kubernetes Cluster\" width=\"604\" height=\"98\" \/><\/a><\/p>\n<p>Five instances are created as shown &#8211; one for master node and four\u00a0for worker nodes.<\/p>\n<h2>Run Docker Container in Kubernetes Cluster on Google Cloud<\/h2>\n<p>Now that the cluster is up and running,\u00a0get a list of all the nodes:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get no\r\nNAME                     LABELS                                          STATUS    AGE\r\nkubernetes-minion-1hmm   kubernetes.io\/hostname=kubernetes-minion-1hmm   Ready     47m\r\nkubernetes-minion-3x1d   kubernetes.io\/hostname=kubernetes-minion-3x1d   Ready     46m\r\nkubernetes-minion-h1ov   kubernetes.io\/hostname=kubernetes-minion-h1ov   Ready     47m\r\nkubernetes-minion-nshn   kubernetes.io\/hostname=kubernetes-minion-nshn   Ready     47m<\/pre>\n<p>It shows four worker nodes. Create a Couchbase pod:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh run couchbase --image=arungupta\/couchbase\r\nreplicationcontroller \"couchbase\" created<\/pre>\n<p>Notice, how the image name can be specified on the CLI. This command\u00a0creates a Replication Controller with a single pod. The pod uses <a href=\"https:\/\/github.com\/arun-gupta\/docker-images\/tree\/master\/couchbase\">arungupta\/couchbase<\/a> Docker image that provides a pre-configured Couchbase server. Any Docker image can be specified here.<\/p>\n<p>Get all the RC resources:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc\r\nCONTROLLER   CONTAINER(S)   IMAGE(S)              SELECTOR        REPLICAS   AGE\r\ncouchbase    couchbase      arungupta\/couchbase   run=couchbase   1          48s<\/pre>\n<p>This shows the Replication Controller that is created for you.<\/p>\n<p>Get all the\u00a0Pods:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get po\r\nNAME              READY     STATUS    RESTARTS   AGE\r\ncouchbase-s8v9r   1\/1       Running   0          1m<\/pre>\n<p>The output\u00a0shows\u00a0the Pod that is created\u00a0as part of the Replication Controller.<\/p>\n<p>Get more details about the Pod:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh describe po couchbase-s8v9r\r\nName:    couchbase-s8v9r\r\nNamespace:   default\r\nImage(s):   arungupta\/couchbase\r\nNode:    kubernetes-minion-3x1d\/10.128.0.3\r\nStart Time:   Thu, 03 Mar 2016 14:53:36 -0800\r\nLabels:    run=couchbase\r\nStatus:    Running\r\nReason:    \r\nMessage:   \r\nIP:    10.244.3.3\r\nReplication Controllers: couchbase (1\/1 replicas created)\r\nContainers:\r\n  couchbase:\r\n    Container ID: docker:\/\/601ee2e4c822814c3969a241e37c97bf4d0d209f952f24707ab308192d289098\r\n    Image:  arungupta\/couchbase\r\n    Image ID:  docker:\/\/298618e67e495c2535abd17b60241565e456a4c9ee96c923ecf844a9dbcccced\r\n    QoS Tier:\r\n      cpu: Burstable\r\n    Requests:\r\n      cpu:  100m\r\n    State:  Running\r\n      Started:  Thu, 03 Mar 2016 14:54:46 -0800\r\n    Ready:  True\r\n    Restart Count: 0\r\n    Environment Variables:\r\nConditions:\r\n  Type  Status\r\n  Ready  True \r\nVolumes:\r\n  default-token-frsd7:\r\n    Type: Secret (a secret that should populate this volume)\r\n    SecretName: default-token-frsd7\r\nEvents:\r\n  FirstSeen LastSeen Count From     SubobjectPath    Reason  Message\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500    \u2500\u2500\u2500\u2500\u2500\u2500  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  1m  1m  1 {kubelet kubernetes-minion-3x1d} implicitly required container POD Pulled  Container image \"gcr.io\/google_containers\/pause:0.8.0\" already present on machine\r\n  1m  1m  1 {scheduler }         Scheduled Successfully assigned couchbase-s8v9r to kubernetes-minion-3x1d\r\n  1m  1m  1 {kubelet kubernetes-minion-3x1d} implicitly required container POD Created  Created with docker id c1de9da87f1e\r\n  1m  1m  1 {kubelet kubernetes-minion-3x1d} spec.containers{couchbase}  Pulling  Pulling image \"arungupta\/couchbase\"\r\n  1m  1m  1 {kubelet kubernetes-minion-3x1d} implicitly required container POD Started  Started with docker id c1de9da87f1e\r\n  29s  29s  1 {kubelet kubernetes-minion-3x1d} spec.containers{couchbase}  Pulled  Successfully pulled image \"arungupta\/couchbase\"\r\n  29s  29s  1 {kubelet kubernetes-minion-3x1d} spec.containers{couchbase}  Created  Created with docker id 601ee2e4c822\r\n  29s  29s  1 {kubelet kubernetes-minion-3x1d} spec.containers{couchbase}  Started  Started with docker id 601ee2e4c822<\/pre>\n<h2>Expose Pod on Kubernetes as Service<\/h2>\n<p>Now that our pod is running, how do I access the Couchbase server? You need to expose it outside the Kubernetes cluster. The <code>kubectl expose<\/code> command takes a pod, service or replication controller and expose it as a Kubernetes Service.<\/p>\n<p>Let&#8217;s expose the replication controller\u00a0previously created and expose it:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh expose rc couchbase --target-port=8091 --port=8091 --type=LoadBalancer\r\nservice \"couchbase\" exposed<\/pre>\n<p>Get more details about Service:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh describe svc couchbase\r\nName:   couchbase\r\nNamespace:  default\r\nLabels:   run=couchbase\r\nSelector:  run=couchbase\r\nType:   LoadBalancer\r\nIP:   10.0.37.150\r\nLoadBalancer Ingress: 104.197.118.35\r\nPort:    8091\/TCP\r\nNodePort:   30808\/TCP\r\nEndpoints:  10.244.3.3:8091\r\nSession Affinity: None\r\nEvents:\r\n  FirstSeen LastSeen Count From   SubobjectPath Reason   Message\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  2m  2m  1 {service-controller }   CreatingLoadBalancer Creating load balancer\r\n  1m  1m  1 {service-controller }   CreatedLoadBalancer Created load balancer<\/pre>\n<p>The <code>Loadbalancer Ingress<\/code> attribute gives you the IP address of\u00a0the load balancer that is now publicly accessible. Wait for 3 minutes to let the load balancer\u00a0settle down. Access it using port 8091\u00a0and\u00a0the login page\u00a0for Couchbase Web Console shows up: <a href=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/google-cloud-kubernetes-couchbase-login-1024x718.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13717\" src=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/google-cloud-kubernetes-couchbase-login-1024x718.png\" alt=\"Google Cloud Kubernetes Couchbase Login Page\" width=\"604\" height=\"424\" \/><\/a><\/p>\n<p>Enter the credentials as &#8220;Administrator&#8221; and &#8220;password&#8221; to see the Web Console: <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13716\" src=\"\/wp-content\/original-assets\/march-2016\/kubernetes-cluster-on-google-cloud-and-expose-couchbase-service\/google-cloud-kubernetes-couchbase-admin-console-1024x734.png\" alt=\"Google Cloud Kubernetes Couchbase Web Console\" width=\"604\" height=\"433\" \/><\/p>\n<p>And so you just\u00a0accessed your pod outside the Kubernetes cluster.<\/p>\n<h2>Shutdown Kubernetes Cluster<\/h2>\n<p>Finally, shutdown the cluster using <code>cluster\/kube-down.sh<\/code> script.<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kube-down.sh\r\nBringing down cluster using provider: gce\r\nYou have specified individual components to update.  If you are trying\r\n to install new components, use:\r\n  $ gcloud components install alpha\r\n\r\nDo you want to run install instead (y\/N)?  \r\n\r\n\r\nAll components are up to date.\r\nYou have specified individual components to update.  If you are trying\r\n to install new components, use:\r\n  $ gcloud components install beta\r\n\r\nDo you want to run install instead (y\/N)?  \r\n\r\n\r\nAll components are up to date.\r\n\r\nAll components are up to date.\r\nYour active configuration is: [default]\r\n\r\nProject: couchbase-on-kubernetes\r\nZone: us-central1-b\r\nBringing down cluster\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/zones\/us-central1-b\/instanceGroupManagers\/kubernetes-minion-group].\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/instanceTemplates\/kubernetes-minion-template].\r\nUpdated [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/zones\/us-central1-b\/instances\/kubernetes-master].\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/zones\/us-central1-b\/instances\/kubernetes-master].\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/firewalls\/kubernetes-master-https].\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/firewalls\/kubernetes-minion-all].\r\nDeleting routes kubernetes-ad3beb92-e18b-11e5-8e71-42010a800002\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/global\/routes\/kubernetes-ad3beb92-e18b-11e5-8e71-42010a800002].\r\nDeleted [https:\/\/www.googleapis.com\/compute\/v1\/projects\/couchbase-on-kubernetes\/regions\/us-central1\/addresses\/kubernetes-master-ip].\r\nproperty \"clusters.couchbase-on-kubernetes_kubernetes\" unset.\r\nproperty \"users.couchbase-on-kubernetes_kubernetes\" unset.\r\nproperty \"users.couchbase-on-kubernetes_kubernetes-basic-auth\" unset.\r\nproperty \"contexts.couchbase-on-kubernetes_kubernetes\" unset.\r\nproperty \"current-context\" unset.\r\nCleared config for couchbase-on-kubernetes_kubernetes from \/Users\/arungupta\/.kube\/config\r\nDone<\/pre>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog is part of a multi-part\u00a0blog series that shows how to run your applications\u00a0on Kubernetes. It will use the\u00a0Couchbase, an open source NoSQL distributed document database, as the\u00a0\u00a0Docker container. The first part (Couchbase on Kubernetes)\u00a0explained\u00a0how to start the\u00a0Kubernetes cluster [&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":[1558,1545],"ppma_author":[8933],"class_list":["post-2185","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","tag-google","tag-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes Cluster on Google Cloud and Expose Couchbase Service - 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-cluster-google-cloud-expose-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes Cluster on Google Cloud and Expose Couchbase Service\" \/>\n<meta property=\"og:description\" content=\"This blog is part of a multi-part\u00a0blog series that shows how to run your applications\u00a0on Kubernetes. It will use the\u00a0Couchbase, an open source NoSQL distributed document database, as the\u00a0\u00a0Docker container. The first part (Couchbase on Kubernetes)\u00a0explained\u00a0how to start the\u00a0Kubernetes cluster [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-03T19:36:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-08T15:51:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/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=\"11 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-cluster-google-cloud-expose-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Kubernetes Cluster on Google Cloud and Expose Couchbase Service\",\"datePublished\":\"2017-01-03T19:36:36+00:00\",\"dateModified\":\"2019-05-08T15:51:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/\"},\"wordCount\":576,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"google\",\"kubernetes\"],\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/\",\"name\":\"Kubernetes Cluster on Google Cloud and Expose Couchbase Service - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-03T19:36:36+00:00\",\"dateModified\":\"2019-05-08T15:51:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#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-cluster-google-cloud-expose-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes Cluster on Google Cloud and Expose Couchbase Service\"}]},{\"@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:\/\/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\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes Cluster on Google Cloud and Expose Couchbase Service - 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-cluster-google-cloud-expose-service\/","og_locale":"en_US","og_type":"article","og_title":"Kubernetes Cluster on Google Cloud and Expose Couchbase Service","og_description":"This blog is part of a multi-part\u00a0blog series that shows how to run your applications\u00a0on Kubernetes. It will use the\u00a0Couchbase, an open source NoSQL distributed document database, as the\u00a0\u00a0Docker container. The first part (Couchbase on Kubernetes)\u00a0explained\u00a0how to start the\u00a0Kubernetes cluster [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-03T19:36:36+00:00","article_modified_time":"2019-05-08T15:51:49+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"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":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Kubernetes Cluster on Google Cloud and Expose Couchbase Service","datePublished":"2017-01-03T19:36:36+00:00","dateModified":"2019-05-08T15:51:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/"},"wordCount":576,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["google","kubernetes"],"articleSection":["Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/","url":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/","name":"Kubernetes Cluster on Google Cloud and Expose Couchbase Service - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-03T19:36:36+00:00","dateModified":"2019-05-08T15:51:49+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-cluster-google-cloud-expose-service\/#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-cluster-google-cloud-expose-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes Cluster on Google Cloud and Expose Couchbase Service"}]},{"@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:\/\/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\/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 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.\r\n\r\nGupta 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."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2185","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=2185"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2185\/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=2185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2185"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}