{"id":2360,"date":"2017-01-04T19:18:53","date_gmt":"2017-01-04T19:18:52","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2360"},"modified":"2023-06-21T06:23:31","modified_gmt":"2023-06-21T13:23:31","slug":"stateful-containers-kubernetes-amazon-ebs","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/stateful-containers-kubernetes-amazon-ebs\/","title":{"rendered":"Contenedores con estado en Kubernetes mediante Persistent Volume y Amazon EBS"},"content":{"rendered":"<p>Este blog mostrar\u00e1 c\u00f3mo crear contenedores con estado en Kubernetes utilizando Amazon EBS. Couchbase Server es un contenedor con estado. Esto significa que el estado del contenedor necesita ser transportado con \u00e9l. En Kubernetes, la unidad at\u00f3mica m\u00e1s peque\u00f1a de ejecuci\u00f3n<br \/>\nun contenedor es un pod. As\u00ed que un contenedor de Couchbase Server se ejecutar\u00e1 como un pod. Y por defecto, todos los datos almacenados en Couchbase Server se almacenan en el mismo host.<br \/>\n<a href=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-storage-1024x600.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14189\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-storage-1024x600.png\" alt=\"stateful containers\" width=\"604\" height=\"354\" \/><\/a><\/p>\n<p>Esta cifra se explica originalmente en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/kubernetes-cluster-amazon-expose-service\/\">Cl\u00faster Kubernetes en Amazon y exponer el servicio Couchbase<\/a>. Adem\u00e1s, esta figura muestra el almacenamiento local del host.<br \/>\nLos pods son ef\u00edmeros y pueden reiniciarse en un host diferente. A <a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/volumes\/\">Volumen Kubernetes<\/a> sobrevive a cualquier contenedor que se ejecute dentro del pod, y los datos se conservan a trav\u00e9s de reinicios del contenedor. Sin embargo,<br \/>\nel volumen dejar\u00e1 de existir cuando un pod deje de existir. Esto se soluciona con los vol\u00famenes persistentes, que proporcionan almacenamiento persistente en cl\u00fasteres para aplicaciones que requieren datos de larga duraci\u00f3n.<\/p>\n<div>Crear y utilizar un volumen persistente es un proceso de tres pasos:<\/div>\n<div>\n<ol>\n<li><strong>Provisi\u00f3n<\/strong>: El administrador aprovisiona un almacenamiento en red en el cl\u00faster, como los vol\u00famenes de AWS ElasticBlockStore. Esto se denomina <code>Volumen persistente<\/code>.<\/li>\n<li><strong>Solicitar almacenamiento<\/strong>: El usuario solicita almacenamiento para pods utilizando <em>reclamaciones<\/em>. Las reclamaciones pueden especificar niveles de recursos (CPU y memoria), tama\u00f1os espec\u00edficos y modos de acceso (por ejemplo, se puede montar una vez lectura\/escritura o muchas veces s\u00f3lo escritura).<br \/>\nEsto se denomina <code>PersistentVolumeClaim<\/code>.<\/li>\n<li><strong>Reclamaci\u00f3n de uso<\/strong>: Las reclamaciones se montan como vol\u00famenes y se utilizan en pods para el almacenamiento.<\/li>\n<\/ol>\n<p>En concreto, este blog mostrar\u00e1 c\u00f3mo utilizar un AWS ElasticBlockStore como <code>Volumen persistente<\/code>crear un <code>PersistentVolumeClaim<\/code>y luego reclamarla en una vaina.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14190\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-storage-ebs-1024x253.png\" alt=\"stateful containers\" width=\"604\" height=\"149\" \/><\/p>\n<p>El c\u00f3digo fuente completo de este blog est\u00e1 en:\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/couchbase-kubernetes\/\">github.com\/arun-gupta\/couchbase-kubernetes<\/a>.<\/p>\n<h2>Aprovisionar AWS Elastic Block Storage<\/h2>\n<p>Despu\u00e9s de <a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/volumes\/#awselasticblockstore\">restricciones<\/a> si se utiliza Amazon ElasticBlockStorage como PersistentVolume con Kubernetes:<\/p>\n<ul>\n<li>los nodos en los que se ejecutan los pods deben ser instancias AWS EC2<\/li>\n<li>esas instancias deben estar en la misma regi\u00f3n y zona de disponibilidad que el volumen EBS<\/li>\n<li>EBS s\u00f3lo admite una \u00fanica instancia EC2 montando un volumen<\/li>\n<\/ul>\n<p>Crear un AWS Elastic Block Storage:<\/p>\n<pre class=\"lang:default decode:true\">aws ec2 create-volume --region us-west-2 --availability-zone us-west-2a --size 5 --volume-type gp2<\/pre>\n<p>La regi\u00f3n <code>us-oeste-2<\/code>\u00a0regi\u00f3n y <code>us-oeste-2a<\/code> zona de disponibilidad se utiliza aqu\u00ed. Y as\u00ed Kubernetes cl\u00faster necesita para iniciar<br \/>\nen la misma regi\u00f3n y zona de disponibilidad. Esto muestra la salida como:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"AvailabilityZone\": \"us-west-2a\", \r\n    \"Encrypted\": false, \r\n    \"VolumeType\": \"gp2\", \r\n    \"VolumeId\": \"vol-47f59cce\", \r\n    \"State\": \"creating\", \r\n    \"Iops\": 100, \r\n    \"SnapshotId\": \"\", \r\n    \"CreateTime\": \"2016-07-29T21:57:43.343Z\", \r\n    \"Size\": 5\r\n}<\/pre>\n<p>Compruebe si el volumen est\u00e1 disponible como:<\/p>\n<pre class=\"lang:default decode:true\">aws --region us-west-2 ec2 describe-volumes --volume-id vol-47f59cce<\/pre>\n<\/div>\n<p>Muestra la salida como:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n    \"Volumes\": [\r\n        {\r\n            \"AvailabilityZone\": \"us-west-2a\", \r\n            \"Attachments\": [], \r\n            \"Encrypted\": false, \r\n            \"VolumeType\": \"gp2\", \r\n            \"VolumeId\": \"vol-47f59cce\", \r\n            \"State\": \"available\", \r\n            \"Iops\": 100, \r\n            \"SnapshotId\": \"\", \r\n            \"CreateTime\": \"2016-07-29T21:57:43.343Z\", \r\n            \"Size\": 5\r\n        }\r\n    ]\r\n}<\/pre>\n<p>Anote el identificador \u00fanico del volumen en <code>VolumeId<\/code> atributo. Tambi\u00e9n puede verificar el bloque EBS en la consola de AWS:<\/p>\n<p><a href=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-ebs-1024x432.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-14184\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-ebs-1024x432.png\" alt=\"kubernetes-pv-couchbase-amazon-ebs\" width=\"604\" height=\"255\" \/><\/a><\/p>\n<div>\n<h2>Iniciar cl\u00faster Kubernetes<\/h2>\n<p>Descargar <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/releases\/download\/v1.3.3\/kubernetes.tar.gz\">Kubernetes 1.3.3<\/a>Descompr\u00edmelo e inicia el cl\u00faster en Amazon:<\/p>\n<pre class=\"lang:default decode:true\">export KUBERNETES_PROVIDER=aws\r\nKUBE_AWS_ZONE=us-west-2a NODE_SIZE=m3.large NUM_NODES=3 .\/kubernetes\/cluster\/kube-up.sh<\/pre>\n<p>Tres puntos a tener en cuenta aqu\u00ed:<\/p>\n<ul>\n<li>La zona en la que se inicia el cl\u00faster se establece expl\u00edcitamente en <code>us-oeste-1a<\/code>. Coincide con la zona en la que se cre\u00f3 el volumen de almacenamiento EBS.<\/li>\n<li>Por defecto, el tama\u00f1o de cada nodo es <code>m3.medio<\/code>. Aqu\u00ed est\u00e1 ajustado a\u00a0<code>m3.grande<\/code>.<\/li>\n<li>Por defecto, se crean 1 nodo maestro y 4 nodos trabajadores. Aqu\u00ed s\u00f3lo se crean 3 nodos trabajadores.<\/li>\n<\/ul>\n<p>Esto mostrar\u00e1 la salida como:<\/p>\n<pre class=\"lang:default decode:true\">... Starting cluster in us-west-2a using provider aws\r\n... calling verify-prereqs\r\n... calling kube-up\r\nStarting cluster using os distro: jessie\r\nUploading to Amazon S3\r\n+++ Staging server tars to S3 Storage: kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\r\nupload: ..\/..\/..\/..\/..\/var\/folders\/81\/ttv4n16x7p390cttrm_675y00000gn\/T\/kubernetes.XXXXXX.ISohbaGM\/s3\/bootstrap-script to s3:\/\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/bootstrap-script\r\nUploaded server tars:\r\n  SERVER_BINARY_TAR_URL: https:\/\/s3.amazonaws.com\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/kubernetes-server-linux-amd64.tar.gz\r\n  SALT_TAR_URL: https:\/\/s3.amazonaws.com\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/kubernetes-salt.tar.gz\r\n  BOOTSTRAP_SCRIPT_URL: https:\/\/s3.amazonaws.com\/kubernetes-staging-0eaf81fbc51209dd47c13b6d8b424149\/devel\/bootstrap-script\r\nINSTANCEPROFILE arn:aws:iam::598307997273:instance-profile\/kubernetes-master 2016-07-29T15:13:35Z AIPAJF3XKLNKOXOTQOCTkubernetes-master \/\r\nROLES arn:aws:iam::598307997273:role\/kubernetes-master 2016-07-29T15:13:33Z \/ AROAI3Q2KFBD5PCKRXCRM kubernetes-master\r\nASSUMEROLEPOLICYDOCUMENT 2012-10-17\r\nSTATEMENT sts:AssumeRole Allow\r\nPRINCIPAL ec2.amazonaws.com\r\nINSTANCEPROFILE arn:aws:iam::598307997273:instance-profile\/kubernetes-minion 2016-07-29T15:13:39Z AIPAIYSH5DJA4UPQIP4Bkubernetes-minion \/\r\nROLES arn:aws:iam::598307997273:role\/kubernetes-minion 2016-07-29T15:13:37Z \/ AROAIQ57MPQYSHRPQCT2Q kubernetes-minion\r\nASSUMEROLEPOLICYDOCUMENT 2012-10-17\r\nSTATEMENT sts:AssumeRole Allow\r\nPRINCIPAL ec2.amazonaws.com\r\nUsing SSH key with (AWS) fingerprint: SHA256:dX\/5wpWuUxYar2NFuGwiZuRiydiZCyx4DGoZ5\/jL\/j8\r\nCreating vpc.\r\nAdding tag to vpc-fa3d6c9e: Name=kubernetes-vpc\r\nAdding tag to vpc-fa3d6c9e: KubernetesCluster=kubernetes\r\nUsing VPC vpc-fa3d6c9e\r\nAdding tag to dopt-3aad625e: Name=kubernetes-dhcp-option-set\r\nAdding tag to dopt-3aad625e: KubernetesCluster=kubernetes\r\nUsing DHCP option set dopt-3aad625e\r\nCreating subnet.\r\nAdding tag to subnet-e11f5985: KubernetesCluster=kubernetes\r\nUsing subnet subnet-e11f5985\r\nCreating Internet Gateway.\r\nUsing Internet Gateway igw-5c748f38\r\nAssociating route table.\r\nCreating route table\r\nAdding tag to rtb-84fcf1e0: KubernetesCluster=kubernetes\r\nAssociating route table rtb-84fcf1e0 to subnet subnet-e11f5985\r\nAdding route to route table rtb-84fcf1e0\r\nUsing Route Table rtb-84fcf1e0\r\nCreating master security group.\r\nCreating security group kubernetes-master-kubernetes.\r\nAdding tag to sg-91590bf7: KubernetesCluster=kubernetes\r\nCreating minion security group.\r\nCreating security group kubernetes-minion-kubernetes.\r\nAdding tag to sg-9d590bfb: KubernetesCluster=kubernetes\r\nUsing master security group: kubernetes-master-kubernetes sg-91590bf7\r\nUsing minion security group: kubernetes-minion-kubernetes sg-9d590bfb\r\nCreating master disk: size 20GB, type gp2\r\nAdding tag to vol-def79e57: Name=kubernetes-master-pd\r\nAdding tag to vol-def79e57: KubernetesCluster=kubernetes\r\nAllocated Elastic IP for master: 52.40.216.69\r\nAdding tag to vol-def79e57: kubernetes.io\/master-ip=52.40.216.69\r\nGenerating certs for alternate-names: IP:52.40.216.69,IP:172.20.0.9,IP:10.0.0.1,DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local,DNS:kubernetes-master\r\nStarting Master\r\nAdding tag to i-5a7cebf5: Name=kubernetes-master\r\nAdding tag to i-5a7cebf5: Role=kubernetes-master\r\nAdding tag to i-5a7cebf5: KubernetesCluster=kubernetes\r\nWaiting for master to be ready\r\nAttempt 1 to check for master nodeWaiting for instance i-5a7cebf5 to be running (currently pending)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-5a7cebf5 to be running (currently pending)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-5a7cebf5 to be running (currently pending)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-5a7cebf5 to be running (currently pending)\r\nSleeping for 3 seconds...\r\n [master running]\r\nAttaching IP 52.40.216.69 to instance i-5a7cebf5\r\nAttaching persistent data volume (vol-def79e57) to master\r\n2016-07-29T22:00:36.909Z \/dev\/sdb i-5a7cebf5 attaching vol-def79e57\r\ncluster \"aws_kubernetes\" set.\r\nuser \"aws_kubernetes\" set.\r\ncontext \"aws_kubernetes\" set.\r\nswitched to context \"aws_kubernetes\".\r\nuser \"aws_kubernetes-basic-auth\" set.\r\nWrote config for aws_kubernetes to \/Users\/arungupta\/.kube\/config\r\nCreating minion configuration\r\nCreating autoscaling group\r\n 0 minions started; waiting\r\n 0 minions started; waiting\r\n 0 minions started; waiting\r\n 0 minions started; waiting\r\n 3 minions started; ready\r\nWaiting for cluster initialization.\r\n\r\n  This will continually check to see if the API for kubernetes is reachable.\r\n  This might loop forever if there was some uncaught error during start\r\n  up.\r\n\r\n..........................................................................................................................................................................................................Kubernetes cluster created.\r\nSanity checking cluster...\r\nAttempt 1 to check Docker on node @ 52.42.0.65 ...not working yet\r\nAttempt 2 to check Docker on node @ 52.42.0.65 ...not working yet\r\nAttempt 3 to check Docker on node @ 52.42.0.65 ...working\r\nAttempt 1 to check Docker on node @ 52.36.195.201 ...working\r\nAttempt 1 to check Docker on node @ 52.43.35.173 ...working\r\n\r\nKubernetes cluster is running.  The master is running at:\r\n\r\n  https:\/\/52.40.216.69\r\n\r\nThe user name and password to use is located in \/Users\/arungupta\/.kube\/config.\r\n\r\n... calling validate-cluster\r\nFound 3 node(s).\r\nNAME                                        STATUS    AGE\r\nip-172-20-0-26.us-west-2.compute.internal   Ready     1m\r\nip-172-20-0-27.us-west-2.compute.internal   Ready     1m\r\nip-172-20-0-28.us-west-2.compute.internal   Ready     1m\r\nValidate output:\r\nNAME                 STATUS    MESSAGE              ERROR\r\ncontroller-manager   Healthy   ok                   \r\nscheduler            Healthy   ok                   \r\netcd-0               Healthy   {\"health\": \"true\"}   \r\netcd-1               Healthy   {\"health\": \"true\"}   \r\nCluster validation succeeded\r\nDone, listing cluster services:\r\n\r\nKubernetes master is running at https:\/\/52.40.216.69\r\nElasticsearch is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/elasticsearch-logging\r\nHeapster is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/heapster\r\nKibana is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kibana-logging\r\nKubeDNS is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-dns\r\nkubernetes-dashboard is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kubernetes-dashboard\r\nGrafana is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-grafana\r\nInfluxDB is running at https:\/\/52.40.216.69\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-influxdb\r\n\r\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.<\/pre>\n<p>M\u00e1s informaci\u00f3n sobre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/kubernetes-cluster-amazon-expose-service\/\">Cl\u00faster Kubernetes en Amazon<\/a>.<\/p>\n<h2>Couchbase Server Pod sin almacenamiento persistente<\/h2>\n<p>Vamos a crear un pod de Couchbase Server sin almacenamiento persistente. Esto significa que si el pod es reprogramado en un host diferente entonces no tendr\u00e1 acceso a los datos creados en \u00e9l. Aqu\u00ed est\u00e1n los pasos r\u00e1pidos para ejecutar un pod de Couchbase Server y<br \/>\nexponerlo fuera del cl\u00faster:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh run couchbase --image=arungupta\/couchbase\r\nkubectl.sh expose deployment couchbase --target-port=8091 --port=8091 --type=LoadBalancer\r\nkubectl.sh describe svc couchbase<\/pre>\n<\/div>\n<p>M\u00e1s informaci\u00f3n en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/kubernetes-cluster-amazon-expose-service\/\">Cl\u00faster Kubernetes en Amazon<\/a>. El \u00faltimo comando muestra la direcci\u00f3n del equilibrador de carga de entrada. Acceda a la consola web del servidor Couchbase en <code>:8091<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14174\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-elb.png\" alt=\"kubernetes-pv-couchbase-amazon-elb\" width=\"904\" height=\"517\" \/><\/p>\n<p>Inicie sesi\u00f3n en la consola mediante <code>Administrador<\/code> inicio de sesi\u00f3n y <code>contrase\u00f1a<\/code> contrase\u00f1a. Aparecer\u00e1 la p\u00e1gina principal de la Consola Web del Servidor Couchbase:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2715\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682.png\" alt=\" kubernetes-pv-couchbase-amazon-web-console-\" width=\"1024\" height=\"682\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682-300x200.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682-768x512.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682-400x267.png 400w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682-450x300.png 450w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682-20x13.png 20w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Un defecto <code>viaje-muestra<\/code> ya est\u00e1 creado por <a href=\"https:\/\/github.com\/arun-gupta\/docker-images\/tree\/master\/couchbase\">arungupta\/couchbase<\/a> imagen. Este cubo se muestra en el\u00a0<code>Cubos de datos<\/code> ficha:<\/p>\n<p><a href=\"https:\/\/blog.arungupta.me\/wp-content\/uploads\/2016\/07\/kubernetes-pv-couchbase-amazon-databucket.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14177 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-databucket-e1469836235986-1024x266.png\" alt=\"kubernetes-pv-couchbase-amazon-databucket\" width=\"604\" height=\"157\" \/><\/a><\/p>\n<p>Haga clic en <code>Crear nuevo cubo de datos<\/code> para crear un nuevo cubo de datos. D\u00e9le un nombre <code>k8s<\/code>, tome todos los valores predeterminados y haga clic en <code>Cree<\/code> para crear el cubo:<\/p>\n<p><a href=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-k8s-bucket-e1469836289564-1024x577.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14180 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-k8s-bucket-e1469836289564-1024x577.png\" alt=\"kubernetes-pv-couchbase-amazon-k8s-bucket\" width=\"604\" height=\"340\" \/><\/a><\/p>\n<p>El cubo creado se muestra en el <code>Cubos de datos<\/code> ficha:<\/p>\n<p><a href=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-k8s-bucket-created-e1469836392351-1024x322.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14179 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-k8s-bucket-created-e1469836392351-1024x322.png\" alt=\"kubernetes-pv-couchbase-amazon-k8s-bucket-created\" width=\"604\" height=\"190\" \/><\/a><\/p>\n<p>Compruebe el estado del pod:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get po\r\nNAME                         READY     STATUS    RESTARTS   AGE\r\ncouchbase-2646907196-memz2   1\/1       Running   0          53m<\/pre>\n<p>Elimine la c\u00e1psula:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh delete po couchbase-2646907196-memz2\r\npod \"couchbase-2646907196-memz2\" deleted<\/pre>\n<p>Observa c\u00f3mo se crea la nueva c\u00e1psula:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get -w po\r\nNAME                         READY     STATUS        RESTARTS   AGE\r\ncouchbase-2646907196-memz2   1\/1       Terminating   0          53m\r\ncouchbase-2646907196-wo6ve   1\/1       Running       0          3s<\/pre>\n<p>Acceda de nuevo a la Consola Web y compruebe que el cubo no existe:<\/p>\n<p><a href=\"https:\/\/blog.arungupta.me\/wp-content\/uploads\/2016\/07\/kubernetes-pv-couchbase-amazon-k8s-bucket-gone.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14182 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-k8s-bucket-gone-e1469836489966-1024x275.png\" alt=\"kubernetes-pv-couchbase-amazon-k8s-bucket-gone\" width=\"604\" height=\"162\" \/><\/a><\/p>\n<p>Limpiemos los recursos creados:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh delete svc couchbase\r\nkubectl.sh delete deployment couchbase<\/pre>\n<div>\n<h2>Couchbase Server Pod con almacenamiento persistente<\/h2>\n<p>Ahora, vamos a exponer un pod de Couchbase Server con almacenamiento persistente. Como ya hemos comentado, vamos a crear un pod <code>Volumen persistente<\/code> y reclamar el volumen.<\/p>\n<h3>Solicitar almacenamiento<\/h3>\n<p>Como cualquier otro recurso de Kubernetes, un volumen persistente se crea utilizando un archivo de descripci\u00f3n de recursos:<\/p>\n<pre class=\"lang:default decode:true\">kind: PersistentVolume\r\napiVersion: v1\r\nmetadata:\r\n  name: couchbase-pv\r\n  labels:\r\n    type: amazonEBS\r\nspec:\r\n  capacity:\r\n    storage: 5Gi\r\n  accessModes:\r\n    - ReadWriteOnce\r\n  awsElasticBlockStore:\r\n    volumeID: vol-47f59cce\r\n    fsType: ext4<\/pre>\n<p>Los datos importantes son los siguientes:<\/p>\n<ul>\n<li>Crear un almacenamiento de 5 GB<\/li>\n<li>El almacenamiento s\u00f3lo puede ser montado por un nodo para lectura\/escritura<\/li>\n<li>especifica el identificador de volumen creado anteriormente<\/li>\n<\/ul>\n<p>M\u00e1s informaci\u00f3n sobre la definici\u00f3n de este archivo en\u00a0<a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/persistent-volumes\/\">kubernetes.io\/docs\/user-guide\/persistent-volumes\/<\/a>. Este archivo est\u00e1 disponible en:\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/couchbase-kubernetes\/blob\/master\/pv\/couchbase-pv.yml\">github.com\/arun-gupta\/couchbase-kubernetes\/blob\/master\/pv\/couchbase-pv.yml<\/a>.<br \/>\nEl volumen en s\u00ed se puede crear como:<\/p>\n<pre class=\"lang:default decode:true\">kubectl create -f couchbase-pv.yml<\/pre>\n<p>y muestra la salida:<\/p>\n<pre class=\"lang:default decode:true\">persistentvolume \"couchbase-pv\" created<\/pre>\n<h3>Reclamaci\u00f3n de uso<\/h3>\n<p>A<code> PersistentVolumeClaim<\/code> pueden crearse utilizando este archivo de recursos:<\/p>\n<\/div>\n<pre class=\"lang:default decode:true\">kind: PersistentVolumeClaim\r\napiVersion: v1\r\nmetadata:\r\n  name: couchbase-pvc\r\n  labels:\r\n    type: amazonEBS\r\nspec:\r\n  accessModes:\r\n    - ReadWriteOnce\r\n  resources:\r\n    requests:\r\n      storage: 5Gi<\/pre>\n<p>En nuestro caso, tanto PersistentVolume como PersistentVolumeClaim son de 5 GB, pero no tienen por qu\u00e9 serlo. Lea m\u00e1s detalles sobre la definici\u00f3n de este fichero en <a href=\"https:\/\/kubernetes.io\/docs\/user-guide\/persistent-volumes\/#persistentvolumeclaims\">kubernetes.io\/docs\/user-guide\/persistent-volumes\/#persistentvolumeclaims<\/a>.<br \/>\nEste archivo se encuentra en\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/couchbase-kubernetes\/blob\/master\/pv\/couchbase-pvc.yml\">github.com\/arun-gupta\/couchbase-kubernetes\/blob\/master\/pv\/couchbase-pvc.yml<\/a>. La reclamaci\u00f3n puede crearse como:<\/p>\n<pre class=\"lang:default decode:true\">kubectl create -f couchbase-pvc.yml<\/pre>\n<p>y muestra la salida:<\/p>\n<pre class=\"lang:default decode:true\">persistentvolumeclaim \"couchbase-pvc\" created<\/pre>\n<div>\n<h3>Crear RC con reclamaci\u00f3n de volumen persistente<\/h3>\n<p>Cree un controlador de replicaci\u00f3n Couchbase utilizando este archivo de recursos:<\/p>\n<\/div>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nkind: ReplicationController\r\nmetadata:\r\n  name: couchbase\r\nspec:\r\n  replicas: 1\r\n  template:\r\n    metadata:\r\n      name: couchbase-rc-pod\r\n      labels:\r\n        name: couchbase-rc-pod\r\n        context: couchbase-pv\r\n    spec:\r\n      containers:\r\n      - name: couchbase-rc-pod\r\n        image: arungupta\/couchbase\r\n        volumeMounts:\r\n        - mountPath: \"\/opt\/couchbase\/var\"\r\n          name: mypd\r\n        ports:\r\n        - containerPort: 8091\r\n        - containerPort: 8092\r\n        - containerPort: 8093\r\n        - containerPort: 11210\r\n      volumes:\r\n      - name: mypd\r\n        persistentVolumeClaim:\r\n          claimName: couchbase-pvc<\/pre>\n<p>Las partes clave aqu\u00ed son:<\/p>\n<ul>\n<li>El recurso define un controlador de replicaci\u00f3n utilizando <code>arungupta\/couchbase<\/code> Imagen Docker<\/li>\n<li><code>volumeMounts<\/code>\u00a0definir qu\u00e9 vol\u00famenes se van a montar. <code>\/opt\/couchbase\/var<\/code> es el directorio donde Couchbase Server almacena todos los datos.<\/li>\n<li><code>vol\u00famenes<\/code>\u00a0definir los diferentes vol\u00famenes que pueden utilizarse en esta definici\u00f3n de CR<\/li>\n<\/ul>\n<p>Crea el CR como:<\/p>\n<pre class=\"lang:default decode:true\">kubectl create -f couchbase-rc.yml<\/pre>\n<p>y muestra la salida:<\/p>\n<pre class=\"lang:default decode:true\">replicationcontroller \"couchbase\" created<\/pre>\n<p>Compruebe si la vaina es\u00a0<code>kubectl.sh get -w po<\/code> para ver:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get -w po\r\nNAME              READY     STATUS              RESTARTS   AGE\r\ncouchbase-jx3fn   0\/1       ContainerCreating   0          3s\r\nNAME              READY     STATUS    RESTARTS   AGE\r\ncouchbase-jx3fn   1\/1       Running   0          20s<\/pre>\n<p>Exponer RC como un servicio:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh expose rc couchbase --target-port=8091 --port=809--type=LoadBalancer\r\nservice \"couchbase\" exposed<\/pre>\n<p>Consigue todos los servicios:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get svc\r\nNAME         CLUSTER-IP    EXTERNAL-IP        PORT(S)    AGE\r\ncouchbase    10.0.49.129   a6179426155e2...   8091\/TCP   19s\r\nkubernetes   10.0.0.1                   443\/TCP    1h<\/pre>\n<p>Describa el servicio como <code>kubectl.sh describe svc couchbase<\/code>\u00a0para ver:<\/p>\n<pre class=\"lang:default decode:true\">Name:   couchbase\r\nNamespace:  default\r\nLabels:   context=couchbase-pv\r\n   name=couchbase-pod\r\nSelector:  context=couchbase-pv,name=couchbase-pod\r\nType:   LoadBalancer\r\nIP:   10.0.49.129\r\nLoadBalancer Ingress: a6179426155e211e6b664022b850255f-1850736155.us-west-2.elb.amazonaws.com\r\nPort:    8091\/TCP\r\nNodePort:   31636\/TCP\r\nEndpoints:  10.244.1.3:8091\r\nSession Affinity: None\r\nEvents:\r\n  FirstSeen LastSeen Count From   SubobjectPath Type  Reason   Message\r\n  --------- -------- ----- ----   ------------- -------- ------   -------\r\n  31s  31s  1 {service-controller }   Normal  CreatingLoadBalancer Creating load balancer\r\n  29s  29s  1 {service-controller }   Normal  CreatedLoadBalancer Created load balancer<\/pre>\n<p>Espere unos 3 minutos a que el equilibrador de carga se asiente. Accede a la consola web de Couchbase Server en <code>:8091<\/code>. Una vez m\u00e1s, s\u00f3lo\u00a0<code>viaje-muestra<\/code> existe. Se crea mediante <code>arungupta\/couchbase<\/code> imagen utilizada en la definici\u00f3n RC.<\/p>\n<h3>Mostrar contenedores con estado<\/h3>\n<p>Vamos a crear un nuevo cubo. Dale un nombre <code>kubernetes-pv<\/code>, tome todos los valores predeterminados y haga clic en el bot\u00f3n Crear para crear el cubo.<\/p>\n<p><a href=\"https:\/\/blog.arungupta.me\/wp-content\/uploads\/2016\/07\/kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14183 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-e1469859479150-1024x495.png\" alt=\"kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket\" width=\"604\" height=\"292\" \/><\/a><\/p>\n<p>El cubo aparece ahora en la consola:<\/p>\n<p><a href=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-created-e1469859541520-1024x330.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14178 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-created-e1469859541520-1024x330.png\" alt=\"kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-created\" width=\"604\" height=\"195\" \/><\/a><\/p>\n<p>Finalice el pod de Couchbase Server y vea c\u00f3mo se restaura el estado. Obtenga los pods de nuevo:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get po\r\nNAME              READY     STATUS    RESTARTS   AGE\r\ncouchbase-jx3fn   1\/1       Running   0          7m<\/pre>\n<p>Elimine la c\u00e1psula:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh delete po couchbase-jx3fn\r\npod \"couchbase-jx3fn\" deleted<\/pre>\n<p>Pod se recrea:<\/p>\n<pre class=\"lang:default decode:true\">kubectl.sh get -w po\r\nNAME              READY     STATUS              RESTARTS   AGE\r\ncouchbase-jx3fn   1\/1       Terminating         0          8m\r\ncouchbase-qq6wu   0\/1       ContainerCreating   0          4s\r\nNAME              READY     STATUS    RESTARTS   AGE\r\ncouchbase-qq6wu   1\/1       Running   0          5s<\/pre>\n<p>Y ahora cuando accedes a la Consola Web de Couchbase, el bucket creado anteriormente sigue existiendo:<\/p>\n<p><a href=\"https:\/\/blog.arungupta.me\/wp-content\/uploads\/2016\/07\/kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-still-there.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-14181 size-large\" src=\"\/wp-content\/original-assets\/july2015\/stateful-containers-on-kubernetes-using-persistent-volume-and-amazon-ebs\/kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-still-there-e1469859700150-1024x333.png\" alt=\"kubernetes-pv-couchbase-amazon-kubernetes-pv-bucket-still-there\" width=\"604\" height=\"196\" \/><\/a><\/p>\n<p>Esto se debe a que los datos se almacenaron en el almacenamiento EBS de respaldo.<\/p>\n<h2>Limpieza del cl\u00faster Kubernetes<\/h2>\n<p>Apague el cl\u00faster Kubernetes:<\/p>\n<pre class=\"lang:default decode:true\">KUBE_AWS_ZONE=us-west-2a NODE_SIZE=m3.large NUM_NODES=3 .\/kubernetes\/cluster\/kube-down.sh \r\nBringing down cluster using provider: aws\r\nDeleting ELBs in: vpc-fa3d6c9e\r\nWaiting for ELBs to be deleted\r\nAll ELBs deleted\r\nDeleting instances in VPC: vpc-fa3d6c9e\r\nDeleting auto-scaling group: kubernetes-minion-group-us-west-2a\r\nDeleting auto-scaling launch configuration: kubernetes-minion-group-us-west-2a\r\nDeleting auto-scaling group: kubernetes-minion-group-us-west-2a\r\nDeleting auto-scaling group: kubernetes-minion-group-us-west-2a\r\nWaiting for instances to be deleted\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nWaiting for instance i-8b7aed24 to be terminated (currently shutting-down)\r\nSleeping for 3 seconds...\r\nAll instances deleted\r\nReleasing Elastic IP: 52.40.216.69\r\nDeleting volume vol-def79e57\r\nCleaning up resources in VPC: vpc-fa3d6c9e\r\nCleaning up security group: sg-91590bf7\r\nCleaning up security group: sg-9d590bfb\r\nCleaning up security group: sg-e97b298f\r\nDeleting security group: sg-91590bf7\r\nDeleting security group: sg-9d590bfb\r\nDeleting security group: sg-e97b298f\r\nDeleting VPC: vpc-fa3d6c9e\r\nDone<\/pre>\n<p>Y separa el volumen:<\/p>\n<pre class=\"lang:default decode:true\">aws ec2 delete-volume --region us-west-2 --volume-id vol-47f59cce<\/pre>\n<p>El c\u00f3digo fuente completo de este blog est\u00e1 en:\u00a0<a href=\"https:\/\/github.com\/arun-gupta\/couchbase-kubernetes\/\">github.com\/arun-gupta\/couchbase-kubernetes<\/a>.<\/p>\n<p>\u00a1Que aproveche!<\/p>","protected":false},"excerpt":{"rendered":"<p>This blog will show how to create stateful containers in Kubernetes using Amazon EBS. Couchbase Server is a stateful container. This means that state of the container needs to be carried with it.\u00a0In Kubernetes, the smallest atomic unit of running [&hellip;]<\/p>","protected":false},"author":58,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[],"ppma_author":[8933],"class_list":["post-2360","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server"],"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>Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS - 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\/es\/stateful-containers-kubernetes-amazon-ebs\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS\" \/>\n<meta property=\"og:description\" content=\"This blog will show how to create stateful containers in Kubernetes using Amazon EBS. Couchbase Server is a stateful container. This means that state of the container needs to be carried with it.\u00a0In Kubernetes, the smallest atomic unit of running [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/stateful-containers-kubernetes-amazon-ebs\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-04T19:18:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-21T13:23:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682.png\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS\",\"datePublished\":\"2017-01-04T19:18:52+00:00\",\"dateModified\":\"2023-06-21T13:23:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/\"},\"wordCount\":1061,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/\",\"name\":\"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-04T19:18:52+00:00\",\"dateModified\":\"2023-06-21T13:23:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#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\/stateful-containers-kubernetes-amazon-ebs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS\"}]},{\"@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\/39d8caed0f536489b6aa6e8d31ee631f\",\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g\",\"caption\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\"},\"description\":\"Arun Gupta is the vice president of developer advocacy at Couchbase. He has built and led developer communities for 10+ years at Sun, Oracle, and Red Hat. He has deep expertise in leading cross-functional teams to develop and execute strategy, planning and execution of content, marketing campaigns, and programs. Prior to that he led engineering teams at Sun and is a founding member of the Java EE team. Gupta has authored more than 2,000 blog posts on technology. He has extensive speaking experience in more than 40 countries on myriad topics and is a JavaOne Rock Star for three years in a row. Gupta also founded the Devoxx4Kids chapter in the US and continues to promote technology education among children. An author of several books on technology, an avid runner, a globe trotter, a Java Champion, a JUG leader, NetBeans Dream Team member, and a Docker Captain, he is easily accessible at @arungupta.\",\"sameAs\":[\"https:\/\/x.com\/arungupta\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/arun-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS - 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\/es\/stateful-containers-kubernetes-amazon-ebs\/","og_locale":"es_MX","og_type":"article","og_title":"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS","og_description":"This blog will show how to create stateful containers in Kubernetes using Amazon EBS. Couchbase Server is a stateful container. This means that state of the container needs to be carried with it.\u00a0In Kubernetes, the smallest atomic unit of running [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/stateful-containers-kubernetes-amazon-ebs\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-04T19:18:52+00:00","article_modified_time":"2023-06-21T13:23:31+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/01\/kubernetes-pv-couchbase-amazon-web-console-1024x682.png","type":"","width":"","height":""}],"author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS","datePublished":"2017-01-04T19:18:52+00:00","dateModified":"2023-06-21T13:23:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/"},"wordCount":1061,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/","url":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/","name":"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-04T19:18:52+00:00","dateModified":"2023-06-21T13:23:31+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/stateful-containers-kubernetes-amazon-ebs\/#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\/stateful-containers-kubernetes-amazon-ebs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Stateful Containers on Kubernetes using Persistent Volume and Amazon EBS"}]},{"@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\/39d8caed0f536489b6aa6e8d31ee631f","name":"Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8900a75409c646948fe0bd80f6240337","url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","caption":"Arun Gupta, VP, Developer Advocacy, Couchbase"},"description":"Arun Gupta es vicepresidente de promoci\u00f3n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m\u00e1s de 10 a\u00f1os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa\u00f1as de marketing y programas. Anteriormente dirigi\u00f3 equipos de ingenier\u00eda en Sun y es miembro fundador del equipo Java EE. Gupta es autor de m\u00e1s de 2.000 entradas de blog sobre tecnolog\u00eda. Tiene una amplia experiencia como conferenciante en m\u00e1s de 40 pa\u00edses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a\u00f1os consecutivos. Gupta tambi\u00e9n fund\u00f3 el cap\u00edtulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci\u00f3n tecnol\u00f3gica entre los ni\u00f1os. Autor de varios libros sobre tecnolog\u00eda, \u00e1vido corredor, trotamundos, campe\u00f3n de Java, l\u00edder de JUG, miembro del Dream Team de NetBeans y capit\u00e1n de Docker, es f\u00e1cilmente accesible en @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/arun-gupta\/"}]}},"authors":[{"term_id":8933,"user_id":58,"is_guest":0,"slug":"arun-gupta","display_name":"Arun Gupta, VP, Developer Advocacy, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f912e10b5f39748ee4f1a0b0da6f42747f0b3a94fe7acb511791468656f5e726?s=96&d=mm&r=g","first_name":"Arun","last_name":"Gupta","user_url":"","author_category":"","description":"Arun Gupta es vicepresidente de promoci\u00f3n de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante m\u00e1s de 10 a\u00f1os en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campa\u00f1as de marketing y programas. Anteriormente dirigi\u00f3 equipos de ingenier\u00eda en Sun y es miembro fundador del equipo Java EE.\r\n\r\nGupta es autor de m\u00e1s de 2.000 entradas de blog sobre tecnolog\u00eda. Tiene una amplia experiencia como conferenciante en m\u00e1s de 40 pa\u00edses sobre innumerables temas y es una JavaOne Rock Star desde hace tres a\u00f1os consecutivos. Gupta tambi\u00e9n fund\u00f3 el cap\u00edtulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educaci\u00f3n tecnol\u00f3gica entre los ni\u00f1os. Autor de varios libros sobre tecnolog\u00eda, \u00e1vido corredor, trotamundos, campe\u00f3n de Java, l\u00edder de JUG, miembro del Dream Team de NetBeans y capit\u00e1n de Docker, es f\u00e1cilmente accesible en @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2360","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\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2360"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2360\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2360"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}