宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

イラストでわかる DockerとKubernetes

イラストでわかる DockerとKubernetesを読みました。
f:id:kattyan53:20210322140440p:plain

gihyo.jp

なぜ読んだのか

私は、Dockerの使い方はなんとなくわかりますが、仕組みについて全然知りません。kubernetesに関しては、何をやっているのかもよくわかりません。弊社SREさんに、この本をおすすめしていただいたので、読むことにしました!仕組みを知るにはどうやら、”コンテナ技術”というところに注目する必要があるようです。

対象読者

  • コンテナ技術に始めて触れる方
  • DockerとKubernetesの基本的な機能の概要を、コンテナの仕組みをふまえつつ とらえられるようになりたい方

この本で学べること

  • コンテナ技術の概要
  • Dockerとkubernetesの持つ基本的な機能
  • コンテナランタイム(コンテナ技術における最も基礎的なソフトウェア。「コンテナを作り出し管理すること」という役割がある)について

本の概要

第1章 コンテナ技術の概要

第1章では、「コンテナ技術」の概要について書かれています。

コンテナ技術とはその名から想像されるとおり、1つの共有されたOS上(ホストOS)で複数の独立したアプリケーションの実行環境を作成する技術です。

DockerとKubernetesはどちらも”コンテナ”に関するツールです。
Dockerは単一マシン上でコンテナ群を管理・コンテナイメージの作成・共有などに関するツールで、Kubernetesは、複数のマシンで構成される環境でのコンテナ管理に用いられるツールです。

コンテナには、

  • 軽量な実行環境
  • 高いポータビリティ(どんな環境でも同じように動く、コマンドなどの使い方が一緒)
  • 巨大なエコシステム(OSS化されており、バックにちゃんとした組織がある)

という利点があります。詳しくは本書をご覧ください。

第2章 Dockerの概要

2章では、Dockerのコンテナへの基本的な操作である「Build、Ship、Run」について、そしてコンテナのレイヤ構造・について書かれています。

Dockerは、単一のマシン上でのコンテナ群の管理や、コンテナイメージの作成、そしてそのイメージのチーム・組織間での共有など、コンテナにまつわる基本的なワークフローをサポートするツールです。

Build ... コンテナイメージの作成
Rub ... コンテナの実行
Ship ... レジストリを用いたコンテナの配布

一番最後には、Dockerのアーキテクチャの概要と、Dockerがコンテナの実行環境を作成するために用いる低レベルなコンテナランタイムである「OCIランタイム」の概要について述べられていましたが、私には難しかったです。笑

第3章 Kubernetesの概要

第3章では、Kubernetes の特徴、kubectlについて、基本的な機能について述べられています。

Kubernetes は、複数のマシンで構成される環境でのコンテナ管理に用いられる、「オーケストレーションエンジン」と呼ばれるツールです。

これもKubernetes 初学者の私には難しかったので、出てきた単語を出来るだけまとめます。

Kubernetesはステートレス/ステートフル/バッチ処理などの様々なデプロイ方針に対応できる」
ステートレス ... 書き込まれたデータをその終了とともに破棄し、それ自体に永続的なデータや長期的な状態を持たせない方針のこと。
ステートフル ... たとえばデータベースなどコンテナ自身の寿命よりも長期的な状態やデータを管理するアプケーションを実行すること。

クラスタ ... コンテナ群を実行するマシンの集合
ノード ... 各コンテナが実行されるマシン
ノードコンポーネント ... そのノード上のコンテナ群の実行管理やイメージの管理、通信の管理などを行う。Dockerなどのコンテナランタイムも含まれている。
コントロールプレーン ... Kubernetesクラスタ全体の管理を担うコンポーネント
リソース ... クラスタ全体の管理情報

Pod ... Kubernetes におけるもっとも基本的なデプロイ単位。複数のコンテナ群を一つにまとめたもの。
ラベル ... クラスタ上で稼働するPod群をグルーピングして扱えるようにしたもの

「Pod群をクラスタ上に配置するためにKubernetesがサポートする機能のうち基本的な6つのリソース」
Deployment ... Pod群を一定数維持しながらクラスタ上に展開するリソース。
StatefulSet ... ステートフルなPod管理に有用なリソース。ノード故障やスケールインによりPodが終了し、その後そのPodを再実行する場合にも、終了前の状態を引き継ぐように動作させることが可能。
DaemonSet ... ノード上でのログ収集やモニタリングなど、アプリケーションによってはノードと密接に関係し、各ノード上でいわゆるデーモンプロセスのように1台ずつ稼動させるのが適するデプロイで使われるリソース。(難)
JobとCronJob ... Podをジョブ的に単発に実行するときに有用なJob。
ConfigMapとSecret ... Podとして実行されるアプリケーションとその実行時に必要となる設定項目・秘匿情報とを独立に管理できるようにするリソース
Service ... Kubernetesクラスタ上でPod群へのサービスディスカバリを行う上で重要なリソースの1つ。Serviceを用いることで、あるサービスを提供する複数のPodに共通のIPアドレスを付与し、まさに1つの「サービス」のようにアクセスできるようになる。

コンテナランタイムとコンテナの標準仕様の概要

DockerやKubernetes上でコンテナを実行するとき、コンテナはどんなソフトウェアがどのようにして作り出しているのでしょうか。──その役割を担っているのは「コンテナランタイム」というソフトウェアです。コンテナランタイムは、Kubernetesのような上位のオーケストレータから指示を受け、マシン上でPodやコンテナの作成・管理を担います。

この文章しかわかりませんでした。笑

まとめ

Dockerは普段から使っているので、仕組みがわかってよかったです。
Kubernetesに関しては、その特徴やkubectl、いろんなデプロイ方法に対応できることがわかりました。何より、よく使われている用語が一気に学べてよかったです。
コンテナの話に関しては全体的に、私には難しすぎました。複雑なデプロイ環境を自分で作ったことがないので、「こんなデプロイ方法に対応してるんだよ!」と言われてもあんまりピンときませんでした。本が悪いわけではありません!!

この本は、「コンテナの仕組みをふまえつつDockerやKubernetesの仕組みを知りたい方」向けの本だったので、まずはDockerとKubernetesの使い方を別の本で学んで、自分でデプロイ環境を作ってみてから「なるほど、こういう仕組みで動いていたのかー」と納得できる本なのかなぁと思います。インフラの勉強の道のりはまだまだ長いです!!

gihyo.jp

ここまでお読みいただきありがとうございました!