[{"data":1,"prerenderedAt":561},["ShallowReactive",2],{"blog-ja-k3s-metrics-server-default-kubeadm-hpa-kubectl-top":3,"blog-related-ja-k3s-metrics-server-default-kubeadm-hpa-kubectl-top":516,"blog-ja-k3s-metrics-server-default-kubeadm-hpa-kubectl-top-alt":506},{"id":4,"title":5,"author":6,"body":7,"date":500,"description":501,"extension":502,"image":503,"locale":504,"meta":505,"navigation":506,"path":507,"seo":508,"stem":509,"tags":510,"__hash__":515},"blog\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top.md","kubectl topが無反応だった。原因はmetrics-server未導入、K3sでは起きない理由","Kubo Team",{"type":8,"value":9,"toc":492},"minimark",[10,18,31,36,42,53,63,69,76,80,86,94,114,135,153,157,163,170,178,183,196,209,238,246,250,256,259,267,275,404,407,411,417,434,444,452,456,467,479,488],[11,12,13],"p",{},[14,15],"img",{"alt":16,"src":17},"section01","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Fsection01.webp",[11,19,20,21,25,26,30],{},"K3sで検証していたHorizontal Pod Autoscaler（HPA）のマニフェストを、そのまま標準Kubernetes（kubeadmで構築したクラスタ）に適用したら、",[22,23,24],"code",{},"kubectl top","が何も返さず、HPAも一切スケールしなかった——そんな経験をしたインフラエンジニアは少なくないはずだ。原因は多くの場合、",[27,28,29],"strong",{},"metrics-serverの有無","という、意外なほど基本的なところにある。K3sでは最初から動いていたものが、標準Kubernetesでは動かない。この記事では、その差がなぜ生まれるのかを公式ドキュメントベースで整理し、切り分け手順までまとめる。",[32,33,35],"h2",{"id":34},"_1-kubectl-topが無反応になった日","1. kubectl topが無反応になった日",[11,37,38],{},[14,39],{"alt":40,"src":41},"section02","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Fsection02.webp",[11,43,44,45,48,49,52],{},"話はシンプルだ。K3sの検証環境で組んだHPA付きのDeploymentを、本番相当の標準Kubernetes（kubeadmでブートストラップしたクラスタ）に移した。マニフェスト自体に変更はない。ところが",[22,46,47],{},"kubectl top pods","を叩いても何も返らず、HPAのステータスを見ると",[22,50,51],{},"unknown","のまま張り付いている。",[11,54,55,62],{},[56,57,61],"a",{"href":58,"rel":59},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Ftasks\u002Frun-application\u002Fhorizontal-pod-autoscale-walkthrough\u002F",[60],"nofollow","Kubernetes公式のHPAウォークスルー","には、前提条件としてこう明記されている。",[64,65,66],"blockquote",{},[11,67,68],{},"To follow this walkthrough, you also need to use a cluster that has a Metrics Server deployed and configured.",[11,70,71,72,75],{},"つまりHPAを使うには、",[27,73,74],{},"Metrics Serverがデプロイされ、正しく設定されていること","が大前提になる。K3sではこの前提が最初から満たされているため意識する機会がなかっただけで、標準Kubernetesでは自分で満たす必要がある条件だったわけだ。",[32,77,79],{"id":78},"_2-k3sがmetrics-serverを最初から同梱している理由","2. K3sがmetrics-serverを最初から同梱している理由",[11,81,82],{},[14,83],{"alt":84,"src":85},"section03","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Fsection03.webp",[11,87,88,93],{},[56,89,92],{"href":90,"rel":91},"https:\u002F\u002Fdocs.k3s.io\u002Finstallation\u002Fpackaged-components",[60],"K3s公式ドキュメント「Packaged Components」","には、K3sが標準で同梱するアドオンが明記されている。",[64,95,96],{},[11,97,98,99,102,103,102,106,109,110,113],{},"K3s comes with a number of packaged components that are deployed as AddOns via the manifests directory: ",[22,100,101],{},"coredns",", ",[22,104,105],{},"traefik",[22,107,108],{},"local-storage",", and ",[22,111,112],{},"metrics-server",".",[11,115,116,117,120,121,124,125,128,129,134],{},"coredns（DNS）、traefik（Ingress）、local-storage（ローカルストレージ）と並んで、",[27,118,119],{},"metrics-serverが標準コンポーネントの1つとして明記されている","。これらは",[22,122,123],{},"\u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fmanifests","配下に自動配置され、K3sの起動時に",[22,126,127],{},"kubectl apply","相当の処理で自動デプロイされる。同じ内容は",[56,130,133],{"href":131,"rel":132},"https:\u002F\u002Fdocumentation.suse.com\u002Fcloudnative\u002Fk3s\u002Flatest\u002Fen\u002Finstallation\u002Fpackaged-components.html",[60],"SUSEの公式ドキュメント","でも確認できる。",[11,136,137,138,143,144,146,147,152],{},"K3sは「軽量シングルバイナリでKubernetesを動かす」ことを目的に設計されており、運用に最低限必要なアドオンを最初からバンドルする方針を取っている。",[56,139,142],{"href":140,"rel":141},"https:\u002F\u002Foneuptime.com\u002Fblog\u002Fpost\u002F2026-03-20-k3s-disable-metrics-server\u002Fview",[60],"metrics-serverを無効化する手順","が公開されているのも、裏を返せば「標準で有効になっている」ことの証左だ。",[22,145,24],{},"コマンドとHPAの両方が、インストール直後から動く設計になっている。K3sベースのマネージドサービスである",[56,148,151],{"href":149,"rel":150},"https:\u002F\u002Fkubo.hexabase.io\u002F",[60],"Kubo","も、この同梱方針をそのまま引き継いでいる。",[32,154,156],{"id":155},"_3-標準kuberneteskubeadmにmetrics-serverが入っていない理由","3. 標準Kubernetes（kubeadm）にmetrics-serverが入っていない理由",[11,158,159],{},[14,160],{"alt":161,"src":162},"section04","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Fsection04.webp",[11,164,165,166,169],{},"一方、kubeadmはKubernetesの",[27,167,168],{},"コントロールプレーンの最小構成","を提供することに主眼を置いたツールだ。CNI、Ingress Controller、そしてmetrics-serverといったアドオンは、どれもkubeadmのインストール対象に含まれない。",[11,171,172,177],{},[56,173,176],{"href":174,"rel":175},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Ftasks\u002Fdebug\u002Fdebug-cluster\u002Fresource-metrics-pipeline\u002F",[60],"Kubernetes公式の「Resource metrics pipeline」","には、この点がはっきり書かれている。",[64,179,180],{},[11,181,182],{},"You must deploy the metrics-server or alternative adapter that serves the Metrics API to be able to access it.",[11,184,185,186,188,189,195],{},"同ページでは、metrics-serverを「クラスタアドオンコンポーネント（cluster addon component）」と位置づけ、HPA・VPA・",[22,187,24],{},"のすべてがこのMetrics APIに依存すると説明している。つまり、",[27,190,191,192,194],{},"kubeadmでクラスタを作っただけでは、HPAもVPAも",[22,193,24],{},"も最初から動く保証はない","ということだ。",[11,197,198,199,204,205,208],{},"導入自体は難しくない。",[56,200,203],{"href":201,"rel":202},"https:\u002F\u002Fgithub.com\u002Fkubernetes-sigs\u002Fmetrics-server",[60],"metrics-server公式リポジトリ","が提供する",[22,206,207],{},"components.yaml","を次のように適用すればいい。",[210,211,216],"pre",{"className":212,"code":213,"language":214,"meta":215,"style":215},"language-bash shiki shiki-themes tokyo-night","kubectl apply -f https:\u002F\u002Fgithub.com\u002Fkubernetes-sigs\u002Fmetrics-server\u002Freleases\u002Flatest\u002Fdownload\u002Fcomponents.yaml\n","bash","",[22,217,218],{"__ignoreMap":215},[219,220,223,227,231,235],"span",{"class":221,"line":222},"line",1,[219,224,226],{"class":225},"sE3pS","kubectl",[219,228,230],{"class":229},"sPY7s"," apply",[219,232,234],{"class":233},"sT800"," -f",[219,236,237],{"class":229}," https:\u002F\u002Fgithub.com\u002Fkubernetes-sigs\u002Fmetrics-server\u002Freleases\u002Flatest\u002Fdownload\u002Fcomponents.yaml\n",[11,239,240,241,245],{},"問題は、「これを忘れていた／知らなかった」というケースが、K3sから移行してきたチームほど起きやすいという点だ。K3sでは誰も意識していなかった工程が、標準Kubernetesでは必須の一手間になる。EKSやAKSのような標準Kubernetesベースのマネージドサービスでも、この種のアドオン導入は利用者側の作業として残ることが多い。",[56,242,244],{"href":149,"rel":243},[60],"Kubo Cloud","はK3sベースでPure Kubernetesを提供するため、こうした初期セットアップの手間がそもそも発生しない。",[32,247,249],{"id":248},"_4-metrics-serverが無いとhpakubectl-topはどう壊れるか","4. metrics-serverが無いとHPA\u002Fkubectl topはどう壊れるか",[11,251,252],{},[14,253],{"alt":254,"src":255},"section05","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Fsection05.webp",[11,257,258],{},"metrics-serverが存在しない、またはPodが起動していない状態でHPAを動かそうとすると、典型的には次のようなエラーに遭遇する。",[210,260,265],{"className":261,"code":263,"language":264},[262],"language-text","failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API\n","text",[22,266,263],{"__ignoreMap":215},[11,268,269,274],{},[56,270,273],{"href":271,"rel":272},"https:\u002F\u002Foneuptime.com\u002Fblog\u002Fpost\u002F2026-02-09-hpa-not-scaling-missing-metrics\u002Fview",[60],"オンコール対応向けのトラブルシューティング記事","では、このエラーに遭遇した際の切り分け手順が次のようにまとめられている。",[276,277,278,329,362],"ol",{},[279,280,281,284],"li",{},[27,282,283],{},"metrics-serverの存在確認",[210,285,287],{"className":212,"code":286,"language":214,"meta":215,"style":215},"kubectl get deployment metrics-server -n kube-system\nkubectl get pods -n kube-system -l k8s-app=metrics-server\n",[22,288,289,308],{"__ignoreMap":215},[219,290,291,293,296,299,302,305],{"class":221,"line":222},[219,292,226],{"class":225},[219,294,295],{"class":229}," get",[219,297,298],{"class":229}," deployment",[219,300,301],{"class":229}," metrics-server",[219,303,304],{"class":233}," -n",[219,306,307],{"class":229}," kube-system\n",[219,309,311,313,315,318,320,323,326],{"class":221,"line":310},2,[219,312,226],{"class":225},[219,314,295],{"class":229},[219,316,317],{"class":229}," pods",[219,319,304],{"class":233},[219,321,322],{"class":229}," kube-system",[219,324,325],{"class":233}," -l",[219,327,328],{"class":229}," k8s-app=metrics-server\n",[279,330,331,334],{},[27,332,333],{},"メトリクス取得の動作確認",[210,335,337],{"className":212,"code":336,"language":214,"meta":215,"style":215},"kubectl top nodes\nkubectl top pods -n default\n",[22,338,339,349],{"__ignoreMap":215},[219,340,341,343,346],{"class":221,"line":222},[219,342,226],{"class":225},[219,344,345],{"class":229}," top",[219,347,348],{"class":229}," nodes\n",[219,350,351,353,355,357,359],{"class":221,"line":310},[219,352,226],{"class":225},[219,354,345],{"class":229},[219,356,317],{"class":229},[219,358,304],{"class":233},[219,360,361],{"class":229}," default\n",[279,363,364,367,391,392,395,396,399,400,403],{},[27,365,366],{},"APIサービスの登録状態確認",[210,368,370],{"className":212,"code":369,"language":214,"meta":215,"style":215},"kubectl get apiservices | grep metrics\n",[22,371,372],{"__ignoreMap":215},[219,373,374,376,378,381,385,388],{"class":221,"line":222},[219,375,226],{"class":225},[219,377,295],{"class":229},[219,379,380],{"class":229}," apiservices",[219,382,384],{"class":383},"sAklC"," |",[219,386,387],{"class":225}," grep",[219,389,390],{"class":229}," metrics\n","\nここで",[22,393,394],{},"v1beta1.metrics.k8s.io","のStatusが",[22,397,398],{},"True","になっているかを確認する。",[22,401,402],{},"False","であれば、metrics-server自体の起動に問題がある可能性が高い。",[11,405,406],{},"この3段階を踏めば、「HPAの設定ミスなのか」「そもそもmetrics-serverが無いのか」をすぐに切り分けられる。K3s環境しか触ったことがないチームほど、この切り分け手順自体を知らないことが多い。",[32,408,410],{"id":409},"_5-k3s同梱版と自前インストール版でmetrics-serverの挙動が違うことも","5. K3s同梱版と自前インストール版でmetrics-serverの挙動が違うことも",[11,412,413],{},[14,414],{"alt":415,"src":416},"section06","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Fsection06.webp",[11,418,419,420,425,426,429,430,433],{},"もう一つ注意したいのが、「metrics-serverを入れたのに、K3sの頃と挙動が違う」というケースだ。",[56,421,424],{"href":422,"rel":423},"https:\u002F\u002Foneuptime.com\u002Fblog\u002Fpost\u002F2026-02-09-monitor-pod-resource-usage-metrics-server\u002Fview",[60],"metrics-serverのリソース監視を解説した記事","によれば、metrics-serverのバイナリ自体の",[22,427,428],{},"--metric-resolution","のデフォルトは60秒だが、公式マニフェストでは",[22,431,432],{},"--metric-resolution=15s","に設定されている。どちらの値で動いているかによって、HPAがスケール判断に使うメトリクスの鮮度が変わる。",[11,435,436,437,440,441,443],{},"加えて、自己署名証明書のkubeletに対応するための",[22,438,439],{},"--kubelet-insecure-tls","のようなフラグも、ディストリビューションやインストール方法によって有効\u002F無効が異なる。K3s同梱版の設定と、",[22,442,207],{},"をそのまま適用した自前インストール版の設定は、必ずしも一致しない。「同じmetrics-serverのはずなのに、HPAの反応速度が違う」と感じたら、まずこの設定差を疑うべきだ。",[11,445,446,447,451],{},"小規模クラスタでは、metrics-server自体のリソース消費にも注意したい。典型的な起動要件は",[56,448,450],{"href":201,"rel":449},[60],"CPU 100m／メモリ200Mi程度のrequests","とされており、ノードリソースが逼迫している環境ではこのオーバーヘッドも無視できない。",[32,453,455],{"id":454},"まとめk3sベースならこの手間がそもそも発生しない","まとめ：K3sベースならこの手間がそもそも発生しない",[11,457,458,459,461,462,466],{},"HPAや",[22,460,24],{},"が動かない原因の多くは、設定ミスではなく「metrics-serverが無い」という前提条件の欠落にある。K3sは",[56,463,465],{"href":90,"rel":464},[60],"公式ドキュメント","の通りmetrics-serverを標準同梱しているため、この問題自体に遭遇しない。一方、標準Kubernetes（kubeadm）を自前で運用する場合は、metrics-serverの導入とフラグ設定を自分たちでチェックリスト化しておく必要がある。",[11,468,469,470,473,474,478],{},"この「最初から動く」か「毎回チェックリストを回すか」という差は、運用コストとして地味に効いてくる。",[56,471,151],{"href":149,"rel":472},[60],"はK3sベースのマネージドKubernetesサービスで、metrics-serverを含む標準アドオンが最初から動く状態で提供される。AWS EKSやAzure AKSで同様の初期セットアップに手間をかけているなら、",[56,475,477],{"href":149,"rel":476},[60],"Pure Kubernetesな構成","を月額48,000円〜ですぐに試せる。",[11,480,481,482,487],{},"今回のようなクラスタ移行時の\"見えない前提条件の差\"は、HPA\u002Fmetrics-server以外にも数多く存在する。標準Kubernetesを自前運用していて同種の手間を抱えているなら、",[56,483,486],{"href":484,"rel":485},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[60],"お問い合わせ","からKuboの構成を相談してみてほしい。",[489,490,491],"style",{},"html pre.shiki code .sE3pS, html code.shiki .sE3pS{--shiki-default:#C0CAF5}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sT800, html code.shiki .sT800{--shiki-default:#E0AF68}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 .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}",{"title":215,"searchDepth":310,"depth":310,"links":493},[494,495,496,497,498,499],{"id":34,"depth":310,"text":35},{"id":78,"depth":310,"text":79},{"id":155,"depth":310,"text":156},{"id":248,"depth":310,"text":249},{"id":409,"depth":310,"text":410},{"id":454,"depth":310,"text":455},"2026-10-24","kubectl topやHPAが突然動かなくなった時、まず疑うべきはmetrics-serverの有無だ。K3sに標準搭載されている理由と、標準Kubernetes(kubeadm)環境で必ず手動導入が必要になる技術的背景、障害発生時の切り分け手順までを公式ドキュメントベースで解説する。","md","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top\u002Ftitle.webp","ja",{},true,"\u002Fblog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top",{"title":5,"description":501},"blog\u002Fja\u002Fk3s-metrics-server-default-kubeadm-hpa-kubectl-top",[511,512,112,513,514],"k3s","kubernetes","hpa","kubeadm","y_RA3AN6eFbmyTVZfm6C8usemEBWCrmTI7Vt7OTCKi0",[517,525,531,539,547,555],{"path":518,"title":519,"description":520,"date":521,"tags":522},"\u002Fblog\u002Fja\u002Fk3s-hpa-not-scaling-metrics-unknown-vpa-death-spiral","HPAの設定は合っている。なのにPodが増えない。K3sで起きる『メトリクス不明』の正体とHPA\u002FVPAの死のスパイラル","K3sでHPAを設定したのにPodが増えない。原因はリソースリクエスト未設定によるメトリクス不明化と、HPA\u002FVPAの死のスパイラルにあることが多い。診断手順と対策を解説する。","2026-09-02",[511,512,513,523,524,112],"vpa","autoscaling",{"path":526,"title":527,"description":528,"date":529,"tags":530},"\u002Fblog\u002Fja\u002Fhpa-vpa-aep-5342-multidimensional-pod-autoscaler","HPAとVPAの併用問題、Kubernetes本体がAEP-5342で解決しようとしている。GKE版MPAとの違いとKuboで今できること","HPAとVPAの併用は長年危険とされてきたが、GKEのMultidimensional Pod AutoscalerとKubernetes本体のAEP-5342提案が解決の方向性を示し始めている。K3s\u002FKuboで今日から実践できる設計も解説する。","2026-10-27",[511,512,513,523,524],{"path":532,"title":533,"description":534,"date":535,"tags":536},"\u002Fblog\u002Fja\u002Fk3s-hpa-containerresource-sidecar-utilization-dilution","HPAがサイドカーの分まで合算してスケールしていた。KubernetesのContainerResourceという盲点","KubernetesのHPAはPod内の全コンテナの使用量を合算して利用率を計算するため、Istioサイドカーやログエージェントの負荷が判定を薄める。ContainerResourceメトリクスで解決する方法をK3s\u002FKubo文脈で解説する。","2026-10-21",[511,512,513,537,524,538],"containerresource","service-mesh",{"path":540,"title":541,"description":542,"date":543,"tags":544},"\u002Fblog\u002Fja\u002Fk3s-hpa-prometheus-adapter-discovery-interval-stale-metrics","discoveryIntervalを疑え。K3sのHPAがPrometheus Adapter経由で\"古いメトリクス\"を掴み続ける設定ミス","K3sのHPAがCPU使用率は正常なのにスケールしない。原因はPrometheus Adapterのmetrics-relist-interval\u002Fmetrics-max-ageとHPA sync-periodが噛み合っていない設定ミスだった。3層の遅延構造と診断コマンドを解説する。","2026-10-12",[511,512,513,545,524,546],"prometheus-adapter","observability",{"path":548,"title":549,"description":550,"date":551,"tags":552},"\u002Fblog\u002Fja\u002Fk3s-kubeadm-ha-etcd-failover-rto-gap","RTO30秒のはずが3分止まった。K3sとkubeadmのHA構成で\"カタログ値\"と\"実運用\"がズレる理由","K3sのembedded etcdとkubeadmのstacked\u002Fexternal etcd、HA構成のフェイルオーバーは実際どれだけ時間がかかるのか。公式ドキュメントのRTO目安と実運用の体感時間のギャップを、障害ドメインの分離・必要ノード数の違いから検証する。","2026-10-09",[511,512,553,554,514],"etcd","high-availability",{"path":556,"title":557,"description":558,"date":559,"tags":560},"\u002Fblog\u002Fja\u002Fkubernetes-hpa-vpa-autoscaling-conflict-design","\"両方入れれば安心\"が一番危ない。KubernetesでHPAとVPAを併用するとスケーリングが暴走する理由","KubernetesでHPAとVPAを両方有効にすると、良かれと思った自動化同士が干渉し、スケーリングが際限なく暴走することがある。衝突が起きる仕組みと、updateModeやメトリクス分離による安全な併用設計を解説する。","2026-10-07",[511,512,513,523,524],1793798693003]