コンテンツにスキップ

Kubernetes の基本知識

Kubernetes とは

Kubernetes は複数のマシンにまたがってコンテナを管理するツールである。

Docker との違い

Docker はイメージを作成したり実行したりする。

Kubernetes はイメージをもとにコンテナを実行する。複数のマシンにまたがって実行できる。

用語

uml diagram

ツール

ツールのインストール | Kubernetes

kubectl

kubectl は Kubernetes クラスターに対してコマンドを実行できるツールである。

1
2
$ sudo snap install kubectl --classic
$ kubectl version --client

Minikube

Minikube

kubelet

コンテナランタイム

Kubernetes はデフォルトでコンテナランタイムの containerd を使っているらしい。Docker も内部で containerd を使っている。

マルチノード

ノードは仮想か物理か選ぶことになる。

項目 物理ノード 仮想ノード
パフォーマンス 高い やや低い (仮想化オーバーヘッドがある)
スケーラビリティ 低い 高い (VM をすぐ追加可能)
運用・管理 手間がかかる 柔軟で簡単 (スナップショット、テンプレートを活用できる)
コスト 高い (ハード購入が必要) 低め~柔軟
柔軟性 低い 高い (リソース調整できる)

その他、仮想ノードは物理ノードと比べて以下のような違いがある。

  • 作り直しが簡単
  • CPU やメモリの配分が簡単
  • ネットワーク周りの挙動が微妙に違う

仮想ノードについてはさらに以下の選択肢がある。

  1. Kind や Minikube などの Kubernetes 処理系でノードを作成する (以下コンテナ型仮想ノードと呼ぶ)
  2. 仮想マシンをいくつか立ててその中にノードを作成する (以下仮想マシン型仮想ノードと呼ぶ)

前者はノードがコンテナとして動く。後者はノードが OS レベルで動く。

uml diagram

項目 仮想マシン型仮想ノード コンテナ型仮想ノード 物理ノード
ノードの正体 仮想マシン(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 を定義する。