初心者でも Kubernetes のうれしいことが分かる-Deployment(1)

オウルです。

初めての Kubernetes も5回目となりました。前回が5月14日・・・え!?そんな前なの!これは反省ですね・・・

いよいよ Deployment です。Deploymentは、今まで学習した Pod、ReplicaSets を宣言的更新を提供するコントローラー※1です。

※1 公式サイトで Deployment は、”A Deployment controller”と記載されていたので、ここではコントローラーと記載します。

Deployment 機能

Pod、ReplicaSets を宣言的更新を提供するコントローラー。と言われても、これだけだと抽象的過ぎて良く分かりません。日々のお仕事を少しイメージしながら考えてみます。

お仕事のあれこれ

例えば・・・
  • セキュリティ対策や新機能を利用するために Nginx、Apache をバージョンアップしたい
  • 開発したアプリケーションをバージョンアップしたい
  • トラフィックが増えたので負荷分散したい
  • アプリケーションをバージョンアップしたが、すぐに解決できない問題があったのでロールバックしたい

こんな感じのタスクはよくある話だと思います。

では、上記のタスクをKubernetes 環境下では主に Deployment で実現できます(Service リソースも必要になりますが、これは次回で)。では、このタスクを実現する Deployment の機能はどんなのがあるのでしょうかね。

機能

  • Updating a Deployment
  • Rolling Back a Deployment
  • Scaling a Deployment

たくさんあります。かつ重要なので Deployment は何回に分けます。今回は次の項目について紹介します。

  • Deployment の仕組み
  • Deployment をデプロイ

Deployment の仕組み

初心者でも Kubernetes のうれしいことが分かる-ReplicaSetでは、ReplicaSet は Pod を管理するが、所有はしないと説明しましたが、Deployment も同様に ReplicaSet を管理します。所有はしません。ということは、Deployment と ReplicaSet の関連付けは、ReplicaSet と Pod の関連付けと同様に Label セレクタで定義します。

Deployment ReplicaSet Pod の関係

Deployment と ReplicaSet と Pod の関係をイメージ図にすると下のような感じになります。

Deployment をデプロイ

nginx の Docker イメージ

nginx(エンジンエックス)の Docker イメージを使用して Deployment のマニフェストファイルを作成します。nginx はオープンソース Webサーバです。

nginx とは

Nginx (pronounced “engine-x”) is an open source reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP protocols, as well as a load balancer, HTTP cache, and a web server (origin server). The nginx project started with a strong focus on high concurrency, high performance and low memory usage. It is licensed under the 2-clause BSD-like license and it runs on Linux, BSD variants, Mac OS X, Solaris, AIX, HP-UX, as well as on other *nix flavors. It also has a proof of concept port for Microsoft Windows.

翻訳

Nginx( “engine-x”と発音)は、HTTP、HTTPS、SMTP、POP3、およびIMAPプロトコル用のオープンソースリバースプロキシサーバー、およびロードバランサ、HTTPキャッシュ、およびWebサーバー(オリジンサーバー)です。 nginxプロジェクトは、高い並行性、高いパフォーマンス、そして低いメモリ使用量に重点を置いて始めました。 2条項のBSDライクなライセンスでライセンスされており、Linux、BSDの変種、Mac OS X、Solaris、AIX、HP-UX、その他の* nixフレーバーで動作します。 Microsoft Windows用の概念実証ポートもあります。

ASP.NET Core もホスト可能

この Kubernetes シリーズの他に、【初心者向け】はじめての ASP.NET Coreもちょこちょこ書いていますが、ASP.NET Core(Kestrel) のリバースプロキシサーバーとして Nginx を使用できます。

マニフェストファイル作成

では、マニフェストファイル(宣言的設定)を作成します。

簡単に上の補足をします。

  • .metadata.name で Deployment の名前を指定
  • .spec.replicas で レプリケートする Pod の数を指定
  • .spec.selector.matchLabels で 管理する Pod のラベルを指定
  • .spec.template.metadata.labels で Pod のラベルを指定

nginx の Docker イメージは軽量の alpine を使用します。

デプロイ

pod-template-hash

ReplicaSet と Pod の取得時に –show-labels オプションを付けてラベルを表示しています。この「pod-template-hash」ラベルは、Development コントローラーによって作成された ReplicaSet に追加されます。また、このラベルにより Deployment が管理する ReplicaSet が重複しないことを保証します。

Selector と Labels に pod-template-hash=79458bd5c9 に追加されています。Controlled By には、この ReplicaSet を管理する Deployment の情報があります。また、時間があれば Pod も見てみてください。

まとめ

Deployment の仕組みでは、Deployment ReplicaSet Pod の関係について、Deployment をデプロイでは、ラベルに注目して紹介しました。次回は、うれいい機能の Updating a Deployment にいきたいところですが、個人的には Service オブジェクトを作成してローカルから nginx にアクセス可能(NodePort を指定)な状態で進めたいので、次回は Service の基本(Service も奥深いので基本だけ)を紹介してから 再度 Deployment に戻りたいと思います。

「初心者でも 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完全ガイド (impress top gear)』

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

コメントを残す

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

CAPTCHA