{"id":2187,"date":"2017-01-03T19:23:38","date_gmt":"2017-01-03T19:23:38","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2187"},"modified":"2019-04-04T02:31:58","modified_gmt":"2019-04-04T09:31:58","slug":"kubernetes-namespaces-resource-quota-limits-qos-cluster","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","title":{"rendered":"Kubernetes Namespaces, Cuota de Recursos y L\u00edmites para QoS en Cluster"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12277\" src=\"\/wp-content\/original-assets\/kubernetes-logo.png\" alt=\"Kubernetes Logo\" width=\"209\" height=\"185\" \/><\/p>\n<p>Por defecto, todos los recursos del cl\u00faster Kubernetes se crean en un espacio de nombres predeterminado. Un pod se ejecutar\u00e1 con solicitudes\/l\u00edmites de CPU y memoria ilimitados. A <a href=\"https:\/\/kubernetes.io\/v1.1\/docs\/admin\/namespaces\/README.html\">Espacio de nombres de Kubernetes<\/a> permite particionar los recursos creados en un grupo de nombres l\u00f3gicos. Cada espacio de nombres proporciona:<\/p>\n<ul>\n<li><strong>un alcance \u00fanico<\/strong> de recursos para evitar colisiones de nombres<\/li>\n<li><strong>pol\u00edticas<\/strong>garantizar una autoridad adecuada a los usuarios de confianza<\/li>\n<li>capacidad de especificar <strong>limitaciones para el consumo de recursos<\/strong><\/li>\n<\/ul>\n<p>Esto permite que un cl\u00faster Kubernetes comparta recursos por m\u00faltiples grupos y proporcione diferentes niveles de QoS a cada grupo. Los recursos creados en un espacio de nombres se ocultan de otros espacios de nombres. Se pueden crear m\u00faltiples espacios de nombres, cada uno potencialmente con diferentes restricciones.<\/p>\n<h2>Espacio de nombres predeterminado de Kubernetes<\/h2>\n<p>Por defecto, cada recurso creado por el usuario en el cl\u00faster Kubernetes se ejecuta en un espacio de nombres predeterminado, denominado <code>por defecto<\/code>.<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get namespace\r\nNAME          LABELS    STATUS    AGE\r\ndefault           Active    1m\r\nkube-system       Active    1m<\/pre>\n<p>Cualquier pod, servicio o controlador de replicaci\u00f3n se crear\u00e1 en este espacio de nombres. <code>sistema kube<\/code> est\u00e1 reservado para los recursos creados por el cl\u00faster Kubernetes. Puede consultar m\u00e1s detalles sobre el espacio de nombres:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh describe namespaces default\r\nName: default\r\nLabels: \r\nStatus: Active\r\n\r\nNo resource quota.\r\n\r\nResource Limits\r\n Type  Resource Min Max Request Limit Limit\/Request\r\n ----  -------- --- --- ------- ----- -------------\r\n Container cpu  - - 100m - -\r\n<\/pre>\n<p>Esta descripci\u00f3n muestra la cuota de recursos (si existe), as\u00ed como los rangos de l\u00edmite de recursos. As\u00ed que vamos a crear un controlador de replicaci\u00f3n Couchbase como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh run couchbase --image=arungupta\/couchbase<\/pre>\n<p>Compruebe el controlador de replicaci\u00f3n existente:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc\r\nCONTROLLER   CONTAINER(S)   IMAGE(S)              SELECTOR        REPLICAS   AGE\r\ncouchbase    couchbase      arungupta\/couchbase   run=couchbase   1          5m<\/pre>\n<p>Por defecto, s\u00f3lo se muestran los recursos del espacio de nombres del usuario. Los recursos de todos los espacios de nombres pueden mostrarse utilizando <code>--all-namespaces<\/code>\u00a0opci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc --all-namespaces\r\nNAMESPACE     CONTROLLER                       CONTAINER(S)           IMAGE(S)                                                SELECTOR                           REPLICAS   AGE\r\ndefault       couchbase                        couchbase              arungupta\/couchbase                                     run=couchbase                      1          5m\r\nkube-system   heapster-v11                     heapster               gcr.io\/google_containers\/heapster:v0.18.4               k8s-app=heapster,version=v11       1          6m\r\nkube-system   kube-dns-v9                      etcd                   gcr.io\/google_containers\/etcd:2.0.9                     k8s-app=kube-dns,version=v9        1          6m\r\n                                               kube2sky               gcr.io\/google_containers\/kube2sky:1.11                                                     \r\n                                               skydns                 gcr.io\/google_containers\/skydns:2015-10-13-8c72f8c                                         \r\n                                               healthz                gcr.io\/google_containers\/exechealthz:1.0                                                   \r\nkube-system   kube-ui-v4                       kube-ui                gcr.io\/google_containers\/kube-ui:v4                     k8s-app=kube-ui,version=v4         1         6m\r\nkube-system   l7-lb-controller-v0.5.2          default-http-backend   gcr.io\/google_containers\/defaultbackend:1.0             k8s-app=glbc,version=v0.5.2        1         6m\r\n                                               l7-lb-controller       gcr.io\/google_containers\/glbc:0.5.2                                                        \r\nkube-system   monitoring-influxdb-grafana-v2   influxdb               gcr.io\/google_containers\/heapster_influxdb:v0.4         k8s-app=influxGrafana,version=v2   1         6m\r\n                                               grafana                beta.gcr.io\/google_containers\/heapster_grafana:v2.1.1<\/pre>\n<p>Como puede ver, el <code>arungupta\/couchbase<\/code> se ejecuta en el <code>por defecto<\/code> espacio de nombres. Todos los dem\u00e1s recursos se ejecutan en el espacio de nombres\u00a0<code>sistema kube<\/code> namespace. Comprobemos el contexto de este controlador de replicaci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh config view couchbase\r\napiVersion: v1\r\nclusters:\r\n- cluster:\r\n    certificate-authority-data: REDACTED\r\n    server: https:\/\/104.197.10.200\r\n  name: couchbase-on-kubernetes_kubernetes\r\ncontexts:\r\n- context:\r\n    cluster: couchbase-on-kubernetes_kubernetes\r\n    user: couchbase-on-kubernetes_kubernetes\r\n  name: couchbase-on-kubernetes_kubernetes\r\ncurrent-context: couchbase-on-kubernetes_kubernetes\r\nkind: Config\r\npreferences: {}\r\nusers:\r\n- name: couchbase-on-kubernetes_kubernetes\r\n  user:\r\n    client-certificate-data: REDACTED\r\n    client-key-data: REDACTED\r\n    token: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj\r\n- name: couchbase-on-kubernetes_kubernetes-basic-auth\r\n  user:\r\n    password: cZ9fZSuzIqq5kdnj\r\n    username: admin<\/pre>\n<p>Busque <code>contextos.nombre.contexto<\/code> para ver el contexto existente. Este se manipular\u00e1 m\u00e1s adelante.<\/p>\n<h2>Crear un recurso en un nuevo espacio de nombres de Kubernetes<\/h2>\n<p>Primero vamos a crear un nuevo espacio de nombres. Esto puede hacerse utilizando el siguiente archivo de configuraci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nkind: Namespace\r\nmetadata:\r\n  name: development\r\n  labels:\r\n    name: development<\/pre>\n<p>El espacio de nombres se crea como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh create -f myns.yaml \r\nnamespace \"development\" created<\/pre>\n<p>A continuaci\u00f3n, la consulta de todos los espacios de nombres da:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get namespace\r\nNAME          LABELS             STATUS    AGE\r\ndefault                    Active    9m\r\ndevelopment   name=development   Active    13s\r\nkube-system                Active    8m<\/pre>\n<p>Se puede crear un nuevo controlador de replicaci\u00f3n en este nuevo espacio de nombres utilizando <code>--namespace<\/code> opci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development run couchbase --image=arungupta\/couchbase\r\nreplicationcontroller \"couchbase\" created<\/pre>\n<p>La lista de recursos en todos los espacios de nombres tiene este aspecto:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc --all-namespaces\r\nNAMESPACE     CONTROLLER                       CONTAINER(S)           IMAGE(S)                                                SELECTOR                           REPLICAS   AGE\r\ndefault       couchbase                        couchbase              arungupta\/couchbase                                     run=couchbase                      1          4m\r\ndevelopment   couchbase                        couchbase              arungupta\/couchbase                                     run=couchbase                      1          2m\r\nkube-system   heapster-v11                     heapster               gcr.io\/google_containers\/heapster:v0.18.4               k8s-app=heapster,version=v11       1          31m\r\n. . .<\/pre>\n<p>Como se ve, hay dos controladores de replicaci\u00f3n con <code>arungupta\/couchbase<\/code> imagen - una en <code>por defecto<\/code> y otro en <code>desarrollo<\/code> espacio de nombres.<\/p>\n<h2>Establecer el espacio de nombres de Kubernetes para un recurso existente<\/h2>\n<p>Si un recurso ya est\u00e1 creado, se le puede asignar un espacio de nombres. En un recurso creado previamente, se puede establecer un nuevo contexto en el espacio de nombres:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh config set-context dev --namespace=development --cluster=couchbase-on-kubernetes_kubernetes --user=couchbase-on-kubernetes_kubernetes\r\ncontext \"dev\" set.<\/pre>\n<p>Ahora se muestra el contexto:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh config view couchbase\r\napiVersion: v1\r\nclusters:\r\n- cluster:\r\n    certificate-authority-data: REDACTED\r\n    server: https:\/\/104.197.10.200\r\n  name: couchbase-on-kubernetes_kubernetes\r\ncontexts:\r\n- context:\r\n    cluster: couchbase-on-kubernetes_kubernetes\r\n    user: couchbase-on-kubernetes_kubernetes\r\n  name: couchbase-on-kubernetes_kubernetes\r\n- context:\r\n    cluster: couchbase-on-kubernetes_kubernetes\r\n    namespace: development\r\n    user: couchbase-on-kubernetes_kubernetes\r\n  name: dev\r\ncurrent-context: couchbase-on-kubernetes_kubernetes\r\nkind: Config\r\npreferences: {}\r\nusers:\r\n- name: couchbase-on-kubernetes_kubernetes\r\n  user:\r\n    client-certificate-data: REDACTED\r\n    client-key-data: REDACTED\r\n    token: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj\r\n- name: couchbase-on-kubernetes_kubernetes-basic-auth\r\n  user:\r\n    password: cZ9fZSuzIqq5kdnj\r\n    username: admin<\/pre>\n<p>El segundo atributo de <code>contextos.contexto<\/code> muestra que se ha creado un nuevo contexto. Tambi\u00e9n muestra que el contexto actual sigue siendo <code>couchbase-en-kubernetes_kubernetes<\/code>. Dado que no se especifica ning\u00fan espacio de nombres en ese contexto, pertenece al espacio de nombres por defecto. Cambie el contexto:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh config use-context dev\r\nswitched to context \"dev\".<\/pre>\n<p>Consulte la lista de controladores de replicaci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc\r\nCONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR   REPLICAS   AGE<\/pre>\n<p>Obviamente, no hay controladores de replicaci\u00f3n ejecut\u00e1ndose en este contexto. Vamos a crear un nuevo controlador de replicaci\u00f3n en este nuevo espacio de nombres:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh run couchbase --image=arungupta\/couchbase\r\nreplicationcontroller \"couchbase\" creado<\/pre>\n<p>Y ver la lista de controladores de replicaci\u00f3n en todos los espacios de nombres:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc --all-namespaces\r\nNAMESPACE     CONTROLLER                       CONTAINER(S)           IMAGE(S)                                                SELECTOR                           REPLICAS   AGE\r\ndefault       couchbase                        couchbase              arungupta\/couchbase                                     run=couchbase                      1          16m\r\ndevelopment   couchbase                        couchbase              arungupta\/couchbase                                     run=couchbase                      1          4s\r\nkube-system   heapster-v11                     heapster               gcr.io\/google_containers\/heapster:v0.18.4               k8s-app=heapster,version=v11       1          17m\r\n. . .<\/pre>\n<p>Ahora puedes ver dos <code>arungupta\/couchbase<\/code> controladores de replicaci\u00f3n que se ejecutan en dos espacios de nombres diferentes.<\/p>\n<h2>Eliminar un recurso de Kubernetes en el espacio de nombres<\/h2>\n<p>Se puede eliminar un recurso calificando completamente el nombre del recurso:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=default delete rc couchbase\r\nreplicationcontroller \"couchbase\" deleted<\/pre>\n<p>Del mismo modo, el otro controlador de replicaci\u00f3n se puede eliminar como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development delete rc couchbase\r\nreplicationcontroller \"couchbase\" deleted<\/pre>\n<p>Por \u00faltimo, vea la lista de todos los controladores de replicaci\u00f3n en todos los espacios de nombres:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh get rc --all-namespaces\r\nNAMESPACE     CONTROLLER                       CONTAINER(S)           IMAGE(S)                                                SELECTOR                           REPLICAS   AGE\r\nkube-system   heapster-v11                     heapster               gcr.io\/google_containers\/heapster:v0.18.4               k8s-app=heapster,version=v11       1          3h\r\nkube-system   kube-dns-v9                      etcd                   gcr.io\/google_containers\/etcd:2.0.9                     k8s-app=kube-dns,version=v9        1          3h\r\n. . .<\/pre>\n<p>Esto confirma que se han eliminado todos los controladores de replicaci\u00f3n creados por el usuario.<\/p>\n<h2>Cuota y l\u00edmite de recursos mediante el espacio de nombres de Kubernetes<\/h2>\n<p>A cada espacio de nombres se le puede asignar una cuota de recursos. Por defecto, un pod se ejecutar\u00e1 con solicitudes\/l\u00edmites de CPU y memoria ilimitados. Especificar una cuota permite restringir la cantidad de recursos del cl\u00faster que pueden consumir todos los pods de un espacio de nombres. La cuota de recursos puede especificarse utilizando un archivo de configuraci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nkind: ResourceQuota\r\nmetadata:\r\n  name: quota\r\nspec:\r\n  hard:\r\n    cpu: \"20\"\r\n    memory: 1Gi\r\n    pods: \"10\"\r\n    replicationcontrollers: \"20\"\r\n    resourcequotas: \"1\"\r\n    services: \"5\"<\/pre>\n<p>El sistema de cuotas admite los siguientes recursos:<\/p>\n<table>\n<tbody>\n<tr>\n<th>Recursos<\/th>\n<th>Descripci\u00f3n<\/th>\n<\/tr>\n<tr>\n<td><code>cpu<\/code><\/td>\n<td>Uso total de cpu solicitado<\/td>\n<\/tr>\n<tr>\n<td><code>memoria<\/code><\/td>\n<td>Uso total de memoria solicitada<\/td>\n<\/tr>\n<tr>\n<td><code>vainas<\/code><\/td>\n<td>N\u00famero total de pods activos en los que la fase est\u00e1 pendiente o activa.<\/td>\n<\/tr>\n<tr>\n<td><code>servicios<\/code><\/td>\n<td>N\u00famero total de servicios<\/td>\n<\/tr>\n<tr>\n<td><code>controladores de replicaci\u00f3n<\/code><\/td>\n<td>N\u00famero total de controladores de replicaci\u00f3n<\/td>\n<\/tr>\n<tr>\n<td><code>resourcequotas<\/code><\/td>\n<td>N\u00famero total de cuotas de recursos<\/td>\n<\/tr>\n<tr>\n<td><code>secretos<\/code><\/td>\n<td>N\u00famero total de secretos<\/td>\n<\/tr>\n<tr>\n<td><code>reclamaciones persistentes<\/code><\/td>\n<td>N\u00famero total de siniestros de volumen persistente<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Esta cuota de recursos puede crearse en un espacio de nombres:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development create -f quota.yaml\r\nresourcequota \"quota\" created<\/pre>\n<p>La cuota creada puede verse como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development describe quota\r\nName:   quota\r\nNamespace:  development\r\nResource  Used Hard\r\n--------  ---- ----\r\ncpu   0 20\r\nmemory   0 1Gi\r\npods   0 10\r\nreplicationcontrollers 0 20\r\nresourcequotas  1 1\r\nservices  0 5<\/pre>\n<p>Ahora, si intenta crear el controlador de replicaci\u00f3n que funciona:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development run couchbase --image=arungupta\/couchbase\r\nreplicationcontroller \"couchbase\" created<\/pre>\n<p>Pero describir la cuota de nuevo muestra:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development describe quota\r\nName:   quota\r\nNamespace:  development\r\nResource  Used Hard\r\n--------  ---- ----\r\ncpu   0 20\r\nmemory   0 1Gi\r\npods   0 10\r\nreplicationcontrollers 1 20\r\nresourcequotas  1 1\r\nservices  0 5<\/pre>\n<p>Esper\u00e1bamos que se creara un nuevo pod como parte de este controlador de replicaci\u00f3n, pero no est\u00e1 ah\u00ed. As\u00ed que vamos a describir nuestro controlador de replicaci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development describe rc\r\nName:  couchbase\r\nNamespace: development\r\nImage(s): arungupta\/couchbase\r\nSelector: run=couchbase\r\nLabels:  run=couchbase\r\nReplicas: 0 current \/ 1 desired\r\nPods Status: 0 Running \/ 0 Waiting \/ 0 Succeeded \/ 0 Failed\r\nNo volumes.\r\nEvents:\r\n  FirstSeen LastSeen Count From    SubobjectPath Reason  Message\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500    \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  1m  24s  4 {replication-controller }   FailedCreate Error creating: Pod \"couchbase-\" is forbidden: must make a non-zero request for memory since it is tracked by quota.<\/pre>\n<p>Por defecto, el pod consume toda la cpu y memoria disponibles. Si se aplican cuotas de recursos, debe especificarse un valor expl\u00edcito. Alternativamente se puede especificar un valor por defecto para el pod utilizando el siguiente fichero de configuraci\u00f3n:<\/p>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nkind: LimitRange\r\nmetadata:\r\n  name: limits\r\nspec:\r\n  limits:\r\n  - default:\r\n      cpu: 200m\r\n      memory: 512Mi\r\n    defaultRequest:\r\n      cpu: 100m\r\n      memory: 256Mi\r\n    type: Container<\/pre>\n<p>Esto restringe la CPU y la memoria que puede consumir un pod. Vamos a aplicar estos l\u00edmites como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development create -f limits.yaml \r\nlimitrange \"limits\" created<\/pre>\n<p>Ahora, al volver a describir el controlador de replicaci\u00f3n, se muestra:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development describe rc\r\nName:  couchbase\r\nNamespace: development\r\nImage(s): arungupta\/couchbase\r\nSelector: run=couchbase\r\nLabels:  run=couchbase\r\nReplicas: 1 current \/ 1 desired\r\nPods Status: 1 Running \/ 0 Waiting \/ 0 Succeeded \/ 0 Failed\r\nNo volumes.\r\nEvents:\r\n  FirstSeen LastSeen Count From    SubobjectPath Reason   Message\r\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500    \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  8m  2m  14 {replication-controller }   FailedCreate  Error creating: Pod \"couchbase-\" is forbidden: must make a non-zero request for memory since it is tracked by quota.\r\n  2m  2m  1 {replication-controller }   SuccessfulCreate Created pod: couchbase-gzk0l<\/pre>\n<p>Esto muestra la creaci\u00f3n exitosa del pod. Y ahora cuando se describe la cuota, muestra valores correctos tambi\u00e9n:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development describe quota\r\nName:   quota\r\nNamespace:  development\r\nResource  Used  Hard\r\n--------  ----  ----\r\ncpu   100m  20\r\nmemory   268435456 1Gi\r\npods   1  10\r\nreplicationcontrollers 1  20\r\nresourcequotas  1  1\r\nservices  0  5<\/pre>\n<p><a href=\"https:\/\/kubernetes.io\/v1.1\/docs\/admin\/resourcequota\/\">Cuota de recursos<\/a> proporcionan m\u00e1s detalles sobre c\u00f3mo establecer\/actualizar estos valores. La creaci\u00f3n de otra cuota da el siguiente error:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development create -f quota.yaml\r\nError from server: error when creating \"quota.yaml\": ResourceQuota \"quota\" is forbidden: limited to 1 resourcequotas<\/pre>\n<h2>Especificaci\u00f3n de l\u00edmites durante la creaci\u00f3n de un pod<\/h2>\n<p>Los l\u00edmites tambi\u00e9n pueden especificarse durante la creaci\u00f3n del pod: Si el l\u00edmite de memoria para cada pod est\u00e1 restringido a 1g, entonces una definici\u00f3n de pod v\u00e1lida ser\u00eda:<\/p>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nkind: Pod\r\nmetadata:\r\n  name: couchbase-pod\r\nspec:\r\n  containers:\r\n  - name: couchbase\r\n    image: couchbase\r\n    ports:\r\n    - containerPort: 8091\r\n    resources:\r\n      limits:\r\n        cpu: \"1\"\r\n        memory: 512Mi<\/pre>\n<p>Esto se debe a que el pod solicita 0.5G de memoria solamente. Y una definici\u00f3n de pod inv\u00e1lida ser\u00eda:<\/p>\n<pre class=\"lang:default decode:true\">apiVersion: v1\r\nkind: Pod\r\nmetadata:\r\n  name: couchbase-pod\r\nspec:\r\n  containers:\r\n  - name: couchbase\r\n    image: couchbase\r\n    ports:\r\n    - containerPort: 8091\r\n    resources:\r\n      limits:\r\n        cpu: \"1\"\r\n        memory: 2G<\/pre>\n<p>Esto se debe a que el pod solicita 2G de memoria. La creaci\u00f3n de un pod de este tipo da el siguiente error:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh --namespace=development create -f couchbase-pod.yaml \r\nError from server: error when creating \"couchbase-pod.yaml\": Pod \"couchbase-pod\" is forbidden: unable to admit pod without exceeding quota for resource memory:  limited to 1Gi but require 2805306368 to succeed<\/pre>\n<p>Espero que puedas aplicar espacios de nombres, cuotas de recursos y l\u00edmites para compartir tus clusters en distintos entornos.<\/p>","protected":false},"excerpt":{"rendered":"<p>By default, all resources in Kubernetes cluster are created in a default namespace. A\u00a0pod will run with unbounded CPU and memory requests\/limits. A Kubernetes\u00a0namespace allows\u00a0to partition created resources into a logically named group. Each namespace provides: a unique scope for [&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":[1545],"ppma_author":[8933],"class_list":["post-2187","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","tag-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster - 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\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster\" \/>\n<meta property=\"og:description\" content=\"By default, all resources in Kubernetes cluster are created in a default namespace. A\u00a0pod will run with unbounded CPU and memory requests\/limits. A Kubernetes\u00a0namespace allows\u00a0to partition created resources into a logically named group. Each namespace provides: a unique scope for [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-03T19:23:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-04-04T09:31:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@arungupta\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arun Gupta, VP, Developer Advocacy, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\"},\"author\":{\"name\":\"Arun Gupta, VP, Developer Advocacy, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f\"},\"headline\":\"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster\",\"datePublished\":\"2017-01-03T19:23:38+00:00\",\"dateModified\":\"2019-04-04T09:31:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\"},\"wordCount\":836,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"kubernetes\"],\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\",\"name\":\"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-03T19:23:38+00:00\",\"dateModified\":\"2019-04-04T09:31:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster\"}]},{\"@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":"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster - 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\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","og_locale":"es_MX","og_type":"article","og_title":"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster","og_description":"By default, all resources in Kubernetes cluster are created in a default namespace. A\u00a0pod will run with unbounded CPU and memory requests\/limits. A Kubernetes\u00a0namespace allows\u00a0to partition created resources into a logically named group. Each namespace provides: a unique scope for [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-03T19:23:38+00:00","article_modified_time":"2019-04-04T09:31:58+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Arun Gupta, VP, Developer Advocacy, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@arungupta","twitter_misc":{"Written by":"Arun Gupta, VP, Developer Advocacy, Couchbase","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/"},"author":{"name":"Arun Gupta, VP, Developer Advocacy, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/39d8caed0f536489b6aa6e8d31ee631f"},"headline":"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster","datePublished":"2017-01-03T19:23:38+00:00","dateModified":"2019-04-04T09:31:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/"},"wordCount":836,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["kubernetes"],"articleSection":["Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","url":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","name":"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-03T19:23:38+00:00","dateModified":"2019-04-04T09:31:58+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes Namespaces, Resource Quota, and Limits for QoS in Cluster"}]},{"@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","author_category":"","last_name":"Gupta","first_name":"Arun","job_title":"","user_url":"","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\/2187","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=2187"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2187\/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=2187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2187"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}