{"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\/pt\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","title":{"rendered":"Namespaces do Kubernetes, cota de recursos e limites para QoS no 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 padr\u00e3o, todos os recursos no cluster do Kubernetes s\u00e3o criados em um namespace padr\u00e3o. Um pod ser\u00e1 executado com solicita\u00e7\u00f5es\/limites ilimitados de CPU e mem\u00f3ria. A <a href=\"https:\/\/kubernetes.io\/v1.1\/docs\/admin\/namespaces\/README.html\">Espa\u00e7o de nomes do Kubernetes<\/a> permite particionar os recursos criados em um grupo logicamente nomeado. Cada namespace fornece:<\/p>\n<ul>\n<li><strong>um escopo exclusivo<\/strong> para recursos a fim de evitar colis\u00f5es de nomes<\/li>\n<li><strong>pol\u00edticas<\/strong>para garantir a autoridade adequada aos usu\u00e1rios confi\u00e1veis<\/li>\n<li>capacidade de especificar <strong>restri\u00e7\u00f5es para o consumo de recursos<\/strong><\/li>\n<\/ul>\n<p>Isso permite que um cluster Kubernetes compartilhe recursos por v\u00e1rios grupos e forne\u00e7a diferentes n\u00edveis de QoS para cada grupo. Os recursos criados em um namespace ficam ocultos de outros namespaces. V\u00e1rios namespaces podem ser criados, cada um potencialmente com restri\u00e7\u00f5es diferentes.<\/p>\n<h2>Namespace padr\u00e3o do Kubernetes<\/h2>\n<p>Por padr\u00e3o, cada recurso criado pelo usu\u00e1rio no cluster do Kubernetes \u00e9 executado em um namespace padr\u00e3o, chamado <code>padr\u00e3o<\/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>Qualquer pod, servi\u00e7o ou controlador de replica\u00e7\u00e3o ser\u00e1 criado nesse namespace. <code>sistema kube<\/code> \u00e9 reservado para recursos criados pelo cluster do Kubernetes. Mais detalhes sobre o namespace podem ser vistos:<\/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>Essa descri\u00e7\u00e3o mostra a cota de recursos (se houver), bem como os intervalos de limites de recursos. Portanto, vamos criar um controlador de replica\u00e7\u00e3o do Couchbase como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh run couchbase --image=arungupta\/couchbase<\/pre>\n<p>Verifique o controlador de replica\u00e7\u00e3o 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 padr\u00e3o, somente os recursos no namespace do usu\u00e1rio s\u00e3o mostrados. Os recursos em todos os namespaces podem ser mostrados usando <code>--todos os espa\u00e7os de nome<\/code>\u00a0op\u00e7\u00e3o:<\/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 voc\u00ea pode ver, o <code>arungupta\/couchbase<\/code> A imagem \u00e9 executada no <code>padr\u00e3o<\/code> namespace. Todos os outros recursos s\u00e3o executados no namespace\u00a0<code>sistema kube<\/code> namespace. Vamos verificar o contexto desse controlador de replica\u00e7\u00e3o:<\/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>Procure por <code>contexts.context.name<\/code> para ver o contexto existente. Isso ser\u00e1 manipulado posteriormente.<\/p>\n<h2>Criar um recurso em um novo espa\u00e7o de nomes do Kubernetes<\/h2>\n<p>Primeiro, vamos criar um novo namespace. Isso pode ser feito usando o seguinte arquivo de configura\u00e7\u00e3o:<\/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>O espa\u00e7o de nome \u00e9 criado como:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh create -f myns.yaml \r\nnamespace \"development\" created<\/pre>\n<p>Em seguida, a consulta de todos os namespaces fornece:<\/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>Um novo controlador de replica\u00e7\u00e3o pode ser criado nesse novo namespace usando <code>--namespace<\/code> op\u00e7\u00e3o:<\/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>A lista de recursos em todos os namespaces \u00e9 semelhante:<\/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 visto, h\u00e1 dois controladores de replica\u00e7\u00e3o com <code>arungupta\/couchbase<\/code> imagem - uma em <code>padr\u00e3o<\/code> e outro no namespace <code>desenvolvimento<\/code> namespace.<\/p>\n<h2>Definir o espa\u00e7o de nome do Kubernetes para um recurso existente<\/h2>\n<p>Se um recurso j\u00e1 tiver sido criado, poder\u00e1 ser atribu\u00eddo a ele um namespace. Em um recurso criado anteriormente, um novo contexto pode ser definido no namespace:<\/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>A visualiza\u00e7\u00e3o do contexto agora mostra:<\/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>O segundo atributo em <code>contextos.contexto<\/code> mostra que um novo contexto foi criado. Ele tamb\u00e9m mostra que o contexto atual ainda \u00e9 <code>couchbase-em-kubernetes_kubernetes<\/code>. Como nenhum namespace \u00e9 especificado nesse contexto, ele pertence ao namespace padr\u00e3o. Altere o 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 a lista de controladores de replica\u00e7\u00e3o:<\/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, nenhum controlador de replica\u00e7\u00e3o est\u00e1 em execu\u00e7\u00e3o nesse contexto. Vamos criar um novo controlador de replica\u00e7\u00e3o nesse novo namespace:<\/p>\n<pre class=\"lang:default decode:true\">.\/kubernetes\/cluster\/kubectl.sh executar couchbase --image=arungupta\/couchbase\r\nControlador de replica\u00e7\u00e3o \"couchbase\" criado<\/pre>\n<p>E veja a lista de controladores de replica\u00e7\u00e3o em todos os namespaces:<\/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>Agora voc\u00ea pode ver dois <code>arungupta\/couchbase<\/code> controladores de replica\u00e7\u00e3o em execu\u00e7\u00e3o em dois namespaces diferentes.<\/p>\n<h2>Excluir um recurso do Kubernetes no namespace<\/h2>\n<p>Um recurso pode ser exclu\u00eddo por meio da qualifica\u00e7\u00e3o completa do nome do 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>Da mesma forma, o outro controlador de replica\u00e7\u00e3o pode ser exclu\u00eddo 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 fim, veja a lista de todos os controladores de replica\u00e7\u00e3o em todos os namespaces:<\/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>Isso confirma que todos os controladores de replica\u00e7\u00e3o criados pelo usu\u00e1rio foram exclu\u00eddos.<\/p>\n<h2>Cota e limite de recursos usando o espa\u00e7o de nomes do Kubernetes<\/h2>\n<p>A cada namespace pode ser atribu\u00edda uma cota de recursos. Por padr\u00e3o, um pod ser\u00e1 executado com solicita\u00e7\u00f5es\/limites ilimitados de CPU e mem\u00f3ria. Especificar a cota permite restringir a quantidade de recursos do cluster que pode ser consumida por todos os pods em um namespace. A cota de recursos pode ser especificada usando um arquivo de configura\u00e7\u00e3o:<\/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>Os recursos a seguir s\u00e3o compat\u00edveis com o sistema de cotas:<\/p>\n<table>\n<tbody>\n<tr>\n<th>Recursos<\/th>\n<th>Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<tr>\n<td><code>CPU<\/code><\/td>\n<td>Uso total da cpu solicitada<\/td>\n<\/tr>\n<tr>\n<td><code>mem\u00f3ria<\/code><\/td>\n<td>Uso total da mem\u00f3ria solicitada<\/td>\n<\/tr>\n<tr>\n<td><code>c\u00e1psulas<\/code><\/td>\n<td>N\u00famero total de pods ativos em que a fase est\u00e1 pendente ou ativa.<\/td>\n<\/tr>\n<tr>\n<td><code>servi\u00e7os<\/code><\/td>\n<td>N\u00famero total de servi\u00e7os<\/td>\n<\/tr>\n<tr>\n<td><code>controladores de replica\u00e7\u00e3o<\/code><\/td>\n<td>N\u00famero total de controladores de replica\u00e7\u00e3o<\/td>\n<\/tr>\n<tr>\n<td><code>recursosquotas<\/code><\/td>\n<td>N\u00famero total de cotas de recursos<\/td>\n<\/tr>\n<tr>\n<td><code>segredos<\/code><\/td>\n<td>N\u00famero total de segredos<\/td>\n<\/tr>\n<tr>\n<td><code>reivindica\u00e7\u00f5es de volume persistente<\/code><\/td>\n<td>N\u00famero total de reclama\u00e7\u00f5es de volume persistente<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Essa cota de recursos pode ser criada em um namespace:<\/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>A cota criada pode ser vista 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>Agora, se voc\u00ea tentar criar o controlador de replica\u00e7\u00e3o, isso funcionar\u00e1:<\/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>Mas a descri\u00e7\u00e3o da cota mostra novamente:<\/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\u00e1vamos que um novo pod fosse criado como parte desse controlador de replica\u00e7\u00e3o, mas ele n\u00e3o est\u00e1 l\u00e1. Portanto, vamos descrever nosso controlador de replica\u00e7\u00e3o:<\/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 padr\u00e3o, o pod consome toda a CPU e a mem\u00f3ria dispon\u00edveis. Com cotas de recursos aplicadas, um valor expl\u00edcito deve ser especificado. Como alternativa, um valor padr\u00e3o para o pod pode ser especificado usando o seguinte arquivo de configura\u00e7\u00e3o:<\/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>Isso restringe a CPU e a mem\u00f3ria que podem ser consumidas por um pod. Vamos aplicar esses limites 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>Agora, quando voc\u00ea descreve o controlador de replica\u00e7\u00e3o novamente, ele \u00e9 exibido:<\/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>Isso mostra que a cria\u00e7\u00e3o do pod foi bem-sucedida. E agora, quando voc\u00ea descreve a cota, ela tamb\u00e9m mostra os valores corretos:<\/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\/\">Cota de recursos<\/a> fornecem mais detalhes sobre como definir\/atualizar esses valores. A cria\u00e7\u00e3o de outra cota apresenta o seguinte erro:<\/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>Especifica\u00e7\u00e3o de limites durante a cria\u00e7\u00e3o de pods<\/h2>\n<p>Os limites tamb\u00e9m podem ser especificados durante a cria\u00e7\u00e3o do pod: Se o limite de mem\u00f3ria para cada pod for restrito a 1g, uma defini\u00e7\u00e3o de pod v\u00e1lida seria:<\/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>Isso ocorre porque o pod solicita apenas 0,5 G de mem\u00f3ria. E uma defini\u00e7\u00e3o de pod inv\u00e1lida seria:<\/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>Isso ocorre porque o pod solicita 2G de mem\u00f3ria. A cria\u00e7\u00e3o desse pod apresenta o seguinte erro:<\/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 voc\u00ea possa aplicar namespaces, cotas de recursos e limites para compartilhar seus clusters em diferentes ambientes.<\/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.1 (Yoast SEO v26.1.1) - 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\/pt\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kubernetes-namespaces-resource-quota-limits-qos-cluster\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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, vice-presidente de defesa do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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 \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE. Gupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre uma infinidade de t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta.","sameAs":["https:\/\/x.com\/arungupta"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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 \u00e9 o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experi\u00eancia na lideran\u00e7a de equipes multifuncionais para desenvolver e executar estrat\u00e9gias, planejamento e execu\u00e7\u00e3o de conte\u00fado, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e \u00e9 membro fundador da equipe Java EE.\r\n\r\nGupta \u00e9 autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experi\u00eancia em palestras em mais de 40 pa\u00edses sobre diversos t\u00f3picos e \u00e9 um JavaOne Rock Star h\u00e1 tr\u00eas anos consecutivos. Gupta tamb\u00e9m fundou o cap\u00edtulo Devoxx4Kids nos EUA e continua a promover a educa\u00e7\u00e3o tecnol\u00f3gica entre as crian\u00e7as. Autor de v\u00e1rios livros sobre tecnologia, corredor \u00e1vido, viajante do mundo inteiro, campe\u00e3o de Java, l\u00edder de JUG, membro do NetBeans Dream Team e capit\u00e3o do Docker, ele pode ser facilmente acessado em @arungupta."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2187"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2187\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=2187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2187"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}