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 を使っているが障害対応に苦手意識があるとき
- チームの新メンバーに「何から学べばいい?」と聞かれたとき