Kubernetesマニフェストの JSON/YAML変換
KubernetesマニフェストをYAMLとJSON形式間で変換する方法を解説。Deployment、Service、ConfigMapの実践的な例とkubectlのヒントを紹介します。
DevOps
詳細な説明
Kubernetesはリソースマニフェストに対してYAMLとJSONの両方を受け付けます。YAMLがKubernetesエコシステムの標準的な慣習ですが、JSONはプログラムによる生成、API呼び出し、デバッグに有用です。
YAMLでのKubernetes Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:1.25
ports:
- containerPort: 80
resources:
limits:
cpu: "500m"
memory: "128Mi"
requests:
cpu: "250m"
memory: "64Mi"
JSON等価物:
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "web-app",
"labels": {
"app": "web",
"tier": "frontend"
}
},
"spec": {
"replicas": 3,
"selector": {
"matchLabels": { "app": "web" }
},
"template": {
"metadata": {
"labels": { "app": "web" }
},
"spec": {
"containers": [
{
"name": "web",
"image": "nginx:1.25",
"ports": [{ "containerPort": 80 }],
"resources": {
"limits": { "cpu": "500m", "memory": "128Mi" },
"requests": { "cpu": "250m", "memory": "64Mi" }
}
}
]
}
}
}
}
実用的なヒント:
kubectlは両形式を受け付けます:kubectl apply -f deployment.yamlまたはkubectl apply -f deployment.json- 既存リソースの変換:
kubectl get deployment web-app -o jsonでJSONをエクスポート - CPUやメモリの値(
"500m"、"128Mi")はYAMLでクォートして文字列として維持する必要があります - Kubernetes APIのレスポンスは常にJSONなので、デバッグにはJSON への理解が不可欠です
マルチドキュメントYAML(--- で区切り)はKubernetesで一般的ですが、JSONには等価物がありません。各ドキュメントは個別のJSONファイルに変換するか、JSON配列に配置する必要があります。
ユースケース
PulumiやAWS CDKなどのInfrastructure-as-Codeツールで、TypeScriptやPythonでプログラム的にリソースを生成する際にKubernetesマニフェストをJSONに変換する場合。