とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

Kubernetesマニフェストの雛形を作ってみる

Kubernetesでアプリの管理をしているとマニフェストを弄る機会が結構でてくると思います。同じことを色々なところに書かなければいけなかったり、作成するリソース毎に記述する内容が変わったりで、こここれでいいんだっけ?など、悩みは尽きません。そこで今回はマニフェストの雛形を用意して、ざっくりと作り上げていく方法を紹介します。

下準備

雛形を作るにはkubectlコマンドが必要です。もしまだインストールされていなければこちらを参考にインストールしてください。macOSでHomebrewがセットアップ済みであれば、以下のコマンドでもインストール可能です。

brew install kubernetes-cli

雛形を作る上でコマンドラインオプションの補完ができた方が楽に進められます。以下の設定を行ってください。

# Bash
echo 'source <(kubectl completion bash)' >> ~/.bash_profile

# Zsh
echo 'source <(kubectl completion zsh)' >> ~/.zprofile

これで補完の設定は完了です。exec $SHELL -lでShellをリロードするか、端末を再起動して補完が有効になっているか確認してみてください。kubectl -を入力後Tabキーを押してオプションが補完されれば成功です。

雛形を作っていく

雛形を作成するにはkubectl create —dry-run=client -o yamlを使用します。—dry-run=clientを指定することでサーバーに命令を送信することなく作成されるリソースを確認することができます。-o yamlを指定して出力フォーマットをyamlに変更しています。こうすることにより作成されるリソースをyamlフォーマットで出力できるので雛形を作成できます。

それでは実際に雛形を作成してみましょう。まずはNamespaceから作成していきます。

kubectl create namespace example-ns --dry-run=client -o yaml > namespace.yml

kubectl createの結果をnamespace.ymlというファイルにリダイレクトしています。ファイルの中を見てみるとexample-nsというネームスペース名でリソースを作成するマニフェストになっていると思います。kubectl apply -f namespace.ymlを実行すると実際にリソースが作成されます。

Deploymentを作成してみます。

kubectl create deployment example-app --image=IMAGE-URL --replicas=2 --namespace=example-ns --dry-run=client -o yaml > deployment.yml

今度はdeployment.ymlというファイルにリダイレクトしています。ファイルの中を見てみるとコマンドラインオプションで指定した通りのマニフェストが出来上がっていると思います。

kubectl createコマンドで雛形を作成できるのはわかりました。次は各リソースで指定できるオプションの調べ方を見ていきたいと思います。以下のコマンドを実行してみてください。

kubectl create deployment -h

Aliases:には短縮名、Examples:には主な使い方、Options:には指定できるオプション、Usage:にはこのコマンドの使い方が書かれています。今回はdeploymentのヘルプを表示しましたが、別のリソースでも調べ方は同じです。入力しながら調べたい場合は以下のようにTabキーで補完しながら進めていくといいと思います。

kubectl create <Tab>
kubectl create deployment my-app <Tab>
kubectl create deployment my-app -<Tab>    # -の後にTabキーを押すとオプションが補完される
kubectl create deployment my-app --re<Tab> # --reから始まるオプションが補完される

まとめ

AnnotationsはResourcesなどオプションで指定できない部分もあるので完全にコマンドだけで作り切ることは不可能ですが雛形としては十分です。簡単なマニフェストならこれだけでも動かせるのでマニフェストを自作しなくてはいけなくなった場合は利用してみてはいかがでしょうか。作成できるリソース一覧は公式ドキュメントkubectl create -hで確認することができるので一度見てみてください。