Kubernetes の基本知識
Kubernetes とは
Kubernetes は複数のマシンにまたがってコンテナを管理するツールである。
Docker との違い
Docker はイメージを作成したり実行したりする。
Kubernetes はイメージをもとにコンテナを実行する。複数のマシンにまたがって実行できる。
用語
ツール
kubectl
kubectl は Kubernetes クラスターに対してコマンドを実行できるツールである。
1 2 | |
Minikube
kubelet
コンテナランタイム
Kubernetes はデフォルトでコンテナランタイムの containerd を使っているらしい。Docker も内部で containerd を使っている。
マルチノード
ノードは仮想か物理か選ぶことになる。
| 項目 | 物理ノード | 仮想ノード |
|---|---|---|
| パフォーマンス | 高い | やや低い (仮想化オーバーヘッドがある) |
| スケーラビリティ | 低い | 高い (VM をすぐ追加可能) |
| 運用・管理 | 手間がかかる | 柔軟で簡単 (スナップショット、テンプレートを活用できる) |
| コスト | 高い (ハード購入が必要) | 低め~柔軟 |
| 柔軟性 | 低い | 高い (リソース調整できる) |
その他、仮想ノードは物理ノードと比べて以下のような違いがある。
- 作り直しが簡単
- CPU やメモリの配分が簡単
- ネットワーク周りの挙動が微妙に違う
仮想ノードについてはさらに以下の選択肢がある。
- Kind や Minikube などの Kubernetes 処理系でノードを作成する (以下コンテナ型仮想ノードと呼ぶ)
- 仮想マシンをいくつか立ててその中にノードを作成する (以下仮想マシン型仮想ノードと呼ぶ)
前者はノードがコンテナとして動く。後者はノードが OS レベルで動く。
| 項目 | 仮想マシン型仮想ノード | コンテナ型仮想ノード | 物理ノード |
|---|---|---|---|
| ノードの正体 | 仮想マシン(Ubuntu などフル OS) | Docker コンテナ内で kubelet | 実機サーバ(Ubuntu など) |
| OS レベルの挙動 | 本番とほぼ同じ | 軽量 OS・一部ホスト依存 | 本番と完全一致 |
| cgroup / systemd / ネットワーク | 本番同様 | 制限あり・ホスト依存 | 本番と完全一致 |
| 起動速度 | 遅め(数十秒〜分) | 速い(数秒〜10 秒) | 遅い(サーバ起動時間) |
| リソース消費 | 高い(OS ごとに割当) | 軽い(ホストと共有) | 高い(物理リソース丸ごと) |
| スナップショット/再作成 | ディスク大きく重い | すぐ作り直せる | 面倒・物理交換が必要 |
| ネットワーク挙動 | 本番とほぼ同じ | 一部ホスト経由で制限あり | 本番と完全一致 |
| スケール | ホストリソース依存 | 軽量なので多ノード可能 | 物理リソース依存 |
| 適した用途 | 本番準拠の検証、クラウド学習 | 学習、CI/CD テスト、軽量クラスタ | 本番運用、性能検証 |
| 目的 | 推奨ノードタイプ | 理由 |
|---|---|---|
| 学習 / ローカル K8s 入門 | コンテナ型仮想ノード | 軽量・簡単・速い |
| CI/CD でクラスタ挙動確認 | コンテナ型仮想ノード | 短時間で作り直せる |
| 本番互換の挙動確認 | 仮想マシン型仮想ノード | OS 挙動やネットワークも本番同様 |
| 本番運用 | 物理ノード or クラウド VM | 性能・安定性が最優先 |
オブジェクトの種類(YAML)
Kubernetes オブジェクトを理解する | Kubernetes
YAML には最低以下を定義する。
| 必須フィールド | 説明 |
|---|---|
apiVersion |
どのバージョンの KubernetesAPI を利用してオブジェクトを作成するか |
kind |
どの種類のオブジェクトを作成するか |
metadata |
オブジェクトを一意に特定するための情報、文字列の name、UID、また任意の namespace が該当する |
spec |
オブジェクトの望ましい状態 |
オブジェクトの種類は何十種類もある。
最低限必要なのは Deployment で、これは Pod の管理をやってくれる。
外部からアクセスできるようにしたいなら追加で Service を定義する。