Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Kubernetesとは

Kubernetesとは

なぜ必要となってきたか

今やアプリにおいてコンテナ化は必須!

  • 軽量・可搬性
  • リソースを無駄なく使える

その流れにおいて、実際の環境では、

  • 同じ設定のコンテナを複数のサーバで起動
  • 通信を複数のコンテナに負担分散
  • サーバが落ちたらコンテナの他サーバを起動し直す(冗長性)
  • オートスケール

などを考える必要があり、とても人間が管理することはできない!!

そこで、コンテナオーケストレーション(大量のコンテナ管理)やクラスタ管理(大量のサーバ管理)を行なってくれるものが必要となった。それがKubernetes

クラスタ

複数のコンピュータを結合して協調動作させるシステムのこと

デメリット?

  • Nodeの障害自体は復旧したい
  • k8s自体が複雑

基本的な考え方

  • 宣言的設定:Declarative Configulation

    • あるべき状態を記述する設定方法
    • 対象の状態に関わらず、あるべき姿に制御しようとする
    • ついになる単語は命令的
      • 命令的が”動作”を指定するのに対し、宣言的は”状態”を指定する
  • 調停ループ:Reconciliation Loop

    • 宣言的設定を実現するための仕組み
    • 差分を検知し、それをゼロにするべく動いている
  • 自己回復:Self-healing

    • 宣言的設定と調停ループによってもたらされる特性

実際にどう実現されるか

部分

  • Pod

    • k8sでの管理上最も根源的な単位
    • 実態は同一のIPアドレスが付与されている
    • 内部のコンテナが以上終了した場合、再起動する
  • Volume

    • Pod内のコンテナで共有されるディスク領域
  • Master

  • Node

    • 動かすアプリケーション・コンテナ
    • Masterからの命令を受け取り、その通りにpodを設定する

概念的なもの

  • Resource(Object)
    • k8sが管理する概念
    • Podやvolumeは基本的Resourceの1つ
  • Controller
    • Resourceを管理するためのResource

Resource詳細

  • ConfigMap/Secret
    • 主にPodに対する設定値を管理する
  • ReplicaSet
    • Podの数を一定に保つ
  • Deployment
    • 複数のReplicaSetを用い、ダウンタイムを最小化してアプリケーションの更新を行う

注意点

  • 1コンテナ1プロセス
  • 環境変数で環境差分を吸収する
  • 状態をコンテナ内部に持たせない
  • ログを標準出力に流す
    • ファイルに吐くとステートフルになってしまう...
    • 暗黙の了解?

これから

ネットワークなどは飛ばしてしまいました。。。

いつか実装などもできたらいいなと思います