はじめに
DockerとKubernetesの勉強を最近始めたのですが知らない単語が結構ある上に、知らない単語を調べ上げるとまた知らない単語が出てくるというループに陥ったので、ここで備忘録として記録しておきます。
単語帳
基本用語
Dockerイメージ
アプリケーションの実行に必要なインフラ設定とビルド済みの実行モジュールが一つにまとまったインストールイメージ
Dockerfile
アプリケーションの実行モジュールと実行に必要なインフラの構成情報を記述したファイル
→ これをもとにDockerイメージが作成される
→ Dockerイメージは異なる環境でも問題なく動く
→ テスト済みの安全なイメージを使ってアップデートするので安心
→ Dockerfileさえあれば基本的にはいつでも同じイメージを生成可能
→ 実行環境のインフラを直接変更するのではなく、大元のDockerfileを修正して新たにビルドしたDockerイメージで実行環境を入れ替えることが可能(Immutable Infrastructure)
コンテナ
ホストOS上に論理的な区画(コンテナ)を作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションなどを1つにまとめ、あたかも個別のサーバーのように使うことができるようにしたもの
コンテナオーケストレーションツール
コンテナを統合管理できるツール
マルチホストで構成された本番環境をクラスタ構成で稼働させる場合、以下が必要:
- コンテナの起動/停止
- ホスト間のネットワーク接続
- ストレージの管理
- コンテナをどのホストで稼働させるかなどのスケジューリング機能
コンテナオーケストレーションツールはこれらの機能を備えている!
Docker Engine, Apache Mesos, Kubernetesなど
クラスタリング
複数のサーバを束ねて、利用者や外部のシステムに対して全体で一台のコンピュータであるかのようにみせる技術
ローリングアップデート
ソフトウェアの更新、入れ替えの方法の一つで、システムを完全には停止させずに更新を行うこと
オーバーヘッド
ある処理を行うために間接的にかかってしまうコスト
可搬性(ポータビリティ)
一度作ってしまえばどこででも動くソフトウェアの特性
Immutable Infrastructure(イミュータブル・インフラストラクチャ)
実行環境のインフラを直接変更するのではなく、大元のDockerfileを修正して新たにビルドしたDockerイメージで実行環境を入れ替えるインフラ管理方法
プロビジョニングツール
インストールや環境設定をコードで定義して自動化するためのツール
例:
-
OSの起動を自動化するツール(Kickstart, Vagrant)
→ 英名:Bootstrapping -
OSやミドルウェアの設定を自動化するツール(Chef, Ansible)
→ 英名:Configuration -
複数サーバの管理を自動化するツール(Serf, Capistrano, Kubernetes)
→ 英名:Orchestration
ヘルスチェック
現用機で障害が発生したことを検知する仕組み
例:
- ICMP監視(pingなどの応答を確認)
- ポート監視(Webサービスであれば、80番ポートからの応答を確認)
- サービス監視(HTTP通信を確認する場合、特定のページが正しく表示されるかを確認)
ツール名
Jenkins
単体テストを自動化するためのインテグレーションツール
Docker Hub
公式のDockerレジストリ
Ubuntu, CentOSなどのLinuxディストリビューションの基本機能を提供するベースイメージが配布されている
Docker Machine
Dockerの実行環境を自動構築するサービス
Docker Swarm
複数のコンテナを統合管理するサービス
Docker Engine
コンテナオーケストレーションツールのひとつ
SwarmモードをDockerで使うと、複数のコンテナをマルチホスト環境で動作させ、それらのコンテナをまとめて一つのコマンドで操作できる
Apache Mesos
コンテナオーケストレーションツールのひとつ
長時間にわたって動作し続けるアプリケーションの起動やモニタリングが可能
Kubernetes
コンテナオーケストレーションツールのひとつ
Google Kubernetes Engine(以前はGoogle Container Engine)で使える
Google Container Registry
DockerイメージをGCPのプロジェクト内で管理できるプライベートなレジストリサービス
Google Cloud Datasore
複数のサーバにデータを分散して保持することで、大量データの保存に対応したNoSQLデータベースサービス
→ NoSQL:Not only SQL、非RDBMSの総称
→ RDBMS:簡単に言うと、「表」で表すことができるデータベース
RDBMSとNoSQLについては下のリンクがわかりやすいかも。
Flannel
ノード間の内部ネットワークを簡単に構成してくれるツール
Google Kubernetes Engineの特長についての用語
フルマネージド
Kubernetesの環境を自動で構築/管理する機能を提供
Dockerコンテナに対する高い可用性を確保して安全に管理することができる
→ 可用性:システムが継続して稼働できる能力のこと
プライベートなContainer Registryの提供
インターネットに公開できない実行ファイルもプライベートな環境に保存することが可能
スケーラブル
アプリケーションの要求の変化に応じて、コンテナに割り当てられるクラスターソースやコンテナクラスタのサイズを調整することが可能
Kubernetesに関する用語集
マスターサーバ(Kubernetes Master)
Kubernetesクラスタ内のコンテナを操作するためのサーバ
- kubectlコマンドを使ってクラスタを構成したりリソースを操作したりするとき、マスターサーバがコマンドからのリクエストを受け取って処理を行う
ノード(Node)
実際にDockerコンテナを動作させるサーバ
- ノードの管理はマスターサーバが行う
- ノードを複数用意して、クラスタを構成
バックエンドデータベース(etcd)
etcd(/etc distributed の略)と呼ばれるKey-Value Store(KVS)を使って、クラスタの構成情報をまとめて管理する
Key-Value Store:
データ管理システムの種類の一つで、保存したいデータ(value:値)に対し、対応する一意の標識(key:キー)を設定し、これらをペアで格納する方式
レジストリサーバ
クラスタ内で起動するDockerコンテナのもとになるDockerイメージを管理するためのサーバ
Pod(ポッド)
仮想NIC(プライベートIP)を共有するコンテナ群をまとめたものをPodと呼ぶ
→ Pod内のコンテナは同一のノード上に配備される
NIC: Network Interface Card
Replication Controller(レプリケーションコントローラ)
同一構成のPodが指定の数だけ起動している状態を作り出すコントローラ
→ Podの起動するノードはスケジューラが自動で決定
Service(サービス)
起動中のPodに対してServiceを定義することによって外部からアクセス可能なIPアドレスが用意される
→ Serviceに対するIPアドレス+ポート番号にアクセスすると、複数のPodに対する負荷分散が行われる
最後に
実際に使ってみないと理解は深まらないと思うので、k8s(Kubernetes)関連の仕事をいただけるようにアピールします。
参考:
プログラマのためのGoogle Cloud Platform入門
https://www.amazon.co.jp/dp/B0721JNVGT/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1