LoginSignup
4
1

More than 1 year has passed since last update.

【Kubernetes】Imperative (命令型) VS Declarative (宣言型)の違い no.7

Posted at

名称未設定のデザイン (12).png

こんにちは。

まゆみです。

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

今回の記事では、Kubernetesオブジェクト管理の異なる2つのアプローチ方法について書いていこうと思います

具体的には、Kubernetesのオブジェクト管理は

①Imperative (命令型)
②Declarative (宣言型)

の2つがあります

実は今までの記事で書いていたのは『Imperative』による方法です。(記事の中で明示していませんでしたが。。。)

なので今回の記事では、Imperative と Declarative の違いを明確にしたうえで、Declarativeによるオブジェクト管理の実際の方法を書いていこうと思います

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

Docker CLI とDocker-composeの違いのようなもの

読者の皆さんが、Docker コマンドとdocker-composeコマンドの違いをご理解しているという前提で書きますね。

Imperative とDeclarativeの違いには

Imperative がDockerでの1つ1つのコマンドだとすれば

Declarativeはdocker-composeを利用してコンテナをrunすることだ

ということです。

今までのKubernetesに関するシリーズの記事ではImperativeな方法によって、コマンドを1行づつ実行しpodやdeploymentを作ったり・削除したりしてきました。

ただ、より複雑なサービスを作るに従い、コマンドが長くなったり、何度も間違いなくコマンドを打ったりするのが大変だったと思います

Declarativeな方法を使うことでコマンドを繰り返し書かなければいけないという苦痛から解放されましょう。

実際のDeclarativeなアプローチはこんな感じ

Kubernetesドキュメントから抜粋します

2021-07-22_11-55-34.png

docker-composeファイルを書いた時と同じような要領で

どんなオブジェクトを作るのか
どのように作られるのか
他のどのオブジェクトと関連しているのか

などをyamlファイルに書き、ターミナルに戻って『どのyamlファイルの内容をclusterを作るために適用するのか?』という意味のコマンドを打ちます(docker-compose upでコンテナを実行したのと似ていますね。)

kubectl apply -f config.yaml

では下記に、Declarativeなアプローチの管理方法のより具体的な手順を書いていきますね。

.yamlファイルを用意する

docker-composeでyamlファイルを使ったように、KubernetesのDeclarativeなオブジェクト管理でもyamlファイルを用意します。

ファイル名はあなたの好きなようにつけて大丈夫ですが、拡張子を.yamlにしてください。

Visual Studio Codeを使っている人におすすめの拡張機能

Visual Studio Code を使っている人は(あくまでもオプションですが)『YAML』という拡張機能をインストールする事をおすすめします

2021-07-21_16-53-39.png

そして歯車をクリックして『拡張機能の設定』からsetting.json を下のように書き換えます

2021-07-21_16-57-24.png

このように設定することで、例えばyamlファイルに書く項目(kindやmetadataなど)の頭文字『k』や『m』を打った時点で『kind』や『metadata』などとオートコンプリートしてくれます。

2021-07-21_17-03-40.png

yamlファイルに書くべく最低限必要の4つの項目

yamlファイルによってどんなオブジェクトを作るとしても、必ず書かなければならない項目が4つあります。

今回の記事では、yamlファイルに記載する項目として最低限必要な4つの項目を紹介して、締めくくろうと思います。

それは以下の4つの項目になります

  • apiVersion
  • kind
  • metadata
  • spec

になります。

上記の4つは必ず必要な項目なので先に書いて後で肉付けしていきましょう

一つづつ解説していきます

apiVersion

バージョンを書きます。

今、この記事を書いている時点と、あなたがこの記事を読んでいる時点ではバージョンが違うかも知れないので、Kubernetesのドキュメントを見て、確認しておいてくださいね。

2021-07-22_12-18-47.png

kind

どのオブジェクトを作成したいのかを書きます。

Deploymentと最初の文字は大文字になっていますので、大文字と小文字の違いにも注意して書いてください

また、Deployment以外のオブジェクトを作りたい時のyamlファイルの書き方についてはKubernetesドキュメントのAPIリファレンスの項目を参考にしてください。

2021-07-22_12-31-38.png

オブジェクトの種類ごとの書く項目の違いなどが記されています

metadata

オブジェクトの名前を書きます

Imperativeなアプローチの時に

kubectl create deployment <deployment名>

とコマンドを打って、オブジェクトに名前をつけましたよね。
そのをmetadataの欄に書きます

name: 以外にもmetadataの欄に書けるものがあります。

metadataの『ObjectMeta』と書いてある部分をクリックすると表示されますので、参考にどうぞ

2021-07-22_12-40-50.png

2021-07-22_12-46-41.png

spec

yamlファイルで設定されるオブジェクトの詳細について書きます。

specに書く具体的な内容につきましては、記事を改めて書かせていただきますね。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1