Kubernetes リソース単位変換(CPU・メモリ)

Kubernetesのresources指定(CPUのm・コア数、メモリのKi/Mi/Gi/Ti・k/M/G/T・e指数表記)を相互変換。128Mと128Miの違いや、メモリにmを付けた場合の落とし穴も表示します。

CPU の 1 = 1コア = 1000m です。メモリの Ki/Mi/Gi/Ti は1024ベース(2進)、k/M/G/T は1000ベース(10進、kのみ小文字)です。単位を付けない数値はバイトそのものとして扱います。

manifestに「128Mi」と書くか「128M」で済ませるか、毎回検索している気がする。 requestsに書いた数字、桁を間違えていないか不安になる。 Miのつもりで書いたmが、実は別の意味だったら。 このツールは、KubernetesのCPUとメモリの数量表記をコア数・ミリコア・バイト・Ki〜Eiとk〜Eの各単位に一覧で変換し、紛らわしい単位との差も表示します。

使い方

  1. CPUの欄に「500m」や「0.5」「2」のように入力します。コア数とミリコアが並んで出ます。
  2. メモリの欄に「128Mi」「128M」「129e6」「2Gi」のように入力します。バイトと、Ki〜Ei・k〜Eの全単位での値が一覧になります。
  3. メモリの単位が Mi や M のように対になる単位を持つときは、数値はそのままで単位だけ入れ替えた場合の差が、入力欄の下の注意書きに出ます。

ここまでが基本の操作で、入力するたびに結果が更新されます。

  1. 不正な形式のときは、欄の下にエラーが出ます。メモリで大文字の K を使った場合や、CPUに Mi などを付けた場合も、理由つきで止まります。

仕組み・計算式

換算の根拠は、Kubernetes公式ドキュメントの「Resource units in Kubernetes」と、「Meaning of CPU」「Meaning of memory」の節です。CPUの1は1コアで、ミリコアの m は1000分の1です。つまり 500m は 0.5 コアで、1000m が 1 コアになります。

メモリは、1024のべき乗の Ki・Mi・Gi・Ti・Pi・Ei と、1000のべき乗の k・M・G・T・P・E が使えます。1000倍側の k だけ小文字なのは、仕様がそう決めているからです。2進接頭辞の Ki・Mi などは IEC 80000-13 で定められた記号と同じ体系です。単位のない数値はバイトで、129e6 のような指数表記も使えます。

式にすると、こうなります。

バイト数 = 数値 × 接頭辞の倍率
Ki=1024, Mi=1024², Gi=1024³ / k=1000, M=1000², G=1000³

メモリの m は、CPUと同じ「1000分の1」です。単位がバイトなので、128m は 0.128 バイトという意味になります。公式ドキュメントにも、メモリに 400m と書くと 0.4 バイトの要求になるという趣旨の注意があります。

計算例

ツールの換算ロジックと同じ式を node で実行して確かめた値です。

例1: CPU の 250m。 0.25 コアです。逆に 1.5 と入れると 1,500m になります。

例2: 128Mi と 128M。 128Mi は 134,217,728 バイトで、128M は 128,000,000 バイトです。数字は同じ128なのに、128Mi のほうが約 4.8576% 大きくなります。ツールで 128M を入れると、128Mi として読んだ場合との差が同じ割合で出ました。

例3: 1Gi と 1G。 1Gi は 1,073,741,824 バイトで、1G は 1,000,000,000 バイトです。差は約 7.3741824% あります。単位が大きくなるほど差が開くので、1Ti と 1T では約 9.9512% 違います。

例4: 境界値の 128m。 メモリ欄に 128m を入れると、バイトは 0.128 になります。128Mi のつもりで、Mが小文字になり i が抜けただけで、桁が9つ違う値です。

意外だったのは、129e6 が 129M とまったく同じ 129,000,000 バイトになることでした。これは Mi に直すと約 123.02Mi です。

よくある間違い

メモリに小文字の m を付ける。 CPUで 500m と書き慣れていると、メモリでも「m = メガ」と思ってしまいますよね。メモリの m は 1000分の1バイトです。128Mi のつもりなら Mi、128MB のつもりなら M と書いてください。確かめるなら、ツールのメモリ欄に入れて、バイトが 0.128 と出るかを見ます。

Mi と M を同じものだと思う。 128Mi は 134,217,728 バイトで、128M は 128,000,000 バイトです。既存の manifest の M を Mi に書き換えるときは、その分だけ要求量が変わります。上限ぎりぎりで運用しているコンテナなら、効いてくる差です。

大文字の K を使う。 1000倍の接頭辞は小文字の k だけです。128K と書くと、このツールはエラーを返します。1024倍にしたいなら Ki です。

よくある質問

Q. 128Mi と 128M は、どちらを書けばいいですか?

A. 迷うなら Mi を使っています。1024ベースの値で、メモリの上限として読みやすいからです。ただし好みが分かれる部分で、既存の manifest が M で揃っているなら、そちらに合わせるほうが差分は小さく済みます。

Q. 単位を付けない数値は、どう扱われますか?

A. バイトとして扱われます。ツールに 1073741824 を入れると、1Gi と同じ 1 Gi として表示されました。

Q. CPU に Mi のような単位を付けられますか?

A. 付けられません。CPUで使えるのは、コア数の小数と m だけです。ツールでも、CPU欄に Mi などを入れると専用のエラーが出ます。

Q. 0.5 と 500m は、どちらが良いですか?

A. 実行上の意味は同じです。ツールでは 0.5 を入れると 500m、500m を入れると 0.5 と、どちらも両方の表記で表示されます。公式ドキュメントでは 0.1 のような小数よりも、100m の形が勧められています。

関連ツール

最終更新・根拠の確認日: 2026-10-19 · カテゴリ: 開発・データ