{"id":14524,"date":"2026-02-25T12:37:56","date_gmt":"2026-02-25T12:37:56","guid":{"rendered":"https:\/\/cheesecakelabs.com\/blog\/autoscaling-kubernetes-metricas-customizadas\/"},"modified":"2026-08-15T07:04:55","modified_gmt":"2026-08-15T07:04:55","slug":"autoscaling-kubernetes-metricas-customizadas","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/","title":{"rendered":"Autoscaling no Kubernetes em produ\u00e7\u00e3o com m\u00e9tricas customizadas"},"content":{"rendered":"\n<p>Autoscaling \u00e9 uma das promessas mais poderosas do Kubernetes e tamb\u00e9m uma das mais mal compreendidas. Muitos times ficam no autoscaling padr\u00e3o, baseado em CPU ou mem\u00f3ria, e s\u00f3 depois descobrem que o cluster <strong>n\u00e3o<\/strong> <strong>escala<\/strong> <strong>quando<\/strong> <strong>deveria<\/strong>, principalmente em workloads ass\u00edncronos (workers Celery, consumidores Kafka, servi\u00e7os de ETL e afins). <\/p>\n\n\n\n<p>Neste guia, voc\u00ea vai percorrer uma <strong>estrat\u00e9gia de autoscaling validada em produ\u00e7\u00e3o<\/strong> que vai muito al\u00e9m das m\u00e9tricas b\u00e1sicas de recurso. Voc\u00ea vai aprender a combinar:  <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00e9tricas customizadas da aplica\u00e7\u00e3o;<\/strong><\/li>\n\n\n\n<li><strong>Prometheus<\/strong> para o scraping;<\/li>\n\n\n\n<li><strong>Prometheus Adapter<\/strong> para expor as m\u00e9tricas ao Kubernetes;<\/li>\n\n\n\n<li><strong>Horizontal Pod Autoscalers (HPA)<\/strong> para escalar no n\u00edvel dos pods;<\/li>\n\n\n\n<li><strong>Node Autoscaler<\/strong> do <strong>AKS (ou de qualquer cloud)<\/strong> para escalar no n\u00edvel da infraestrutura;<\/li>\n<\/ul>\n\n\n\n<p>Essa \u00e9 exatamente a arquitetura que usamos para escalar workloads baseados em Celery sob alta demanda, e ela se mostrou resiliente, previs\u00edvel e eficiente em custo.<\/p>\n\n\n\n<p>Se voc\u00ea constr\u00f3i pipelines de busca, processadores em background, sistemas orientados a eventos ou servi\u00e7os de infer\u00eancia de IA, este tutorial entrega <strong>um blueprint definitivo de escala<\/strong> para Kubernetes. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Por que o autoscaling tradicional n\u00e3o d\u00e1 conta<\/strong><\/h2>\n\n\n\n<p>O autoscaling horizontal padr\u00e3o do Kubernetes se apoia em <strong>CPU<\/strong> e <strong>mem\u00f3ria<\/strong>. Em sistemas ass\u00edncronos ou orientados a fila, essas m\u00e9tricas n\u00e3o refletem a press\u00e3o real.<\/p>\n\n\n\n<p><strong>Um exemplo:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sua fila do Celery cresce de 200 \u2192 6.000 tarefas;<\/li>\n\n\n\n<li>Os workers ficam totalmente ociosos entre uma tarefa e outra;<\/li>\n\n\n\n<li>A CPU fica entre 10% e 30%;<\/li>\n\n\n\n<li>O Kubernetes acha que est\u00e1 tudo bem.<\/li>\n<\/ul>\n\n\n\n<p>Enquanto isso, os usu\u00e1rios esperam cada vez mais.<\/p>\n\n\n\n<p><strong>A verdade \u00e9 esta:<\/strong> para fazer autoscaling do jeito certo, voc\u00ea precisa de <strong>m\u00e9tricas sem\u00e2nticas<\/strong> que descrevam a carga real, como profundidade da fila, utiliza\u00e7\u00e3o dos workers e lag de eventos. Neste tutorial, a escala \u00e9 decidida <strong>pelo que realmente importa<\/strong>, n\u00e3o pelo que o kernel reporta.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Leia tamb\u00e9m:<\/strong> <a href=\"https:\/\/cheesecakelabs.com\/blog\/migracao-cross-platform-por-que-funciona\/\" target=\"_blank\" rel=\"noreferrer noopener\">Migra\u00e7\u00e3o cross-platform: por que ela funciona<\/a><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Vis\u00e3o geral da arquitetura<\/strong><\/h2>\n\n\n\n<p>O autoscaling vai seguir este fluxo:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1200\" height=\"800\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste-1200x800.jpg\" alt=\"Vis\u00e3o geral da arquitetura de autoscaling no Kubernetes com m\u00e9tricas customizadas\" class=\"wp-image-13404\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste-1200x800.jpg 1200w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste-600x400.jpg 600w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste-768x512.jpg 768w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste-900x600.jpg 900w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste-760x507.jpg 760w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/architeture-kuberneste.jpg 1536w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n<\/div>\n\n\n<p>Vamos implementar cada camada, passo a passo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Expondo m\u00e9tricas da aplica\u00e7\u00e3o, usando Celery como exemplo<\/strong><\/h2>\n\n\n\n<p>Primeiro, exponha as m\u00e9tricas que o autoscaler vai usar.<br>Em Celery, normalmente publicamos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>celery_queue_depth<\/li>\n\n\n\n<li>celery_workers_busy_ratio<\/li>\n<\/ul>\n\n\n\n<p>Exemplo de estrutura do endpoint (no estilo Python\/Flask):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@app.route(<span class=\"hljs-string\">\"\/metrics\/celery\"<\/span>)\n\ndef celery_metrics():\n\n\u00a0\u00a0\u00a0\u00a0queue_depth = get_queue_depth()\n\n\u00a0\u00a0\u00a0\u00a0busy_ratio = get_busy_workers_ratio()\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\">return<\/span> f<span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n\n\u00a0\u00a0\u00a0\u00a0celery_queue_depth {queue_depth}\n\n\u00a0\u00a0\u00a0\u00a0celery_workers_busy_ratio {busy_ratio}\n\n\u00a0\u00a0\u00a0\u00a0\"<\/span><span class=\"hljs-string\">\"\"<\/span>, <span class=\"hljs-number\">200<\/span>, {<span class=\"hljs-string\">\"Content-Type\"<\/span>: <span class=\"hljs-string\">\"text\/plain\"<\/span>}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Exponha esse endpoint dentro do Kubernetes por meio de um Service:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">apiVersion<\/span>: v1\n\nkind: Service\n\nmetadata:\n\n\u00a0\u00a0name: worker-metrics\n\nspec:\n\n\u00a0\u00a0selector:\n\n\u00a0\u00a0\u00a0\u00a0app: my-worker\n\n\u00a0\u00a0ports:\n\n\u00a0\u00a0\u00a0\u00a0- name: metrics\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0port: 8000\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0targetPort: 8000<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Coletando m\u00e9tricas com o Prometheus<\/strong><\/h2>\n\n\n\n<p>O Prometheus precisa fazer scraping do endpoint de m\u00e9tricas.<\/p>\n\n\n\n<p>Adicione o seguinte ao <strong>values.yaml<\/strong> do seu Prometheus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">extraScrapeConfigs: |\n\n\u00a0\u00a0- job_name: <span class=\"hljs-string\">'worker-celery-metrics'<\/span>\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">metrics_path<\/span>: <span class=\"hljs-regexp\">\/metrics\/<\/span>celery\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">scrape_interval<\/span>: <span class=\"hljs-number\">15<\/span>s\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">static_configs<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- targets:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- <span class=\"hljs-string\">'worker-metrics.default.svc.cluster.local:8000'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Assim o Prometheus coleta celery_queue_depth e celery_workers_busy_ratio a cada 15 segundos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Expondo as m\u00e9tricas pelo Prometheus Adapter<\/strong><\/h2>\n\n\n\n<p>Os Horizontal Pod Autoscalers do Kubernetes n\u00e3o conseguem consumir m\u00e9tricas do Prometheus diretamente. Para preencher essa lacuna, o <strong>Prometheus Adapter<\/strong> \u00e9 instalado como um <strong>componente separado no cluster<\/strong>, normalmente pelo <a href=\"https:\/\/github.com\/prometheus-community\/helm-charts\/tree\/main\/charts\/prometheus-adapter\" target=\"_blank\" rel=\"noreferrer noopener\">pr\u00f3prio Helm chart<\/a> e por um arquivo de configura\u00e7\u00e3o, quase sempre em um namespace compartilhado como o monitoring.<\/p>\n\n\n\n<p>O adapter se conecta ao Prometheus, executa queries predefinidas e exp\u00f5e os resultados pela <strong>External Metrics API<\/strong> do Kubernetes (external.metrics.k8s.io). Essas regras de mapeamento de m\u00e9tricas ficam exclusivamente na configura\u00e7\u00e3o do Prometheus Adapter, e s\u00e3o elas que tornam as m\u00e9tricas customizadas da aplica\u00e7\u00e3o, como profundidade da fila do Celery ou utiliza\u00e7\u00e3o dos workers, dispon\u00edveis para o autoscaling.<\/p>\n\n\n\n<p><strong>Exemplo de configura\u00e7\u00e3o do adapter:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">rules:\n\n\u00a0\u00a0external:\n\n\u00a0\u00a0\u00a0\u00a0- seriesQuery: <span class=\"hljs-string\">'celery_queue_depth{job=\"worker-celery-metrics\"}'<\/span>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">name<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\">as<\/span>: <span class=\"hljs-string\">'celery_queue_depth'<\/span>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">metricsQuery<\/span>: <span class=\"hljs-string\">'avg(celery_queue_depth)'<\/span>\n\n\u00a0\u00a0\u00a0\u00a0- seriesQuery: <span class=\"hljs-string\">'celery_workers_busy_ratio{job=\"worker-celery-metrics\"}'<\/span>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">name<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\">as<\/span>: <span class=\"hljs-string\">'celery_workers_busy_ratio'<\/span>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">metricsQuery<\/span>: <span class=\"hljs-string\">'avg(celery_workers_busy_ratio)'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Depois do deploy, o Kubernetes consegue consultar essas m\u00e9tricas e os Horizontal Pod Autoscalers podem referenci\u00e1-las diretamente.<br><br>Voc\u00ea pode inspecion\u00e1-las com:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> --raw \"\/apis\/external.metrics.k8s.io\/v1beta1\" | jq\n\nYou should see:\n\ncelery_queue_depth\n\ncelery_workers_busy_ratio<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\"><strong>4. HPA do Kubernetes: escalando pods pela carga real<\/strong><\/h2>\n\n\n\n<p>Com as m\u00e9tricas customizadas expostas pelo Prometheus Adapter, o Kubernetes passa a us\u00e1-las para decidir a escala. Isso acontece pelo <strong>Horizontal Pod Autoscaler (HPA)<\/strong>, que ajusta o n\u00famero de r\u00e9plicas de pods pela press\u00e3o real da carga, e n\u00e3o apenas pelo uso de CPU ou mem\u00f3ria.<\/p>\n\n\n\n<p>Nesta configura\u00e7\u00e3o, o HPA escala os pods de worker usando m\u00e9tricas externas, como profundidade da fila e utiliza\u00e7\u00e3o dos workers. Essas m\u00e9tricas refletem quanto trabalho o sistema est\u00e1 de fato processando, o que deixa as decis\u00f5es de escala mais precisas e mais responsivas.<\/p>\n\n\n\n<p>Exemplo de configura\u00e7\u00e3o do HPA (usando Helm):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">autoscaling:\n\n\u00a0\u00a0enabled: <span class=\"hljs-literal\">true<\/span>\n\n\u00a0\u00a0<span class=\"hljs-attr\">minReplicas<\/span>: <span class=\"hljs-number\">2<\/span>\n\n\u00a0\u00a0<span class=\"hljs-attr\">maxReplicas<\/span>: <span class=\"hljs-number\">10<\/span>\n\n\u00a0\u00a0<span class=\"hljs-attr\">metrics<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0- type: External\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">external<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0metric:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: celery_queue_depth\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">target<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: AverageValue\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">averageValue<\/span>: <span class=\"hljs-string\">\"10\"<\/span>\n\n\u00a0\u00a0\u00a0\u00a0- type: External\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">external<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0metric:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: celery_workers_busy_ratio\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">target<\/span>:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: AverageValue\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-attr\">averageValue<\/span>: <span class=\"hljs-string\">\"1\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Com essa configura\u00e7\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Os pods escalam para cima quando a fila passa da profundidade alvo;<\/li>\n\n\n\n<li>Os pods escalam para cima quando os workers chegam perto da utiliza\u00e7\u00e3o total;<\/li>\n\n\n\n<li>Os pods escalam para baixo quando o sistema fica ocioso.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>O ajuste do behavior do HPA e por que ele importa<\/strong><\/h3>\n\n\n\n<p>Quando a escala \u00e9 guiada por m\u00e9tricas externas ou pela carga, \u00e9 importante configurar tamb\u00e9m os <strong>par\u00e2metros de behavior do HPA<\/strong>. Sem eles, o autoscaler reage de forma agressiva demais a picos curtos de m\u00e9trica, o que gera ciclos r\u00e1pidos de subida e descida de r\u00e9plicas (o chamado \u201cflapping\u201d).<\/p>\n\n\n\n<p>Ao definir janelas de estabiliza\u00e7\u00e3o e pol\u00edticas de escala, voc\u00ea garante decis\u00f5es <strong>mais suaves, mais previs\u00edveis e alinhadas a tend\u00eancias sustentadas de carga, em vez de ru\u00eddo passageiro<\/strong>.<\/p>\n\n\n\n<p><strong>Exemplo de configura\u00e7\u00e3o de behavior:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">behavior:\n\n\u00a0\u00a0scaleUp:\n\n\u00a0\u00a0\u00a0\u00a0stabilizationWindowSeconds: 300\n\n\u00a0\u00a0\u00a0\u00a0policies:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- type: Pods\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0value: 1\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0periodSeconds: 60\n\n\u00a0\u00a0scaleDown:\n\n\u00a0\u00a0\u00a0\u00a0stabilizationWindowSeconds: 300\n\n\u00a0\u00a0\u00a0\u00a0policies:\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- type: Pods\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0value: 1\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0periodSeconds: 60<\/code><\/span><\/pre>\n\n\n<p>Essa configura\u00e7\u00e3o limita a frequ\u00eancia com que r\u00e9plicas podem ser adicionadas ou removidas e d\u00e1 tempo para o sistema absorver as mudan\u00e7as de demanda antes de novos ajustes. Em ambientes de produ\u00e7\u00e3o, principalmente quando o autoscaling vem de m\u00e9tricas de fila, ajustar o behavior do HPA \u00e9 essencial para evitar instabilidade e troca desnecess\u00e1ria de recursos.<\/p>\n\n\n\n<p>Isso \u00e9 <strong>autoscaling sem\u00e2ntico<\/strong>: escala guiada pela l\u00f3gica de neg\u00f3cio.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Leia tamb\u00e9m: <\/strong><a href=\"https:\/\/cheesecakelabs.com\/blog\/nearshore-staff-augmentation-guia-para-negocios\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nearshore staff augmentation: um guia para o seu neg\u00f3cio<\/a><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Autoscaling no n\u00edvel dos nodes (AKS ou qualquer cloud provider)<\/strong><\/h2>\n\n\n\n<p>O autoscaling de pods s\u00f3 funciona quando o cluster tem capacidade de compute suficiente. Para adicionar ou remover nodes automaticamente, \u00e9 preciso habilitar um <strong>cluster autoscaler<\/strong>. Isso pode ser feito com a solu\u00e7\u00e3o preferida da plataforma (o Cluster Autoscaler nativo do Kubernetes, o <strong>Karpenter<\/strong> ou um autoscaler gerenciado pelo cloud provider) e configurado por ferramentas de infraestrutura como c\u00f3digo ou direto pelo console da cloud. Neste guia, o autoscaling de nodes \u00e9 habilitado com <strong>Terraform<\/strong>, mas os mesmos conceitos valem para qualquer ferramenta ou implementa\u00e7\u00e3o de autoscaler.<\/p>\n\n\n\n<p>Exemplo gen\u00e9rico em Terraform:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">resource <span class=\"hljs-string\">\"azurerm_kubernetes_cluster\"<\/span> <span class=\"hljs-string\">\"example\"<\/span> {\n\n\u00a0\u00a0name\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-string\">\"autoscaling-cluster\"<\/span>\n\n\u00a0\u00a0location\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-string\">\"eastus\"<\/span>\n\n\u00a0\u00a0resource_group_name = azurerm_resource_group.example.name\n\n\u00a0\u00a0dns_prefix\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-string\">\"example\"<\/span>\n\n\u00a0\u00a0default_node_pool {\n\n\u00a0\u00a0\u00a0\u00a0name\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-string\">\"default\"<\/span>\n\n\u00a0\u00a0\u00a0\u00a0vm_size \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-string\">\"Standard_D4s_v3\"<\/span>\n\n\u00a0\u00a0\u00a0\u00a0node_count\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-number\">2<\/span>\n\n\u00a0\u00a0\u00a0\u00a0enable_auto_scaling = <span class=\"hljs-literal\">true<\/span>\n\n\u00a0\u00a0\u00a0\u00a0min_count \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-number\">1<\/span>\n\n\u00a0\u00a0\u00a0\u00a0max_count \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-number\">5<\/span>\n\n\u00a0\u00a0\u00a0\u00a0mode\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 = <span class=\"hljs-string\">\"System\"<\/span>\n\n\u00a0\u00a0}\n\n\u00a0\u00a0identity {\n\n\u00a0\u00a0\u00a0\u00a0type = <span class=\"hljs-string\">\"SystemAssigned\"<\/span>\n\n\u00a0\u00a0}\n\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Comportamento:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se os pods n\u00e3o puderem ser agendados \u2192 um novo node \u00e9 adicionado;<\/li>\n\n\n\n<li>Se os nodes ficarem subutilizados \u2192 nodes s\u00e3o removidos;<\/li>\n<\/ul>\n\n\n\n<p>Isso garante que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Seu HPA nunca fica travado;<\/li>\n\n\n\n<li>Voc\u00ea paga s\u00f3 pelo que usa;<\/li>\n<\/ul>\n\n\n\n<p>Isso \u00e9 essencial em qualquer sistema Kubernetes escal\u00e1vel em produ\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Validando a configura\u00e7\u00e3o<\/strong><\/h2>\n\n\n\n<p>Verifique as decis\u00f5es do HPA:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl describe hpa -n <span class=\"hljs-keyword\">default<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Verifique as m\u00e9tricas externas:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> --raw \"\/apis\/external.metrics.k8s.io\/v1beta1\/namespaces\/default\/celery_queue_depth\"<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Verifique os pods pendentes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">kubectl <span class=\"hljs-keyword\">get<\/span> pods -A | grep Pending<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Verifique as a\u00e7\u00f5es do autoscaler de nodes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">kubectl get nodes\n\nkubectl describe node <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">name<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\"><strong>Para fechar: uma estrat\u00e9gia de autoscaling validada em produ\u00e7\u00e3o<\/strong><\/h2>\n\n\n\n<p>Fazer autoscaling no Kubernetes n\u00e3o \u00e9 s\u00f3 ligar HPAs. Autoscaling de verdade exige <strong>m\u00e9tricas que entendem a aplica\u00e7\u00e3o<\/strong>, <strong>decis\u00f5es bem calibradas<\/strong> e <strong>elasticidade de infraestrutura<\/strong>.<\/p>\n\n\n\n<p>Ao combinar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e9tricas customizadas<\/li>\n\n\n\n<li>Prometheus<\/li>\n\n\n\n<li>Prometheus Adapter<\/li>\n\n\n\n<li>HPA do Kubernetes<\/li>\n\n\n\n<li>Autoscaling de nodes<\/li>\n<\/ul>\n\n\n\n<p>Voc\u00ea constr\u00f3i um cluster que reage \u00e0 <strong>demanda real<\/strong>, escala de forma suave sob press\u00e3o e reduz custo nos per\u00edodos ociosos.<\/p>\n\n\n\n<p>Se suas aplica\u00e7\u00f5es dependem de filas, processamento em background ou qualquer workload ass\u00edncrono, essa estrat\u00e9gia de escala n\u00e3o \u00e9 apenas desej\u00e1vel. Ela \u00e9 essencial.<\/p>\n\n\n\n<p>Este \u00e9 o <strong>jeito definitivo de fazer autoscaling no Kubernetes<\/strong>.<\/p>\n\n\n\n<p>Se o seu time de engenharia quiser ajuda para implementar esse padr\u00e3o ou precisar escalar workloads mais avan\u00e7ados (IA, pipelines de busca, ETL e afins), entre em contato!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Autoscaling \u00e9 uma das promessas mais poderosas do Kubernetes e tamb\u00e9m uma das mais mal compreendidas. Muitos times ficam no autoscaling padr\u00e3o, baseado em CPU ou mem\u00f3ria, e s\u00f3 depois descobrem que o cluster n\u00e3o escala quando deveria, principalmente em workloads ass\u00edncronos (workers Celery, consumidores Kafka, servi\u00e7os de ETL e afins). Neste guia, voc\u00ea vai [&hellip;]<\/p>\n","protected":false},"author":92,"featured_media":13401,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_title":"Autoscaling no Kubernetes com m\u00e9tricas customizadas","_yoast_wpseo_metadesc":"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.","_yoast_wpseo_meta-robots-noindex":"","_yoast_wpseo_canonical":"","ai_summary":"O autoscaling padr\u00e3o do Kubernetes, baseado em CPU e mem\u00f3ria, falha em workloads ass\u00edncronos (Celery, Kafka, ETL), pois essas m\u00e9tricas n\u00e3o refletem a press\u00e3o real, como profundidade da fila e utiliza\u00e7\u00e3o dos workers.\nA estrat\u00e9gia proposta combina m\u00e9tricas customizadas da aplica\u00e7\u00e3o, Prometheus para scraping, Prometheus Adapter para expor as m\u00e9tricas via External Metrics API e HPA para escalar pods pela carga real.\nConfigurar o behavior do HPA, com janelas de estabiliza\u00e7\u00e3o e pol\u00edticas de escala, evita o 'flapping' causado por picos curtos de m\u00e9trica e torna as decis\u00f5es mais suaves e previs\u00edveis.\nO autoscaling de nodes (via Cluster Autoscaler, Karpenter ou solu\u00e7\u00e3o gerenciada, habilitado no exemplo com Terraform) garante capacidade de compute para os pods, evita que o HPA fique travado e reduz custos em per\u00edodos ociosos.","ai_summary_en":"","ai_summary_pt-br":"O autoscaling padr\u00e3o do Kubernetes, baseado em CPU e mem\u00f3ria, falha em workloads ass\u00edncronos (Celery, Kafka, ETL), pois essas m\u00e9tricas n\u00e3o refletem a press\u00e3o real, como profundidade da fila e utiliza\u00e7\u00e3o dos workers.\nA estrat\u00e9gia proposta combina m\u00e9tricas customizadas da aplica\u00e7\u00e3o, Prometheus para scraping, Prometheus Adapter para expor as m\u00e9tricas via External Metrics API e HPA para escalar pods pela carga real.\nConfigurar o behavior do HPA, com janelas de estabiliza\u00e7\u00e3o e pol\u00edticas de escala, evita o 'flapping' causado por picos curtos de m\u00e9trica e torna as decis\u00f5es mais suaves e previs\u00edveis.\nO autoscaling de nodes (via Cluster Autoscaler, Karpenter ou solu\u00e7\u00e3o gerenciada, habilitado no exemplo com Terraform) garante capacidade de compute para os pods, evita que o HPA fique travado e reduz custos em per\u00edodos ociosos.","footnotes":"","ckl_wpml_lang":"br","ckl_wpml_source_id":13400,"ckl_wpml_status":"ok: lang=br trid=54910 source=13400 at 2026-08-14 16:32:33"},"categories":[1423,432,471],"tags":[305,1148,1362,1363],"class_list":["post-14524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-modernization","category-engineering","category-engenharia","tag-tag-development","tag-tag-development-br","tag-kubernetes","tag-prometheus"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Autoscaling no Kubernetes com m\u00e9tricas customizadas<\/title>\n<meta name=\"description\" content=\"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Autoscaling no Kubernetes com m\u00e9tricas customizadas\" \/>\n<meta property=\"og:description\" content=\"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T12:37:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-15T07:04:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1525\" \/>\n\t<meta property=\"og:image:height\" content=\"677\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\"},\"author\":{\"name\":\"Diana Martins\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9\"},\"headline\":\"Autoscaling no Kubernetes em produ\u00e7\u00e3o com m\u00e9tricas customizadas\",\"datePublished\":\"2026-02-25T12:37:56+00:00\",\"dateModified\":\"2026-08-15T07:04:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\"},\"wordCount\":1274,\"publisher\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#organization\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg\",\"keywords\":[\"development\",\"development\",\"kubernetes\",\"prometheus\"],\"articleSection\":[\"Application Modernization\",\"Engineering\",\"Engenharia\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\",\"name\":\"Autoscaling no Kubernetes com m\u00e9tricas customizadas\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg\",\"datePublished\":\"2026-02-25T12:37:56+00:00\",\"dateModified\":\"2026-08-15T07:04:55+00:00\",\"description\":\"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg\",\"width\":1525,\"height\":677,\"caption\":\"Kubernetes Autoscaling | | Cheesecake Labs\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Autoscaling no Kubernetes em produ\u00e7\u00e3o com m\u00e9tricas customizadas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/br\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Empresa de desenvolvimento e design de aplicativos mobile &amp; web que est\u00e1 reinventando o desenvolvimento de produtos com times remotos. N\u00f3s desenvolvemos aplicativos iOS, Android e aplica\u00e7\u00f5es Web com as melhores empresas dos EUA, do Brasil e do mundo.\",\"publisher\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/br\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#organization\",\"name\":\"Cheesecake Labs\",\"alternateName\":\"Cheesecake Labs Inc\",\"url\":\"https:\/\/cheesecakelabs.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/cheesecakelabs.com\/#logo\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png\",\"caption\":\"Cheesecake Labs\",\"inLanguage\":\"br\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/cheesecakelabs.com\/#primary-image\",\"url\":\"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp\",\"contentUrl\":\"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp\",\"width\":1920,\"height\":1080,\"caption\":\"Cheesecake Labs \u2014 AI, Data & Blockchain software development services\",\"inLanguage\":\"br\"},\"sameAs\":[\"https:\/\/www.facebook.com\/cheesecakelabs\",\"https:\/\/x.com\/cheesecakelabs\",\"https:\/\/www.instagram.com\/cheesecakelabs\/\",\"https:\/\/www.linkedin.com\/company\/cheesecake-labs\/\",\"https:\/\/www.youtube.com\/channel\/UCdGEQ5AHJcmIlaOaI5fGGVA\",\"https:\/\/clutch.co\/profile\/cheesecake-labs\",\"https:\/\/www.behance.net\/cheesecakelabs\",\"https:\/\/dribbble.com\/cheesecakelabs\",\"https:\/\/www.designrush.com\/agency\/profile\/cheesecake-labs\",\"https:\/\/www.g2.com\/products\/cheesecake-labs\/reviews\"],\"description\":\"Cheesecake Labs is a software development studio that designs and builds custom digital products \u2014 web, mobile, and platforms \u2014 combining product design and high-performance engineering.\",\"foundingDate\":\"2013\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9\",\"name\":\"Diana Martins\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g\",\"caption\":\"Diana Martins\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Autoscaling no Kubernetes com m\u00e9tricas customizadas","description":"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.","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:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/","og_locale":"pt_BR","og_type":"article","og_title":"Autoscaling no Kubernetes com m\u00e9tricas customizadas","og_description":"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.","og_url":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2026-02-25T12:37:56+00:00","article_modified_time":"2026-08-15T07:04:55+00:00","og_image":[{"width":1525,"height":677,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg","type":"image\/jpeg"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Escrito por":null,"Est. tempo de leitura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/"},"author":{"name":"Diana Martins","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9"},"headline":"Autoscaling no Kubernetes em produ\u00e7\u00e3o com m\u00e9tricas customizadas","datePublished":"2026-02-25T12:37:56+00:00","dateModified":"2026-08-15T07:04:55+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/"},"wordCount":1274,"publisher":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#organization"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg","keywords":["development","development","kubernetes","prometheus"],"articleSection":["Application Modernization","Engineering","Engenharia"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/","url":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/","name":"Autoscaling no Kubernetes com m\u00e9tricas customizadas","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg","datePublished":"2026-02-25T12:37:56+00:00","dateModified":"2026-08-15T07:04:55+00:00","description":"Autoscaling no Kubernetes com m\u00e9tricas customizadas: por que o modelo padr\u00e3o de CPU n\u00e3o d\u00e1 conta e como expor as m\u00e9tricas certas da aplica\u00e7\u00e3o.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2026\/02\/Kubernetes-Autoscaling.jpg","width":1525,"height":677,"caption":"Kubernetes Autoscaling | | Cheesecake Labs"},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/autoscaling-kubernetes-metricas-customizadas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/br\/blog\/"},{"@type":"ListItem","position":2,"name":"Autoscaling no Kubernetes em produ\u00e7\u00e3o com m\u00e9tricas customizadas"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/br\/","name":"Cheesecake Labs","description":"Empresa de desenvolvimento e design de aplicativos mobile &amp; web que est\u00e1 reinventando o desenvolvimento de produtos com times remotos. N\u00f3s desenvolvemos aplicativos iOS, Android e aplica\u00e7\u00f5es Web com as melhores empresas dos EUA, do Brasil e do mundo.","publisher":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#organization","name":"Cheesecake Labs","alternateName":"Cheesecake Labs Inc","url":"https:\/\/cheesecakelabs.com\/","logo":{"@type":"ImageObject","@id":"https:\/\/cheesecakelabs.com\/#logo","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png","caption":"Cheesecake Labs","inLanguage":"br"},"image":{"@type":"ImageObject","@id":"https:\/\/cheesecakelabs.com\/#primary-image","url":"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp","contentUrl":"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp","width":1920,"height":1080,"caption":"Cheesecake Labs \u2014 AI, Data & Blockchain software development services","inLanguage":"br"},"sameAs":["https:\/\/www.facebook.com\/cheesecakelabs","https:\/\/x.com\/cheesecakelabs","https:\/\/www.instagram.com\/cheesecakelabs\/","https:\/\/www.linkedin.com\/company\/cheesecake-labs\/","https:\/\/www.youtube.com\/channel\/UCdGEQ5AHJcmIlaOaI5fGGVA","https:\/\/clutch.co\/profile\/cheesecake-labs","https:\/\/www.behance.net\/cheesecakelabs","https:\/\/dribbble.com\/cheesecakelabs","https:\/\/www.designrush.com\/agency\/profile\/cheesecake-labs","https:\/\/www.g2.com\/products\/cheesecake-labs\/reviews"],"description":"Cheesecake Labs is a software development studio that designs and builds custom digital products \u2014 web, mobile, and platforms \u2014 combining product design and high-performance engineering.","foundingDate":"2013"},{"@type":"Person","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9","name":"Diana Martins","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g","caption":"Diana Martins"}}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts\/14524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/users\/92"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/comments?post=14524"}],"version-history":[{"count":3,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts\/14524\/revisions"}],"predecessor-version":[{"id":15037,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts\/14524\/revisions\/15037"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/media\/13401"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/media?parent=14524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/categories?post=14524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/tags?post=14524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}