redhat社によるIntroduction to docker,kubernetes and RedHat openshiftという研修を受けてきたので内容のまとめ
研修概要
研修環境ではクローズドな環境でopenshiftが構築されており、
ハンズオン形式で手順に沿ってコマンドをうっていくと
docker,kubernetes,openshiftの基本について確認できる研修でした
以下研修で学んだことをまとめていきます。
コンテナ
プロセスを仮想OSっぽく動かす技術
OSの上にコンテナ基盤が動作し、その上でコンテナプロセスが起動する
コンテナプロセスにはNICと仮想DISKが紐付けられ、普通のOSのようにログインもできる
仮想OSから無駄な機能を切り離し、必要な機能だけ残して取り回しを良くした感じ
物理環境や仮想OSに比べて以下の利点がある
- ライブラリの更新が他コンテナ、基盤OSに影響を与えない
- 仮想OSに比べオーバヘッドが少ない
- コンテナイメージのエコシステムがあり、目的にあったコンテナイメージ(webコンテナ、dbコンテナ)が公開されているリポジトリからダウンロードしてすぐに利用することができる
Docker
Docker社が開発したコンテナエンジン
コンテナエンジンのデファクトスタンダード
アーキテクチャ
DockerサーバはOS上でデーモンとして実行される
Dockerサーバに対してRESTful APIを発行することでコンテナイメージのビルド、起動、ダウンロードを行える
RESTful APIを解析すれば独自のツールをつくれる
それを行ってるのがkubernetesやopenshift
コンテナとLinuxカーネル
以下のカーネル標準機能を用い、コンテナプロセスがアクセスできるリソースを制限し、コンテナを形成する
- 名前空間
- 制御グループ
- SELinux
Dockerコンテナイメージ
アプリケーションライブラリとアプリケーションを含むランタイム環境から構成される、読み取り専用のテンプレート
コンテナの作成に使用される
イメージは作成、更新、ダウンロードしてすぐに使用できる
Dockerコンテナイメージは複数の層で構成される
コンテナを変更する際は既存の層を変更することなく、新しい層が追加される
追加された層は、変更を実施した実施中のコンテナから新規イメージを生成しない限り破棄される
新規イメージの作成方法
作成方法は以下の2つ
- 実行中のコンテナに変更を行い、変更したコンテナからコンテナイメージを作成する
- Dockerfileからビルドする
コンテナを直接変更する手段を取るとレイヤが増加し、コンテナイメージのサイズが大きくなってしまうため、非推奨とされる
Dockerfileではレイヤ数をコントロールできるため、こちらが推奨
kubernetes
複数のノードによってクラスタを構成し、その上でコンテナを動作させるためのマネジメントツール
分散キーバリューストアのEtcdにより構成情報と状態情報を保存し、コンテナやその他リソースを管理する
docker
構成要素
マスター
kubernetesクラスタ内の作業負荷と通信を管理するサーバー
ノード
kubernetesクラスタを構成するサーバー
ラベル
任意のkubernetesリソースに割り当てることができるキー/値のペア
ポッド
リソースを共有するコンテナの集合
サービス
ポッドプールにアクセスするためのIPとポートの組み合わせ
レプリケーションコントローラ
ポッドの水平方向へのスケールをコントロールする定義
AWSでいうAuto Scailing のルール
永続ボリューム(PV)
ポッドに割り当てるネットワークストレージ
コンテナは停止すると削除されるため、永続データはポッドに割り当てた永続ボリュームに保存する
OpenShift
RedHat社製
Docker + kubernetesのコンテナインフラストラクチャに機能を追加し、本番PaaSプラットフォームを提供する
WebUIやCI/CDのための機能がkubernetesに追加される
構成要素
デプロイ設定
複数のポッドをデプロイするための設定
ローリングアップデートなどを制御する
ビルド設定
Gitサーバ上のソースコードからコンテナをビルドするための設定
デプロイ設定と合わせてCI/CDを提供する
ルート
OpenShiftで構成されるアプリケーションに対してアクセスするためのアクセスポイントDNSホスト名
ネットワーキング
OpenShiftではネットワークがSDNで制御され、ポッドから外へのアクセスやポッドの外からのアクセスがポッドの内部のコンテナが増減しても割り当てた静的なIPアドレスでアクセスできる
ハンズオン
docker,kubernetes,openshiftの基本事項をおさえたあと
ハンズオンで実際にコマンドを打たせてもらえました
RedHat社の研修でしたが、dockerやkubernetesの操作についても基本から実施でき、
dockerに触ったことがない人がイメージを掴むにはとてもよい研修でした