傀儡子えんじにあ の ぶろぐ

開発や自作PCなんかのやつをのせるやつ

Kubernetesのおべんきょう

いまさらながらKubernetesのお勉強始めました
手始めに、入門Kubernetesを読んでみたので今のとこの自分の理解を忘備録がてらまとめてみます
まあ細かいこと書くのは後に回してとりあえず概要だけですが

Kubernetes(k8s)とは

Dockerなどのコンテナランタイムを用いて、サービスのデプロイ、スケールや運用などを自動化してくれるやつ
もとはGoogleによって開発されており、現在コンテナオーケストレーションツールはほぼk8s一強状態
すごくつよい

主な機能

  1. ロールアウト
    アプリの新バージョンリリース時、一部Podだけアップデートさせることを全体が新バージョンになるまで繰り返す
    Podというのはk8sでの最小単位で、1つ以上のコンテナの集合体
    これならダウンタイムなしにデプロイ可能 おんなじ感じでロールバックもできるよ

  2. スケール
    アプリを提供しているPodの数を増減することで、水平スケーリングが可能
    Podへの割り当てリソースを増減する垂直スケールは未実装 いちおう提供されてる? github.com Pod単位でスケーリングを行うため、1サービス1サーバーというような提供の仕方よりも効率的にマシンのリソースを使用可能

  3. 自動回復
    各Podなどのヘルスチェックを行い、正常に動作していないものを再起動させたりすることが可能
    ヘルスチェックも様々な方法で行うことができ高い汎用性を持ってる
    この機能により高い可用性を誇ってるすごい

アーキテクチャ

まだまだ理解が追い付いてないので細かい部分をはしょった概要図でお茶を濁します

f:id:suzkor:20190815004705p:plain
Kubernetesクラスタ 概要図

  • Cluster
    k8sの最大単位
    複数のnodeからなっていて、これで1つのシステムとして動作する

  • Node
    クラスタを構成するマシンで、MasterとWorkerの2種類が存在

  • Master Node
    クラスタを管理するためのNode
    • etcd
      k8sのリソースの情報を保存しておくKey-Value Store
      これを使ってリソースの永続化を行っている
    • apiserver
      etcdに対しての読み書き操作を行うAPIを提供
      他のコンポーネントは直接ではなく、ここを通してetcdを参照する
      また、ユーザーからのコマンドであるkubeletも同様にこれを通しetcdを参照、変更する
      このユーザーのコマンドもシステムの動作も同じ方法で行うのはk8sの特徴の1つ
      これによって高い拡張性が確保できる
    • scheduler
      各NodeのリソースやPodの情報などを参照し、作成したPodをどのNodeにバインドするかを決定する
    • controller-manager
      そのほかのリソースを管理するためのコントローラのマネージャ
  • Worker Node
    • kubelet
      Node内のPodやそのコンテナ、コンテナイメージなんかの管理を担当
    • proxy
      クラスタ内での通信は仮想IPであるClusterIPを使って行っている
      サービスに対してのロードバランスをホストのiptablesを動的に変更することで行っている

まとめ

とりあえず現状の理解ではこういうものだと思ってます
たぶん間違ってるとことか言葉が足りないとことか多々あるとは思うけどそこは追々