[{"data":1,"prerenderedAt":1622},["ShallowReactive",2],{"blog-ja-kubernetes-hpa-vpa-autoscaling":3,"blog-ja-kubernetes-hpa-vpa-autoscaling-alt":1612},{"id":4,"title":5,"author":6,"body":7,"date":1607,"description":1608,"extension":1609,"image":70,"locale":1610,"meta":1611,"navigation":1612,"path":1613,"seo":1614,"stem":1615,"tags":1616,"__hash__":1621},"blog\u002Fblog\u002Fja\u002Fkubernetes-hpa-vpa-autoscaling.md","Kubernetes オートスケーリング完全ガイド：HPA\u002FVPA\u002FKEDA の使い分けと実践","Kubo Team",{"type":8,"value":9,"toc":1580},"minimark",[10,14,29,37,42,47,61,64,470,473,482,562,566,591,595,599,607,611,673,677,872,880,884,897,905,909,913,930,934,942,945,953,1132,1136,1286,1290,1293,1381,1384,1387,1401,1455,1459,1467,1470,1516,1522,1526,1529,1554,1567,1576],[11,12,13],"p",{},"Kubernetes のオートスケーリングは、パフォーマンスの維持とコスト最適化を両立する鍵です。しかし、HPA・VPA・KEDA・Cluster Autoscaler など複数のツールがあり、「いつ・何を・どう組み合わせるか」は多くのチームにとって悩みの種です。",[11,15,16,23,24,28],{},[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fwww.cncf.io\u002F",[21],"nofollow","CNCF 2025 ベンチマーク","によれば、これらのツールを適切に組み合わせることで、静的プロビジョニングと比較して ",[25,26,27],"strong",{},"30〜50% のコスト削減"," が可能です。本記事では、各ツールの特徴を深掘りし、実践的な組み合わせパターンを解説します。",[11,30,31,36],{},[17,32,35],{"href":33,"rel":34},"https:\u002F\u002Fkubo.hexabase.io\u002F",[21],"Kubo"," は月額48,000円〜のマネージド Kubernetes で、オートスケーリングの設定・運用を容易にします。",[38,39,41],"h2",{"id":40},"hpahorizontal-pod-autoscaler水平スケーリングの基本","HPA（Horizontal Pod Autoscaler）：水平スケーリングの基本",[43,44,46],"h3",{"id":45},"hpa-の仕組み","HPA の仕組み",[11,48,49,54,55,60],{},[17,50,53],{"href":51,"rel":52},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Fconcepts\u002Fworkloads\u002Fautoscaling\u002F",[21],"Kubernetes 公式ドキュメント","によれば、HPA はメトリクスに基づいて Pod のレプリカ数を自動調整します。",[17,56,59],{"href":57,"rel":58},"https:\u002F\u002Fwww.cloudpilot.ai\u002Fen\u002Fblog\u002Fk8s-autoscaling-comparison\u002F",[21],"CloudPilot AI の比較分析","では、HPA は「CPU またはメモリがボトルネックとなるステートレスワークロードに最適」と評価されています。",[43,62,63],{"id":63},"基本設定例",[65,66,71],"pre",{"className":67,"code":68,"language":69,"meta":70,"style":70},"language-yaml shiki shiki-themes tokyo-night","apiVersion: autoscaling\u002Fv2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: web-app-hpa\n  namespace: production\nspec:\n  scaleTargetRef:\n    apiVersion: apps\u002Fv1\n    kind: Deployment\n    name: web-app\n  minReplicas: 2\n  maxReplicas: 20\n  metrics:\n  - type: Resource\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 70\n  - type: Resource\n    resource:\n      name: memory\n      target:\n        type: Utilization\n        averageUtilization: 80\n  behavior:\n    scaleDown:\n      stabilizationWindowSeconds: 300  # 5分間の安定化期間\n      policies:\n      - type: Percent\n        value: 10\n        periodSeconds: 60             # 1分あたり最大10%削減\n    scaleUp:\n      stabilizationWindowSeconds: 0    # 即座にスケールアップ\n      policies:\n      - type: Percent\n        value: 100\n        periodSeconds: 15             # 15秒で最大100%増加\n","yaml","",[72,73,74,91,102,111,122,133,141,149,160,171,182,194,205,213,228,236,247,255,266,277,288,295,305,312,321,331,339,347,362,370,383,394,408,416,429,436,447,457],"code",{"__ignoreMap":70},[75,76,79,83,87],"span",{"class":77,"line":78},"line",1,[75,80,82],{"class":81},"s0U2E","apiVersion",[75,84,86],{"class":85},"sAklC",":",[75,88,90],{"class":89},"sPY7s"," autoscaling\u002Fv2\n",[75,92,94,97,99],{"class":77,"line":93},2,[75,95,96],{"class":81},"kind",[75,98,86],{"class":85},[75,100,101],{"class":89}," HorizontalPodAutoscaler\n",[75,103,105,108],{"class":77,"line":104},3,[75,106,107],{"class":81},"metadata",[75,109,110],{"class":85},":\n",[75,112,114,117,119],{"class":77,"line":113},4,[75,115,116],{"class":81},"  name",[75,118,86],{"class":85},[75,120,121],{"class":89}," web-app-hpa\n",[75,123,125,128,130],{"class":77,"line":124},5,[75,126,127],{"class":81},"  namespace",[75,129,86],{"class":85},[75,131,132],{"class":89}," production\n",[75,134,136,139],{"class":77,"line":135},6,[75,137,138],{"class":81},"spec",[75,140,110],{"class":85},[75,142,144,147],{"class":77,"line":143},7,[75,145,146],{"class":81},"  scaleTargetRef",[75,148,110],{"class":85},[75,150,152,155,157],{"class":77,"line":151},8,[75,153,154],{"class":81},"    apiVersion",[75,156,86],{"class":85},[75,158,159],{"class":89}," apps\u002Fv1\n",[75,161,163,166,168],{"class":77,"line":162},9,[75,164,165],{"class":81},"    kind",[75,167,86],{"class":85},[75,169,170],{"class":89}," Deployment\n",[75,172,174,177,179],{"class":77,"line":173},10,[75,175,176],{"class":81},"    name",[75,178,86],{"class":85},[75,180,181],{"class":89}," web-app\n",[75,183,185,188,190],{"class":77,"line":184},11,[75,186,187],{"class":81},"  minReplicas",[75,189,86],{"class":85},[75,191,193],{"class":192},"sOJ5S"," 2\n",[75,195,197,200,202],{"class":77,"line":196},12,[75,198,199],{"class":81},"  maxReplicas",[75,201,86],{"class":85},[75,203,204],{"class":192}," 20\n",[75,206,208,211],{"class":77,"line":207},13,[75,209,210],{"class":81},"  metrics",[75,212,110],{"class":85},[75,214,216,220,223,225],{"class":77,"line":215},14,[75,217,219],{"class":218},"sgJMe","  -",[75,221,222],{"class":81}," type",[75,224,86],{"class":85},[75,226,227],{"class":89}," Resource\n",[75,229,231,234],{"class":77,"line":230},15,[75,232,233],{"class":81},"    resource",[75,235,110],{"class":85},[75,237,239,242,244],{"class":77,"line":238},16,[75,240,241],{"class":81},"      name",[75,243,86],{"class":85},[75,245,246],{"class":89}," cpu\n",[75,248,250,253],{"class":77,"line":249},17,[75,251,252],{"class":81},"      target",[75,254,110],{"class":85},[75,256,258,261,263],{"class":77,"line":257},18,[75,259,260],{"class":81},"        type",[75,262,86],{"class":85},[75,264,265],{"class":89}," Utilization\n",[75,267,269,272,274],{"class":77,"line":268},19,[75,270,271],{"class":81},"        averageUtilization",[75,273,86],{"class":85},[75,275,276],{"class":192}," 70\n",[75,278,280,282,284,286],{"class":77,"line":279},20,[75,281,219],{"class":218},[75,283,222],{"class":81},[75,285,86],{"class":85},[75,287,227],{"class":89},[75,289,291,293],{"class":77,"line":290},21,[75,292,233],{"class":81},[75,294,110],{"class":85},[75,296,298,300,302],{"class":77,"line":297},22,[75,299,241],{"class":81},[75,301,86],{"class":85},[75,303,304],{"class":89}," memory\n",[75,306,308,310],{"class":77,"line":307},23,[75,309,252],{"class":81},[75,311,110],{"class":85},[75,313,315,317,319],{"class":77,"line":314},24,[75,316,260],{"class":81},[75,318,86],{"class":85},[75,320,265],{"class":89},[75,322,324,326,328],{"class":77,"line":323},25,[75,325,271],{"class":81},[75,327,86],{"class":85},[75,329,330],{"class":192}," 80\n",[75,332,334,337],{"class":77,"line":333},26,[75,335,336],{"class":81},"  behavior",[75,338,110],{"class":85},[75,340,342,345],{"class":77,"line":341},27,[75,343,344],{"class":81},"    scaleDown",[75,346,110],{"class":85},[75,348,350,353,355,358],{"class":77,"line":349},28,[75,351,352],{"class":81},"      stabilizationWindowSeconds",[75,354,86],{"class":85},[75,356,357],{"class":192}," 300",[75,359,361],{"class":360},"sbD-w","  # 5分間の安定化期間\n",[75,363,365,368],{"class":77,"line":364},29,[75,366,367],{"class":81},"      policies",[75,369,110],{"class":85},[75,371,373,376,378,380],{"class":77,"line":372},30,[75,374,375],{"class":218},"      -",[75,377,222],{"class":81},[75,379,86],{"class":85},[75,381,382],{"class":89}," Percent\n",[75,384,386,389,391],{"class":77,"line":385},31,[75,387,388],{"class":81},"        value",[75,390,86],{"class":85},[75,392,393],{"class":192}," 10\n",[75,395,397,400,402,405],{"class":77,"line":396},32,[75,398,399],{"class":81},"        periodSeconds",[75,401,86],{"class":85},[75,403,404],{"class":192}," 60",[75,406,407],{"class":360},"             # 1分あたり最大10%削減\n",[75,409,411,414],{"class":77,"line":410},33,[75,412,413],{"class":81},"    scaleUp",[75,415,110],{"class":85},[75,417,419,421,423,426],{"class":77,"line":418},34,[75,420,352],{"class":81},[75,422,86],{"class":85},[75,424,425],{"class":192}," 0",[75,427,428],{"class":360},"    # 即座にスケールアップ\n",[75,430,432,434],{"class":77,"line":431},35,[75,433,367],{"class":81},[75,435,110],{"class":85},[75,437,439,441,443,445],{"class":77,"line":438},36,[75,440,375],{"class":218},[75,442,222],{"class":81},[75,444,86],{"class":85},[75,446,382],{"class":89},[75,448,450,452,454],{"class":77,"line":449},37,[75,451,388],{"class":81},[75,453,86],{"class":85},[75,455,456],{"class":192}," 100\n",[75,458,460,462,464,467],{"class":77,"line":459},38,[75,461,399],{"class":81},[75,463,86],{"class":85},[75,465,466],{"class":192}," 15",[75,468,469],{"class":360},"             # 15秒で最大100%増加\n",[43,471,472],{"id":472},"カスタムメトリクスによるスケーリング",[11,474,475,476,481],{},"CPU\u002Fメモリだけでなく、",[17,477,480],{"href":478,"rel":479},"https:\u002F\u002Fprometheus.io\u002F",[21],"Prometheus"," のカスタムメトリクスでスケーリングできます：",[65,483,485],{"className":67,"code":484,"language":69,"meta":70,"style":70},"metrics:\n- type: Pods\n  pods:\n    metric:\n      name: http_requests_per_second\n    target:\n      type: AverageValue\n      averageValue: \"1000\"\n",[72,486,487,494,506,513,520,529,536,546],{"__ignoreMap":70},[75,488,489,492],{"class":77,"line":78},[75,490,491],{"class":81},"metrics",[75,493,110],{"class":85},[75,495,496,499,501,503],{"class":77,"line":93},[75,497,498],{"class":218},"-",[75,500,222],{"class":81},[75,502,86],{"class":85},[75,504,505],{"class":89}," Pods\n",[75,507,508,511],{"class":77,"line":104},[75,509,510],{"class":81},"  pods",[75,512,110],{"class":85},[75,514,515,518],{"class":77,"line":113},[75,516,517],{"class":81},"    metric",[75,519,110],{"class":85},[75,521,522,524,526],{"class":77,"line":124},[75,523,241],{"class":81},[75,525,86],{"class":85},[75,527,528],{"class":89}," http_requests_per_second\n",[75,530,531,534],{"class":77,"line":135},[75,532,533],{"class":81},"    target",[75,535,110],{"class":85},[75,537,538,541,543],{"class":77,"line":143},[75,539,540],{"class":81},"      type",[75,542,86],{"class":85},[75,544,545],{"class":89}," AverageValue\n",[75,547,548,551,553,556,559],{"class":77,"line":151},[75,549,550],{"class":81},"      averageValue",[75,552,86],{"class":85},[75,554,555],{"class":85}," \"",[75,557,558],{"class":89},"1000",[75,560,561],{"class":85},"\"\n",[43,563,565],{"id":564},"hpa-のベストプラクティス","HPA のベストプラクティス",[567,568,569,576,582],"ul",{},[570,571,572,575],"li",{},[72,573,574],{},"minReplicas"," は可用性要件に基づき最低2以上に設定",[570,577,578,581],{},[72,579,580],{},"behavior"," でスケールダウンの安定化期間を設定し、フラッピングを防止",[570,583,584,585,590],{},"CPU 使用率の閾値は 70〜80% が一般的（",[17,586,589],{"href":587,"rel":588},"https:\u002F\u002Fsedai.io\u002Fblog\u002Fkubernetes-autoscaling",[21],"Sedai のガイド","参照）",[38,592,594],{"id":593},"vpavertical-pod-autoscalerリソースの適正化","VPA（Vertical Pod Autoscaler）：リソースの適正化",[43,596,598],{"id":597},"vpa-の仕組み","VPA の仕組み",[11,600,601,606],{},[17,602,605],{"href":603,"rel":604},"https:\u002F\u002Fkubeify.com\u002Fblog\u002Fhpa-vs-vpa-vs-keda-performance-and-cost-trade-offs-explained",[21],"Kubeify の分析","によれば、VPA は Pod の CPU\u002Fメモリの requests と limits を実際の使用状況に基づいて自動調整します。ステートフルワークロード、モノリス、バッチジョブなど、安定した予測可能な使用パターンを持つワークロードに最適です。",[43,608,610],{"id":609},"vpa-の3つの動作モード","VPA の3つの動作モード",[612,613,614,630],"table",{},[615,616,617],"thead",{},[618,619,620,624,627],"tr",{},[621,622,623],"th",{},"モード",[621,625,626],{},"動作",[621,628,629],{},"推奨用途",[631,632,633,647,660],"tbody",{},[618,634,635,641,644],{},[636,637,638],"td",{},[25,639,640],{},"Off",[636,642,643],{},"推奨値を生成するが適用しない",[636,645,646],{},"分析・計画フェーズ",[618,648,649,654,657],{},[636,650,651],{},[25,652,653],{},"Initial",[636,655,656],{},"Pod 作成時のみ推奨値を適用",[636,658,659],{},"段階的な導入",[618,661,662,667,670],{},[636,663,664],{},[25,665,666],{},"Auto",[636,668,669],{},"推奨値を自動適用（Pod 再起動あり）",[636,671,672],{},"安定したワークロード",[43,674,676],{"id":675},"goldilocks-による可視化","Goldilocks による可視化",[65,678,680],{"className":67,"code":679,"language":69,"meta":70,"style":70},"apiVersion: autoscaling.k8s.io\u002Fv1\nkind: VerticalPodAutoscaler\nmetadata:\n  name: api-server-vpa\nspec:\n  targetRef:\n    apiVersion: apps\u002Fv1\n    kind: Deployment\n    name: api-server\n  updatePolicy:\n    updateMode: \"Off\"     # 推奨値の確認のみ\n  resourcePolicy:\n    containerPolicies:\n    - containerName: api\n      minAllowed:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      maxAllowed:\n        cpu: \"2\"\n        memory: \"4Gi\"\n",[72,681,682,691,700,706,715,721,728,736,744,753,760,777,784,791,804,811,825,839,846,859],{"__ignoreMap":70},[75,683,684,686,688],{"class":77,"line":78},[75,685,82],{"class":81},[75,687,86],{"class":85},[75,689,690],{"class":89}," autoscaling.k8s.io\u002Fv1\n",[75,692,693,695,697],{"class":77,"line":93},[75,694,96],{"class":81},[75,696,86],{"class":85},[75,698,699],{"class":89}," VerticalPodAutoscaler\n",[75,701,702,704],{"class":77,"line":104},[75,703,107],{"class":81},[75,705,110],{"class":85},[75,707,708,710,712],{"class":77,"line":113},[75,709,116],{"class":81},[75,711,86],{"class":85},[75,713,714],{"class":89}," api-server-vpa\n",[75,716,717,719],{"class":77,"line":124},[75,718,138],{"class":81},[75,720,110],{"class":85},[75,722,723,726],{"class":77,"line":135},[75,724,725],{"class":81},"  targetRef",[75,727,110],{"class":85},[75,729,730,732,734],{"class":77,"line":143},[75,731,154],{"class":81},[75,733,86],{"class":85},[75,735,159],{"class":89},[75,737,738,740,742],{"class":77,"line":151},[75,739,165],{"class":81},[75,741,86],{"class":85},[75,743,170],{"class":89},[75,745,746,748,750],{"class":77,"line":162},[75,747,176],{"class":81},[75,749,86],{"class":85},[75,751,752],{"class":89}," api-server\n",[75,754,755,758],{"class":77,"line":173},[75,756,757],{"class":81},"  updatePolicy",[75,759,110],{"class":85},[75,761,762,765,767,769,771,774],{"class":77,"line":184},[75,763,764],{"class":81},"    updateMode",[75,766,86],{"class":85},[75,768,555],{"class":85},[75,770,640],{"class":89},[75,772,773],{"class":85},"\"",[75,775,776],{"class":360},"     # 推奨値の確認のみ\n",[75,778,779,782],{"class":77,"line":196},[75,780,781],{"class":81},"  resourcePolicy",[75,783,110],{"class":85},[75,785,786,789],{"class":77,"line":207},[75,787,788],{"class":81},"    containerPolicies",[75,790,110],{"class":85},[75,792,793,796,799,801],{"class":77,"line":215},[75,794,795],{"class":218},"    -",[75,797,798],{"class":81}," containerName",[75,800,86],{"class":85},[75,802,803],{"class":89}," api\n",[75,805,806,809],{"class":77,"line":230},[75,807,808],{"class":81},"      minAllowed",[75,810,110],{"class":85},[75,812,813,816,818,820,823],{"class":77,"line":238},[75,814,815],{"class":81},"        cpu",[75,817,86],{"class":85},[75,819,555],{"class":85},[75,821,822],{"class":89},"100m",[75,824,561],{"class":85},[75,826,827,830,832,834,837],{"class":77,"line":249},[75,828,829],{"class":81},"        memory",[75,831,86],{"class":85},[75,833,555],{"class":85},[75,835,836],{"class":89},"128Mi",[75,838,561],{"class":85},[75,840,841,844],{"class":77,"line":257},[75,842,843],{"class":81},"      maxAllowed",[75,845,110],{"class":85},[75,847,848,850,852,854,857],{"class":77,"line":268},[75,849,815],{"class":81},[75,851,86],{"class":85},[75,853,555],{"class":85},[75,855,856],{"class":89},"2",[75,858,561],{"class":85},[75,860,861,863,865,867,870],{"class":77,"line":279},[75,862,829],{"class":81},[75,864,86],{"class":85},[75,866,555],{"class":85},[75,868,869],{"class":89},"4Gi",[75,871,561],{"class":85},[11,873,874,879],{},[17,875,878],{"href":876,"rel":877},"https:\u002F\u002Fgithub.com\u002FFairwindsOps\u002Fgoldilocks",[21],"Goldilocks"," を併用することで、namespace 全体のリソース推奨値をダッシュボードで確認できます。",[43,881,883],{"id":882},"vpa-の重要な注意点","VPA の重要な注意点",[885,886,887],"blockquote",{},[11,888,889,892,893,896],{},[25,890,891],{},"HPA と VPA の競合に注意",": VPA の Auto モードと HPA の CPU\u002Fメモリベーススケーリングを",[25,894,895],{},"同時に使用してはいけません","。両コントローラーが競合します。正しい組み合わせは「VPA（Off\u002FInitial モード）+ HPA（カスタムメトリクス）」、または「KEDA で HPA を置き換える」です。",[11,898,899,904],{},[17,900,903],{"href":901,"rel":902},"https:\u002F\u002Fwww.hexabase.com\u002Fproduct\u002Fcaptain-ai\u002F",[21],"Captain.AI"," では、AI ワーカーのリソース要件が動的に変動するため、VPA の推奨値を活用した継続的なライトサイジングが重要です。",[38,906,908],{"id":907},"kedaイベント駆動型オートスケーリング","KEDA：イベント駆動型オートスケーリング",[43,910,912],{"id":911},"keda-の革新性","KEDA の革新性",[11,914,915,920,921,925,926,929],{},[17,916,919],{"href":917,"rel":918},"https:\u002F\u002Fkeda.sh\u002F",[21],"KEDA"," は Kubernetes ベースのイベント駆動型オートスケーラーで、HPA だけではカバーできない外部イベントソースに基づくスケーリングを実現します。",[17,922,924],{"href":917,"rel":923},[21],"バージョン 2.19"," の時点で ",[25,927,928],{},"70以上のビルトインスケーラー"," を提供しています。",[43,931,933],{"id":932},"keda-の最大の強みscale-to-zero","KEDA の最大の強み：Scale to Zero",[11,935,936,941],{},[17,937,940],{"href":938,"rel":939},"https:\u002F\u002Fwww.spectrocloud.com\u002Fblog\u002Fkubernetes-autoscaling-patterns-hpa-vpa-and-keda",[21],"Spectro Cloud の解説","によれば、イベントがない場合は Pod を0にスケールダウンでき、開発環境やバッチ処理で大幅なコスト削減を実現します。",[43,943,944],{"id":944},"メッセージキューベースのスケーリング例",[11,946,947,952],{},[17,948,951],{"href":949,"rel":950},"https:\u002F\u002Fwww.rabbitmq.com\u002F",[21],"RabbitMQ"," のキュー深度に基づくスケーリング：",[65,954,956],{"className":67,"code":955,"language":69,"meta":70,"style":70},"apiVersion: keda.sh\u002Fv1alpha1\nkind: ScaledObject\nmetadata:\n  name: worker-scaler\n  namespace: production\nspec:\n  scaleTargetRef:\n    name: queue-worker\n  pollingInterval: 10           # 10秒ごとにチェック\n  cooldownPeriod: 60            # 60秒のクールダウン\n  minReplicaCount: 0            # Scale to Zero!\n  maxReplicaCount: 20\n  triggers:\n  - type: rabbitmq\n    metadata:\n      host: \"amqp:\u002F\u002Frabbitmq.production.svc.cluster.local:5672\"\n      queueName: tasks\n      queueLength: \"5\"          # キュー内5メッセージごとに1 Pod\n",[72,957,958,967,976,982,991,999,1005,1011,1020,1033,1045,1057,1066,1073,1084,1091,1105,1115],{"__ignoreMap":70},[75,959,960,962,964],{"class":77,"line":78},[75,961,82],{"class":81},[75,963,86],{"class":85},[75,965,966],{"class":89}," keda.sh\u002Fv1alpha1\n",[75,968,969,971,973],{"class":77,"line":93},[75,970,96],{"class":81},[75,972,86],{"class":85},[75,974,975],{"class":89}," ScaledObject\n",[75,977,978,980],{"class":77,"line":104},[75,979,107],{"class":81},[75,981,110],{"class":85},[75,983,984,986,988],{"class":77,"line":113},[75,985,116],{"class":81},[75,987,86],{"class":85},[75,989,990],{"class":89}," worker-scaler\n",[75,992,993,995,997],{"class":77,"line":124},[75,994,127],{"class":81},[75,996,86],{"class":85},[75,998,132],{"class":89},[75,1000,1001,1003],{"class":77,"line":135},[75,1002,138],{"class":81},[75,1004,110],{"class":85},[75,1006,1007,1009],{"class":77,"line":143},[75,1008,146],{"class":81},[75,1010,110],{"class":85},[75,1012,1013,1015,1017],{"class":77,"line":151},[75,1014,176],{"class":81},[75,1016,86],{"class":85},[75,1018,1019],{"class":89}," queue-worker\n",[75,1021,1022,1025,1027,1030],{"class":77,"line":162},[75,1023,1024],{"class":81},"  pollingInterval",[75,1026,86],{"class":85},[75,1028,1029],{"class":192}," 10",[75,1031,1032],{"class":360},"           # 10秒ごとにチェック\n",[75,1034,1035,1038,1040,1042],{"class":77,"line":173},[75,1036,1037],{"class":81},"  cooldownPeriod",[75,1039,86],{"class":85},[75,1041,404],{"class":192},[75,1043,1044],{"class":360},"            # 60秒のクールダウン\n",[75,1046,1047,1050,1052,1054],{"class":77,"line":184},[75,1048,1049],{"class":81},"  minReplicaCount",[75,1051,86],{"class":85},[75,1053,425],{"class":192},[75,1055,1056],{"class":360},"            # Scale to Zero!\n",[75,1058,1059,1062,1064],{"class":77,"line":196},[75,1060,1061],{"class":81},"  maxReplicaCount",[75,1063,86],{"class":85},[75,1065,204],{"class":192},[75,1067,1068,1071],{"class":77,"line":207},[75,1069,1070],{"class":81},"  triggers",[75,1072,110],{"class":85},[75,1074,1075,1077,1079,1081],{"class":77,"line":215},[75,1076,219],{"class":218},[75,1078,222],{"class":81},[75,1080,86],{"class":85},[75,1082,1083],{"class":89}," rabbitmq\n",[75,1085,1086,1089],{"class":77,"line":230},[75,1087,1088],{"class":81},"    metadata",[75,1090,110],{"class":85},[75,1092,1093,1096,1098,1100,1103],{"class":77,"line":238},[75,1094,1095],{"class":81},"      host",[75,1097,86],{"class":85},[75,1099,555],{"class":85},[75,1101,1102],{"class":89},"amqp:\u002F\u002Frabbitmq.production.svc.cluster.local:5672",[75,1104,561],{"class":85},[75,1106,1107,1110,1112],{"class":77,"line":249},[75,1108,1109],{"class":81},"      queueName",[75,1111,86],{"class":85},[75,1113,1114],{"class":89}," tasks\n",[75,1116,1117,1120,1122,1124,1127,1129],{"class":77,"line":257},[75,1118,1119],{"class":81},"      queueLength",[75,1121,86],{"class":85},[75,1123,555],{"class":85},[75,1125,1126],{"class":89},"5",[75,1128,773],{"class":85},[75,1130,1131],{"class":360},"          # キュー内5メッセージごとに1 Pod\n",[43,1133,1135],{"id":1134},"prometheus-メトリクスによるスケーリング","Prometheus メトリクスによるスケーリング",[65,1137,1139],{"className":67,"code":1138,"language":69,"meta":70,"style":70},"apiVersion: keda.sh\u002Fv1alpha1\nkind: ScaledObject\nmetadata:\n  name: api-scaler\nspec:\n  scaleTargetRef:\n    name: api-server\n  minReplicaCount: 1\n  maxReplicaCount: 50\n  triggers:\n  - type: prometheus\n    metadata:\n      serverAddress: http:\u002F\u002Fprometheus.monitoring.svc.cluster.local:9090\n      metricName: http_request_duration_seconds_p99\n      threshold: \"0.5\"           # P99 レイテンシが 500ms を超えたらスケールアップ\n      query: |\n        histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{service=\"api\"}[5m])) by (le))\n",[72,1140,1141,1149,1157,1163,1172,1178,1184,1192,1201,1210,1216,1227,1233,1243,1253,1270,1281],{"__ignoreMap":70},[75,1142,1143,1145,1147],{"class":77,"line":78},[75,1144,82],{"class":81},[75,1146,86],{"class":85},[75,1148,966],{"class":89},[75,1150,1151,1153,1155],{"class":77,"line":93},[75,1152,96],{"class":81},[75,1154,86],{"class":85},[75,1156,975],{"class":89},[75,1158,1159,1161],{"class":77,"line":104},[75,1160,107],{"class":81},[75,1162,110],{"class":85},[75,1164,1165,1167,1169],{"class":77,"line":113},[75,1166,116],{"class":81},[75,1168,86],{"class":85},[75,1170,1171],{"class":89}," api-scaler\n",[75,1173,1174,1176],{"class":77,"line":124},[75,1175,138],{"class":81},[75,1177,110],{"class":85},[75,1179,1180,1182],{"class":77,"line":135},[75,1181,146],{"class":81},[75,1183,110],{"class":85},[75,1185,1186,1188,1190],{"class":77,"line":143},[75,1187,176],{"class":81},[75,1189,86],{"class":85},[75,1191,752],{"class":89},[75,1193,1194,1196,1198],{"class":77,"line":151},[75,1195,1049],{"class":81},[75,1197,86],{"class":85},[75,1199,1200],{"class":192}," 1\n",[75,1202,1203,1205,1207],{"class":77,"line":162},[75,1204,1061],{"class":81},[75,1206,86],{"class":85},[75,1208,1209],{"class":192}," 50\n",[75,1211,1212,1214],{"class":77,"line":173},[75,1213,1070],{"class":81},[75,1215,110],{"class":85},[75,1217,1218,1220,1222,1224],{"class":77,"line":184},[75,1219,219],{"class":218},[75,1221,222],{"class":81},[75,1223,86],{"class":85},[75,1225,1226],{"class":89}," prometheus\n",[75,1228,1229,1231],{"class":77,"line":196},[75,1230,1088],{"class":81},[75,1232,110],{"class":85},[75,1234,1235,1238,1240],{"class":77,"line":207},[75,1236,1237],{"class":81},"      serverAddress",[75,1239,86],{"class":85},[75,1241,1242],{"class":89}," http:\u002F\u002Fprometheus.monitoring.svc.cluster.local:9090\n",[75,1244,1245,1248,1250],{"class":77,"line":215},[75,1246,1247],{"class":81},"      metricName",[75,1249,86],{"class":85},[75,1251,1252],{"class":89}," http_request_duration_seconds_p99\n",[75,1254,1255,1258,1260,1262,1265,1267],{"class":77,"line":230},[75,1256,1257],{"class":81},"      threshold",[75,1259,86],{"class":85},[75,1261,555],{"class":85},[75,1263,1264],{"class":89},"0.5",[75,1266,773],{"class":85},[75,1268,1269],{"class":360},"           # P99 レイテンシが 500ms を超えたらスケールアップ\n",[75,1271,1272,1275,1277],{"class":77,"line":238},[75,1273,1274],{"class":81},"      query",[75,1276,86],{"class":85},[75,1278,1280],{"class":1279},"sd1Qi"," |\n",[75,1282,1283],{"class":77,"line":249},[75,1284,1285],{"class":89},"        histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{service=\"api\"}[5m])) by (le))\n",[43,1287,1289],{"id":1288},"cron-ベースのスケーリング","Cron ベースのスケーリング",[11,1291,1292],{},"予測可能なトラフィックパターンに対応：",[65,1294,1296],{"className":67,"code":1295,"language":69,"meta":70,"style":70},"triggers:\n- type: cron\n  metadata:\n    timezone: Asia\u002FTokyo\n    start: \"0 8 * * 1-5\"        # 平日8時にスケールアップ\n    end: \"0 20 * * 1-5\"         # 平日20時にスケールダウン\n    desiredReplicas: \"10\"\n",[72,1297,1298,1305,1316,1323,1333,1350,1367],{"__ignoreMap":70},[75,1299,1300,1303],{"class":77,"line":78},[75,1301,1302],{"class":81},"triggers",[75,1304,110],{"class":85},[75,1306,1307,1309,1311,1313],{"class":77,"line":93},[75,1308,498],{"class":218},[75,1310,222],{"class":81},[75,1312,86],{"class":85},[75,1314,1315],{"class":89}," cron\n",[75,1317,1318,1321],{"class":77,"line":104},[75,1319,1320],{"class":81},"  metadata",[75,1322,110],{"class":85},[75,1324,1325,1328,1330],{"class":77,"line":113},[75,1326,1327],{"class":81},"    timezone",[75,1329,86],{"class":85},[75,1331,1332],{"class":89}," Asia\u002FTokyo\n",[75,1334,1335,1338,1340,1342,1345,1347],{"class":77,"line":124},[75,1336,1337],{"class":81},"    start",[75,1339,86],{"class":85},[75,1341,555],{"class":85},[75,1343,1344],{"class":89},"0 8 * * 1-5",[75,1346,773],{"class":85},[75,1348,1349],{"class":360},"        # 平日8時にスケールアップ\n",[75,1351,1352,1355,1357,1359,1362,1364],{"class":77,"line":135},[75,1353,1354],{"class":81},"    end",[75,1356,86],{"class":85},[75,1358,555],{"class":85},[75,1360,1361],{"class":89},"0 20 * * 1-5",[75,1363,773],{"class":85},[75,1365,1366],{"class":360},"         # 平日20時にスケールダウン\n",[75,1368,1369,1372,1374,1376,1379],{"class":77,"line":143},[75,1370,1371],{"class":81},"    desiredReplicas",[75,1373,86],{"class":85},[75,1375,555],{"class":85},[75,1377,1378],{"class":89},"10",[75,1380,561],{"class":85},[38,1382,1383],{"id":1383},"組み合わせパターンとベストプラクティス",[43,1385,1386],{"id":1386},"推奨構成パターン",[11,1388,1389,1394,1395,1400],{},[17,1390,1393],{"href":1391,"rel":1392},"https:\u002F\u002Fdev.to\u002Fmechcloud_academy\u002Fkubernetes-autoscaling-showdown-hpa-vs-vpa-vs-karpenter-vs-keda-9b1",[21],"DEV Community の比較記事","と ",[17,1396,1399],{"href":1397,"rel":1398},"https:\u002F\u002Ftasrieit.com\u002Fblog\u002Fcluster-autoscaler-vs-hpa-vs-vpa-2026",[21],"Tasrie IT のベンチマーク","に基づく推奨パターン：",[612,1402,1403,1413],{},[615,1404,1405],{},[618,1406,1407,1410],{},[621,1408,1409],{},"ワークロードタイプ",[621,1411,1412],{},"推奨構成",[631,1414,1415,1423,1431,1439,1447],{},[618,1416,1417,1420],{},[636,1418,1419],{},"Web API（ステートレス）",[636,1421,1422],{},"HPA（CPU\u002Fカスタムメトリクス）+ Cluster Autoscaler",[618,1424,1425,1428],{},[636,1426,1427],{},"バッチ処理",[636,1429,1430],{},"KEDA（キュー深度）+ Scale to Zero",[618,1432,1433,1436],{},[636,1434,1435],{},"データベース（ステートフル）",[636,1437,1438],{},"VPA（Auto）+ 手動ノード管理",[618,1440,1441,1444],{},[636,1442,1443],{},"AI 推論",[636,1445,1446],{},"KEDA（Prometheus メトリクス）+ Karpenter",[618,1448,1449,1452],{},[636,1450,1451],{},"開発環境",[636,1453,1454],{},"KEDA（Cron）+ Scale to Zero",[43,1456,1458],{"id":1457},"karpenter-との統合","Karpenter との統合",[11,1460,1461,1466],{},[17,1462,1465],{"href":1463,"rel":1464},"https:\u002F\u002Fkarpenter.sh\u002F",[21],"Karpenter"," は CNCF 2025 ベンチマークで、Cluster Autoscaler より 40% 高速なノードプロビジョニングを実証しています。Pod レベルのスケーリング（HPA\u002FKEDA）とノードレベルのスケーリング（Karpenter）を組み合わせることで、最大の効率を実現します。",[43,1468,1469],{"id":1469},"コスト影響の定量化",[612,1471,1472,1482],{},[615,1473,1474],{},[618,1475,1476,1479],{},[621,1477,1478],{},"最適化手法",[621,1480,1481],{},"期待削減率",[631,1483,1484,1492,1500,1508],{},[618,1485,1486,1489],{},[636,1487,1488],{},"HPA のみ",[636,1490,1491],{},"10〜20%",[618,1493,1494,1497],{},[636,1495,1496],{},"HPA + VPA（Off モード分析）",[636,1498,1499],{},"20〜30%",[618,1501,1502,1505],{},[636,1503,1504],{},"KEDA（Scale to Zero）",[636,1506,1507],{},"30〜50%（非本番）",[618,1509,1510,1513],{},[636,1511,1512],{},"全ツール統合 + Karpenter",[636,1514,1515],{},"30〜50%（本番含む）",[11,1517,1518,1521],{},[17,1519,35],{"href":33,"rel":1520},[21]," なら、月額48,000円〜の明瞭な料金体系でこれらのオートスケーリング機能をフル活用できます。",[38,1523,1525],{"id":1524},"まとめ適切なツール選択でコストとパフォーマンスを両立","まとめ：適切なツール選択でコストとパフォーマンスを両立",[11,1527,1528],{},"Kubernetes のオートスケーリングは、単一のツールではなく複数のツールの適切な組み合わせで最大の効果を発揮します：",[567,1530,1531,1537,1543,1548],{},[570,1532,1533,1536],{},[25,1534,1535],{},"hpa",": cpu-メモリベースの水平スケーリングの標準。ステートレスワークロードに",[570,1538,1539,1542],{},[25,1540,1541],{},"VPA",": リソースの適正化。まずは Off モードで分析から開始",[570,1544,1545,1547],{},[25,1546,919],{},": 70以上のイベントソースによるスケーリングと Scale to Zero",[570,1549,1550,1553],{},[25,1551,1552],{},"Karpenter \u002F Cluster Autoscaler",": ノードレベルの自動プロビジョニング",[11,1555,1556,1562,1563,1566],{},[25,1557,1558,1561],{},[17,1559,35],{"href":33,"rel":1560},[21]," は、これらのオートスケーリングツールがすぐに使えるマネージド Kubernetes 環境を月額48,000円〜で提供しています。"," ",[17,1564,903],{"href":901,"rel":1565},[21]," との統合で AI ワークロードの自動スケーリングも実現できます。",[11,1568,1569,1570,1575],{},"オートスケーリングの設計・導入のご相談は ",[17,1571,1574],{"href":1572,"rel":1573},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[21],"お問い合わせ"," まで。",[1577,1578,1579],"style",{},"html pre.shiki code .s0U2E, html code.shiki .s0U2E{--shiki-default:#F7768E}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sOJ5S, html code.shiki .sOJ5S{--shiki-default:#FF9E64}html pre.shiki code .sgJMe, html code.shiki .sgJMe{--shiki-default:#9ABDF5}html pre.shiki code .sbD-w, html code.shiki .sbD-w{--shiki-default:#51597D;--shiki-default-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sd1Qi, html code.shiki .sd1Qi{--shiki-default:#BB9AF7}",{"title":70,"searchDepth":93,"depth":93,"links":1581},[1582,1588,1594,1601,1606],{"id":40,"depth":93,"text":41,"children":1583},[1584,1585,1586,1587],{"id":45,"depth":104,"text":46},{"id":63,"depth":104,"text":63},{"id":472,"depth":104,"text":472},{"id":564,"depth":104,"text":565},{"id":593,"depth":93,"text":594,"children":1589},[1590,1591,1592,1593],{"id":597,"depth":104,"text":598},{"id":609,"depth":104,"text":610},{"id":675,"depth":104,"text":676},{"id":882,"depth":104,"text":883},{"id":907,"depth":93,"text":908,"children":1595},[1596,1597,1598,1599,1600],{"id":911,"depth":104,"text":912},{"id":932,"depth":104,"text":933},{"id":944,"depth":104,"text":944},{"id":1134,"depth":104,"text":1135},{"id":1288,"depth":104,"text":1289},{"id":1383,"depth":93,"text":1383,"children":1602},[1603,1604,1605],{"id":1386,"depth":104,"text":1386},{"id":1457,"depth":104,"text":1458},{"id":1469,"depth":104,"text":1469},{"id":1524,"depth":93,"text":1525},"2026-05-27","Kubernetes のオートスケーリング（HPA・VPA・KEDA）を完全解説。各ツールの特徴・組み合わせパターン・コスト最適化効果を実践例付きで紹介します。","md","ja",{},true,"\u002Fblog\u002Fja\u002Fkubernetes-hpa-vpa-autoscaling",{"title":5,"description":1608},"blog\u002Fja\u002Fkubernetes-hpa-vpa-autoscaling",[1617,1618,1619,1541,919,1465,1620],"Kubernetes","オートスケーリング","HPA","コスト最適化","LFXQTdksNKd6YaUHUE8RP6LPFfB2R2yUrCjf_WkfBUM",1779964617053]