{"id":5328,"date":"2018-07-11T23:35:12","date_gmt":"2018-07-12T06:35:12","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=5328"},"modified":"2025-06-13T20:40:45","modified_gmt":"2025-06-14T03:40:45","slug":"kops-running-couchbase-cluster-on-kubernetes-at-scale","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","title":{"rendered":"KOPS: Running Couchbase Cluster on Kubernetes at Scale"},"content":{"rendered":"<p>Put in simple terms, kops is kubectl for kubernetes (k8s) clusters. The power of kubernetes is that it removes vendor lock-in, provides portability for your apps, databases incase decision gets made to different cloud vendor or if the cloud workflows need to go on-prem. Whatever the scenario may be, kubernetes give that freedom.<\/p>\n<div id=\"attachment_5494\" style=\"width: 910px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5494\" class=\"wp-image-5494 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-1024x526.png\" alt=\"KOPS Architecture\" width=\"900\" height=\"462\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-1024x526.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-300x154.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-768x395.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-1536x789.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM-1320x678.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png 1814w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-5494\" class=\"wp-caption-text\">KOPS Architecture<\/p><\/div>\n<p>In the spirit of doing full disclosure, It is easier to use tools provided by cloud vendors. Opensource tools like kops work equally well and are very efficient.<\/p>\n<p>The Couchbase Autonomous Operator extends the Kubernetes API by creating a Custom Resource Definition(CRD) and registering a Couchbase specific controller (the Autonomous Operator) to manage Couchbase clusters.<\/p>\n<p>For this blog we will be using AWS as IaaS and will demonstrate the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.<\/p>\n<h2>What can KOPS do?<\/h2>\n<p>\u201ckops\u00a0helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters from the command line. AWS (Amazon Web Services) is currently officially supported, with GCE in beta support, and VMware vSphere in alpha, and other platforms planned.\u201d [1]<\/p>\n<p>Let\u2019s get down to nitty gritty and see how it works?<\/p>\n<ul>\n<li>Install kops<\/li>\n<li>Create k8s cluster on AWS<\/li>\n<li>Configure k8s Dashboard<\/li>\n<li>Verify and validate k8s cluster<\/li>\n<li>Deploy Couchbase Autonomous Operator in K8s<\/li>\n<li>Deploy couchbase cluster<\/li>\n<li>Service resiliency<\/li>\n<li>Next steps<\/li>\n<\/ul>\n<h3><strong>Install KOPS<\/strong><\/h3>\n<h4><strong>OSX From Homebrew<\/strong><\/h4>\n<pre class=\"\">$ brew update\r\n$ brew install kops\r\n<\/pre>\n<h4>Linux<\/h4>\n<pre class=\"\">$ curl -LO https:\/\/github.com\/kubernetes\/kops\/releases\/download\/$(curl -s https:\/\/api.github.com\/repos\/kubernetes\/kops\/releases\/latest | grep tag_name | cut -d '\"' -f 4)\/kops-linux-amd64chmod +x kops-linux-amd64sudo mv kops-linux-amd64 \/usr\/local\/bin\/kops<\/pre>\n<p>&nbsp;<\/p>\n<h3><strong>Create k8s cluster on AWS<\/strong><\/h3>\n<p>Before we can use kops to create k8s cluster, we need to create IAM policies for kops and so that kops can provision the required resources needed to create k8s cluster. This is one time operation, needs to done only once<\/p>\n<p>Prerequisites for kops<\/p>\n<h4>Install AWS CLI<\/h4>\n<p>For MacOS<\/p>\n<p><strong class=\"userinput\"><code class=\"\">$ pip3 <span class=\"\">install<\/span> awscli <span class=\"\">--upgrade --user<\/span><\/code><\/strong><\/p>\n<p>For other platforms, <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/installing.html\">click here<\/a><\/p>\n<p><em>NOTE:\u00a0 one-time op only<\/em><\/p>\n<h4>Enable AWS environment by running \u2018aws configure\u2019 and run the commands below<\/h4>\n<pre class=\"\">$ aws configure      # enter appropriate credentials with user with perms to create user\/groups\r\n$ aws iam create-group --group-name kops\r\n$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy\/AmazonEC2FullAccess --group-name kops\r\n$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy\/AmazonRoute53FullAccess --group-name kops\r\n$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy\/AmazonS3FullAccess --group-name kops\r\n$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy\/IAMFullAccess --group-name kops\r\n$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy\/AmazonVPCFullAccess --group-name kops\r\n$ aws iam create-user --user-name kops\r\n$ aws iam add-user-to-group --user-name kops --group-name kops\r\n$ aws iam create-access-key --user-name kops<\/pre>\n<h4>Create S3 bucket to store kops config\/data<\/h4>\n<p>In my case, its named as\u00a0<em><strong>rd-k8s-aws\u00a0<\/strong><\/em>and for region <strong>us-west-1<\/strong><\/p>\n<pre class=\"\">$ aws s3api create-bucket --bucket rd-k8s-aws --region us-west-1 --create-bucket-configuration LocationConstraint=us-west-1\r\n\r\n$ aws s3api put-bucket-versioning --bucket rd-k8s-aws --versioning-configuration Status=Enabled<\/pre>\n<h4><strong>Define env var\u2019s for kops state store and cluster name<\/strong><\/h4>\n<p>Pick any cluster name for your cluster, I have chosen\u00a0<em><strong>rdc.k8s.local<\/strong><\/em><\/p>\n<pre class=\"\">$ export KOPS_STATE_STORE=s3:\/\/rd-k8s-aws\r\n\r\n$ export KOPS_CLUSTER_NAME=rdc.k8s.local<\/pre>\n<h4>Create k8s cluster with kops<\/h4>\n<p>Choose the AWS region, and instance size and node count for the k8s cluster.<\/p>\n<pre class=\"\">$ kops create cluster --node-count=7 --node-size=m4.4xlarge --zones=us-west-2a --name ${KOPS_CLUSTER_NAME} --state=${KOPS_STATE_STORE} --yes<\/pre>\n<p><strong>NOTE:<\/strong> takes around 5-8mins, good time to get coffee!<\/p>\n<h6 class=\"\">Sample output looks something like this<\/h6>\n<pre class=\"\">$ kops validate cluster\r\nValidating cluster rdc.k8s.local\r\n\r\nINSTANCE GROUPS\r\nNAME              ROLE    MACHINETYPE  MIN MAX SUBNETS\r\nmaster-us-west-1a Master m3.medium      1   1  us-west-1a\r\nnodes             Node   m4.4xlarge     7   7  us-west-1a\r\n\r\nNODE STATUS\r\nNAME                                        ROLE  READY\r\nip-172-20-42-242.us-west-1.compute.internal node   True\r\nip-172-20-43-56.us-west-1.compute.internal  node   True\r\nip-172-20-44-17.us-west-1.compute.internal  node   True\r\nip-172-20-44-80.us-west-1.compute.internal  node   True\r\nip-172-20-48-254.us-west-1.compute.internal node   True\r\nip-172-20-56-254.us-west-1.compute.internal node   True\r\nip-172-20-60-79.us-west-1.compute.internal  master True\r\nip-172-20-63-146.us-west-1.compute.internal node   True\r\n\r\nYour cluster rdc.k8s.local is ready\r\n<\/pre>\n<h4>Get the nodes and validate the k8s cluster<\/h4>\n<pre class=\"\">$ kubectl get nodes --show-labels\r\n\r\n$ kubectl cluster-info<\/pre>\n<p>At this point kubectl context or k8s context should point to AWS k8s cluster<\/p>\n<h3>Configure k8s Dashboard<\/h3>\n<pre class=\"\">$ kubectl apply -f https:\/\/raw.githubusercontent.com\/kubernetes\/dashboard\/master\/src\/deploy\/recommended\/kubernetes-dashboard.yaml<\/pre>\n<pre class=\"\">$ kubectl create serviceaccount dashboard -n default\r\n$ kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard<\/pre>\n<p><strong><em>On a different tab\/terminal run the command below to proxy k8s api server onto local laptop<\/em><\/strong><\/p>\n<pre class=\"\">$ kubectl proxy<\/pre>\n<p>Get the token to access the k8s dashboard<\/p>\n<pre class=\"\">$ kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath=\"{.secrets[0].name}\") -o jsonpath=\"{.data.token}\" | base64 --decode<\/pre>\n<p>Choose option to use token and while grabbing token from above, skip <strong>%<\/strong> in the end.<\/p>\n<p>Login to k8s dashboard at\u00a0https:\/\/127.0.0.1:8001\/ui [2]<\/p>\n<h3><strong>Verify and validate k8s cluster<\/strong><\/h3>\n<p>Validate the k8s cluster using command<\/p>\n<pre class=\"\">$ kops validate cluster<\/pre>\n<p># check that number of nodes mentioned in the cluster create matches here<\/p>\n<pre class=\"\">$ kubectl get nodes<\/pre>\n<h3><strong>Deploy Couchbase Autonomous Operator in K8s <\/strong><\/h3>\n<p>Now that we have deployed the k8s cluster, now it\u2019s time to deploy the couchbase operator<\/p>\n<p>First we deploy the operator, we need to enable RBAC for the operator, we need to create ClusterRole for the Couchbase Operator<\/p>\n<pre class=\"\">$ kubectl create -f https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/cluster-role.yaml<\/pre>\n<p><em>Note<\/em>: This role only needs to be created once.<\/p>\n<p>After the ClusterRole is created, you need to create a ServiceAccount in the namespace where you are installing the Couchbase Operator, and then assign the ClusterRole to that ServiceAccount using a\u00a0<em>ClusterRoleBinding<\/em>. In this guide we will use the\u00a0<code>default<\/code>\u00a0namespace to create the ServiceAccount.<\/p>\n<pre class=\"\">$ kubectl create serviceaccount couchbase-operator --namespace default\r\n\r\n$ kubectl create clusterrolebinding couchbase-operator --clusterrole couchbase-operator --serviceaccount default:couchbase-operator<\/pre>\n<h3>Deploy the couchbase operator<\/h3>\n<pre class=\"\">$ kubectl create -f https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/operator.yaml<\/pre>\n<p>Running this command downloads the Couchbase Operator Docker image that is specified in the\u00a0<code>operator.yaml<\/code>\u00a0file and creates a\u00a0<em>deployment<\/em>\u00a0which manages a single instance of the Couchbase Operator. The Couchbase Operator uses a deployment so that it can restart if the pod it\u2019s running in dies.<\/p>\n<pre class=\"\">$ kubectl get deployments -l app=couchbase-operator<\/pre>\n<div class=\"paragraph\">\n<p>You should continue to poll the status of the Operator until your output looks similar to the following output:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight language-bash line-numbers pre codeblock\">NAME               DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\r\ncouchbase-operator   1       1         1          1     47s<\/pre>\n<\/div>\n<\/div>\n<p>When the couchbase operator is up and running it will look something like this<\/p>\n<pre class=\"\">$ kubectl get pods\r\nNAME \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0READY      STATUS RESTARTS AGE\r\ncouchbase-operator-7676b7cf47-99b5v \u00a0\u00a0     1\/1 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Running \u00a00       1m<\/pre>\n<p>We need to deploy secret for authenticating couchbase server GUI<\/p>\n<pre class=\"\">$ kubectl create -f https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/secret.yaml<\/pre>\n<p>Deploy the 10 node Couchbase cluster now<\/p>\n<pre class=\"\">$ kubectl create -f\u00a0https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/couchbase-cluster-multi.yaml<\/pre>\n<p>Get the listing of the couchbase pods<\/p>\n<pre class=\"\">$ kubectl get pods\r\nNAME READY STATUS RESTARTS AGE\r\ncb-example-aws-0000 1\/1 Running 0 7m\r\ncb-example-aws-0001 1\/1 Running 0 6m\r\ncb-example-aws-0002 1\/1 Running 0 5m\r\ncb-example-aws-0003 1\/1 Running 0 4m\r\ncb-example-aws-0004 1\/1 Running 0 3m\r\ncb-example-aws-0005 1\/1 Running 0 2m\r\ncb-example-aws-0006 1\/1 Running 0 2m\r\ncb-example-aws-0007 1\/1 Running 0 1m\r\ncb-example-aws-0008 1\/1 Running 0 1m\r\ncb-example-aws-0009 1\/1 Running 0 50s\r\ncouchbase-operator-7676b7cf47-99b5v 1\/1 Running 0 17m<\/pre>\n<p>To access couchbase GUI, we will access at port 8091 and for that we can perform port forwarding like below<\/p>\n<pre class=\"\">$ kubectl port-forward cb-example-aws-0000 8091:8091<\/pre>\n<p>Couchbase server GUI can accessed at https:\/\/localhost:8091<\/p>\n<h3>Service resiliency<\/h3>\n<p>In order to show service resiliency, we can kill a pod, simulating losing a couchbase node.<\/p>\n<pre class=\"\">\u00a0$ kubectl delete pod cb-example-aws-0001<\/pre>\n<p>Biggest feature kubernetes gives us is service resiliency, if we lost a pod, then kubernetes checks for the cluster definition, and it understands that it need to have 3 pods, and it will spin up a new one, add to the cluster, and then perform rebalance on the cluster. Thus eliminating crucial administration task of monitoring the cluster for node failures, deciding what to do when it happens and then performing rebalance operation. All of this happens behind the cover, and applications will perform without any interruptions.<\/p>\n<p>If we list pods again, then should see something like this<\/p>\n<pre class=\"\">$ kubectl get pods --watch\r\n...\r\n...\r\ncb-example-aws-0010 0\/1 Pending 0 0s\r\ncb-example-aws-0010 0\/1 Pending 0 0s\r\ncb-example-aws-0010 0\/1 ContainerCreating 0 0s\r\ncb-example-aws-0010 1\/1 Running 0 1s<\/pre>\n<p>Installing cbc-pillowfight to generate load KV load, gives us an idea what are the limits we can push on this cluster<\/p>\n<p>From single app server, running pillowfight with following params<\/p>\n<pre class=\"\"># cbc-pillowfight -U couchbase:\/\/localhost\/kopsClusterBucket -u Administrator -P password -J -t 4 -I 10000 -p `hostname`<\/pre>\n<div id=\"attachment_5468\" style=\"width: 910px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5468\" class=\"wp-image-5468 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-1024x517.png\" alt=\"KV performance with pillowfight\" width=\"900\" height=\"454\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-1024x517.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-300x151.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-768x388.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-1536x776.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM-1320x666.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.34.28-PM.png 2048w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-5468\" class=\"wp-caption-text\">KV performance with pillowfight<\/p><\/div>\n<p>From single app server we are able to get ~34K Ops\/Sec<\/p>\n<p>Cranking up a notch, using other app server to run pillowfight, we can get more performance in the order of ~51k Ops\/Sec<\/p>\n<div id=\"attachment_5469\" style=\"width: 910px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5469\" class=\"wp-image-5469 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-1024x506.png\" alt=\"KV performance with pillowfight\" width=\"900\" height=\"445\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-1024x506.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-300x148.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-768x380.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-1536x759.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM-1320x652.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-11-at-3.41.15-PM.png 2048w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-5469\" class=\"wp-caption-text\">KV performance with pillowfight<\/p><\/div>\n<p>Conclusion<\/p>\n<p>What we learned here is using kops it becomes quite easy to deploy Couchbase clusters at scale and Autonomous operator provides benefits like service resiliency, auto-rebalance, automatic bucket creation, easy integration with CI\/CD pipeline. yaml files can be standardized for Dev\/QA\/UAT and prod.<\/p>\n<p>References:<\/p>\n<p>[1]\u00a0<a href=\"https:\/\/github.com\/kubernetes\/kops\">https:\/\/github.com\/kubernetes\/kops<\/a><\/p>\n<p>[2] <a href=\"https:\/\/kubecloud.io\/kubernetes-dashboard-on-arm-with-rbac-61309310a640\">k8s dashboard troubleshooting<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Put in simple terms, kops is kubectl for kubernetes (k8s) clusters. The power of kubernetes is that it removes vendor lock-in, provides portability for your apps, databases incase decision gets made to different cloud vendor or if the cloud workflows [&hellip;]<\/p>\n","protected":false},"author":12023,"featured_media":5494,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816],"tags":[10124,1545],"ppma_author":[9071],"class_list":["post-5328","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","tag-amazon-web-services-aws","tag-kubernetes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>KOPS: Running Couchbase Cluster on Kubernetes at Scale<\/title>\n<meta name=\"description\" content=\"This blog demonstrates the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.\" \/>\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\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"KOPS: Running Couchbase Cluster on Kubernetes at Scale\" \/>\n<meta property=\"og:description\" content=\"This blog demonstrates the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-12T06:35:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:40:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1814\" \/>\n\t<meta property=\"og:image:height\" content=\"932\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ram Dhakne\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ram Dhakne\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/\"},\"author\":{\"name\":\"Ram Dhakne\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/219548e728c73c6f1ae06f994ebbfb13\"},\"headline\":\"KOPS: Running Couchbase Cluster on Kubernetes at Scale\",\"datePublished\":\"2018-07-12T06:35:12+00:00\",\"dateModified\":\"2025-06-14T03:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/\"},\"wordCount\":1005,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/07\\\/Screen-Shot-2018-07-13-at-2.57.48-PM.png\",\"keywords\":[\"Amazon Web Services (AWS)\",\"kubernetes\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/\",\"name\":\"KOPS: Running Couchbase Cluster on Kubernetes at Scale\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/07\\\/Screen-Shot-2018-07-13-at-2.57.48-PM.png\",\"datePublished\":\"2018-07-12T06:35:12+00:00\",\"dateModified\":\"2025-06-14T03:40:45+00:00\",\"description\":\"This blog demonstrates the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/07\\\/Screen-Shot-2018-07-13-at-2.57.48-PM.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/07\\\/Screen-Shot-2018-07-13-at-2.57.48-PM.png\",\"width\":1814,\"height\":932,\"caption\":\"KOPS Architecture\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/kops-running-couchbase-cluster-on-kubernetes-at-scale\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"KOPS: Running Couchbase Cluster on Kubernetes at Scale\"}]},{\"@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\\\/219548e728c73c6f1ae06f994ebbfb13\",\"name\":\"Ram Dhakne\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g0f4c71d7c27bda26464a202747e04acd\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g\",\"caption\":\"Ram Dhakne\"},\"description\":\"Ram Dhakne is Solutions Consultant - US West at Couchbase. He currently helps Enterprise customers with their digital innovations journey and helping them adopt NoSQL technologies. His current interests are running persistent applications like Couchbase NoSQL server on Kubernetes clusters running on AKS, GKE, ACS and OpenShift, securing end-to-end on kubernetes. In his past life has worked on IaaS platforms (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/ram-dhaknecouchbase-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"KOPS: Running Couchbase Cluster on Kubernetes at Scale","description":"This blog demonstrates the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.","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\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","og_locale":"en_US","og_type":"article","og_title":"KOPS: Running Couchbase Cluster on Kubernetes at Scale","og_description":"This blog demonstrates the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.","og_url":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-07-12T06:35:12+00:00","article_modified_time":"2025-06-14T03:40:45+00:00","og_image":[{"width":1814,"height":932,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png","type":"image\/png"}],"author":"Ram Dhakne","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ram Dhakne","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/"},"author":{"name":"Ram Dhakne","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/219548e728c73c6f1ae06f994ebbfb13"},"headline":"KOPS: Running Couchbase Cluster on Kubernetes at Scale","datePublished":"2018-07-12T06:35:12+00:00","dateModified":"2025-06-14T03:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/"},"wordCount":1005,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png","keywords":["Amazon Web Services (AWS)","kubernetes"],"articleSection":["Best Practices and Tutorials","Couchbase Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","url":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","name":"KOPS: Running Couchbase Cluster on Kubernetes at Scale","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png","datePublished":"2018-07-12T06:35:12+00:00","dateModified":"2025-06-14T03:40:45+00:00","description":"This blog demonstrates the kops usage, capabilities and Couchbase Autonomous Operator running Couchbase Cluster at scale.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/07\/Screen-Shot-2018-07-13-at-2.57.48-PM.png","width":1814,"height":932,"caption":"KOPS Architecture"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"KOPS: Running Couchbase Cluster on Kubernetes at Scale"}]},{"@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\/219548e728c73c6f1ae06f994ebbfb13","name":"Ram Dhakne","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g0f4c71d7c27bda26464a202747e04acd","url":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g","caption":"Ram Dhakne"},"description":"Ram Dhakne is Solutions Consultant - US West at Couchbase. He currently helps Enterprise customers with their digital innovations journey and helping them adopt NoSQL technologies. His current interests are running persistent applications like Couchbase NoSQL server on Kubernetes clusters running on AKS, GKE, ACS and OpenShift, securing end-to-end on kubernetes. In his past life has worked on IaaS platforms (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications.","url":"https:\/\/www.couchbase.com\/blog\/author\/ram-dhaknecouchbase-com\/"}]}},"acf":[],"authors":[{"term_id":9071,"user_id":12023,"is_guest":0,"slug":"ram-dhaknecouchbase-com","display_name":"Ram Dhakne","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/5328","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\/12023"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=5328"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/5328\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/5494"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=5328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=5328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=5328"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=5328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}