😊

【Kubernetes】Redocコンテナを持つPodを作成する

2024/05/14に公開

概要

Redocコンテナを持つPodを作成しようと思ったら、パスの指定とかVolumeの使い方で色々詰まったのでメモ

コード

Deployment

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: api-redoc
  name: api-openapi-redoc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api-redoc
  template:
    metadata:
      labels:
        app: api-redoc
    spec:
      containers:
      - image: redocly/redoc:v2.1.4
        name: redoc
        env:
        - name: SPEC_URL
          value: ./openapi/api.yaml # ルートディレクトリから見たyamlの場所
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          limits:
            cpu: 100m
          requests:
            cpu: 100m
        volumeMounts:
        - name: openapidoc # volumes.nameを指定
          # ルートディレクトリ(/usr/share/nginx/html/)の下にopenapi/を作成しマウント
          mountPath: /usr/share/nginx/html/openapi
      volumes:
      - name: openapidoc
        configMap:
          name: api-openapi-docs

Volumeの指定

volumeMounts.mountPathでコンテナのディレクトリを指定、volumesで指定したボリュームとマウント

yamlファイルをマウントしたら読み込めず、よく見たら.yamlという名のディレクトリになっていた。
404エラーでもファイルがあるからOK、ではなくls -lFやcatで中身まで確認しなければだめ

SPEC_URL

ルートディレクトリ(/usr/share/nginx/html/)から見たyaml or jsonの場所。
index.htmlでルートディレクトリにあるjsを読みこんでいることを確認し、直下のopenapi/にあるyamlを読む設定にした。

以下は検証ツールで確認したindex.html
下部でjsやyamlをロードしてる

index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>ReDoc</title>
    <link rel="icon" href="favicon.png" />
    <style>
      body {
        margin: 0;
        padding: 0;
      }

      redoc {
        display: block;
      }
    </style>
    <link
      href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700"
      rel="stylesheet"
    />
  </head>

  <body>
    <redoc spec-url="./openapi/api.yaml" ></redoc>
    <script src="redoc.standalone.js"></script>
  </body>
</html>

参考:configmap

configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: api-openapi-docs
data:
  api.yaml: |
    openapi: 3.0.0
    info:
(略)
GitHubで編集を提案

Discussion