タダです。
Software Designの2018年3月号でKubernetesの入門記事が載っていたので、読んだ内容をまとめていきます。
Kubernetesの特徴
- Kubernetesはコンテナ化されたアプリケーションのデプロイ、設定、管理を自動化するOSS(コンテナオーケストレーションツール)
- Kubernetesの特徴として4つある
- Kubernetesの仕組みについて、⑴Kubernetesのオブジェクト、(2)アーキテクチャと登場人物の観点で整理する
- Kubernetesオブジェクト(VM、永続ストーレジ、ロードバランサーなどをアプリケーション志向に抽象化したもの)
- Podは、Kubernetesにおけるデプロイの最小単位(ネットワークとボリュームをまとめたグループ)。実体はjsonまたはYAML。
- Deploymentは、Podの定義をもとに指定されたPodのレプリカの数に実行されているPodの数が足りなければPodを作成する
- Serviceは、Podの集合に対するアクセスをL4ロードバランスする機能を提供するオブジェクト
- Kubernetesオブジェクト(VM、永続ストーレジ、ロードバランサーなどをアプリケーション志向に抽象化したもの)
- 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はサーバの死活監視やリソースの逼迫の監視を自身で行う
アプリケーションの課題
- Kubernetesは言語とランタイム、ライブラリをまとめて1つのイメージ化するため、ランタイムとライブラリの依存関係が内包されている
- 再現性の高いデプロイが可能になる
- サービスディスカバリによりアプリケーションごとに接続情報(IP/ポート番号など)をもてるため、複数環境を簡単に作れる
- Kubernetesはアプリケーションの定義としてヘルスチェックが設定可能で、問題があれば自動で再起動が可能
- minikubeというツールによるローカル環境での確認が可能
Kubernetesをローカルで動かす
- kubesprayを使ってローカルでKubernetesを動かす
※実際の動作させた結果は別途アップします
以上がまとめになります。