継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

『Dockerをさらに便利に使いたい! Kubernetes入門』を読んだ

タダです。

Software Designの2018年3月号でKubernetesの入門記事が載っていたので、読んだ内容をまとめていきます。

gihyo.jp

Kubernetesの特徴

  • Kubernetesはコンテナ化されたアプリケーションのデプロイ、設定、管理を自動化するOSS(コンテナオーケストレーションツール)
  • Kubernetesの特徴として4つある
    • 宣言的設定(デプロイした結果のアプリの望ましい状態を定義する)により冪等性を担保
    • 自己回復機能(セルフヒーリング)
    • VMを抽象化して、管理するサーバーを気にする必要がなくなる
      • サーバを1つの大きなリソースプール(クラスタ)として管理する
    • ベンダーロックインされない
  • Kubernetesの仕組みについて、⑴Kubernetesのオブジェクト、(2)アーキテクチャと登場人物の観点で整理する
    • Kubernetesオブジェクト(VM、永続ストーレジ、ロードバランサーなどをアプリケーション志向に抽象化したもの)
      • Podは、Kubernetesにおけるデプロイの最小単位(ネットワークとボリュームをまとめたグループ)。実体はjsonまたはYAML
      • Deploymentは、Podの定義をもとに指定されたPodのレプリカの数に実行されているPodの数が足りなければPodを作成する
      • Serviceは、Podの集合に対するアクセスをL4ロードバランスする機能を提供するオブジェクト
        • ClusterIPというクラスタ内でのみ有効な仮想的なIPあどれすをもって、それに対するアクセスはラベルセレクタと呼ばれるラベルに対するクエリでグルーピングされたPodの集合に分散する
  • Kubernetesのアーキテクチャと登場人物
    • Kubernetesはマスターコンポーネントとノードコンポーネントで構成される
    • kube-apiserverは、KubernetesのAPI(REST、CRUD、認証認可を行う)
      • ステートレスで水平スケールさせる
    • etcdは、CP型の分散キーバリューストア
      • 唯一のデータストアで、クラスタのすべての情報はetcdに保存される
    • kube-schedulerは、Podの適切なスケジューリングを行う
    • kube-controller-managerは、Kubernetesオブジェクトの更新をトリガに、クラスタの状態を望ましい状態に一致させるDeploymentオブジェクトなどのビジネスロジックを実行する
    • kubeletは、インストールされている自身のノードへのPodのスケジューリングを監視してコンテナランタイムを操作する
    • kube-proxyは、Serviceオブジェクトに記述されたネットワークルールを実現するためのパケット転送をそうする
    • コンテナランタイムは、kubeletから操作され、コンテナの取得と実行を行う

Kubernetesのメリット

インフラの課題

  • マイクロサービスの管理のデプロイが楽になる
  • サーバの管理コストの削減(コンテナ技術でサーバとアプリケーションを分離する)
  • クラウド上にKubernetesを構築する場合、IaaSより上のレイヤーで構築するためポータビリティがある
  • Kubernetesはアプリケーションを分離して管理するため、1つのサーバ上に複数のアプリを稼働させられるからリソース効率がよい
  • Kubernetesはサーバの死活監視やリソースの逼迫の監視を自身で行う
    • サーバ1台1台を管理することから解放され、クラスタ全体のリソースもクラスタオートスケーラで柔軟に行う

アプリケーションの課題

  • Kubernetesは言語とランタイム、ライブラリをまとめて1つのイメージ化するため、ランタイムとライブラリの依存関係が内包されている
    • 再現性の高いデプロイが可能になる
  • サービスディスカバリによりアプリケーションごとに接続情報(IP/ポート番号など)をもてるため、複数環境を簡単に作れる
  • Kubernetesはアプリケーションの定義としてヘルスチェックが設定可能で、問題があれば自動で再起動が可能
  • minikubeというツールによるローカル環境での確認が可能

Kubernetesをローカルで動かす

  • kubesprayを使ってローカルでKubernetesを動かす

※実際の動作させた結果は別途アップします

以上がまとめになります。