こんにちは。
まゆみです。
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ドキュメントから抜粋します
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』という拡張機能をインストールする事をおすすめします
そして歯車をクリックして『拡張機能の設定』からsetting.json を下のように書き換えます
このように設定することで、例えばyamlファイルに書く項目(kindやmetadataなど)の頭文字『k』や『m』を打った時点で『kind』や『metadata』などとオートコンプリートしてくれます。
#yamlファイルに書くべく最低限必要の4つの項目
yamlファイルによってどんなオブジェクトを作るとしても、必ず書かなければならない項目が4つあります。
今回の記事では、yamlファイルに記載する項目として最低限必要な4つの項目を紹介して、締めくくろうと思います。
それは以下の4つの項目になります
- apiVersion
- kind
- metadata
- spec
になります。
上記の4つは必ず必要な項目なので先に書いて後で肉付けしていきましょう
一つづつ解説していきます
##apiVersion
バージョンを書きます。
今、この記事を書いている時点と、あなたがこの記事を読んでいる時点ではバージョンが違うかも知れないので、Kubernetesのドキュメントを見て、確認しておいてくださいね。
##kind
どのオブジェクトを作成したいのかを書きます。
Deploymentと最初の文字は大文字になっていますので、大文字と小文字の違いにも注意して書いてください
また、Deployment以外のオブジェクトを作りたい時のyamlファイルの書き方についてはKubernetesドキュメントのAPIリファレンスの項目を参考にしてください。
オブジェクトの種類ごとの書く項目の違いなどが記されています
##metadata
オブジェクトの名前を書きます
Imperativeなアプローチの時に
kubectl create deployment <deployment名>
とコマンドを打って、オブジェクトに名前をつけましたよね。
そのをmetadataの欄に書きます
name: 以外にもmetadataの欄に書けるものがあります。
metadataの『ObjectMeta』と書いてある部分をクリックすると表示されますので、参考にどうぞ
##spec
yamlファイルで設定されるオブジェクトの詳細について書きます。
specに書く具体的な内容につきましては、記事を改めて書かせていただきますね。