Kubernetes速修コース(案)

Kubernetes the hard way がいくらなんでもハードル高すぎてやる意欲が出ないので、最低限これだけ試せばKubernetesの公式文書や世の中の実装非依存な説明が具体的な実装において何を意味しているかが判るという観点で研修コースのシラバスを作ってみた。なおLinuxについてはネットワーク周り含め基礎的な理解・スキルは前提

環境構築

(同時に複数人に説明する場合はあらかじめ環境を用意しておく)

何でどう作ってもいいのですが、個人で試す場合メモリもあんまり潤沢にないので

  1. ESXiなりVirtualBoxなりを用意
  2. AlpineVMを建てて各VMにDockerを入れる
    ※軽さを最重視した選択ですがコンテナのベースとしての使い勝手は良くないので、普通に使うならUbuntuとかのほうがいい、という意見を目にしました。なおRHEL8/CentOS8はDockerをサポートしないので非推奨です
  3. k3s でシングルマスタ構成のKubernetesクラスタを作る
  4. 以後、kubectlとcurlとyq/jqで操作をしていく

api-server篇

  1. kubectl api-resources
  2. Kubernetesのエンドポイントにcurlでリクエストを投げて各resourceに対応するGET/PUT/DELETE/POST等があることを確認する
  3. watchとwebhookどうしよう)
  4. etcdの中を見てみる
    ※k3sだとsqlite3でした。。具体的にどこ見ればいいか調べます

CRI(Docker)/kubelet篇

Docker以外のCRI(podman/CRI-OとかVMベースのやつ)だと様子がわからなくて死ぬ

  1. docker ps --no-trunc
  2. ps -efwww
  3. sudo ls /var/lib/docker/containers
  4. df
  5. ip -brief l
  6. ip -brief a
  7. docker exec <container> ip -brief l
  8. docker exec <container> ip -brief a

kube-proxy篇

usermode proxy誰も使ってないし、ipvsとかは必要な人が確認すればいい。nftables対応マダー?

  1. kubectl get pods --all-namespaces
  2. kubectl get services --all-namespaces
  3. iptables -t nat -L
  4. (上級者限定)https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/iptables/proxier.go

CNI篇(Flannel?Calico?)

正直これは悩む。Flannelの成立事情とか語りだしたらほんときりがない

  1. ls -R /etc/cni
  2. ls -R /opt/cni/bin
  3. ls -R /var/lib/cni
  4. kubectl api-resources
  5. ovs-vsctl?

Service/Ingress/Istio/CSIまわり

シラバスが思いつかない。実用上は絶対に要る知識なんだけどアーキテクチャ的にはかなりどうでもいいので別の研修にしたほうがいいかなあ。。

超上級者向け補講

Kubernetesの神髄といえる知識がここにあるのでわかる人は読んで人類に貢献してください。言語処理系とかWindowsC++でATLを使ってCOMコンポーネントとか開発できるレベルの人以外は読んでも知識として活かせないです(書いてる本人含め)