Open7

Kubernetes さわってみる

sankantsusankantsu

きっかけ

最近個人的に仕事でもそれ以外でも何かとよく名前を目にする Kubernetes。
最近 Docker とか Docker Compose とかはお気持ちがすこしわかってきた気がするけど、Kubernetes はなんもわからん。

事前知識は

  • なんか宣言的にコンテナを管理するらしい yaml でいろいろ書くらしい?
  • Pod とかいう単位で動くらしい? という

超テキトーな状態

ここらでいっかいチュートリアルでも触れておこうかなと思って、調べた過程をメモ

適当なメモなので、正確性は全く保証しない

sankantsusankantsu

適当にググって出てきた Qiita 記事

https://qiita.com/tadashiro_ninomiya/items/6e6fea807b2a16732b5b

図がわかりやすくて良い

kube-ctl で control plane 内の API サーバーと通信して指示して、control plane 内の他のコンポーネントがよしなにスケジューリングとかして pod を node 内にうまく配置してくれるのね

ちょっとだけ理解の解像度が上がった気がする。

そろそろ手を動かしたいな

sankantsusankantsu

もう一回公式に戻って Hello minikube やってみる

https://kubernetes.io/docs/tutorials/hello-minikube/

minikube というのを使うとローカルで kubernetes クラスタを動かせるらしい

とりあえず kubectl でこんなコマンド叩くのねというのはなんとなくわかったけど、中身の説明はほとんど無いので実際何やってるのかはあんまりわからない

sankantsusankantsu

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 として公開して外から見えるアドレス・ポートを割り当て、クラスタ内でのロードバランシングとかもしてくれるみたい
  • Pod の数を増やす kubectl scale
    • Pod の数を増やしておいて順番にバージョンアップしたりすればダウンタイム無しのバージョンアップデートとかもできる
  • クラスタの状態を見る kubectl get|describe nods|pods|deployments|services|...
    • get は簡易な表形式、describe で詳細な情報が見れる
sankantsusankantsu

今回のチュートリアルは kubectl で操作してて yaml は出てこなかったけど、それはまた別のチュートリアルにあるかな?

今日はもう疲れたのでやらないけど、気が向いたらまたちょっと調べてみよう