AWSコンテナ設計・構築本格入門
https://amzn.asia/d/2lHa0ok
コンテナとは
仮想化の一種
他のプロセスとは隔離されている
仮想化との違いはゲストOSでカーネルを占有しない
コンテナはOSとカーネルは共有し、プロセスを分離する
コンテナ利用のメリット
環境依存から解放される
アプリケーションの稼働に必要となるランタイム・パッケージを1つのパッケージとして含めることができる
依存関係をコンテナ内で完結できる
本番・ステージング・開発で依存関係を含めてパッケージをリリースすることで、各環境で違いが起きない
=ステージングが本番同等の環境でないようなことが起こらない
リソース効率
仮想化
仮想マシンレベルでリソースを分離
ゲストOS単位でリソースが必要
単にPC上に別のOSをインストールしているのと同じ
コンテナ
プロセスレベルで分離
ゲストOSやハードウェアのエミュレートが不要
アプリケーションの起動が高速
Docker
Docker File
イメージを構築するための設定ファイル
イメージ
コンテナを実行するために必要なビルド済みパッケージ
タグ
イメージに割り当てるラベル
レジストリ
npmレジストリとかbrew/yumレジストリと同じ感じ
ここにイメージを保管できる
コンテナ
イメージから生成された実行主体
オーケストレーター
コンテナ運用の課題
多数のコンテナを稼働させるには、単一ホストでなく複数ホストから構成されたクラスター構成を扱うことになる
クラスターを前提としたリクエストの負荷分散・ダウンタイムを最小化するためのアップデート方法を考えなければならない
障害の検知・コンテナの復旧等トラベルシュート
オーケストレーターが解決すること
#オーケストレーターとは
コンテナ
配置管理
新規コンテナを起動させた場合、ホストへの負荷が均等になるようにしたい
特定ホストがダウンした場合、復旧が必要
正常稼働しているホスト野中から、どれくらいのコンテナを稼働させるべきか
これらを自動で制御できるのがオーケストレーター
負荷分散
オーケストレーター自身が持つ機能やロードバランサを併用すれば、処理料に応じてリクエストを分散させることができる
状態監視と自動復旧
異常検知したら切り離したり、自動復旧でコンテナ数を維持することができる
コンテナのデプロイ
アプリケーションを新しいバージョンにアップデートする時、すでに起動しているコンテナを停止しつつ、新しいコンテナに切り替えるのを自動でやってくれる
デファクト
K8S
コンテナ技術を導入するために考慮すべきこと
ECS
オートスケール
考慮すべきこと
オンプレとはそもそも違うので受け入れる
The Twelve-Factor App
コントロールプレーン
データプレーン
https://scrapbox.io/files/675867ba0fd9c5e9501d95cc.png