MarkdownViewコントローラー

本資料では、カスタムコントローラーの例としてMarkdownViewコントローラーを実装することとします。 MarkdownViewコントローラーは、ユーザーが用意したMarkdownをレンダリングしてブラウザから閲覧できるようにサービスを提供するコントローラーです。

MarkdownのレンダリングにはmdBookを利用することとします。

MarkdownViewコントローラーの主な処理の流れは次のようになります。

MarkdownView Controller

  • ユーザーはMarkdownViewカスタムリソースを作成します。
  • MarkdownViewコントローラーは、作成されたMarkdownViewリソースの内容に応じて必要な各リソースを作成します。
    • カスタムリソースに記述されたMarkdownをConfigMapリソースとして作成します。
    • MarkdownをレンダリングするためのmdBookをDeploymentリソースとして作成します。
    • mdBookにアクセスするためのServiceリソースを作成します。
  • ユーザーは、作成されたサービスを経由して、レンダリングされたMarkdownを閲覧できます。

MarkdownViewカスタムリソースには、以下のようにMarkdownの内容とレンダリングに利用するmdBookのコンテナイメージおよびレプリカ数を指定できるようにします。

view_v1_markdownview.yaml

apiVersion: view.zoetrope.github.io/v1
kind: MarkdownView
metadata:
  labels:
    app.kubernetes.io/name: markdownview
    app.kubernetes.io/instance: markdownview-sample
    app.kubernetes.io/part-of: markdown-view
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/created-by: markdown-view
  name: markdownview-sample
spec:
  markdowns:
    SUMMARY.md: |
      # Summary

      - [Page1](page1.md)
    page1.md: |
      # Page 1

      一ページ目のコンテンツです。
  replicas: 1
  viewerImage: "peaceiris/mdbook:latest"

ソースコードは以下にあるので参考にしてください。

ディレクトリ構成は以下の通りです。

codes
├── 00_scaffold:  Kubebuilderで生成したコード
├── 10_tilt:      Tiltを利用した開発環境のセットアップを追加
├── 20_manifests: CRD, RBAC, Webhook用のマニフェストを生成
├── 30_client:    クライアントライブラリの利用例を追加
├── 40_reconcile: Reconcile処理、およびWebhookを実装
└── 50_completed: Finalizer, Recorder, モニタリングのコードを追加

results matching ""

    No results matching ""