【Kubernetes】YAMLファイルの書き方(deployment)　no.8

![名称未設定のデザイン (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/52dbff25-af71-0071-9853-e2ac430d1667.png)


こんにちは。まゆみです。

Kubernetesについての記事をシリーズで書いています。

[前回の記事](https://qiita.com/Mayumi_Pythonista/items/7443afff36bf81cf82d3)では、yamlファイルに必ず書く4つの項目を書いたところで記事を終えました。(下のスクショ参考)

![2021-07-23_8-26-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/dfa81888-114e-df43-16c4-983a64692ba1.png)


今回の記事はその続きを書いていこうと思います

ではさっそく始めていきますね。

#deploymentオブジェクトのyamlファイルを書く

先ほども触れさせていただきましたが、まず、yamlファイルに必ず書く4つの項目を書き終えているというのを前提にさせてください。

今回の記事は、前回の続きから解説していきますので。

それと、Podを作る基になるImageが[Docker hub](https://www.docker.com/products/docker-hub)のRepositoryにあることも確認お願いします(ImageがDocker hub に無いとpodを作ることができません。)

今回の記事では、下のスクショにあるように『mayumidocker0612/minikube-first-app』のイメージをpodに使います

![2021-07-23_9-25-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/fa5167c6-b1b8-39db-d140-2a04147a93d6.png)

#deploymentのyamlファイルの概要

![2021-07-23_9-27-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/59e12211-f772-e7dc-8b71-839fb0e78e5a.png)

deploymentに関するyamlファイルの最終完成形は大体、上のスクショのようになります(<font color="Red">意図的に抜いている部分があります</font>が、それは別の項目に書きます)

>赤で囲まれている部分がdeploymentオブジェクトに関する事

>オレンジで囲まれている部分がpodに関する事

になります

Deploymentオブジェクトとpodの関係性は、Deploymentオブジェクトがpodに関する事(いくつpodを用意するかなど)をマネージしているのだと理解してください。


![deployment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/09ce0e45-bc67-87ee-1a0a-432de89d5501.png)

![2021-07-23_9-48-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d9b42484-2691-bf3b-b681-0c4e88fc8d06.png)
引用元：[Kubernetes Deployment Tutorial with Example YAML](https://matthewpalmer.net/kubernetes-app-developer/articles/kubernetes-deployment-tutorial-example-yaml.html)

では前回の記事の続きから、deployment.yamlファイルに書くべき項目を一つづつ解説していきます

##replicas

Deploymentオブジェクトを作る時、いくつのpodで始めるかをここで定義します。

トラフィックが増えてきたときに、スケーリングするようにもできますが、ここで定義するのはオブジェクトを作る時にいくつのpodで<font color="Red">『始めるか』</font>です。

ディフォルトの値は『1』です。

##template

Podに関しての情報を書いていきます。

Deploymentに関してのmetadataにはそのオブジェクト名を書きました。(name:と書いている部分のことです)

Podのmetadataにはname:ではなく、labels: を書きます

labels:はキーバリューペアーで、あなたの好きなだけ書くことができます(のちに、deploymentでどのpodをコントロールするのかを特定するために必要になる項目になります)

また、Deploymentの情報を書いた時はkind:という項目も書きました。

![2021-07-23_10-03-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/69a263b5-852c-448b-23ef-7094c5f99a48.png)


なぜならば、Deploymentの他にもServiceやJobに関するyamlファイルを書く時もあるからです。

Podに関する情報を書く時にはkind:は書きません。

<font color="Red">なぜならいつでもkind: podになるから</font>です。

##spec

『Podの』specification(スペック)を書きます。

そしてPodはContainerを囲んでいるwrapperのようなものなので、containerに関する情報を書いていきます

>name: はあなたが好きに付けてください。

>image: はどのImageでpodを作るのか？そしてそのイメージはローカルではなくDocker hubにあるイメージになります

Containerのイメージはローカルにあるものではなく、リモートにあるものを使ってくださいね。

#selectorを書く

先ほど、<font color="Red">Deploymentは全てのpodをマネージしている</font>と書かせていただきました。

どのDeploymentがどのpodと結びついているのかを明示するために『selector』を最後に書きます

##selectorを書き忘れないための便利な方法

Visual Studio Codeを使っている方なら、[こちらの記事](https://qiita.com/Mayumi_Pythonista/items/7443afff36bf81cf82d3#visual-studio-code%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E4%BA%BA%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD)でおすすめしている拡張機能を入れますと、selectorを書き忘れている場合『selectorが足りません』と教えてくれます(赤の波線が出てくるのでホバーしたら注意が表示されます)

![2021-07-23_8-58-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/36b6a52b-f41c-932e-fa57-e05243f45f7e.png)

##podのlabelsに書いたキーバリューぺアーを書く

どのDeploymentオブジェクトがどのpodを見張っているかを明示したいので、podのlabelsに書いたキーバリューペアーを書きます

```
selector:
  matchLables:
    app: first-app    
```

となります

YAMLファイルの最終的に完成したものは下のようになります

![2021-07-23_11-24-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/14990ace-a55a-d47d-7a50-c756d8b81f39.png)



#yamlファイルの内容を適用させる

yamlファイルが書き終わりました。

ではこのファイルの内容を適用させて実行するにはどうしたら良いのでしょうか

```
kubectl apply -f=<ファイル名.yaml>
```

これで、指定されたファイルの内容が適用されて実行されます。


##エラーが出る

<font color="Red">error: Unexpected args: [.yaml]</font>

というエラーが出る人は、<font color="Red">-f=で指定するファイル名をクォーテーションマークで囲んで見ましょう</font>(バージョンの違いで、エラーが出る人も出ない人もいます。私の場合はエラーが出ました)

```
kubectl apply -f='<ファイル名.yaml>'
```

![2021-07-23_11-15-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/8966e9e1-2f5e-d99b-9c3d-b4190fc470ab.png)

```
kubectl get deployments
```
で調べたら、ちゃんとdeploymentオブジェクトができていました。

#まとめ

今回の記事はここで締めくくらせていただきます。

次回はServiceオブジェクトの場合のyamlファイルの作り方を書いていこうと思います　＼(^o^)／

よろしくお願いいたします。