<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes Zukai</title><link>https://zukai-tech.com/</link><description>Recent content on Kubernetes Zukai</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Wed, 21 Oct 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://zukai-tech.com/index.xml" rel="self" type="application/rss+xml"/><item><title>kind で検証用のクラスタを作る</title><link>https://zukai-tech.com/basics/kind/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/kind/</guid><description>&lt;p&gt;この記事では Docker のコンテナをノードにして手元のマシンにクラスタを作るツールである &lt;strong&gt;kind&lt;/strong&gt; の仕組みを、図で説明します。&lt;code&gt;kind create cluster&lt;/code&gt; を実行したときに何が起きるのか、ノードの正体が何なのかがわかります。後半ではこのシリーズで使う検証用クラスタを実際に作る手順を示します。&lt;/p&gt;&#10;&lt;p&gt;Kubernetes とは何かを説明した第1回の内容を前提にしています。まだの方は先にこちらをどうぞ。&lt;/p&gt;&#10;&lt;a class="linkcard" href="https://zukai-tech.com/basics/kubernetes/"&gt;&#10; &lt;span class="linkcard__body"&gt;&#10; &lt;span class="linkcard__meta"&gt;&lt;svg class="icon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M2.5 3.2c1.9-.6 3.9-.4 5.5.8v9.2c-1.6-1.2-3.6-1.4-5.5-.8z"/&gt;&lt;path d="M13.5 3.2c-1.9-.6-3.9-.4-5.5.8v9.2c1.6-1.2 3.6-1.4 5.5-.8z"/&gt;&lt;/svg&gt;基本仕様 第1回&lt;/span&gt;&#10; &lt;span class="linkcard__title"&gt;Kubernetes とは何か&lt;/span&gt;&lt;span class="linkcard__desc"&gt;Kubernetes が何を解決するのかを図で説明する、シリーズの第1回です。docker run で動かしたコンテナと Deployment で動かしたコンテナを比べ、止まったコンテナが自動で戻る仕組みと、望ましい状態を宣言して任せる管理のしかたを紹介します。&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="linkcard__thumb"&gt;&lt;img src="https://zukai-tech.com/basics/kubernetes/diagrams/hero.svg" alt="" loading="lazy" decoding="async"&gt;&lt;/span&gt;&#10;&lt;/a&gt;&#10;&lt;p&gt;以下の図は、kind で作ったクラスタが手元のマシンの中でどう動いているかを表しています。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="手元のマシンの Docker のコンテナがノードになり、その中で Pod が動く kind のクラスタ" data-zoom-width="1394"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/kind/diagrams/hero.svg" alt="手元のマシンを表す大きな枠の中に、kubectl と、Docker のコンテナとして動く 3 つのノードがある。ノードはコントロールプレーンが 1 つとワーカーが 2 つ。コントロールプレーンのノードの中には kube-apiserver があり、ワーカーのノードの中にはそれぞれ Pod がある。kubectl から kube-apiserver へ、kubeconfig の接続先として線が引かれている。" width="1394" height="802" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;手元のマシンの Docker のコンテナがノードになり、その中で Pod が動く kind のクラスタ&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;ノードは仮想マシンでも物理マシンでもなく、手元のマシンで動く Docker のコンテナです。Pod のコンテナはそのノードのコンテナの中で動きます。&lt;/p&gt;&#10;&lt;h2 id="kind-とは"&gt;kind とは&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://kind.sigs.k8s.io/"&gt;kind&lt;/a&gt; は Docker のコンテナを「ノード」として使い、手元のマシンで Kubernetes のクラスタを動かすツールです。名前は「Kubernetes in Docker」に由来します。もともとは &lt;strong&gt;Kubernetes そのものをテストするために作られたツール&lt;/strong&gt; ですが、手元での開発や CI（変更のたびにテストを自動で回す仕組み）にも使えます。&lt;/p&gt;</description></item><item><title>kubectl apply と kubectl edit の違い</title><link>https://zukai-tech.com/basics/apply-vs-edit/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/apply-vs-edit/</guid><description>&lt;p&gt;この記事ではクラスタにあるオブジェクトを更新する 2 つのコマンド &lt;strong&gt;kubectl apply&lt;/strong&gt; と &lt;strong&gt;kubectl edit&lt;/strong&gt; の違いを、図で説明します。それぞれが何をもとに、どこを書き換えるのかがわかります。更新のたびに変わる &lt;code&gt;resourceVersion&lt;/code&gt; と、&lt;code&gt;kubectl apply&lt;/code&gt; が残す &lt;code&gt;last-applied-configuration&lt;/code&gt;（以下、last-applied）の役割もわかります。後半では kind のクラスタで、同じ Deployment を 2 つのコマンドで交互に更新し、この 2 つの値の変化を比べる手順を示します。&lt;/p&gt;&#10;&lt;p&gt;マニフェストと宣言的 API を扱った第5回の内容を前提にしています。まだの方は先にこちらをどうぞ。&lt;/p&gt;&#10;&lt;a class="linkcard" href="https://zukai-tech.com/basics/manifest/"&gt;&#10; &lt;span class="linkcard__body"&gt;&#10; &lt;span class="linkcard__meta"&gt;&lt;svg class="icon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M2.5 3.2c1.9-.6 3.9-.4 5.5.8v9.2c-1.6-1.2-3.6-1.4-5.5-.8z"/&gt;&lt;path d="M13.5 3.2c-1.9-.6-3.9-.4-5.5.8v9.2c1.6-1.2 3.6-1.4 5.5-.8z"/&gt;&lt;/svg&gt;基本仕様 第5回&lt;/span&gt;&#10; &lt;span class="linkcard__title"&gt;マニフェストと宣言的 API の仕組み&lt;/span&gt;&lt;span class="linkcard__desc"&gt;Kubernetes に渡すマニフェストの構造と、望ましい状態を書いて任せる宣言的 API の仕組みを図で説明します。apiVersion・kind・metadata・spec・status の役割と、spec と status を誰が書くのかを押さえ、kind のクラスタで kubectl explain を使い、Pod の spec と status を作成直後と数秒後で比べる手順を紹介します。&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="linkcard__thumb"&gt;&lt;img src="https://zukai-tech.com/basics/manifest/diagrams/hero.svg" alt="" loading="lazy" decoding="async"&gt;&lt;/span&gt;&#10;&lt;/a&gt;&#10;&lt;p&gt;以下の図は、&lt;code&gt;kubectl apply&lt;/code&gt; と &lt;code&gt;kubectl edit&lt;/code&gt; が、kube-apiserver を通して etcd に保存されている同じ Deployment を更新する流れを表しています。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="kubectl apply と kubectl edit が Deployment を更新する流れ（kubectl apply は、既定どおり kubectl の側で差分を計算する場合）" data-zoom-width="1705"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/apply-vs-edit/diagrams/hero.svg" alt="左に利用者のアイコンがある。上の段では、利用者から「マニフェスト（ファイル）」の箱へ「書く」の線が引かれ、マニフェストの箱から「kubectl apply」と見出しの付いた枠へ線が引かれている。kubectl apply の枠の中には、上から下へ矢印でつながる 2 つの段階「① マニフェスト・今のオブジェクト・last-applied を比べる」「② 違う部分だけを patch で送る」がある。下の段では、利用者から「kubectl edit」と見出しの付いた枠へ「書き換える」の線が引かれている。kubectl edit の枠の中には、上から下へ矢印でつながる 2 つの段階「① 今のオブジェクトを取り出し、エディタで開く」「② 保存した内容を送る」がある。右に「kube-apiserver（etcd に保存）」と見出しの付いた枠があり、その中のアイコンは Deployment だけである。kubectl apply の ② から Deployment へ「違う部分」の線が、Deployment から kubectl edit の ① へ「今のオブジェクト」の破線が、kubectl edit の ② から Deployment へ「書き換えた内容」の線が引かれている。Deployment の下に「resourceVersion：中身が変わるたびに変わる」「last-applied：apply で書き換わる（edit は既定では変えない）」と書いてある。" width="1705" height="892" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;kubectl apply と kubectl edit が Deployment を更新する流れ（kubectl apply は、既定どおり kubectl の側で差分を計算する場合）&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;&lt;code&gt;kubectl apply&lt;/code&gt; は、利用者が手元に置いたマニフェストをもとに、変わった部分だけを計算します。すでにあるオブジェクトを更新するときは、その部分を patch というリクエストで送ります。&lt;code&gt;kubectl edit&lt;/code&gt; は、クラスタにある今のオブジェクトを取り出してエディタで開き、利用者が書き換えて保存した内容を送ります。どちらで更新しても、オブジェクトの中身が変わるので、&lt;code&gt;resourceVersion&lt;/code&gt; は変わります。last-applied というアノテーションは、&lt;code&gt;kubectl apply&lt;/code&gt; が書き換えます。&lt;code&gt;kubectl edit&lt;/code&gt; は、&lt;code&gt;--save-config&lt;/code&gt; を付けない限り、このアノテーションを変えません。&lt;/p&gt;</description></item><item><title>kubectl と kubeconfig の仕組み</title><link>https://zukai-tech.com/basics/kubectl/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/kubectl/</guid><description>&lt;p&gt;この記事ではクラスタを操作するコマンドの &lt;strong&gt;kubectl&lt;/strong&gt; と、その接続先を決めるファイルの &lt;strong&gt;kubeconfig&lt;/strong&gt; の仕組みを、図で説明します。kubectl がどうやって接続するクラスタを選んでいるのか、&lt;code&gt;get&lt;/code&gt;・&lt;code&gt;describe&lt;/code&gt;・&lt;code&gt;explain&lt;/code&gt; の 3 つのコマンドをどう使い分けるのかがわかります。後半では第2回の手順で 2 つのクラスタを作り、コンテキストを切り替えて接続先が変わることを確かめる手順を示します。&lt;/p&gt;&#10;&lt;p&gt;kind で検証用クラスタを作った第2回の内容を前提にしています。まだの方は先にこちらをどうぞ。&lt;/p&gt;&#10;&lt;a class="linkcard" href="https://zukai-tech.com/basics/kind/"&gt;&#10; &lt;span class="linkcard__body"&gt;&#10; &lt;span class="linkcard__meta"&gt;&lt;svg class="icon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M2.5 3.2c1.9-.6 3.9-.4 5.5.8v9.2c-1.6-1.2-3.6-1.4-5.5-.8z"/&gt;&lt;path d="M13.5 3.2c-1.9-.6-3.9-.4-5.5.8v9.2c1.6-1.2 3.6-1.4 5.5-.8z"/&gt;&lt;/svg&gt;基本仕様 第2回&lt;/span&gt;&#10; &lt;span class="linkcard__title"&gt;kind で検証用のクラスタを作る&lt;/span&gt;&lt;span class="linkcard__desc"&gt;Docker のコンテナをノードにして、手元のマシンに Kubernetes のクラスタを作るツール kind の仕組みを図で説明します。kind create cluster で何が起きるかを押さえ、シングルノードとマルチノードのクラスタを作って、ノードの正体が Docker のコンテナであることを確かめる手順を紹介します。&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="linkcard__thumb"&gt;&lt;img src="https://zukai-tech.com/basics/kind/diagrams/hero.svg" alt="" loading="lazy" decoding="async"&gt;&lt;/span&gt;&#10;&lt;/a&gt;&#10;&lt;p&gt;以下の図は、kubectl が kubeconfig を読んで接続先のクラスタを選ぶ様子を表しています。後半の「手元で試す」で 2 つのクラスタを作り、&lt;code&gt;kind-multi-node&lt;/code&gt; に切り替えたときの例です。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="kubeconfig の現在のコンテキストで決まる、kubectl の接続先" data-zoom-width="1452"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/kubectl/diagrams/hero.svg" alt="手元のマシンを表す大きな枠の中に、kubectl、「kubeconfig ファイル」と見出しの付いた枠、2 つの kind のクラスタがある。kubeconfig ファイルの中には kind-kind と kind-multi-node の 2 つのコンテキストがある。kind-multi-node のコンテキストには「（current-context）」と添えてあり、緑の太字で強調されている。2 つのクラスタは「クラスタ kind（ノード 1 つ）」と「クラスタ multi-node（ノード 3 つ）」で、それぞれの中に kube-apiserver がある。kubectl から kubeconfig ファイルへ「読む」の線が、kubectl からクラスタ multi-node の kube-apiserver へ「接続」の線が引かれている。クラスタ kind の kube-apiserver へは線が引かれていない。" width="1452" height="762" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;kubeconfig の現在のコンテキストで決まる、kubectl の接続先&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;kubectl はフラグで指定しなければ、kubeconfig の現在のコンテキストが指すクラスタの kube-apiserver に接続します。コンテキストを切り替えれば、同じコマンドでも別のクラスタを操作することになります。&lt;/p&gt;</description></item><item><title>Kubernetes とは何か</title><link>https://zukai-tech.com/basics/kubernetes/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/kubernetes/</guid><description>&lt;p&gt;この記事ではコンテナで動くアプリケーションを管理するための基盤である &lt;strong&gt;Kubernetes&lt;/strong&gt; の仕組みを、図で説明します。Docker でコンテナを直接動かす場合と比べて何が変わるのか、コンテナのプロセスが止まったときに誰が何をするのかがわかります。&lt;/p&gt;&#10;&lt;p&gt;この記事はシリーズの第1回で、前提となる回はありません。Docker でコンテナを動かしたことがあれば読み進められます。&lt;/p&gt;&#10;&lt;p&gt;以下の図は Kubernetes の全体像を表しています。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="利用者が渡した望ましい状態を、コントロールプレーンがノード上の Pod で保つ構成" data-zoom-width="1531"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/kubernetes/diagrams/hero.svg" alt="左に利用者がいて、「nginx の Pod を 3 つ」と書いたマニフェストをクラスタに渡している。クラスタの中にはコントロールプレーンと 2 台のノードがあり、コントロールプレーンが 2 台のノードを管理している。ノード 1 には Pod が 2 つ、ノード 2 には Pod が 1 つ動いている。各ノードの破線の枠の右上には、ノードを表すアイコンが付いている。" width="1531" height="866" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;利用者が渡した望ましい状態を、コントロールプレーンがノード上の Pod で保つ構成&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;利用者は「nginx の Pod を 3 つ動かしてほしい」という望ましい状態を書いて渡すだけです。どのノードで動かすか、止まったときにどうするかは、Kubernetes が引き受けます。図では、右上にアイコンが付いた破線の枠がノードです。&lt;/p&gt;&#10;&lt;h2 id="kubernetes-とは"&gt;Kubernetes とは&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/overview/"&gt;Kubernetes&lt;/a&gt; はコンテナで動くワークロード（アプリケーションなど、クラスタで動かす処理）とサービス（ここでは、アプリケーションが提供する機能のこと。後の回で扱う Service というリソースとは別の意味）を管理するための、オープンソースのプラットフォームです。公式ドキュメントは Kubernetes を &lt;strong&gt;宣言的な設定と自動化の両方を進めやすくするもの&lt;/strong&gt; と説明しています。&lt;/p&gt;&#10;&lt;p&gt;名前はギリシャ語で「操舵手」や「水先案内人」を意味する言葉に由来します。K と s の間の 8 文字を数えて、K8s とも略されます。Google が 2014 年にオープンソースとして公開しました。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;参考：&lt;a href="https://kubernetes.io/docs/concepts/overview/"&gt;Overview | Kubernetes&lt;/a&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Kubernetes は複数のマシンをまとめた &lt;strong&gt;クラスタ&lt;/strong&gt; の上で動きます。クラスタは全体を管理するコントロールプレーンと、1 台以上のノードでできています。Kubernetes に作って管理させるもの（Pod や Deployment など）を、このシリーズではリソースと呼びます。公式ドキュメントではオブジェクト（object）とも呼ばれます。この回で使う用語を、次の表にまとめます。&lt;/p&gt;</description></item><item><title>コントロールプレーンとノードの構成</title><link>https://zukai-tech.com/basics/control-plane/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/control-plane/</guid><description>&lt;p&gt;この記事ではクラスタを形づくる 2 つの部分である &lt;strong&gt;コントロールプレーン&lt;/strong&gt; と &lt;strong&gt;ノード&lt;/strong&gt; の構成を、図で説明します。それぞれの中でどんなコンポーネントが動き、何を受け持っているのか、互いにどうやり取りしているのかがわかります。後半では kind のマルチノードのクラスタで &lt;code&gt;kube-system&lt;/code&gt; の Pod を一覧し、各コンポーネントの役割と対応づける手順を示します。&lt;/p&gt;&#10;&lt;p&gt;kubectl と kubeconfig を扱った第3回の内容を前提にしています。まだの方は先にこちらをどうぞ。&lt;/p&gt;&#10;&lt;a class="linkcard" href="https://zukai-tech.com/basics/kubectl/"&gt;&#10; &lt;span class="linkcard__body"&gt;&#10; &lt;span class="linkcard__meta"&gt;&lt;svg class="icon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M2.5 3.2c1.9-.6 3.9-.4 5.5.8v9.2c-1.6-1.2-3.6-1.4-5.5-.8z"/&gt;&lt;path d="M13.5 3.2c-1.9-.6-3.9-.4-5.5.8v9.2c1.6-1.2 3.6-1.4 5.5-.8z"/&gt;&lt;/svg&gt;基本仕様 第3回&lt;/span&gt;&#10; &lt;span class="linkcard__title"&gt;kubectl と kubeconfig の仕組み&lt;/span&gt;&lt;span class="linkcard__desc"&gt;kubectl がどのクラスタに接続するかを決める kubeconfig の仕組みを図で説明します。clusters・users・contexts の関係と、接続先が決まる順番を押さえ、get・describe・explain の使い分けと、コンテキストを切り替えると接続先が変わることを kind のクラスタで確かめる手順を紹介します。&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="linkcard__thumb"&gt;&lt;img src="https://zukai-tech.com/basics/kubectl/diagrams/hero.svg" alt="" loading="lazy" decoding="async"&gt;&lt;/span&gt;&#10;&lt;/a&gt;&#10;&lt;p&gt;以下の図は、コントロールプレーンとノードのそれぞれで動くコンポーネントと、そのつながりを表しています。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="kube-apiserver を中心にやり取りする、コントロールプレーンとノードのコンポーネント" data-zoom-width="1396"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/control-plane/diagrams/hero.svg" alt="クラスタを表す大きな枠の中で、上にコントロールプレーンの枠、下にノードの枠が並ぶ。コントロールプレーンの枠には kube-apiserver、etcd、kube-scheduler、kube-controller-manager がある。ノードの枠には kubelet、kube-proxy、コンテナランタイム、Pod がある。kube-scheduler、kube-controller-manager、kubelet、kube-proxy からは、それぞれ kube-apiserver へ「監視」の線が引かれている。etcd と線でつながっているのは kube-apiserver だけで、その線には「読み書き」とある。ノードの中では、kubelet からコンテナランタイムへ「CRI」の線が、コンテナランタイムから Pod へ「起動」の線が引かれている。" width="1396" height="1018" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;kube-apiserver を中心にやり取りする、コントロールプレーンとノードのコンポーネント&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;kube-scheduler や kubelet などのコンポーネントは、互いに直接やり取りせず、kube-apiserver を通してやり取りします。クラスタのデータを etcd に読み書きするのも kube-apiserver です。例外はノードの中の kubelet とコンテナランタイムで、kubelet はコンテナランタイムに直接指示を出します。&lt;/p&gt;</description></item><item><title>マニフェストと宣言的 API の仕組み</title><link>https://zukai-tech.com/basics/manifest/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/manifest/</guid><description>&lt;p&gt;この記事では Kubernetes に作ってほしいものとその望ましい状態を書いたファイルである &lt;strong&gt;マニフェスト&lt;/strong&gt; と、マニフェストを受け取る &lt;strong&gt;宣言的 API&lt;/strong&gt; の仕組みを、図で説明します。マニフェストの &lt;code&gt;apiVersion&lt;/code&gt;・&lt;code&gt;kind&lt;/code&gt;・&lt;code&gt;metadata&lt;/code&gt;・&lt;code&gt;spec&lt;/code&gt;・&lt;code&gt;status&lt;/code&gt; がそれぞれ何を表すのか、&lt;code&gt;spec&lt;/code&gt; と &lt;code&gt;status&lt;/code&gt; を誰が書くのかがわかります。後半では kind のクラスタで &lt;code&gt;kubectl explain&lt;/code&gt; を使ってフィールドの意味を確かめ、Pod の &lt;code&gt;spec&lt;/code&gt; と &lt;code&gt;status&lt;/code&gt; を作成直後と数秒後で比べる手順を示します。&lt;/p&gt;&#10;&lt;p&gt;コントロールプレーンとノードの構成を扱った第4回の内容を前提にしています。まだの方は先にこちらをどうぞ。&lt;/p&gt;&#10;&lt;a class="linkcard" href="https://zukai-tech.com/basics/control-plane/"&gt;&#10; &lt;span class="linkcard__body"&gt;&#10; &lt;span class="linkcard__meta"&gt;&lt;svg class="icon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M2.5 3.2c1.9-.6 3.9-.4 5.5.8v9.2c-1.6-1.2-3.6-1.4-5.5-.8z"/&gt;&lt;path d="M13.5 3.2c-1.9-.6-3.9-.4-5.5.8v9.2c1.6-1.2 3.6-1.4 5.5-.8z"/&gt;&lt;/svg&gt;基本仕様 第4回&lt;/span&gt;&#10; &lt;span class="linkcard__title"&gt;コントロールプレーンとノードの構成&lt;/span&gt;&lt;span class="linkcard__desc"&gt;クラスタを形づくるコントロールプレーンとノードの構成を図で説明します。kube-apiserver・etcd・kube-scheduler・kube-controller-manager と、kubelet・コンテナランタイム・kube-proxy の役割を押さえ、kind のクラスタで kube-system の Pod を一覧して各コンポーネントと対応づける手順を紹介します。&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="linkcard__thumb"&gt;&lt;img src="https://zukai-tech.com/basics/control-plane/diagrams/hero.svg" alt="" loading="lazy" decoding="async"&gt;&lt;/span&gt;&#10;&lt;/a&gt;&#10;&lt;p&gt;以下の図は、1 つの Pod について、&lt;code&gt;spec&lt;/code&gt; と &lt;code&gt;status&lt;/code&gt; をどのコンポーネントが書き込むかを表しています。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="Pod のオブジェクトの spec と status に書き込むコンポーネント" data-zoom-width="1322"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/manifest/diagrams/hero.svg" alt="左に利用者のアイコンと、その上に apiVersion・kind・metadata・spec を書いたマニフェストがあり、利用者からマニフェストへ「書く」の線が引かれている。中央に「kube-apiserver（etcd に保存）」と見出しの付いた枠があり、その中に「Pod のオブジェクト」と見出しの付いた枠がある。オブジェクトの枠の中には上から metadata（中に .name: nginx）、spec（中に .containers と .nodeName）、status（中に .phase と .conditions）の 3 つの区画が並ぶ。右上に kube-scheduler、右下にノードの枠と、その中の kubelet がある。利用者から spec へ「望ましい状態を書く」の線、kube-scheduler から spec へ「ノード名を書く」の線、kubelet から spec へ「監視」の線、kubelet から status へ「実際の状態を書く」の線が引かれている。status へ線が引かれているのは kubelet からだけである。" width="1322" height="742" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;Pod のオブジェクトの spec と status に書き込むコンポーネント&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;利用者がマニフェストで書くのは &lt;code&gt;spec&lt;/code&gt; までで、&lt;code&gt;status&lt;/code&gt; は書きません。&lt;code&gt;status&lt;/code&gt; に Pod の実際の状態を主に書き込むのは、Pod が動くノードの kubelet です。kubelet 以外が Pod の &lt;code&gt;status&lt;/code&gt; を書き換える場合もあります。たとえばノードが止まったりクラスタから切り離されたりすると、Kubernetes はそのノードの Pod の &lt;code&gt;phase&lt;/code&gt; を &lt;code&gt;Failed&lt;/code&gt; にします。&lt;code&gt;spec&lt;/code&gt; には、kube-scheduler がノードを選んで割り当てる（binding）と、Pod を動かすノードの名前（&lt;code&gt;spec.nodeName&lt;/code&gt;）が入ります。マニフェストを書く線を除き、図の線はどれも kube-apiserver を通ります。第4回で見たとおり、コンポーネントどうしは kube-apiserver を通してやり取りするからです。&lt;/p&gt;</description></item><item><title>消した Pod が戻ってくる仕組み（調整ループ）</title><link>https://zukai-tech.com/basics/reconciliation-loop/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0900</pubDate><guid>https://zukai-tech.com/basics/reconciliation-loop/</guid><description>&lt;p&gt;この記事では、コントローラーが実際の状態を望ましい状態に近づける繰り返しである &lt;strong&gt;調整ループ（Reconciliation Loop）&lt;/strong&gt; の仕組みを、図で説明します。Deployment で動かしている Pod を手で消したときに、誰がそれに気づき、どうやって代わりの Pod を作るのかがわかります。後半では kind のクラスタで Deployment の Pod を削除し、作り直される様子を観察する手順を示します。&lt;/p&gt;&#10;&lt;p&gt;マニフェストの &lt;code&gt;spec&lt;/code&gt; と &lt;code&gt;status&lt;/code&gt; を扱った第5回の内容を前提にしています。まだの方は先にこちらをどうぞ。&lt;/p&gt;&#10;&lt;a class="linkcard" href="https://zukai-tech.com/basics/manifest/"&gt;&#10; &lt;span class="linkcard__body"&gt;&#10; &lt;span class="linkcard__meta"&gt;&lt;svg class="icon" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M2.5 3.2c1.9-.6 3.9-.4 5.5.8v9.2c-1.6-1.2-3.6-1.4-5.5-.8z"/&gt;&lt;path d="M13.5 3.2c-1.9-.6-3.9-.4-5.5.8v9.2c1.6-1.2 3.6-1.4 5.5-.8z"/&gt;&lt;/svg&gt;基本仕様 第5回&lt;/span&gt;&#10; &lt;span class="linkcard__title"&gt;マニフェストと宣言的 API の仕組み&lt;/span&gt;&lt;span class="linkcard__desc"&gt;Kubernetes に渡すマニフェストの構造と、望ましい状態を書いて任せる宣言的 API の仕組みを図で説明します。apiVersion・kind・metadata・spec・status の役割と、spec と status を誰が書くのかを押さえ、kind のクラスタで kubectl explain を使い、Pod の spec と status を作成直後と数秒後で比べる手順を紹介します。&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="linkcard__thumb"&gt;&lt;img src="https://zukai-tech.com/basics/manifest/diagrams/hero.svg" alt="" loading="lazy" decoding="async"&gt;&lt;/span&gt;&#10;&lt;/a&gt;&#10;&lt;p&gt;以下の図は、ReplicaSet のコントローラーが Pod の数を 3 に保つ調整ループを表しています。&lt;/p&gt;&#10;&lt;figure class="diagram"&gt;&#10; &lt;div class="diagram__panel"&gt;&#10; &lt;button type="button" class="diagram__zoom" data-zoom data-zoom-caption="replicaset-controller が見る・比べる・変えるを繰り返し、Pod の数を 3 に保つ調整ループ" data-zoom-width="1325"&gt;&#10; &lt;span class="diagram__hint" aria-hidden="true"&gt;&lt;span class="diagram__hint-tap"&gt;タップで拡大&lt;/span&gt;&lt;span class="diagram__hint-click"&gt;クリックで拡大&lt;/span&gt;&lt;/span&gt;&#10; &lt;img src="https://zukai-tech.com/basics/reconciliation-loop/diagrams/hero.svg" alt="図の上に「kube-controller-manager」と見出しの付いた枠があり、その中に replicaset-controller がある。replicaset-controller の右に「② 比べる：望ましい数 3、今ある数 2」と添えてある。図の下半分に「kube-apiserver（etcd に保存）」と見出しの付いた枠がある。その枠の中の左に ReplicaSet のアイコンがあり、下に「spec.replicas: 3（望ましい状態）」と書かれている。枠の中の右に「app: nginx の Pod（実際の状態）」と見出しの付いた枠があり、Pod のアイコンが 2 つと、薄く表示した「Pod（まだ無い）」のアイコンが 1 つある。replicaset-controller から ReplicaSet のアイコンへ「① 見る（監視）」の線が、Pod の枠へ「① 見る（監視）」の線が引かれている。replicaset-controller から薄く表示した Pod へ「③ 変える：Pod を 1 つ作る」の線が引かれている。" width="1325" height="796" loading="lazy" decoding="async"&gt;&#10; &lt;span class="visually-hidden"&gt;（図を拡大表示する）&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;/div&gt;&#10; &lt;figcaption&gt;replicaset-controller が見る・比べる・変えるを繰り返し、Pod の数を 3 に保つ調整ループ&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;replicaset-controller は ReplicaSet を受け持つコントローラーです。kube-apiserver を通して ReplicaSet と Pod を監視し（見る）、ReplicaSet の &lt;code&gt;spec.replicas&lt;/code&gt; と、実際にある Pod の数を比べます（比べる）。足りなければ、Pod を作るよう kube-apiserver に頼みます（変える）。この 3 つを終わりなく繰り返すのが調整ループです。&lt;/p&gt;</description></item></channel></rss>