{"id":5328,"date":"2018-07-11T23:35:12","date_gmt":"2018-07-12T06:35:12","guid":{"rendered":"https:\/\/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\/es\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","title":{"rendered":"KOPS: Ejecuci\u00f3n de cl\u00fasteres Couchbase en Kubernetes a escala"},"content":{"rendered":"<p>En t\u00e9rminos sencillos, kops es kubectl para cl\u00fasteres kubernetes (k8s). El poder de kubernetes es que elimina la dependencia del proveedor, proporciona portabilidad para sus aplicaciones, bases de datos en caso de que se tome la decisi\u00f3n de cambiar de proveedor de nube o si los flujos de trabajo en la nube tienen que ir en-prem. Sea cual sea el escenario, kubernetes da esa libertad.<\/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\">Arquitectura KOPS<\/p><\/div>\n<p>En el esp\u00edritu de hacer la divulgaci\u00f3n completa, es m\u00e1s f\u00e1cil utilizar las herramientas proporcionadas por los proveedores de nube. Herramientas de c\u00f3digo abierto como kops funcionan igual de bien y son muy eficientes.<\/p>\n<p>El Operador Aut\u00f3nomo de Couchbase extiende la API de Kubernetes creando una Definici\u00f3n Personalizada de Recursos (CRD) y registrando un controlador espec\u00edfico de Couchbase (el Operador Aut\u00f3nomo) para gestionar los clusters de Couchbase.<\/p>\n<p>Para este blog utilizaremos AWS como IaaS y demostraremos el uso de kops, sus capacidades y Couchbase Autonomous Operator ejecutando Couchbase Cluster a escala.<\/p>\n<h2>\u00bfQu\u00e9 puede hacer KOPS?<\/h2>\n<p>\"kops le ayuda a crear, destruir, actualizar y mantener cl\u00fasteres Kubernetes de grado de producci\u00f3n y alta disponibilidad desde la l\u00ednea de comandos. AWS (Amazon Web Services) es actualmente soportado oficialmente, con GCE en soporte beta, y VMware vSphere en alfa, y otras plataformas previstas.\" [1]<\/p>\n<p>Vayamos al grano y veamos c\u00f3mo funciona...<\/p>\n<ul>\n<li>Instalar kops<\/li>\n<li>Crear un cl\u00faster k8s en AWS<\/li>\n<li>Configurar el panel k8s<\/li>\n<li>Verificaci\u00f3n y validaci\u00f3n del cl\u00faster k8s<\/li>\n<li>Despliegue de Couchbase Autonomous Operator en K8s<\/li>\n<li>Despliegue del cl\u00faster couchbase<\/li>\n<li>Resistencia del servicio<\/li>\n<li>Pr\u00f3ximos pasos<\/li>\n<\/ul>\n<h3><strong>Instalar KOPS<\/strong><\/h3>\n<h4><strong>OSX desde 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>Crear un cl\u00faster k8s en AWS<\/strong><\/h3>\n<p>Antes de que podamos utilizar kops para crear k8s cluster, necesitamos crear pol\u00edticas IAM para kops y para que kops pueda aprovisionar los recursos necesarios para crear k8s cluster. Esta es una operaci\u00f3n que se realiza una sola vez.<\/p>\n<p>Requisitos previos para los kops<\/p>\n<h4>Instalar AWS CLI<\/h4>\n<p>Para MacOS<\/p>\n<p><strong class=\"userinput\"><code class=\"\">$ pip3 <span class=\"\">instale<\/span> awscli <span class=\"\">-actualizaci\u00f3n --usuario<\/span><\/code><\/strong><\/p>\n<p>Para otras plataformas, <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/installing.html\">pulse aqu\u00ed<\/a><\/p>\n<p><em>NOTA: operaci\u00f3n \u00fanica<\/em><\/p>\n<h4>Habilita el entorno AWS ejecutando 'aws configure' y ejecuta los siguientes comandos<\/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>Crear S3 bucket para almacenar kops config\/data<\/h4>\n<p>En mi caso, se llama\u00a0<em><strong>rd-k8s-aws\u00a0<\/strong><\/em>y para la regi\u00f3n <strong>us-oeste-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>Definir env var's para kops state store y cluster name<\/strong><\/h4>\n<p>Elija cualquier nombre para su cluster, yo he elegido\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>Crear cluster k8s con kops<\/h4>\n<p>Elija la regi\u00f3n de AWS, el tama\u00f1o de la instancia y el n\u00famero de nodos para el cl\u00faster k8s.<\/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>NOTA:<\/strong> tarda unos 5-8 minutos, \u00a1un buen momento para tomar un caf\u00e9!<\/p>\n<h6 class=\"\">La salida de ejemplo tiene este aspecto<\/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>Obtener los nodos y validar el cluster k8s<\/h4>\n<pre class=\"\">$ kubectl get nodes --show-labels\r\n\r\n$ kubectl cluster-info<\/pre>\n<p>En este punto kubectl context o k8s context debe apuntar a AWS k8s cluster<\/p>\n<h3>Configurar el panel k8s<\/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>En una pesta\u00f1a\/terminal diferente ejecute el siguiente comando para proxy k8s servidor api en el port\u00e1til local<\/em><\/strong><\/p>\n<pre class=\"\">$ kubectl proxy<\/pre>\n<p>Obtener el token para acceder al panel de control k8s<\/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>Elija la opci\u00f3n de usar token y mientras agarra token de arriba, saltar <strong>%<\/strong> al final.<\/p>\n<p>Inicie sesi\u00f3n en el salpicadero de k8s en https:\/\/127.0.0.1:8001\/ui [2]<\/p>\n<h3><strong>Verificaci\u00f3n y validaci\u00f3n del cl\u00faster k8s<\/strong><\/h3>\n<p>Validar el cluster k8s utilizando el comando<\/p>\n<pre class=\"\">$ kops validate cluster<\/pre>\n<p># comprueba que el n\u00famero de nodos mencionados en la creaci\u00f3n del cluster coincide aqu\u00ed<\/p>\n<pre class=\"\">$ kubectl get nodes<\/pre>\n<h3><strong>Despliegue de Couchbase Autonomous Operator en K8s <\/strong><\/h3>\n<p>Ahora que hemos desplegado el cluster k8s, es el momento de desplegar el operador couchbase<\/p>\n<p>Primero desplegamos el operador, necesitamos habilitar RBAC para el operador, necesitamos crear ClusterRole para el Operador Couchbase<\/p>\n<pre class=\"\">$ kubectl create -f https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/cluster-role.yaml<\/pre>\n<p><em>Nota<\/em>: Esta funci\u00f3n s\u00f3lo debe crearse una vez.<\/p>\n<p>Una vez creado el ClusterRole, es necesario crear un ServiceAccount en el espacio de nombres en el que se est\u00e1 instalando el Operador Couchbase y, a continuaci\u00f3n, asignar el ClusterRole a ese ServiceAccount mediante una directiva\u00a0<em>ClusterRoleBinding<\/em>. En esta gu\u00eda utilizaremos el\u00a0<code>por defecto<\/code>\u00a0para crear el 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>Despliegue del operador couchbase<\/h3>\n<pre class=\"\">$ kubectl create -f https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/operator.yaml<\/pre>\n<p>La ejecuci\u00f3n de este comando descarga la imagen Docker de Couchbase Operator especificada en el comando\u00a0<code>operador.yaml<\/code>\u00a0y crea un archivo\u00a0<em>despliegue<\/em>\u00a0que gestiona una \u00fanica instancia de Couchbase Operator. Couchbase Operator utiliza un despliegue para poder reiniciarse si el pod en el que se ejecuta muere.<\/p>\n<pre class=\"\">$ kubectl get deployments -l app=couchbase-operator<\/pre>\n<div class=\"paragraph\">\n<p>Debe continuar sondeando el estado del Operador hasta que su salida tenga un aspecto similar a la siguiente salida:<\/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>Cuando el operador couchbase est\u00e9 en funcionamiento, tendr\u00e1 un aspecto similar al siguiente<\/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>Necesitamos desplegar secreto para la autenticaci\u00f3n de couchbase servidor GUI<\/p>\n<pre class=\"\">$ kubectl create -f https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/secret.yaml<\/pre>\n<p>Despliega ahora el cluster Couchbase de 10 nodos<\/p>\n<pre class=\"\">$ kubectl create -f\u00a0https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/kops\/cbyaml\/couchbase-cluster-multi.yaml<\/pre>\n<p>Obtener el listado de los pods de couchbase<\/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>Para acceder a la GUI de couchbase, accederemos al puerto 8091 y para ello podemos realizar un redireccionamiento de puertos como el siguiente<\/p>\n<pre class=\"\">$ kubectl port-forward cb-example-aws-0000 8091:8091<\/pre>\n<p>Se puede acceder a la GUI del servidor Couchbase en https:\/\/localhost:8091<\/p>\n<h3>Resistencia del servicio<\/h3>\n<p>Para mostrar la resistencia del servicio, podemos matar un pod, simulando la p\u00e9rdida de un nodo couchbase.<\/p>\n<pre class=\"\">\u00a0$ kubectl delete pod cb-example-aws-0001<\/pre>\n<p>Si perdemos un pod, entonces kubernetes comprueba la definici\u00f3n del cl\u00faster, y entiende que necesita tener 3 pods, y crear\u00e1 uno nuevo, lo a\u00f1adir\u00e1 al cl\u00faster, y luego realizar\u00e1 el reequilibrio en el cl\u00faster. De este modo se elimina la crucial tarea de administraci\u00f3n de monitorizar el cluster en busca de fallos de nodos, decidir qu\u00e9 hacer cuando ocurra y luego realizar la operaci\u00f3n de reequilibrio. Todo esto ocurre a cubierto, y las aplicaciones funcionar\u00e1n sin interrupciones.<\/p>\n<p>Si volvemos a listar los pods, deber\u00edamos ver algo como esto<\/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>Instalando cbc-pillowfight para generar carga KV, nos da una idea de cuales son los l\u00edmites que podemos empujar en este cluster<\/p>\n<p>Desde un \u00fanico servidor de aplicaciones, ejecutando pillowfight con los siguientes par\u00e1metros<\/p>\n<pre class=\"\"># cbc-pillowfight -U couchbase:\/\/localhost\/kopsClusterBucket -u Administrador -P contrase\u00f1a -J -t 4 -I 10000 -p `nombrehost`.<\/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\">Actuaci\u00f3n de KV con pillowfight<\/p><\/div>\n<p>Con un \u00fanico servidor de aplicaciones podemos obtener ~34.000 operaciones\/seg.<\/p>\n<p>Aumentando el nivel, utilizando otro servidor de aplicaciones para ejecutar pillowfight, podemos obtener un mayor rendimiento del orden de ~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\">Actuaci\u00f3n de KV con pillowfight<\/p><\/div>\n<p>Conclusi\u00f3n<\/p>\n<p>Lo que aprendimos aqu\u00ed es que usando kops es bastante f\u00e1cil desplegar clusters Couchbase a escala y el operador aut\u00f3nomo proporciona beneficios como la resiliencia del servicio, auto-rebalanceo, creaci\u00f3n autom\u00e1tica de buckets, f\u00e1cil integraci\u00f3n con CI\/CD pipeline. Los archivos yaml pueden ser estandarizados para Dev\/QA\/UAT y prod.<\/p>\n<p>Referencias:<\/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\">soluci\u00f3n de problemas del salpicadero del k8s<\/a><\/p>\n<p>&nbsp;<\/p>","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>","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"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\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\/es\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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 minutos\" \/>\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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/0f4c71d7c27bda26464a202747e04acd\",\"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\/es\/author\/ram-dhaknecouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"KOPS: Ejecuci\u00f3n de cl\u00fasteres Couchbase en Kubernetes a escala","description":"Este blog demuestra el uso de kops, sus capacidades y Couchbase Autonomous Operator ejecutando Couchbase Cluster a escala.","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\/es\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/","og_locale":"es_MX","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\/es\/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 minutos"},"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":"es","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: Ejecuci\u00f3n de cl\u00fasteres Couchbase en Kubernetes a escala","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":"Este blog demuestra el uso de kops, sus capacidades y Couchbase Autonomous Operator ejecutando Couchbase Cluster a escala.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kops-running-couchbase-cluster-on-kubernetes-at-scale\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/0f4c71d7c27bda26464a202747e04acd","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 es Consultor de Soluciones - US West en Couchbase. Actualmente ayuda a los clientes empresariales con su viaje de innovaciones digitales y les ayuda a adoptar tecnolog\u00edas NoSQL. Sus intereses actuales son ejecutar aplicaciones persistentes como el servidor NoSQL Couchbase en cl\u00fasteres Kubernetes que se ejecutan en AKS, GKE, ACS y OpenShift, asegurando de extremo a extremo en kubernetes. En su vida pasada ha trabajado en plataformas IaaS (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/ram-dhaknecouchbase-com\/"}]}},"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","author_category":"","last_name":"Dhakne","first_name":"Ram","job_title":"","user_url":"","description":"Ram Dhakne es Consultor de Soluciones - US West en Couchbase. Actualmente ayuda a los clientes empresariales con su viaje de innovaciones digitales y les ayuda a adoptar tecnolog\u00edas NoSQL. Sus intereses actuales son ejecutar aplicaciones persistentes como el servidor NoSQL Couchbase en cl\u00fasteres Kubernetes que se ejecutan en AKS, GKE, ACS y OpenShift, asegurando de extremo a extremo en kubernetes. En su vida pasada ha trabajado en plataformas IaaS (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/12023"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=5328"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5328\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/5494"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=5328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=5328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=5328"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=5328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}