LoginSignup
40
22

More than 5 years have passed since last update.

KubernetesのPodのmanifestを図示するツールを作った

Last updated at Posted at 2018-12-14

これは何?

Kubernetesのマニフェストはすべてyamlで記載します。
慣れればyamlを見ただけで、どんなマニフェストかがすぐにわかるのですが、慣れないうちは何が何だかわかりません。
そこで、マニフェストを少しでも読みやすくするためのツールを作ってみました。

マニフェストの例

複雑なPodのmanifestとして https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath で紹介されているsubpathの例を示します。

慣れた人が見るとコンテナが2つあり、ボリュームが1つ、それぞれのコンテナがマウントしているようだな、ということがわかります。
しかし、いきなりこのマニフェストを見せられると、面食らってしまう人もいるでしょう。

pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    containers:
    - name: mysql
      image: mysql
      env:
      - name: MYSQL_ROOT_PASSWORD
        value: "rootpasswd"
      volumeMounts:
      - mountPath: /var/lib/mysql
        name: site-data
        subPath: mysql
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html
        name: site-data
        subPath: html
    volumes:
    - name: site-data
      persistentVolumeClaim:
        claimName: my-lamp-site-data

可視化の例

今回作成したツールで先ほどのマニフェストを可視化してみます。
image.png

どうでしょう?
2つコンテナがあり、ボリュームを共有していることが一目瞭然ではないでしょうか?
このように、マニフェストから図をパッと生成できるツールを作りました。

利用技術

すべてブラウザで上のJavaScriptで動作しています。

あとはいい感じにyamlから要素を取り出してフローチャートを記述するだけです。
mermaid.jsのフローチャートを書くためのDSLで無理やりPodを図示しています。
initContainers, containers, volumesをmermaid.jsのsubgraphで表現し、その中の要素をフローチャートのタスクとして記述しています。
yamlではパッと理解しづらいVolumesとvolumeMountの関係を矢印で表現できるようにしました。

試してみたい!と思った方へ

https://inajob.github.io/pod-manifest-visualizer/ で公開しているのでいろいろ試してみてください!

まとめ

今回作成したPodの可視化ツールで、少しでもマニフェストが読みやすくなれば幸いです。
ソースコードも公開しているので、ぜひいろいろカスタマイズしてみてください。

40
22
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
40
22