😊
【Kubernetes】Redocコンテナを持つPodを作成する
概要
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:
(略)
Discussion