Kubernetesのマニフェスト(Manifest)ファイルでNginxを起動

2019年4月16日

Kubernetesのマニフェスト(Manifest)ファイルによってNginxを起動させてみます。

 

関連ページ

Docker DesktopでKubernetes入門

 

 

関連ページでは、下記のkubectlコマンドによってNginxを起動させましたが、本記事ではマニフェストファイルによって同様の事をおこなってみます。

 

 

リソースとマニフェストファイルについて


 

Kubernetesのリソースマニフェストファイルについて簡単にまとめておきます。

 

Kubernetesのリソースとは、コンテナ(とりわけDockerコンテナ)によるアプリケーションを構成するいわゆる “部品” としての総称です。例えばPodに対するポート番号や負荷分散などのネットワークの設定は、ServiceやIngressと呼ばれるリソースによって定義していきます。

 

そして、それらリソースをどのように構成してKubernetesクラスタとしてのアプリケーションをデプロイしていくのかを定義したものがマニフェストファイルです。つまり、リソースの構成をテキストファイルで記述したのがマニフェストファイルです。そもそもKubernetesクラスタ内のリソースはすべてRESTfulとして表示されるようになっています。

 

マニフェストファイルによってKubernetesクラスタを形成する様子を簡略化したのが下記イラストです。実際にはマスターノードにはクラスタの構成を保存するデータストア(etcd)やクラスタの状態を監視するController Managerなどのコンポーネント、そしてノード側にはAPI Serverと接続するkubeletなどがありますが本記事では説明しません。

 

 

以下は本記事で利用する主なリソースです。

 

Deploymentリソース

ざっくりと表現すれば、Deploymentはアプリケーションのスケーリングやバージョンを管理するリソースです。具体的には「クラスタ内のPodを管理するReplicaSetリソース」を管理します。DeploymentリソースからReplicaSetおよびPodが自動的に作成されます。つまり上述したkubectl runは、このDeploymentとReplicaSet、そしてPodを作成するコマンドです。このDeploymentを利用した管理方法については本記事では説明しませんが、このリソースを利用してNginxコンテナを起動させるマニフェストファイルを作成します。

 

Serviceリソース

Kubernetesのネットワークの定義をおこなうリソースです。ClusterIP、LoadBalancer、NodePortなどの種類があります。このService以外にもネットワークを扱うリソースとしてIngressがあります。

 

 

 

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


 

nginx.yamlという名前のマニフェストファイルを作成しました。DeploymentとServiceによるリソースで構成したマニフェストファイルです。をクリックしてコードを別ウィンドウで開くと、説明と同時に確認しやすくなります。

2行目、22行目

kindにはリソースの種類を設定します。上記マニフェストファイルは、DeploymentおよびServiceで構成したアプリケーションとしてデプロイされます。

 

9行目

replicasにはクラスタ内に起動させておくPodの数を指定します。この数に合わせて設定されたPod(10行目〜のテンプレート)が起動します。

 

5行目、14行目、25行目

specにはそれぞれのリソースの種類によって様々な設定項目があります。

 

20行目

— によってリソースが分けられていますが、ファイル自体を分離しそれぞれのファイルに対してkubectl create(後述)することも可能です。

 

26行目

Serviceリソースにおけるspecのtypeで、Podに対してクラスタ外部からアクセスするためのNodePortを指定しています。

 

27〜31行目

30000ポートから接続すると、selectorに指定したapp=nginxというキーと値を持つLabel(ラベル)を指定したPodに伝送されます(上記では12、13行目)。このLabelはリソースをグループ化する機能を持っています。Kubernetesクラスタ内でリソースが増えた場合などに役立ちます。

 

 

本記事ではKubernetesクラスタを構成するいくつかのリソースを簡単に説明しましたが、他にもたくさんのリソースが存在します。それらリソースにはどのような機能があり、またリソース同士をどう構成していくのかを学んでいくのがKubernetesの本質です。

 

 

デプロイ


 

実際に上記で作成したマニフェストファイルをデプロイしてみます。

 

Kubernetes APIサーバーにマニフェストファイルが送信されます。

 

以上で「http://localhost:30000/」にて「Welcome to nginx!」が確認できます。

 

作成されたPodの一覧を表示させます。poはpodsの略称です。

レプリカ数を3に設定したので3つのPodが確認できます。-o wide を付加するとIPとNODE項目も表示されます。また上述したようにKubernetesクラスタはRESTfulで表示可能なので、-o jsonおよび-o yamlを付加するとそれぞれのデータ形式で確認することができます。

 

作成したPodを削除します。

 

 

参照文献


 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー