初心者でも Kubernetes のうれしいことが分かる-Pod

オウルです。

Kubernetes はコンテナオーケストレーションプラットフォームです。Pod は、Kubernetes クラスターでアプリケーションを動作させる(デプロイする)最小単位になります。それでは、初心者(オウル)目線で分かりやすく Pod を前編・後編に分けて説明したいと思います。今回は前編です。

Kuberbetes における Pod

冒頭でも言いましたが、Kubernetes 上の最小単位はコンテナではなく、Pod になります。どういうことかというと下がイメージになります。

Pod から見た時のコンテナのイメージ図

Pod 内の各コンテナはそれぞれの cgroup 上で動作しますが、Linuxネームスペースの多くを共有します。ん?cgroup?Linuxネームスペース?となった方は、「初心者でもDockerのうれしいことが分かってしまう!!」を見てください。

つまり、

同じ Pod 内のアプリケーションは、同じIPアドレスとポート(ネットワークネームスペース)を使用し、同じホスト名(UTSネームスペース)を持ち、System VIPC や POSIX メッセージキューを経由したネイティブなプロセス間通信チャネル(IPC ネームスペース)を使って通信できます。

『入門 Kuberbetes』Keley Highttower/Brendan Burns/Joe Beda(著) 松浦 隼人(訳)より引用

同じIPアドレスとポートという点での具体例を挙げると、ローカルのパソコンに、IIS と Apache のWebサーバが同居している場合は、どちらか一方しか 80 ポートを使用できませんよね。Pod 内のコンテナ同士はネットワーク的に隔離されていません。もちろん別 Pod とは分離されています。

イント
・Kubernetes において Pod は最小単位のオブジェクトモデル
・Pod内 とコンテナとの関係
1:1(単一のコンテナーを実行する Pod )
or
1:n(連携する必要がある複数のコンテナーを実行する Pod )

・同じ Pod 内のアプリケーションは、同じIPアドレスとポート(ネットワークネームスペース)を使用

Pod のデザインパターン

パターン 役割
サイドカーパターン メインコンテナに機能を追加する
アンバサダーパターン 外部システムとのやり取りの代理を行う
アダプターパターン 外部からのアクセスのインターフェースとなる
『Kubernetes完全ガイド』青山 真也 (著)より引用

デザインパターンはプログラミングの経験がある人であればお馴染みですね。有名な書籍だと ↓ が有名かと思います。個人的には ”Chain of Responsibility” が好きです。

上記のパターンの中でサイドカーパターンについて少し紹介します。

サイドカーパターン

代表的な例として、”Web アプリケーションコンテナ” と ”Git コンテナ” です。Git リポジトリとローカルストレージ(下の図の共有ストレージ)を同期、We アプリケーションコンテナは同期のとれたローカルストレージのファイルを参照するといったパターンです。

Pod マニフェストでデプロイ

Pod 構成で一番多いのは、Pod:コンテナ = 1:1 です。ではこれから、その構成で、Pod の理解を深めるのに有効な kuard をデプロイしてみます(kuard は Sevice オブジェクトのサービスディスカバリーの理解にも有効なアプリケーションです)

マニフェスト作成

便利な無料エディタ

僕はマニフェストファイル作成するのに、Microsoftが提供するオープンソースのソースコードエディタの Visual Studio Code(無償)を使用しています。Visual Studio Code を使用する場合は、Visual Studio Marketplaceで提供されている ”Kubernetes Support” のインストールをお勧めします。なぜかというと、YAML は構造化されたデータを主にインデントを使って構造を表現するため、入力間違いが多くなってしまいがちですが、コード スニペットでより正確に作成できるからです。

デプロイ

Pod の一覧

デプロイした kuard が動作しているか確認します。

「STATUS」を確認すると「Running」になっています。問題なくデプロイできたようです。

イント

Pod の「STATUS」には「Running」以外にもあります。正常にデプロイできた時は良いのですが、自分で作成したアプロケーションをデプロイする時はエラーが発生することがあります。「STATUS」を確認することで、”どこで” エラーが発生しているのかを見つけるヒントになります。

僕は、コンテナが起動しない、しないって調査をしている時に「STATUS」を見ると「Completed」だったっていうオチがありました。下記のURLに各「STATUS」の説明があります。

Pod の詳細情報

デプロイした Pod の詳細情報を確認することができます。

Pod の詳細情報が表示されました。Pod の基本情報(デプロイした名前空間、ノードなど)に続いて、Pod 内のコンテナ情報(Docker イメージ、ポート番号など)、最後にイベントログです。この詳細情報は、Kubernetes の理解が深まるにつれて、各項目が何を意味しているのか次第に分かってくると思います。僕もそうですが、最初は「Events:」をよく見ます。なぜなら、初心者はエラーが発生して上手くいかないことが多いですからね。

Pod の削除

先ほどデプロイした kuard Pod を削除をします。

イント

Pod の削除コマンドを実行しても、すぐには削除されません。削除後の Pod 一覧確認コマンドで「STATUS」が「Terminating」になっていることが分かります。これは、デフォルトで30秒の削除の猶予期間があるためです。「Terminating」に移行すると、該当の Pod は新しいリクエストは受け付けません。この猶予期間で既に受け付けたリクエストを完了させるようになります。

Pod にアクセス

今回はKubectl コマンドのポートフォワードで kuard Pod にアクセスします。

http://localhost:8080 でアクセスして kuard が表示されれば成功です。

「初心者でも Kubernetes のうれしいことが分かってしまう」シリーズ
  1. Dockerのうれしいこと
  2. 6つのうれしいこと-概要編
  3. 最小単位のPod
  4. ヘルスチェック
  5. セルフヒーリング(ReplicaSet)
  6. 宣言的更新を提供するコントローラー(Deployment)
「Raspberry Pi 4でKubernetes」シリーズ
  1. Raspberry Pi 4でk8s-パーツ購入編-
  2. Raspberry Pi 4でk8s-OSセットアップ編-
  3. Raspberry Pi 4でk8s-k8s cluster編-

おススメ書籍

▼ Kubernetesの入門書
『入門 Kubernetes』

1.6,5 のバージョンで解説(リポジトリ、注釈は翻訳時の最新1.9で更新)されています。バージョンは少し古いですが、初心者の入門書(おえるべきポイントはしっかり網羅されてる)としては、途中で挫折しない適度なボリューム(本の厚さ)で、とっかかりとしては良い本になっています。

▼ Kubernetesの入門~応用までをカバー
『Kubernetes完全ガイド (impress top gear)』

僕は「入門 Kubernetes」⇒「Kubernetes完全ガイド」(現在進行形)という進み方をしていますが、より本番環境を想定した方法を学べます。特にWeb 系だと、https で使用する Ingress リソースなどもしっかり説明してくれています。「入門 Kubernetes」には、詳しい説明がなかったので個人的にはすごく助かっています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA