のびろ、ろくろ首の首よ!「ろくろ首」に学ぶ、Kubernetes自動スケーリング入門
Blog Post
Jul 29, 2025

のびろ、ろくろ首の首よ!「ろくろ首」に学ぶ、Kubernetes自動スケーリング入門

首が伸びる!? 山間の宿で働く女中たちは、客の増加に合わせて首を伸ばし、仕事をこなす驚異の能力を持つろくろ首だった! だが、祭りの夜、客殺到でリソース枯渇! 伸びきった首は悲鳴を上げ、システムは崩壊寸前… 果たして、武士は古の妖怪と最新技術「Kubernetes」を融合させ、宿の危機を救えるのか? 究極の自動スケーリング、その行方は!?

首が伸びる!コンテナの自動スケーリング開始!

山間の宿の奥座敷。囲炉裏の火がパチパチと爆ぜる音を背に、女中たちが集まっていた。旅の武士は、柱の陰から彼女たちの様子を窺っていた。

「今日はお客さん、多いわね」と、お梅が呟いた。「部屋の掃除に、食事の支度に、大忙しだよ」

「あら、でも大丈夫よ」とお竹がにっこり笑う。すると、彼女の首が、にゅるりと伸び始めた。天井を突き抜け、隣の部屋まで届く。「若旦那、手が足りないみたいだから、手伝ってくれるって」

武士は息を呑んだ。他の女中たちも、次々と首を伸ばし始める。まるで無数の蔓が天井を這うようだ。伸びた首は、遠くの部屋の様子を探ったり、厨房の進捗状況を確認したりしている。

「これって…一体…」武士は呟いた。すると、お梅の伸びた首が、武士の目の前に降りてきた。「驚かせちゃってごめんなさいね。私たち、こういう体質なの」

「でも、便利なのよ」とお絹が付け加える。彼女の首は、帳場まで伸びて売上を確認している。「お客さんが増えたら、私たちも首を伸ばして仕事すればいいんだもの」

「まるで、Kubernetesの自動スケーリングみたいだな…」武士は思わず呟いた。


func rokuroskubiAutoscaling(requests int) {
  currentReplicas := getRokurokubiCount()
  threshold := 10 // リクエスト10ごとにろくろ首1人追加

  if requests/threshold > currentReplicas {
    addRokurokubi(requests/threshold - currentReplicas)
    fmt.Println("首が伸びた!ろくろ首を追加しました!")
  } else if requests/threshold < currentReplicas {
      removeRokurokubi(currentReplicas - requests/threshold)
      fmt.Println("首が縮んだ!ろくろ首を減らしました!")
  } else {
    fmt.Println("現状維持!")
  }
}

「お客さんが増えると、リクエストが増える。すると、まるで首が伸びるように、コンテナが増えて処理能力が上がる。そして、お客さんが減ると、首が縮むようにコンテナが減る…なるほど、うまくできているものだ」

武士は、妖怪の不思議な力と、技術の進歩に、深い感銘を受けていた。

第1章の挿絵

リソース枯渇!ろくろ首の悲鳴!

祭りの夜、宿は大賑わいだった。次々とやってくる客に、女中たちは嬉しい悲鳴を上げていた…はずだった。

「お梅さん、手が足りないわ!もっと首を伸ばして!」お竹が叫ぶ。彼女の首は既に限界まで伸び、天井に張り付いていた。

「無理よ…もうこれ以上伸びない…」お梅は苦しそうに答えた。彼女の首もまた、細く長く伸びきっていた。普段なら帳場まで届くはずの首が、今日は半分も届かない。

「どうしたんだ?もっと人を呼べ!」と、若旦那が焦って指示を出す。

「でも、若旦那…お部屋はもう満室で…」お絹の震える声が響く。彼女の首は制御を失い、まるで蛇のように天井を這い回り始めた。「きゃあああ!」悲鳴が上がる。

「これは…まるでリソース不足だな…」柱の陰で見ていた武士は呟いた。「Kubernetesクラスタのリソースが足りていない。だから、新しいPod(ろくろ首)が起動できないんだ」


var rokurokubiResource requests = 100 //ろくろ首一人当たりのリソース要求量
var clusterResourceLimit int = 500 //クラスタのリソース上限

func handleRequest(newRequests int) error {
  neededRokurokubi := newRequests * rokurokubiResource
  if neededRokurokubi > clusterResourceLimit {
    fmt.Println("リソース不足!首が伸びない!")
    return errors.New("リソース不足")
  }
  // ... ここでリソース割り当て処理 ...
  fmt.Println("首が伸びた!リクエスト処理中!")
  return nil
}

「ろくろ首一人あたりに必要なリソースと、クラスタ全体のリソース上限を設定しておかないと、今回のように、いざという時に首が伸びなくなる。設定を見直さなければ…」

武士は、技術の難しさと、適切な設定の重要性を改めて実感していた。

第2章の挿絵

設定見直し!首の伸縮、完璧制御!

宿の騒動を目の当たりにした武士は、若旦那に歩み寄った。「若旦那、どうやら女中たちの首の制御がうまくいっていないようだ。私が少し手助けしよう」

「お侍様、一体どうすれば…」と、若旦那は不安げに尋ねる。

「Kubernetesの設定を見直せば良いのだ。リソースの設定と、HPA(Horizontal Pod Autoscaler)を調整すれば、女中たちの首もスムーズに伸縮するようになるだろう」

武士は懐から小さな巻物を取り出し、広げた。そこには、奇妙な記号がびっしりと書かれていた。


// rokurokubiHPA.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: rokurokubi-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: rokurokubi-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

「これは…?」若旦那は首を傾げる。

「HPAの設定ファイルだ。`minReplicas`で最小のろくろ首の人数、`maxReplicas`で最大のろくろ首の人数を設定する。そして、`metrics`でCPU使用率を監視し、`averageUtilization`で目標値を設定する。CPU使用率が50%を超えたら、ろくろ首の人数を増やし、下回ったら減らすのだ」

「なるほど…まるで、お客さんの数に合わせて、女中たちの首の長さを自動的に調整するようなものか…」

「その通り。さらに、ろくろ首一人あたりに必要なリソースも設定しておこう」


apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: rokurokubi
        resources:
          requests:
            cpu: 100m
            memory: 200Mi
          limits:
            cpu: 200m
            memory: 400Mi

「これで、リソース不足で首が伸びなくなることもなくなるだろう」

武士の指示通りに設定を変更すると、女中たちの首は、まるで魔法のようにスムーズに伸縮するようになった。必要な時に必要なだけ首を伸ばし、仕事が終われば縮める。宿は再び活気を取り戻し、女中たちは笑顔で働いていた。

「お侍様、ありがとうございます!」若旦那は深々と頭を下げた。「おかげで、宿の経営も安定しそうです」

武士は静かに頷いた。「技術を正しく使えば、妖怪の力も最大限に活かせるのだ」

第3章の挿絵

平和な宿、そして未来へ!

宿は、Kubernetesの適切な設定によって、以前とは見違えるように安定した運営ができるようになった。女中たちは、自分の能力を自由にコントロールできるようになり、笑顔で働いていた。

「お侍様のおかげで、私たちも安心して暮らせるようになりました」お梅が、にっこりと微笑む。彼女の首は、今は普通の長さだ。必要な時にだけ伸ばせるようになったことが、彼女たちに自信を与えていた。

「お竹はもう、天井に首がくっついてしまう心配もないね」お絹が笑いながら言うと、お竹も「ええ、もう大丈夫よ!」と元気よく答えた。彼女の首も、今は縮まっている。伸び縮みの制御が完璧になったことで、無駄な体力消費もなくなった。

「よかった、よかった」武士は満足そうに頷いた。「これで私も安心して旅を続けられる」

「お侍様、いつまでもお元気で!」女中たちは、口々に武士に別れを告げた。


// rokurokubiStatus.go
package main

import "fmt"

type Rokurokubi struct {
    Name  string
    Neck  int // 首の長さ (0: 通常, 1-10: 伸びた長さ)
}

func (r *Rokurokubi) UpdateNeck(length int) {
    if length < 0 {
      r.Neck = 0
    } else if length > 10 {
        r.Neck = 10
    } else {
        r.Neck = length
    }

    if r.Neck > 0 {
        fmt.Printf("%sの首が%d伸びた!\n", r.Name, r.Neck)
    } else {
        fmt.Printf("%sの首は通常の状態です。\n", r.Name)
    }
}

武士は宿を後にし、再び山道を歩き始めた。振り返ると、宿の窓から、女中たちが手を振っているのが見えた。彼女たちの首は、今は普通の長さだ。しかし、武士の心には、彼女たちの自在に伸び縮みする首が、Kubernetesの柔軟性と効率性の象徴として焼き付いていた。

「そういえば、あの宿のWi-Fi、全然繋がらなかったな…」武士は呟きながら、山道を進んでいった。

第4章の挿絵
No items found.

Latest Posts

All Posts

Blog Post
Aug 10, 2025

橋の土台を築け! 「大工と鬼六」に学ぶ、レガシーシステムからの脱出 (技術的負債からの解放)

橋の土台を築け! 「大工と鬼六」に学ぶ、レガシーシステムからの脱出 (技術的負債からの解放)橋の土台を築け! 「大工と鬼六」に学ぶ、レガシーシステムからの脱出 (技術的負債からの解放)
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Aug 10, 2025

扉を開けてはいけない! 「おおかみと七ひきのこやぎ」に学ぶ、多層防御とAPIセキュリティの重要性

扉を開けてはいけない! 「おおかみと七ひきのこやぎ」に学ぶ、多層防御とAPIセキュリティの重要性扉を開けてはいけない! 「おおかみと七ひきのこやぎ」に学ぶ、多層防御とAPIセキュリティの重要性
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Aug 10, 2025

王様、何も着ていません!「裸の王様」に学ぶ、テストなしのシステムは危険です

王様、何も着ていません!「裸の王様」に学ぶ、テストなしのシステムは危険です王様、何も着ていません!「裸の王様」に学ぶ、テストなしのシステムは危険です
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Aug 6, 2025

白い馬、走れ!「スーホの白い馬」に学ぶ、非同期処理とKafkaによるデータパイプライン構築

白い馬、走れ!「スーホの白い馬」に学ぶ、非同期処理とKafkaによるデータパイプライン構築白い馬、走れ!「スーホの白い馬」に学ぶ、非同期処理とKafkaによるデータパイプライン構築
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Jul 20, 2025

おばあちゃん、あの大きな口(脆弱性)は危険よ!「赤ずきん」に学ぶ、Webアプリセキュリティの重要性

おばあちゃん、あの大きな口(脆弱性)は危険よ!「赤ずきん」に学ぶ、Webアプリセキュリティの重要性おばあちゃん、あの大きな口(脆弱性)は危険よ!「赤ずきん」に学ぶ、Webアプリセキュリティの重要性
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Jul 20, 2025

売れ残った笠、プルリクで奇跡!「地蔵と笠」に学ぶ、OSS貢献と感謝の循環

売れ残った笠、プルリクで奇跡!「地蔵と笠」に学ぶ、OSS貢献と感謝の循環売れ残った笠、プルリクで奇跡!「地蔵と笠」に学ぶ、OSS貢献と感謝の循環
Arrow Right Up
Arrow Right Up
Read Post
Read Post