コンテンツにスキップ

DevOps学習ロードマップ:KubernetesよりLinuxプロセスを先に理解すべき理由

概要

「Kubernetes を先に学ぼうとする人が多いが、まずプロセスとは何かを理解すべき」という DevOps 学習の順序についての主張。

詳細

正しい DevOps 学習ラダー

Step 1: Linux の基礎
  → インストール方法ではなく概念を理解する
  - プロセス(process)
  - シグナル(signals)
  - ファイルディスクリプタ(file descriptors)
  - cgroups(コンテナのリソース制限の土台)
  - namespaces(コンテナの分離の土台)

Step 2: ネットワークの基礎
  - TCP/IP、DNS、HTTP の仕組み
  - iptables、ポートフォワーディング

Step 3: Shell / スクリプティング
  - Bash スクリプト
  - プロセス管理(ps, kill, systemd)

Step 4: コンテナ(Docker)
  → cgroups / namespaces を知っていれば「なぜ動くか」がわかる

Step 5: オーケストレーション(Kubernetes)
  → コンテナを理解していれば「なぜ必要か」がわかる

なぜこの順番が重要か

Kubernetes から始めた場合:
  kubectl apply -f deployment.yaml → 動いた
  でも CrashLoopBackOff が起きたとき何もできない
  → "なぜ Pod が落ちているか" がわからない

Linux から始めた場合:
  Pod の中に exec で入って ps コマンドでプロセスを確認できる
  OOMKilled が出たら cgroups のメモリ制限とつなげて理解できる
  ネットワークの問題なら iptables / netstat でデバッグできる

Linux の必須概念(エンジニアとして知っておくべき)

プロセス:
  - PID 1 の重要性(Kubernetes の Pod 内で init として機能する)
  - SIGTERM / SIGKILL の違い(graceful shutdown に直結)
  - zombie プロセスとは何か

cgroups(Control Groups):
  - CPU・メモリ・I/O のリソース制限
  → Kubernetes の resources.limits の仕組みはこれ

namespaces:
  - PID namespace:コンテナ内のプロセスを分離
  - Network namespace:コンテナごとに独立した NIC を持つ
  - Mount namespace:コンテナのファイルシステムを分離
  → これが Docker / Kubernetes のコンテナ分離の本体

実践的な確認コマンド

# プロセスの確認
ps aux
pstree -p

# cgroups の確認
cat /sys/fs/cgroup/memory/memory.limit_in_bytes

# namespace の確認
ls -la /proc/$PID/ns/

# コンテナ内でデバッグ
kubectl exec -it <pod> -- /bin/sh

なぜ重要か / いつ使うか

  • DevOps・インフラエンジニアへのキャリアチェンジを考えているとき
  • Kubernetes を使っているが障害対応に苦手意識があるとき
  • チームの新メンバーに「何から学べばいい?」と聞かれたとき