{"id":5336,"date":"2018-06-18T05:59:02","date_gmt":"2018-06-18T12:59:02","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5336"},"modified":"2018-10-12T04:02:08","modified_gmt":"2018-10-12T11:02:08","slug":"couchbase-on-openshift-in-action","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/","title":{"rendered":"Couchbase on OpenShift in Action"},"content":{"rendered":"<p><strong>OpenShift<\/strong>\u00a0is a platform as a service (PaaS) from Red Hat on top of Docker containers and Kubernetes. It is an open source container application platform by Red Hat based on Docker containers and the Kubernetes container cluster manager for\u00a0enterprise app development and deployment.<\/p>\n<p>Couchbase\u2019s Operator also supports OpenShift. Now, let\u2019s see how you can quickly scale up and down, recover from failures, or even change the architecture of your cluster with just a few line commands:<\/p>\n<p><iframe loading=\"lazy\" width=\"900\" height=\"506\" src=\"https:\/\/www.youtube.com\/embed\/v55ZQzJrVL0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<h2>Video Transcription:<\/h2>\n<h4><strong>Code<\/strong>:<\/h4>\n<pre class=\"lang:default decode:true\">https:\/\/github.com\/couchbaselabs\/kubernetes-starter-kit<\/pre>\n<h4>Prerequisites<\/h4>\n<ul>\n<li><a href=\"https:\/\/docs.openshift.org\/latest\/minishift\/getting-started\/installing.html\">Minishift<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><strong>Starting Minishift<\/strong><\/h3>\n<p>To start your minishift, just type the following command:<\/p>\n<pre class=\"lang:default decode:true\">minishift start<\/pre>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5339\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.16.39-PM-1024x846.png\" alt=\"Starting Minishift\" width=\"596\" height=\"492\" \/><\/p>\n<p>Once it has started, execute the following command to add <strong>oc<\/strong> to your Classpath:<\/p>\n<pre class=\"lang:default decode:true \">eval $(minishift oc-env)<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5340\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.17.51-PM-1024x569.png\" alt=\"\" width=\"599\" height=\"333\" \/><\/p>\n<p><strong>\u00a0<\/strong>Additionally, you can also include the following add-on to be able to access your cluster as an admin:<\/p>\n<pre class=\"lang:default decode:true\">minishift addon apply admin-user<\/pre>\n<p>Now, to access OpenShift, you can use the following command:<\/p>\n<pre class=\"lang:default decode:true\">oc login -u admin<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5341\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.22.47-PM-1024x375.png\" alt=\"\" width=\"613\" height=\"221\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Configuring Minishift<\/strong><\/h3>\n<p><strong>\u00a0<\/strong>There are a few things that should be created before we start. I will just list all the necessary commands, but you can view the official documentation <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/operator\/installOpenShift.html\">here<\/a>.<\/p>\n<h4><strong>1 &#8211; Create an Openshift Project<\/strong><\/h4>\n<pre class=\"lang:default decode:true \">oc login -u developer\r\noc new-project operator-example\r\noc logout<\/pre>\n<h4><strong>2 &#8211; Create a new Custom Resource Definition and Cluster Role<\/strong><\/h4>\n<pre class=\"lang:default decode:true \">oc login -u admin\r\noc create -f https:\/\/packages.couchbase.com\/kubernetes\/0.8.1-beta2\/openshift\/crd.yaml\r\noc create -f https:\/\/packages.couchbase.com\/kubernetes\/0.8.1-beta2\/openshift\/cluster-role-sa.yaml\r\noc create -f https:\/\/packages.couchbase.com\/kubernetes\/0.8.1-beta2\/openshift\/cluster-role-user.yaml\r\n<\/pre>\n<h4><strong>3- Setting Up RBAC for an OpenShift Project<\/strong><\/h4>\n<pre class=\"lang:default decode:true\">oc create serviceaccount couchbase-operator --namespace operator-example\r\noc create rolebinding couchbase-operator --clusterrole couchbase-operator --serviceaccount operator-example:couchbase-operator\r\noc adm policy add-scc-to-user anyuid system:serviceaccount:operator-example:couchbase-operator\r\noc create rolebinding couchbasecluster --clusterrole couchbasecluster --user developer --namespace operator-example\r\noc create clusterrolebinding couchbasecluster --clusterrole couchbasecluster --user developer<\/pre>\n<p>&nbsp;<\/p>\n<h3><strong>Deploying Couchbase\u2019s Operator on OpenShift<\/strong><\/h3>\n<p><strong>\u00a0<\/strong><\/p>\n<p>Now that we have set up everything, let\u2019s deploy Couchbase\u2019s Operator. As I have mentioned in a <a href=\"https:\/\/www.couchbase.com\/blog\/kubernetes-operators-game-changer\/\">previous blog post<\/a>, the Operator is responsible for automating part of the DBA\u2019s work, such as joining a new node to the cluster, rebalancing data, consolidating logs, etc.<\/p>\n<p>You can deploy the operator by running the following command:<\/p>\n<pre class=\"lang:default decode:true \">oc create -f https:\/\/packages.couchbase.com\/kubernetes\/0.8.1-beta2\/openshift\/operator.yaml<\/pre>\n<p>Execute the command below to verify that your deployment has been executed successfully:<\/p>\n<pre class=\"lang:default decode:true \">oc get pods:<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5342\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM-1024x88.png\" alt=\"\" width=\"619\" height=\"53\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM-1024x88.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM-300x26.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM-768x66.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM-20x2.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM-1320x114.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.32.54-PM.png 1372w\" sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Deploying Couchbase on OpenShift<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Deploying Couchbase on OpenShift is nearly the same as <a href=\"https:\/\/www.couchbase.com\/blog\/databases-on-kubernetes\/\">deploying it on Kubernetes<\/a>; you just need to execute the following command inside the \u201ckubernetes\u201d directory:<\/p>\n<pre class=\"lang:default decode:true\">oc create -f secret.yaml \/\/ create the user and password we are going to use to log-in to the web console\r\noc create -f couchbase-cluster.yaml<\/pre>\n<p>Our yaml file contains the cluster specification, like the name of the bucket, the number of servers, services, etc:<\/p>\n<p><strong>secret.yaml<\/strong><\/p>\n<pre class=\"lang:yaml decode:true \">apiVersion: v1\r\nkind: Secret\r\nmetadata:\r\n  name: cb-example-auth\r\ntype: Opaque\r\ndata:\r\n  username: QWRtaW5pc3RyYXRvcg== #base64 for Administrator\r\n  password: cGFzc3dvcmQ= #base64 for password\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>couchbase-cluster.yaml<\/strong><\/p>\n<pre class=\"lang:yaml decode:true\">apiVersion: couchbase.database.couchbase.com\/v1beta1\r\nkind: CouchbaseCluster\r\nmetadata:\r\n  name: cb-example\r\nspec:\r\n  baseImage: couchbase\/server\r\n  version: enterprise-5.0.1\r\n  authSecret: cb-example-auth\r\n  exposeAdminConsole: true\r\n  cluster:\r\n    dataServiceMemoryQuota: 256\r\n    indexServiceMemoryQuota: 256\r\n    searchServiceMemoryQuota: 256\r\n    indexStorageSetting: memory_optimized\r\n    autoFailoverTimeout: 30\r\n  buckets:\r\n    - name: couchbase-sample\r\n      type: couchbase\r\n      memoryQuota: 128\r\n      replicas: 3\r\n      ioPriority: high\r\n      evictionPolicy: fullEviction\r\n      conflictResolution: seqno\r\n      enableFlush: true\r\n      enableIndexReplica: false\r\n  servers:\r\n    - size: 3\r\n      name: all_services\r\n      services:\r\n        - data\r\n        - index\r\n        - query\r\n        - search\r\n      dataPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n      indexPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Please refer to the <a href=\"https:\/\/docs.couchbase.com\/prerelease\/couchbase-operator\/beta\/couchbaseClusterConfig.html\">official documentation<\/a> to understand the function of each property.<\/p>\n<p>In the file above, we have specified that we want 3 nodes, which means that we should have 3 nodes running Couchbase:<\/p>\n<pre class=\"lang:default decode:true\">oc get pods<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5343\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.45.52-PM-1024x178.png\" alt=\"\" width=\"692\" height=\"120\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.45.52-PM-1024x178.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.45.52-PM-300x52.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.45.52-PM-768x134.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.45.52-PM-20x3.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.45.52-PM.png 1320w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Accessing your Database on OpenShift<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>There are many ways in which you can expose the web console to the external world. In this article, let\u2019s simply forward the port to the local machine with the following command:<\/p>\n<pre class=\"lang:default decode:true\">oc port-forward cb-example-0000 8091:8091<\/pre>\n<p>Now, you should be able to access Couchbase\u2019s Web Console on your local machine at\u00a0<a href=\"https:\/\/localhost:8091\/\">https:\/\/localhost:8091<\/a>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5211\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/05\/Couchbase_Local-1024x444.png\" alt=\"\" width=\"812\" height=\"351\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local-1024x444.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local-300x130.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local-768x333.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local-1536x666.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local-1320x572.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/Couchbase_Local.png 2048w\" sizes=\"auto, (max-width: 812px) 100vw, 812px\" \/><\/p>\n<p>Notice that all nodes created are already part of a cluster. It was all done automatically by the Couchbase\u2019s Operator.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-5344\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-1024x228.png\" alt=\"\" width=\"900\" height=\"200\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-1024x228.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-300x67.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-768x171.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-1536x341.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-20x4.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM-1320x293.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.47.48-PM.png 2048w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Recovering from a Database Node Failure on OpenShift<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Let\u2019s kill one of our instances to see how the cluster behaves:<\/p>\n<pre class=\"lang:default decode:true\">oc delete pod cb-example-0001<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5345\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.50.24-PM-1024x78.png\" alt=\"\" width=\"717\" height=\"55\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.50.24-PM-1024x78.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.50.24-PM-300x23.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.50.24-PM-768x58.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.50.24-PM-20x2.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.50.24-PM.png 1186w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><\/p>\n<p>Couchbase will immediately notice that a node \u201c<em>disappeared<\/em>\u201d and the recovery process will start. As we specified at\u00a0<strong>couchbase<\/strong><strong>-cluster.yaml<\/strong>\u00a0that we always want 3 servers running, Kubernetes will start a new instance\u00a0<strong>called\u00a0cb-example-0004<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5346\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-1024x509.png\" alt=\"\" width=\"721\" height=\"358\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-1024x509.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-300x149.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-768x381.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-1536x763.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM-1320x655.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.52.10-PM.png 2048w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Once\u00a0<strong>cb<\/strong><strong>-example-004<\/strong>\u00a0is up, the operator kicks in to join the newly created node to the cluster and then triggers data rebalancing<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5347\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-1024x194.png\" alt=\"\" width=\"553\" height=\"105\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-1024x194.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-300x57.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-768x146.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-1536x292.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-20x4.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM-1320x251.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-1.54.41-PM.png 1548w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Scaling Down Couchbase on Open Shift<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>If you think that scaling up a database is difficult, you should try to scale it down. Luckily, it is something really simple with Couchbase and OpenShift. All you need is change your cluster configuration:<\/p>\n<p><strong>couchbase-cluster.yaml<\/strong><\/p>\n<pre class=\"lang:yaml decode:true\">apiVersion: couchbase.database.couchbase.com\/v1beta1\r\nkind: CouchbaseCluster\r\nmetadata:\r\n  name: cb-example\r\nspec:\r\n  baseImage: couchbase\/server\r\n  version: enterprise-5.0.1\r\n  authSecret: cb-example-auth\r\n  exposeAdminConsole: true\r\n  cluster:\r\n    dataServiceMemoryQuota: 256\r\n    indexServiceMemoryQuota: 256\r\n    searchServiceMemoryQuota: 256\r\n    indexStorageSetting: memory_optimized\r\n    autoFailoverTimeout: 30\r\n  buckets:\r\n    - name: couchbase-sample\r\n      type: couchbase\r\n      memoryQuota: 128\r\n      replicas: 3\r\n      ioPriority: high\r\n      evictionPolicy: fullEviction\r\n      conflictResolution: seqno\r\n      enableFlush: true\r\n      enableIndexReplica: false\r\n  servers:\r\n    - size: 1 \/\/changed\r\n      name: all_services\r\n      services:\r\n        - data\r\n        - index\r\n        - query\r\n        - search\r\n      dataPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n      indexPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n<\/pre>\n<p>And then execute the following command to push your change to OpenShift:<\/p>\n<pre class=\"lang:default decode:true\">oc replace -f couchbase-cluster.yaml<\/pre>\n<p>However, there is a small detail here as we can\u2019t just kill 2 nodes at the same time without some risk of data loss. To avoid this problem, the operator scales down the cluster gradually, a single instance at a time, triggering rebalancing to ensure that no data is lost during the process:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-5348\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-1024x116.png\" alt=\"\" width=\"900\" height=\"102\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-1024x116.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-300x34.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-768x87.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-1536x173.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-20x2.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM-1320x149.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.00.16-PM.png 2048w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Scaling Up Couchbase on OpenShift<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Let\u2019s scale it up again to 3 nodes. As you might have guessed, all we have to do is change the\u00a0<strong>size<\/strong>\u00a0parameter on\u00a0<strong>couchbase<\/strong><strong>-cluster.yaml <\/strong>back to <strong>3<\/strong>:<\/p>\n<pre class=\"lang:yaml decode:true\">apiVersion: couchbase.database.couchbase.com\/v1beta1\r\nkind: CouchbaseCluster\r\nmetadata:\r\n  name: cb-example\r\nspec:\r\n  baseImage: couchbase\/server\r\n  version: enterprise-5.0.1\r\n  authSecret: cb-example-auth\r\n  exposeAdminConsole: true\r\n  cluster:\r\n    dataServiceMemoryQuota: 256\r\n    indexServiceMemoryQuota: 256\r\n    searchServiceMemoryQuota: 256\r\n    indexStorageSetting: memory_optimized\r\n    autoFailoverTimeout: 30\r\n  buckets:\r\n    - name: couchbase-sample\r\n      type: couchbase\r\n      memoryQuota: 128\r\n      replicas: 3\r\n      ioPriority: high\r\n      evictionPolicy: fullEviction\r\n      conflictResolution: seqno\r\n      enableFlush: true\r\n      enableIndexReplica: false\r\n  servers:\r\n    - size: 3 \/\/back to 3 servers\r\n      name: all_services\r\n      services:\r\n        - data\r\n        - index\r\n        - query\r\n        - search\r\n      dataPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n      indexPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n<\/pre>\n<p>Then, we update our configuration by running<\/p>\n<pre class=\"lang:default decode:true\">oc replace -f Couchbase-cluster.yaml<\/pre>\n<p>After a few minutes, you will see that we now have 3 nodes again:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5349\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-2.04.57-PM-1024x346.png\" alt=\"\" width=\"826\" height=\"275\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Multidimensional Scaling<\/strong><\/h3>\n<p>You can also leverage multi-dimensional scaling by specifying the services you want to run in each node:<\/p>\n<p><strong>couchbase-cluster.yaml \u00a0<\/strong><\/p>\n<pre class=\"lang:yaml decode:true\">apiVersion: couchbase.database.couchbase.com\/v1beta1\r\nkind: CouchbaseCluster\r\nmetadata:\r\n  name: cb-example\r\nspec:\r\n  baseImage: couchbase\/server\r\n  version: enterprise-5.0.1\r\n  authSecret: cb-example-auth\r\n  exposeAdminConsole: true\r\n  cluster:\r\n    dataServiceMemoryQuota: 256\r\n    indexServiceMemoryQuota: 256\r\n    searchServiceMemoryQuota: 256\r\n    indexStorageSetting: memory_optimized\r\n    autoFailoverTimeout: 30\r\n  buckets:\r\n    - name: couchbase-sample\r\n      type: couchbase\r\n      memoryQuota: 128\r\n      replicas: 3\r\n      ioPriority: high\r\n      evictionPolicy: fullEviction\r\n      conflictResolution: seqno\r\n      enableFlush: true\r\n      enableIndexReplica: false\r\n  servers:\r\n    - size: 2\r\n      name: data_and_index\r\n      services:\r\n        - data\r\n        - index\r\n      dataPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n      indexPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n    - size: 1\r\n      name: query_and_search\r\n      services:\r\n        - query\r\n        - search\r\n      dataPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n      indexPath: \/opt\/couchbase\/var\/lib\/couchbase\/data\r\n<\/pre>\n<p>Again, we need to push our changes to OpenShift with the following command:<\/p>\n<pre class=\"lang:default decode:true\">oc replace -f couchbase-cluster.yaml<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5350\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-2.45.58-PM-1024x172.png\" alt=\"\" width=\"703\" height=\"118\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.45.58-PM-1024x172.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.45.58-PM-300x50.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.45.58-PM-768x129.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.45.58-PM-20x3.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/Screen-Shot-2018-06-18-at-2.45.58-PM.png 1274w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>In this scenario, three new nodes will be created: two running data and index and one running full-text search and query<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5351\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/06\/Screen-Shot-2018-06-18-at-2.51.26-PM-1024x194.png\" alt=\"\" width=\"763\" height=\"145\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Connecting your Application to Couchbase on OpenShift<\/strong><\/h3>\n<p>Deploying an application on OpenShift is very similar to deploying it on Kubernetes. The main difference is that you should use <strong>oc<\/strong> instead of using <strong>kubectl<\/strong>. <a href=\"https:\/\/www.couchbase.com\/blog\/elastic-microservices-with-kubernetes-and-spring-boot\/\">This article<\/a> shows a step-by-step process of how to do it.<\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<p>If you have any questions, tweet me at\u00a0<a href=\"https:\/\/twitter.com\/deniswsrosa\">@deniswsrosa<\/a>\u00a0or leave a comment below.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Read Also:<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/fuzzy-matching\/\">Fuzzy Matching<\/a><\/li>\n<li>\n<p class=\"entry-title\"><a href=\"https:\/\/www.couchbase.com\/blog\/elastic-microservices-with-kubernetes-and-spring-boot\/\">Building Elastic Microservices with Kubernetes and Spring Boot from the ground up<\/a><\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenShift\u00a0is a platform as a service (PaaS) from Red Hat on top of Docker containers and Kubernetes. It is an open source container application platform by Red Hat based on Docker containers and the Kubernetes container cluster manager for\u00a0enterprise app [&hellip;]<\/p>\n","protected":false},"author":8754,"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":[2022],"ppma_author":[9059],"class_list":["post-5336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","tag-openshift"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase on OpenShift in Action - 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\/couchbase-on-openshift-in-action\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase on OpenShift in Action\" \/>\n<meta property=\"og:description\" content=\"OpenShift\u00a0is a platform as a service (PaaS) from Red Hat on top of Docker containers and Kubernetes. It is an open source container application platform by Red Hat based on Docker containers and the Kubernetes container cluster manager for\u00a0enterprise app [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-18T12:59:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-10-12T11:02:08+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=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@deniswsrosa\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/\"},\"author\":{\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\"},\"headline\":\"Couchbase on OpenShift in Action\",\"datePublished\":\"2018-06-18T12:59:02+00:00\",\"dateModified\":\"2018-10-12T11:02:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/\"},\"wordCount\":841,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"openshift\"],\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/\",\"name\":\"Couchbase on OpenShift in Action - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-06-18T12:59:02+00:00\",\"dateModified\":\"2018-10-12T11:02:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#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\/couchbase-on-openshift-in-action\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase on OpenShift in Action\"}]},{\"@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\/fe3c5273e805e72a5294611a48f62257\",\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"caption\":\"Denis Rosa, Developer Advocate, Couchbase\"},\"description\":\"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app.\",\"sameAs\":[\"https:\/\/x.com\/deniswsrosa\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/denis-rosa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase on OpenShift in Action - 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\/couchbase-on-openshift-in-action\/","og_locale":"en_US","og_type":"article","og_title":"Couchbase on OpenShift in Action","og_description":"OpenShift\u00a0is a platform as a service (PaaS) from Red Hat on top of Docker containers and Kubernetes. It is an open source container application platform by Red Hat based on Docker containers and the Kubernetes container cluster manager for\u00a0enterprise app [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-06-18T12:59:02+00:00","article_modified_time":"2018-10-12T11:02:08+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":"Denis Rosa, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@deniswsrosa","twitter_misc":{"Written by":"Denis Rosa, Developer Advocate, Couchbase","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/"},"author":{"name":"Denis Rosa, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257"},"headline":"Couchbase on OpenShift in Action","datePublished":"2018-06-18T12:59:02+00:00","dateModified":"2018-10-12T11:02:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/"},"wordCount":841,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["openshift"],"articleSection":["Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/","name":"Couchbase on OpenShift in Action - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-06-18T12:59:02+00:00","dateModified":"2018-10-12T11:02:08+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-on-openshift-in-action\/#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\/couchbase-on-openshift-in-action\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase on OpenShift in Action"}]},{"@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\/fe3c5273e805e72a5294611a48f62257","name":"Denis Rosa, Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6","url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","caption":"Denis Rosa, Developer Advocate, Couchbase"},"description":"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app.","sameAs":["https:\/\/x.com\/deniswsrosa"],"url":"https:\/\/www.couchbase.com\/blog\/author\/denis-rosa\/"}]}},"authors":[{"term_id":9059,"user_id":8754,"is_guest":0,"slug":"denis-rosa","display_name":"Denis Rosa, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","author_category":"","last_name":"Rosa, Developer Advocate, Couchbase","first_name":"Denis","job_title":"","user_url":"","description":"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/5336","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\/8754"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=5336"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/5336\/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=5336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=5336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=5336"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=5336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}