Kubernetes さわってみる
きっかけ
最近個人的に仕事でもそれ以外でも何かとよく名前を目にする Kubernetes。
最近 Docker とか Docker Compose とかはお気持ちがすこしわかってきた気がするけど、Kubernetes はなんもわからん。
事前知識は
- なんか宣言的にコンテナを管理するらしい yaml でいろいろ書くらしい?
- Pod とかいう単位で動くらしい? という
超テキトーな状態
ここらでいっかいチュートリアルでも触れておこうかなと思って、調べた過程をメモ
適当なメモなので、正確性は全く保証しない
とりあえず公式ドキュメント見てみる
Control Plane で制御して Node がワーカーなのねという適当な理解。
細かいとこはなんかコンポーネント多くてよくわからんなあという感じ
適当にググって出てきた Qiita 記事
図がわかりやすくて良い
kube-ctl で control plane 内の API サーバーと通信して指示して、control plane 内の他のコンポーネントがよしなにスケジューリングとかして pod を node 内にうまく配置してくれるのね
ちょっとだけ理解の解像度が上がった気がする。
そろそろ手を動かしたいな
もう一回公式に戻って Hello minikube やってみる
minikube というのを使うとローカルで kubernetes クラスタを動かせるらしい
とりあえず kubectl でこんなコマンド叩くのねというのはなんとなくわかったけど、中身の説明はほとんど無いので実際何やってるのかはあんまりわからない
公式のチュートリアル一覧を眺めていたら、Learn Kubernetes Basics というのがあった
こっちは結構丁寧に登場人物とかコマンドとか解説していてわかりやすい
Learn Kubernetes Basics を一通り読む & 実行して、現状の理解
- Kubernetes はクラスタの状態管理に使う
- 指示役の Control plane とワーカー役の Node がいる
- Control plane には外部と通信できる API サーバーがいて、kubectl とかで外から Control plane とやりとりできる
- Node では kubelet が動いていて、Control plane から指示を受け取ってコンテナを起動したり消したりする
- Deployment という単位でアプリのデプロイを指示する (
kubectl create deployment
)- なんのイメージを動かすかとか、いくつ Pod を割り当てるかとか指定する
- Pod はスケジューリングの最小単位。(密接に連携する) 複数のコンテナを含む場合もある。Pod に含まれるコンテナは常に一緒にスケジュールされる
- Control plane は deployment の内容をもとに Node を選んで Pod を実行させるよう割り当てる
- クラスタ内で動かしているアプリを外部に公開する際には service という単位をつくる (
kubectl expose
)- deployment をつくっただけだと
kubectl proxy
等を使わない限り外部からはアクセスできない - 同じ内容の Pod をまとめて service として公開して外から見えるアドレス・ポートを割り当て、クラスタ内でのロードバランシングとかもしてくれるみたい
- deployment をつくっただけだと
- Pod の数を増やす
kubectl scale
- Pod の数を増やしておいて順番にバージョンアップしたりすればダウンタイム無しのバージョンアップデートとかもできる
- クラスタの状態を見る
kubectl get|describe nods|pods|deployments|services|...
- get は簡易な表形式、describe で詳細な情報が見れる
今回のチュートリアルは kubectl
で操作してて yaml は出てこなかったけど、それはまた別のチュートリアルにあるかな?
今日はもう疲れたのでやらないけど、気が向いたらまたちょっと調べてみよう