[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-8KnU4ak48bpt":3,"adjacent-8KnU4ak48bpt":137},{"id":4,"title":5,"content":6,"summary":121,"charCount":122,"eyecatch":123,"tags":124,"is_no_index":133,"publishedAt":134,"createdAt":135,"updatedAt":136},"8KnU4ak48bpt","知る、解る、理解する",{"type":7,"content":8},"doc",[9,19,26,33,40,44,51,55,59,72,76,80,84,101,105,109,113,117],{"type":10,"content":11},"paragraph",[12,15,17],{"type":13,"text":14},"text","どうも、私です。",{"type":16},"hardBreak",{"type":13,"text":18},"眠れないので最近考えていることを書きます。まとまりはないです。",{"type":10,"content":20},[21,23,24],{"type":13,"text":22},"私は比較的幼い頃からコンピュータ漬けの日々を送ってきた気持ちの悪いオタクですが、大したスキルも獲得しないまま大人になってしまいました。",{"type":16},{"type":13,"text":25},"一方で世の中を見渡すと、大半はコンピュータのイロハも分からない人ばかりで、少し扱えるだけで詳しい人であるかのような扱いを受けます。実際、それで得意になっている部分もありますし、同時に、実際は分からないことだらけである現実に焦りと罪悪感を覚えています。",{"type":10,"content":27},[28,30,31],{"type":13,"text":29},"TwitterやMisskeyのTLを眺めていると、私にはとても理解できない高度な話をしている方々がいます。",{"type":16},{"type":13,"text":32},"羨ましいですし、憧れに近い気持ちがあります。実際、私には理解できなさそうな難しいことを難しそうに話す姿に惹かれてフォローした方もかなりいます。逆に、初歩的なことをわかったように断定する人は苦手です。見ていて不快だからというのもありますが、それ以上に、私が優越感を覚えるような状況をそもそも発生させるべきではないと考えているためです。",{"type":10,"content":34},[35,37,38],{"type":13,"text":36},"現実として、私は指折りの優秀な技術者ではありませんし、人格者でもなければ、世間で広く知られるような有名人にもなれません。おまけに怠惰なので努力も苦手です。",{"type":16},{"type":13,"text":39},"ただ、それ以上に私が恐れているのは、自分よりできない人ばかりを見ているうちに、相対的な位置を能力と勘違いして、さも優れた人間であるかのように錯覚してしまうことです。放っておけば、私だって誰かに優越をひけらかすようになってしまうかもしれません。",{"type":10,"content":41},[42],{"type":13,"text":43},"であるから、せめて自分よりすごい人の言葉で世界を埋めつくしたいと思います。傲慢な話ですが、そこに流れてくるものは私が学ぶ必要のあるものばかりで、それを理解しようとすること自体が、最底辺にいる自分が這い上がるために必要な行為になります。おそらくそれがモチベーションでもあるのかもしれません。",{"type":10,"content":45},[46,48,49],{"type":13,"text":47},"例え話をしましょう。",{"type":16},{"type":13,"text":50},"私はKubernetesを知っています。仕事では前任者の残していったクラウドと(無駄に巨大な)オンプレに跨った構成の複数クラスタを管理していましたし、今も自宅でクラスタを動かしています。構成は全てGit上で管理していて、一式を一人で運用していると言えば、まあそれなりに詳しい人に見えるはずです。(ですよね？)",{"type":10,"content":52},[53],{"type":13,"text":54},"が、私はこれらを理解していません。恥ずかしい話ですが。",{"type":10,"content":56},[57],{"type":13,"text":58},"このクラスタがどうやってできたかと言えば、その場で動かすことを目的として、調べて調べて試行錯誤を繰り返した結果のものになります。私の知り得ることのほぼ全ては何かしらのドキュメントに書いてありますし、何かが壊れれば、kubectl describeでEventsを眺めて、エラーメッセージで検索して、GitHub issueの下の方に貼られた何か解決してくれそうな気配のあるworkaroundを適用します。すると不思議なことに直ります。なぜそれで直るのかは分からないまま、直ったのでコンソールを閉じてしまいます。",{"type":10,"content":60},[61,63,64,66,67,69,70],{"type":13,"text":62},"では一体私はKubernetesの何を説明できるのでしょうか。",{"type":16},{"type":13,"text":65},"なぜPodごとにIPを配るフラットなネットワークを敷き、Pod間のNATを禁じたのか。前身のBorgがホストIPを共有させ、ポート番号を割り当てて凌いでいたことの何がそんなに苦しかったのか。コントローラが通知の取りこぼしを前提に、イベントではなく現在の状態そのものを見に行くlevel-triggeredな設計になっているのはどんな故障モデルを置いているからか。List-WatchとresourceVersionは、どんな整合性とスケーラビリティのトレードオフから生まれたのか。なぜコントローラは古い状態を読む可能性まで受け入れて正しく収束できるように作られているのか。",{"type":16},{"type":13,"text":68},"どれも、動かして運用する分には知らなくて済むことで、実際、私は簡単に答えられません。",{"type":16},{"type":13,"text":71},"Podが今日も健全に通信できているのは、私の理解の成果ではなく、CNIが私の根本的な理解とは無関係に正しく動いてくれているためです。",{"type":10,"content":73},[74],{"type":13,"text":75},"結果として手元に残ったのは、なんか動いているクラスタと、わかった気になっている私です。運用のノウハウは溜まりましたが、これは資産というより負債だと感じています。次に何かしらのトラブルが発生したとき、おそらく私はまた検索から始めるでしょうから。",{"type":10,"content":77},[78],{"type":13,"text":79},"結局のところ、場当たり的に習得できてしまうようなすぐに役立つ知識は、どこまで行っても場当たり的なものに過ぎず、何にもなりません。",{"type":10,"content":81},[82],{"type":13,"text":83},"ここで言うすぐに役に立つこととは、あるツールの使い方だとか、そのツールで何ができるだとか、そんな感じの浅くて平たい非本質的な知識のことを意図しています。ただし、パラメータとして役に立つか立たないかの極端な二値ではなく、段階的な深さのある話であるとは思いますが。",{"type":10,"content":85},[86,88,93,95,96,98,99],{"type":13,"text":87},"例えば古典的なリレーショナルデータベースだと、",{"type":13,"marks":89,"text":92},[90],{"type":91},"code","CREATE INDEX",{"type":13,"text":94},"をつけると検索が速くなります。今時誰でも知っているような当たり前の知識ですが、これを知ることによって、今からすぐに役立てることができます。",{"type":16},{"type":13,"text":97},"もう少し深堀ると、実態はB-Treeで、探索が対数時間で終わることをアルゴリズムごと説明できるようになります。ですが、ここまで来ても結局は仕組みを覚えただけに過ぎません。",{"type":16},{"type":13,"text":100},"もっと深掘って、なぜ二分探索木ではダメで、ハッシュテーブルでもダメなのか。ストレージへのアクセスがページ\u002Fブロック単位になり、ランダムI\u002FOのコストが高い中で、1ノードに多数のキーを持たせてfan-outを大きくし、木を浅くする選択を行った。この設計上の制約とトレードオフから今の形を再構成できる段階まで来て、はじめてその技術を実態を伴って理解したと言えるはずです。",{"type":10,"content":102},[103],{"type":13,"text":104},"すごく難しいですが、そこまで行こうとする姿勢こそが技術者に求められている(べき)ものなのだろうと私は考えています。",{"type":10,"content":106},[107],{"type":13,"text":108},"では低レイヤな領域や学問としての計算機科学をやればいいのか、というとそういう話でもない気がします。結局、システムコールであれ命令セットであれプロトコルスタックであれ、全て単純な使い方として覚えることができてしまうためです。それは見識を深めたのではなく、ただ単に横に移動しただけで、新しいフレームワークを追い回して驚いているのと同種の、すぐに役に立つことの一つに過ぎません。レイヤの上下(深浅？)と理解の深さはそもそも別の軸にあると思います。",{"type":10,"content":110},[111],{"type":13,"text":112},"汚い表現ですが、私が学びたいのは携わった人間のエゴそのものです。この技術を作った人はどんな問題を解こうとして、なぜ他ではなくこの仕組みを選んだのか。それを自分の言葉で説明できる状態を、私は理解と呼びたい。そして、そこまで深堀した知識のみが汎化できるのだと思います。B-Treeを選ばせた制約を頭の片隅に置いておくことで、LSM-Treeが何を捨てて何を得たのか理解できるでしょう。特定のツールの流行り廃りと無関係に、生涯ずっと役に立つ、けれどすぐには役に立たない有用な知識です。",{"type":10,"content":114},[115],{"type":13,"text":116},"同様の理由から、ハーネスエンジニアリングがなんだとか、ループエンジニアリングがなんだとか、似たようなことを手を替え品を替え驚き続けている人たちが苦手です。あれはすぐに役に立つことに毎回驚いているだけで、驚きは理解の代わりになりません。",{"type":10,"content":118},[119],{"type":13,"text":120},"すごく傲慢ですが、私は正しく物事を理解したいと願います。切実に。","どうも、私です。眠れないので最近考えていることを書きます。まとまりはないです。私は比較的幼い頃からコンピュータ漬けの日々を送ってきた気持ちの悪いオタクですが、大したスキルも獲得しないまま大人になってしまいました。一方で世の中を見渡すと、大半はコンピュータのイロハも分からない人ばかりで、少し扱えるだけ",3017,null,[125,129],{"id":126,"name":127,"slug":128},"wia4slp55q","独り言","thoughts",{"id":130,"name":131,"slug":132},"qfey3yw0z1","テクノロジー","technology",false,"2026-09-15T21:06:37.504Z","2026-09-15T20:16:44.369Z","2026-09-15T21:55:46.625Z",{"older":138,"newer":123},{"id":139,"title":140,"content":141,"summary":634,"charCount":635,"eyecatch":123,"tags":636,"is_no_index":133,"publishedAt":643,"createdAt":644,"updatedAt":645},"U0w-0MgT8IhM","やはりKubernetesからは逃れられない",{"type":7,"content":142},[143,150,154,158,162,166,173,177,181,185,189,193,197,201,205,210,214,218,222,226,230,237,241,245,250,254,258,262,269,276,280,284,288,293,297,304,308,312,316,320,354,358,362,367,374,378,410,417,421,425,429,434,438,442,446,453,457,461,465,469,474,481,549,553,557,561,568,575,579,584,591,595,602,606,610,615,619,626,630],{"type":144,"attrs":145,"content":147},"heading",{"level":146,"id":123},1,[148],{"type":13,"text":149},"はじめに",{"type":10,"content":151},[152],{"type":13,"text":153},"どうも、わたしです。",{"type":10,"content":155},[156],{"type":13,"text":157},"最近、安価なVPS上で複数のワークロードをいい感じに収容する方法について考えています。",{"type":10,"content":159},[160],{"type":13,"text":161},"こんなツイートが伸びるくらいなので、もしかしたら多くの人が気になっているのではないでしょうか。",{"type":163,"attrs":164},"linkCard",{"url":165},"https:\u002F\u002Fx.com\u002Fmai_llj\u002Fstatus\u002F2095891620973686914",{"type":10,"content":167},[168,170,171],{"type":13,"text":169},"このような用途の多くは既にサーバレスへ代替されてしまっているのでしょうが、私がやりたいのは、常時起動する小リソースでステートフルなワークロードをデプロイすることです。",{"type":16},{"type":13,"text":172},"そもそも、リクエスト単位で起動して終了するようなものであればCloudflareのWorkersが一番安くていい感じなんじゃないでしょうか。",{"type":10,"content":174},[175],{"type":13,"text":176},"基本的に、私しか使わないようなものは自宅のKubernetesクラスタにデプロイしているのですが、Misskeyのように外向きのトラヒックが大半を占めるワークロードを自宅に置くのには抵抗があります。",{"type":10,"content":178},[179],{"type":13,"text":180},"そこで活躍するのが安価なVPSです。帯域こそ微妙なものの、安価で、国内ベンダとしては比較的まともなKAGOYA CLOUD VPSを私は愛用しています。",{"type":10,"content":182},[183],{"type":13,"text":184},"VPSなんて必要になったらその都度1台生やせばいいじゃん、という話ではあるのですが、数が増えてくるとそう単純でもありません。例えば、2GiB程度のVPSをアプリケーション単位を収容境界として個別に割り当てていけば、当然ながら管理するホストの数も増えていきます。",{"type":10,"content":186},[187],{"type":13,"text":188},"では大きなVPSを1台借りて、そこへDocker Composeで全部詰め込めばいいのかというと、それも段々と辛くなってきます。どのホストに何が載っているのか、あとどれくらいメモリが空いているのか、新しいワークロードをどこに置くべきなのか。そういうことは機械にやらせてしまいたいわけです。",{"type":10,"content":190},[191],{"type":13,"text":192},"もっと言えば、負荷に応じていい感じにスケールアウトもしてほしいですし、クレデンシャルを含めて綺麗にIaCしたい気持ちがあります。",{"type":10,"content":194},[195],{"type":13,"text":196},"私が思いつく限り、このような用途で一番有用なのがKubernetesです。",{"type":10,"content":198},[199],{"type":13,"text":200},"Argo CDなりFluxなりを使えばGitOpsできますし、Terraformなどとは違い、コントローラによる継続的なreconciliationを前提とした宣言的な構成管理ができます。クレデンシャルについてもExternal Secrets Operatorなどを利用すれば、外部のSecret Managerへ管理を寄せられます。",{"type":10,"content":202},[203],{"type":13,"text":204},"至れり尽くせりなわけです。",{"type":144,"attrs":206,"content":207},{"level":146,"id":123},[208],{"type":13,"text":209},"Kubernetesのオーバーヘッド",{"type":10,"content":211},[212],{"type":13,"text":213},"しかし、Kubernetesには致命的な欠点があります。",{"type":10,"content":215},[216],{"type":13,"text":217},"よく言われるものでは、エコシステムが無駄に大きいとか、学習コストが高いとかいう話もありますが、現に私は使っているので本質的な問題ではありません。",{"type":10,"content":219},[220],{"type":13,"text":221},"単純にオーバーヘッドが大きいんです。",{"type":10,"content":223},[224],{"type":13,"text":225},"もちろん、何をもって重いとするかにもよるでしょし、数十GiB、数百GiBのメモリを積んだノードを大量に抱えている環境なら、kubeletやcontainer runtimeが数百MiB食っていたところで誤差でしょう。",{"type":10,"content":227},[228],{"type":13,"text":229},"しかし、今回考えているのは、安価に契約できるVPSです。4GiB、8GiBあたりの小さい仮想マシンを10何台か契約して、その上へ1-2GiB程度のワークロードを効率よく詰めることを目的としています。",{"type":10,"content":231},[232,234,235],{"type":13,"text":233},"こういう用途に限れば、ノード単位で数百MiBから1GiB近いメモリを基盤側に持っていかれるのは結構しんどいですし、まともに運用しようとすると追加で監視基盤も必要になります。",{"type":16},{"type":13,"text":236},"node-exporterが生え、ログを集めようとするとAlloyやFluent Bitが生え、Ingress Controllerが生え、metrics-serverが生え、cert-managerが生えてきます。",{"type":10,"content":238},[239],{"type":13,"text":240},"もちろん全部が必須というわけではありません。が、Kubernetesをちゃんと運用しようとすると、周辺コンポーネントはどうしても増えてしまいます。結果として、ワークロードを収容するために用意したリソースのうち、それなりの割合を基盤そのものが消費することになります。",{"type":10,"content":242},[243],{"type":13,"text":244},"OS本体の消費リソースも考える必要がありますし、キャパシティの小さいVPSではこのオーバーヘッドを無視することができません。",{"type":144,"attrs":246,"content":247},{"level":146,"id":123},[248],{"type":13,"text":249},"小さいVPSをいっぱい借りればいい？",{"type":10,"content":251},[252],{"type":13,"text":253},"そもそもの発端は、VPSの料金体系を眺めていたことでした。",{"type":10,"content":255},[256],{"type":13,"text":257},"これが不思議なもので、キャパシティの大きいプランを1台契約する場合と比較して、小さいプランを複数台契約した方が安いことがあります。(KAGOYAの場合だと、2GiBのプランがいちばんコスト効率が高そう)",{"type":10,"content":259},[260],{"type":13,"text":261},"であれば、「小さいVPSを大量に借りればよくない？」と思うわけです。",{"type":10,"content":263},[264,266,267],{"type":13,"text":265},"しかし当然、VPSを増やすたびにOSも増えます。",{"type":16},{"type":13,"text":268},"OS本体のオーバーヘッドもそうですが、Linuxをbootして、SSHできるようにして、Dockerなりcontainerdなりを入れて、監視を入れて、アップデートして、という作業を10台、20台やりたいかというと、全然やりたくありません。",{"type":10,"content":270},[271,273,274],{"type":13,"text":272},"私はアプリケーションを動かす基盤がほしいのであって、Ubuntuのお世話をしたいわけではないんです。",{"type":16},{"type":13,"text":275},"極端な話、ホストなんて壊れたら捨てて作り直せればいいし、普段SSHで入る必要すらない形が理想です。",{"type":10,"content":277},[278],{"type":13,"text":279},"その点においてはTalos Linuxがかなり好きです。Immutableで、SSHもshellもなく、APIから管理できますしね。ホストOSを意識する場面を大きく減らせるという意味ではとても理想的です。",{"type":10,"content":281},[282],{"type":13,"text":283},"ただし、TalosはKubernetesを動かすためのOSです。",{"type":10,"content":285},[286],{"type":13,"text":287},"私はKubernetesを前提にしないTalosがほしい。",{"type":144,"attrs":289,"content":290},{"level":146,"id":123},[291],{"type":13,"text":292},"Nomad",{"type":10,"content":294},[295],{"type":13,"text":296},"この手の話をすると、大体Nomadがおすすめされます。実際、使ってみるまでは結構良さそうに見えました。",{"type":10,"content":298},[299,301,302],{"type":13,"text":300},"Task Groupで複数のコンテナを同じノードに置けますし、CPUやメモリを見てスケジューリングしてくれます。Rolling Updateもできます。Kubernetesより構成要素も少なく、かなり軽量です。",{"type":16},{"type":13,"text":303},"もうこれでいいのでは、と思えてきます。",{"type":10,"content":305},[306],{"type":13,"text":307},"しかし、使っていく中で微妙な部分がかなりあります。",{"type":10,"content":309},[310],{"type":13,"text":311},"Nomad自体は単一バイナリでシンプルなのですが、当然それを実行するOSは必要です。OCIコンテナを動かすのであればDockerやPodmanなどのruntimeも必要になりますし、ネットワークをちゃんとやろうとするとCNIが出てきます。service discoveryをどうするかという話もあります。",{"type":10,"content":313},[314],{"type":13,"text":315},"Consulもあります、Vaultもあります、とHashiCorpのエコシステムで補っていくことはできます。が、それらを積み上げた結果できるものに、Kubernetesとの本質的な違いがどれほどあると言えるのでしょうか。",{"type":10,"content":317},[318],{"type":13,"text":319},"別にHashiCorpスタックを愛しているわけではないのですが、気がつくと、",{"type":321,"content":322},"bulletList",[323,330,336,342,348],{"type":324,"content":325},"listItem",[326],{"type":10,"content":327},[328],{"type":13,"text":329},"immutableなOSを選ぶ",{"type":324,"content":331},[332],{"type":10,"content":333},[334],{"type":13,"text":335},"Nomadを載せる",{"type":324,"content":337},[338],{"type":10,"content":339},[340],{"type":13,"text":341},"runtimeを載せる",{"type":324,"content":343},[344],{"type":10,"content":345},[346],{"type":13,"text":347},"ネットワークを考える",{"type":324,"content":349},[350],{"type":10,"content":351},[352],{"type":13,"text":353},"service discoveryを考える",{"type":10,"content":355},[356],{"type":13,"text":357},"という、Kubernetesで既に統合されているものを自分で組み直す必要が出てきました。",{"type":10,"content":359},[360],{"type":13,"text":361},"どう考えても無駄なのでなかったことにします。",{"type":144,"attrs":363,"content":364},{"level":146,"id":123},[365],{"type":13,"text":366},"Incus",{"type":10,"content":368},[369,371,372],{"type":13,"text":370},"IncusOSなんかは特に好みで、immutableでshellもSSHもなく、APIから管理するという、Talosに近いものです。OCI application containerも直接実行できます。",{"type":16},{"type":13,"text":373},"ただ、特性上、複数のコンテナを1つのワークロードとして扱う振る舞いをしてしまう問題がありました。",{"type":10,"content":375},[376],{"type":13,"text":377},"例えば、",{"type":321,"content":379},[380,386,392,398,404],{"type":324,"content":381},[382],{"type":10,"content":383},[384],{"type":13,"text":385},"Application",{"type":324,"content":387},[388],{"type":10,"content":389},[390],{"type":13,"text":391},"PostgreSQL",{"type":324,"content":393},[394],{"type":10,"content":395},[396],{"type":13,"text":397},"Redis",{"type":324,"content":399},[400],{"type":10,"content":401},[402],{"type":13,"text":403},"Caddy",{"type":324,"content":405},[406],{"type":10,"content":407},[408],{"type":13,"text":409},"Backup",{"type":10,"content":411},[412,414,415],{"type":13,"text":413},"を1セットとして、必ず同じホストへ配置したいとします。",{"type":16},{"type":13,"text":416},"KubernetesであればPodがありますし、NomadならTask Groupがあります。",{"type":10,"content":418},[419],{"type":13,"text":420},"Incusの場合、基本的にはそれぞれが独立したinstanceになり、同じノードに置くのであれば、その配置をこちらで管理する必要があります。",{"type":10,"content":422},[423],{"type":13,"text":424},"では、それらを1つの単位として扱って、CPUやメモリの空きを見ながら自動配置してほしい。となると、結局schedulerが欲しくなりました。",{"type":10,"content":426},[427],{"type":13,"text":428},"というわけでIncusもなかったことにします。",{"type":144,"attrs":430,"content":431},{"level":146,"id":123},[432],{"type":13,"text":433},"NixOS",{"type":10,"content":435},[436],{"type":13,"text":437},"じゃあ、世の中の人たちは複数のホストを一体どう管理しているのか気になります。Redditを見てみました。思ったよりつまらなかったです。",{"type":10,"content":439},[440],{"type":13,"text":441},"大きめのマシンを1台用意してDocker Composeをそのまま導入している場合や、複数台をそれぞれ独立したDocker hostとして管理する。PortainerやKomodo、Dokployのようなもので疑似的に中央管理する人もいるようでした。",{"type":10,"content":443},[444],{"type":13,"text":445},"あとはNixOS。これは結構魅力的でした。というか既に私はこれを普段使いのクライアント環境で使っています。",{"type":10,"content":447},[448,450,451],{"type":13,"text":449},"OSの状態自体を宣言的に管理できますし、再現もロールバックもできます。サーバを手作業で育てていく必要がありません。Talosに求めているものの大部分を備えています。",{"type":16},{"type":13,"text":452},"ただ、NixOSはあくまで「このマシンをどういう状態にするか」を管理するものです。",{"type":10,"content":454},[455],{"type":13,"text":456},"複数のホストを1つのリソースプールとして見て、「このワークロードは空きメモリが多いnode-hogeへ」みたいな配置をしてくれるわけではありません。",{"type":10,"content":458},[459],{"type":13,"text":460},"それらは別途考える必要があります。",{"type":10,"content":462},[463],{"type":13,"text":464},"ここでまたschedulerです。",{"type":10,"content":466},[467],{"type":13,"text":468},"どうも私が欲しいものの大半はschedulerの周辺に集約されているようです。",{"type":144,"attrs":470,"content":471},{"level":146,"id":123},[472],{"type":13,"text":473},"結局、Kubernetes",{"type":10,"content":475},[476,478,479],{"type":13,"text":477},"ここまで色々使ってみて、ようやく気づくことがあります。",{"type":16},{"type":13,"text":480},"私が欲しいものを並べると、",{"type":321,"content":482},[483,489,495,501,507,513,519,525,531,537,543],{"type":324,"content":484},[485],{"type":10,"content":486},[487],{"type":13,"text":488},"複数ホストを1つのresource poolとして扱える",{"type":324,"content":490},[491],{"type":10,"content":492},[493],{"type":13,"text":494},"リソースを見て動的に自動配置できる",{"type":324,"content":496},[497],{"type":10,"content":498},[499],{"type":13,"text":500},"複数のコンテナを1つの単位として扱える",{"type":324,"content":502},[503],{"type":10,"content":504},[505],{"type":13,"text":506},"クレデンシャル含め、すべてを宣言的に管理できる",{"type":324,"content":508},[509],{"type":10,"content":510},[511],{"type":13,"text":512},"異常終了したワークロードを再作成できる",{"type":324,"content":514},[515],{"type":10,"content":516},[517],{"type":13,"text":518},"Rolling Updateできる",{"type":324,"content":520},[521],{"type":10,"content":522},[523],{"type":13,"text":524},"ホストをdrainできる",{"type":324,"content":526},[527],{"type":10,"content":528},[529],{"type":13,"text":530},"service discoveryがある",{"type":324,"content":532},[533],{"type":10,"content":534},[535],{"type":13,"text":536},"APIから操作できる",{"type":324,"content":538},[539],{"type":10,"content":540},[541],{"type":13,"text":542},"OCI imageをそのまま使える",{"type":324,"content":544},[545],{"type":10,"content":546},[547],{"type":13,"text":548},"immutableなホストOSを選べる",{"type":10,"content":550},[551],{"type":13,"text":552},"という感じになります。",{"type":10,"content":554},[555],{"type":13,"text":556},"すごくKubernetesですね。",{"type":10,"content":558},[559],{"type":13,"text":560},"Kubernetesを避けるために代替を探していたのに、代替できるものも結局はKubernetesになってしまいます。",{"type":10,"content":562},[563,565,566],{"type":13,"text":564},"Kubernetesは無駄に複雑で、実際私が使わない機能も大量にありますが、NomadやIncusの節で書いたとおり、小さなソフトウェアを組み合わせて同じ要件を満たそうとすると、runtimeやCNI、service discovery、schedulerの選定と統合が今度は自分の責務になってしまいます。",{"type":16},{"type":13,"text":567},"Kubernetesの中で済んでいた統合作業を自分でやり直しているだけで、複雑さの総量は減っていませんよね。Kubernetesがあの大きさなのにも、相応の理由があるということなのかもしれません。",{"type":10,"content":569},[570,572,573],{"type":13,"text":571},"では素直にマネージドKubernetesを使えばいいのかというと、あれはあれで高すぎて使えません。",{"type":16},{"type":13,"text":574},"workerもcontrolもパブクラの価格水準で、格安VPSをよしなにしようねという今回の話とは前提の金額が異なります。",{"type":10,"content":576},[577],{"type":13,"text":578},"結局のところ、Kubernetesは潤沢な計算資源を前提にした、富豪向けのソリューションなのかもしれません。",{"type":144,"attrs":580,"content":581},{"level":146,"id":123},[582],{"type":13,"text":583},"結局どうするの",{"type":10,"content":585},[586,588,589],{"type":13,"text":587},"まだ決めていません。",{"type":16},{"type":13,"text":590},"ここまで書いておいて何なんだという話ですが、本当に決めていません。",{"type":10,"content":592},[593],{"type":13,"text":594},"Kubernetesを使えば、欲しいものは一通りそれなりに揃います。が、VPSで小規模なワークロードを高密度に詰めたいという用途では、やっぱりオーバーヘッドが気になります。",{"type":10,"content":596},[597,599,600],{"type":13,"text":598},"軽量化という意味ではK3sがあります。K3sはKubernetes自体を大幅に軽量化していますが、その下には普通のLinux distributionが必要になります。",{"type":16},{"type":13,"text":601},"一方のTalosは、別にK3sより軽いわけではなく、ホストOSとして綺麗なのであって、upstream Kubernetesそのものを軽量化してくれるものではないからです。",{"type":10,"content":603},[604],{"type":13,"text":605},"Talosのような運用モデルで、K3sくらい軽量なKubernetesが動けばかなり嬉しいのですが、どうも都合よく存在してくれることはありませんでした。",{"type":10,"content":607},[608],{"type":13,"text":609},"何かしらが足りない近しいものはいくつか見つけられたのですが、足りない部分を自分で補おうとすると、またKubernetesに近づいてしまいます。",{"type":144,"attrs":611,"content":612},{"level":146,"id":123},[613],{"type":13,"text":614},"さいごに",{"type":10,"content":616},[617],{"type":13,"text":618},"Docker Composeで困らない規模なら、Docker Composeを使えばいいと思いますし、単一ホストで収まるなら、無理にクラスタを作る必要もありません。",{"type":10,"content":620},[621,623,624],{"type":13,"text":622},"ただ、要求を増やしていくと、最終的には「それKubernetesでできるよ」という話になってしまいます。",{"type":16},{"type":13,"text":625},"そんなことはとっくの昔から知っています。",{"type":10,"content":627},[628],{"type":13,"text":629},"それを避けたくて色々試していたわけですが、どうもこれらの要件を満たしたいのであれば、Kubernetesを使うのが一番素直なのかもしれません。",{"type":10,"content":631},[632],{"type":13,"text":633},"やはりKubernetesからは逃れられないようです。","どうも、わたしです。最近、安価なVPS上で複数のワークロードをいい感じに収容する方法について考えています。こんなツイートが伸びるくらいなので、もしかしたら多くの人が気になっているのではないでしょうか。このような用途の多くは既にサーバレスへ代替されてしまっているのでしょうが、私がやりたいのは、常時起動",5361,[637,641,642],{"id":638,"name":639,"slug":640},"fwj_nwhj1-s","サーバー","server",{"id":130,"name":131,"slug":132},{"id":126,"name":127,"slug":128},"2026-09-05T17:43:52.489Z","2026-09-05T16:58:20.431Z","2026-09-05T21:50:20.484Z"]