[{"data":1,"prerenderedAt":1088},["ShallowReactive",2],{"guide-yaml-to-kubernetes-manifests":3},{"id":4,"title":5,"body":6,"date":1079,"description":1080,"extension":1081,"meta":1082,"navigation":1083,"path":1084,"readingTime":89,"seo":1085,"stem":1086,"__hash__":1087},"guides\u002Fguides\u002Fyaml-to-kubernetes-manifests.md","Writing Kubernetes Manifests in YAML",{"type":7,"value":8,"toc":1073},"minimark",[9,13,18,21,112,152,159,163,166,661,664,688,692,695,979,986,990,1000,1017,1036,1054,1060,1069],[10,11,12],"p",{},"Kubernetes uses YAML as its primary configuration language for defining resources—deployments, services, config maps, and every other object in the cluster. While the API is well-documented, writing correct manifests requires understanding the structural conventions, required fields, and common patterns that make configs maintainable across environments. This guide covers the practical aspects of authoring Kubernetes YAML that works reliably in production.",[14,15,17],"h2",{"id":16},"required-fields-in-every-manifest","Required Fields in Every Manifest",[10,19,20],{},"Every Kubernetes resource must include four top-level fields:",[22,23,28],"pre",{"className":24,"code":25,"language":26,"meta":27,"style":27},"language-yaml shiki shiki-themes github-light github-dark","apiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: api-server\n  labels:\n    app: api-server\nspec:\n  # Resource-specific configuration\n","yaml","",[29,30,31,48,59,68,79,87,97,105],"code",{"__ignoreMap":27},[32,33,36,40,44],"span",{"class":34,"line":35},"line",1,[32,37,39],{"class":38},"s9eBZ","apiVersion",[32,41,43],{"class":42},"sVt8B",": ",[32,45,47],{"class":46},"sZZnC","apps\u002Fv1\n",[32,49,51,54,56],{"class":34,"line":50},2,[32,52,53],{"class":38},"kind",[32,55,43],{"class":42},[32,57,58],{"class":46},"Deployment\n",[32,60,62,65],{"class":34,"line":61},3,[32,63,64],{"class":38},"metadata",[32,66,67],{"class":42},":\n",[32,69,71,74,76],{"class":34,"line":70},4,[32,72,73],{"class":38},"  name",[32,75,43],{"class":42},[32,77,78],{"class":46},"api-server\n",[32,80,82,85],{"class":34,"line":81},5,[32,83,84],{"class":38},"  labels",[32,86,67],{"class":42},[32,88,90,93,95],{"class":34,"line":89},6,[32,91,92],{"class":38},"    app",[32,94,43],{"class":42},[32,96,78],{"class":46},[32,98,100,103],{"class":34,"line":99},7,[32,101,102],{"class":38},"spec",[32,104,67],{"class":42},[32,106,108],{"class":34,"line":107},8,[32,109,111],{"class":110},"sJ8bj","  # Resource-specific configuration\n",[113,114,115,130,135,144],"ul",{},[116,117,118,121,122,125,126,129],"li",{},[119,120,39],"strong",{},": The API group and version. Core resources use ",[29,123,124],{},"v1","; most workload resources use ",[29,127,128],{},"apps\u002Fv1","; CRDs use their own group paths.",[116,131,132,134],{},[119,133,53],{},": The resource type. Must match an API type registered in your cluster.",[116,136,137,139,140,143],{},[119,138,64],{},": At minimum, a ",[29,141,142],{},"name",". Labels and annotations are strongly recommended.",[116,145,146,148,149,151],{},[119,147,102],{},": The desired state. The structure depends entirely on the resource ",[29,150,53],{},".",[10,153,154,155,158],{},"Omitting any of these fields produces a validation error at apply time. The ",[29,156,157],{},"metadata.name"," must be unique within its namespace for most resource types.",[14,160,162],{"id":161},"deployment-manifest-pattern","Deployment Manifest Pattern",[10,164,165],{},"The Deployment is the most common workload resource. A production-grade deployment includes replicas, update strategy, resource limits, health checks, and environment configuration:",[22,167,169],{"className":24,"code":168,"language":26,"meta":27,"style":27},"apiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: api-server\n  labels:\n    app: api-server\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: api-server\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxUnavailable: 1\n      maxSurge: 1\n  template:\n    metadata:\n      labels:\n        app: api-server\n    spec:\n      containers:\n        - name: api\n          image: registry.example.com\u002Fapi:v1.2.0\n          ports:\n            - containerPort: 3000\n          resources:\n            requests:\n              cpu: 100m\n              memory: 128Mi\n            limits:\n              cpu: 500m\n              memory: 512Mi\n          livenessProbe:\n            httpGet:\n              path: \u002Fhealthz\n              port: 3000\n            initialDelaySeconds: 10\n            periodSeconds: 15\n          readinessProbe:\n            httpGet:\n              path: \u002Fready\n              port: 3000\n            initialDelaySeconds: 5\n            periodSeconds: 10\n          env:\n            - name: NODE_ENV\n              value: production\n            - name: DATABASE_URL\n              valueFrom:\n                secretKeyRef:\n                  name: api-secrets\n                  key: database-url\n",[29,170,171,179,187,193,201,207,215,221,232,240,248,258,266,277,285,296,306,314,322,330,340,348,356,369,380,388,402,410,418,429,440,448,458,468,476,484,495,505,516,527,535,542,552,561,571,580,588,600,611,623,631,639,650],{"__ignoreMap":27},[32,172,173,175,177],{"class":34,"line":35},[32,174,39],{"class":38},[32,176,43],{"class":42},[32,178,47],{"class":46},[32,180,181,183,185],{"class":34,"line":50},[32,182,53],{"class":38},[32,184,43],{"class":42},[32,186,58],{"class":46},[32,188,189,191],{"class":34,"line":61},[32,190,64],{"class":38},[32,192,67],{"class":42},[32,194,195,197,199],{"class":34,"line":70},[32,196,73],{"class":38},[32,198,43],{"class":42},[32,200,78],{"class":46},[32,202,203,205],{"class":34,"line":81},[32,204,84],{"class":38},[32,206,67],{"class":42},[32,208,209,211,213],{"class":34,"line":89},[32,210,92],{"class":38},[32,212,43],{"class":42},[32,214,78],{"class":46},[32,216,217,219],{"class":34,"line":99},[32,218,102],{"class":38},[32,220,67],{"class":42},[32,222,223,226,228],{"class":34,"line":107},[32,224,225],{"class":38},"  replicas",[32,227,43],{"class":42},[32,229,231],{"class":230},"sj4cs","3\n",[32,233,235,238],{"class":34,"line":234},9,[32,236,237],{"class":38},"  selector",[32,239,67],{"class":42},[32,241,243,246],{"class":34,"line":242},10,[32,244,245],{"class":38},"    matchLabels",[32,247,67],{"class":42},[32,249,251,254,256],{"class":34,"line":250},11,[32,252,253],{"class":38},"      app",[32,255,43],{"class":42},[32,257,78],{"class":46},[32,259,261,264],{"class":34,"line":260},12,[32,262,263],{"class":38},"  strategy",[32,265,67],{"class":42},[32,267,269,272,274],{"class":34,"line":268},13,[32,270,271],{"class":38},"    type",[32,273,43],{"class":42},[32,275,276],{"class":46},"RollingUpdate\n",[32,278,280,283],{"class":34,"line":279},14,[32,281,282],{"class":38},"    rollingUpdate",[32,284,67],{"class":42},[32,286,288,291,293],{"class":34,"line":287},15,[32,289,290],{"class":38},"      maxUnavailable",[32,292,43],{"class":42},[32,294,295],{"class":230},"1\n",[32,297,299,302,304],{"class":34,"line":298},16,[32,300,301],{"class":38},"      maxSurge",[32,303,43],{"class":42},[32,305,295],{"class":230},[32,307,309,312],{"class":34,"line":308},17,[32,310,311],{"class":38},"  template",[32,313,67],{"class":42},[32,315,317,320],{"class":34,"line":316},18,[32,318,319],{"class":38},"    metadata",[32,321,67],{"class":42},[32,323,325,328],{"class":34,"line":324},19,[32,326,327],{"class":38},"      labels",[32,329,67],{"class":42},[32,331,333,336,338],{"class":34,"line":332},20,[32,334,335],{"class":38},"        app",[32,337,43],{"class":42},[32,339,78],{"class":46},[32,341,343,346],{"class":34,"line":342},21,[32,344,345],{"class":38},"    spec",[32,347,67],{"class":42},[32,349,351,354],{"class":34,"line":350},22,[32,352,353],{"class":38},"      containers",[32,355,67],{"class":42},[32,357,359,362,364,366],{"class":34,"line":358},23,[32,360,361],{"class":42},"        - ",[32,363,142],{"class":38},[32,365,43],{"class":42},[32,367,368],{"class":46},"api\n",[32,370,372,375,377],{"class":34,"line":371},24,[32,373,374],{"class":38},"          image",[32,376,43],{"class":42},[32,378,379],{"class":46},"registry.example.com\u002Fapi:v1.2.0\n",[32,381,383,386],{"class":34,"line":382},25,[32,384,385],{"class":38},"          ports",[32,387,67],{"class":42},[32,389,391,394,397,399],{"class":34,"line":390},26,[32,392,393],{"class":42},"            - ",[32,395,396],{"class":38},"containerPort",[32,398,43],{"class":42},[32,400,401],{"class":230},"3000\n",[32,403,405,408],{"class":34,"line":404},27,[32,406,407],{"class":38},"          resources",[32,409,67],{"class":42},[32,411,413,416],{"class":34,"line":412},28,[32,414,415],{"class":38},"            requests",[32,417,67],{"class":42},[32,419,421,424,426],{"class":34,"line":420},29,[32,422,423],{"class":38},"              cpu",[32,425,43],{"class":42},[32,427,428],{"class":46},"100m\n",[32,430,432,435,437],{"class":34,"line":431},30,[32,433,434],{"class":38},"              memory",[32,436,43],{"class":42},[32,438,439],{"class":46},"128Mi\n",[32,441,443,446],{"class":34,"line":442},31,[32,444,445],{"class":38},"            limits",[32,447,67],{"class":42},[32,449,451,453,455],{"class":34,"line":450},32,[32,452,423],{"class":38},[32,454,43],{"class":42},[32,456,457],{"class":46},"500m\n",[32,459,461,463,465],{"class":34,"line":460},33,[32,462,434],{"class":38},[32,464,43],{"class":42},[32,466,467],{"class":46},"512Mi\n",[32,469,471,474],{"class":34,"line":470},34,[32,472,473],{"class":38},"          livenessProbe",[32,475,67],{"class":42},[32,477,479,482],{"class":34,"line":478},35,[32,480,481],{"class":38},"            httpGet",[32,483,67],{"class":42},[32,485,487,490,492],{"class":34,"line":486},36,[32,488,489],{"class":38},"              path",[32,491,43],{"class":42},[32,493,494],{"class":46},"\u002Fhealthz\n",[32,496,498,501,503],{"class":34,"line":497},37,[32,499,500],{"class":38},"              port",[32,502,43],{"class":42},[32,504,401],{"class":230},[32,506,508,511,513],{"class":34,"line":507},38,[32,509,510],{"class":38},"            initialDelaySeconds",[32,512,43],{"class":42},[32,514,515],{"class":230},"10\n",[32,517,519,522,524],{"class":34,"line":518},39,[32,520,521],{"class":38},"            periodSeconds",[32,523,43],{"class":42},[32,525,526],{"class":230},"15\n",[32,528,530,533],{"class":34,"line":529},40,[32,531,532],{"class":38},"          readinessProbe",[32,534,67],{"class":42},[32,536,538,540],{"class":34,"line":537},41,[32,539,481],{"class":38},[32,541,67],{"class":42},[32,543,545,547,549],{"class":34,"line":544},42,[32,546,489],{"class":38},[32,548,43],{"class":42},[32,550,551],{"class":46},"\u002Fready\n",[32,553,555,557,559],{"class":34,"line":554},43,[32,556,500],{"class":38},[32,558,43],{"class":42},[32,560,401],{"class":230},[32,562,564,566,568],{"class":34,"line":563},44,[32,565,510],{"class":38},[32,567,43],{"class":42},[32,569,570],{"class":230},"5\n",[32,572,574,576,578],{"class":34,"line":573},45,[32,575,521],{"class":38},[32,577,43],{"class":42},[32,579,515],{"class":230},[32,581,583,586],{"class":34,"line":582},46,[32,584,585],{"class":38},"          env",[32,587,67],{"class":42},[32,589,591,593,595,597],{"class":34,"line":590},47,[32,592,393],{"class":42},[32,594,142],{"class":38},[32,596,43],{"class":42},[32,598,599],{"class":46},"NODE_ENV\n",[32,601,603,606,608],{"class":34,"line":602},48,[32,604,605],{"class":38},"              value",[32,607,43],{"class":42},[32,609,610],{"class":46},"production\n",[32,612,614,616,618,620],{"class":34,"line":613},49,[32,615,393],{"class":42},[32,617,142],{"class":38},[32,619,43],{"class":42},[32,621,622],{"class":46},"DATABASE_URL\n",[32,624,626,629],{"class":34,"line":625},50,[32,627,628],{"class":38},"              valueFrom",[32,630,67],{"class":42},[32,632,634,637],{"class":34,"line":633},51,[32,635,636],{"class":38},"                secretKeyRef",[32,638,67],{"class":42},[32,640,642,645,647],{"class":34,"line":641},52,[32,643,644],{"class":38},"                  name",[32,646,43],{"class":42},[32,648,649],{"class":46},"api-secrets\n",[32,651,653,656,658],{"class":34,"line":652},53,[32,654,655],{"class":38},"                  key",[32,657,43],{"class":42},[32,659,660],{"class":46},"database-url\n",[10,662,663],{},"Key conventions to follow:",[113,665,666,672,678],{},[116,667,668,671],{},[119,669,670],{},"Always set resource requests and limits."," Without limits, a single pod can consume all node resources. Without requests, the scheduler cannot make informed placement decisions.",[116,673,674,677],{},[119,675,676],{},"Always define both liveness and readiness probes."," Liveness detects deadlocked processes; readiness controls traffic routing during startup and deployments.",[116,679,680,687],{},[119,681,682,683,686],{},"Use ",[29,684,685],{},"valueFrom"," for secrets."," Never hardcode sensitive values directly in the manifest.",[14,689,691],{"id":690},"service-and-ingress-pairing","Service and Ingress Pairing",[10,693,694],{},"A Deployment creates pods, but pods are not directly addressable from outside the cluster. You need a Service to provide a stable endpoint and an Ingress to expose it:",[22,696,698],{"className":24,"code":697,"language":26,"meta":27,"style":27},"apiVersion: v1\nkind: Service\nmetadata:\n  name: api-server\nspec:\n  selector:\n    app: api-server\n  ports:\n    - port: 80\n      targetPort: 3000\n  type: ClusterIP\n---\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: api-server\n  annotations:\n    cert-manager.io\u002Fcluster-issuer: letsencrypt-prod\nspec:\n  tls:\n    - hosts:\n        - api.example.com\n      secretName: api-tls\n  rules:\n    - host: api.example.com\n      http:\n        paths:\n          - path: \u002F\n            pathType: Prefix\n            backend:\n              service:\n                name: api-server\n                port:\n                  number: 80\n",[29,699,700,709,718,724,732,738,744,752,759,772,781,791,797,806,815,821,829,836,846,852,859,868,875,885,892,903,910,917,930,940,947,954,963,970],{"__ignoreMap":27},[32,701,702,704,706],{"class":34,"line":35},[32,703,39],{"class":38},[32,705,43],{"class":42},[32,707,708],{"class":46},"v1\n",[32,710,711,713,715],{"class":34,"line":50},[32,712,53],{"class":38},[32,714,43],{"class":42},[32,716,717],{"class":46},"Service\n",[32,719,720,722],{"class":34,"line":61},[32,721,64],{"class":38},[32,723,67],{"class":42},[32,725,726,728,730],{"class":34,"line":70},[32,727,73],{"class":38},[32,729,43],{"class":42},[32,731,78],{"class":46},[32,733,734,736],{"class":34,"line":81},[32,735,102],{"class":38},[32,737,67],{"class":42},[32,739,740,742],{"class":34,"line":89},[32,741,237],{"class":38},[32,743,67],{"class":42},[32,745,746,748,750],{"class":34,"line":99},[32,747,92],{"class":38},[32,749,43],{"class":42},[32,751,78],{"class":46},[32,753,754,757],{"class":34,"line":107},[32,755,756],{"class":38},"  ports",[32,758,67],{"class":42},[32,760,761,764,767,769],{"class":34,"line":234},[32,762,763],{"class":42},"    - ",[32,765,766],{"class":38},"port",[32,768,43],{"class":42},[32,770,771],{"class":230},"80\n",[32,773,774,777,779],{"class":34,"line":242},[32,775,776],{"class":38},"      targetPort",[32,778,43],{"class":42},[32,780,401],{"class":230},[32,782,783,786,788],{"class":34,"line":250},[32,784,785],{"class":38},"  type",[32,787,43],{"class":42},[32,789,790],{"class":46},"ClusterIP\n",[32,792,793],{"class":34,"line":260},[32,794,796],{"class":795},"sScJk","---\n",[32,798,799,801,803],{"class":34,"line":268},[32,800,39],{"class":38},[32,802,43],{"class":42},[32,804,805],{"class":46},"networking.k8s.io\u002Fv1\n",[32,807,808,810,812],{"class":34,"line":279},[32,809,53],{"class":38},[32,811,43],{"class":42},[32,813,814],{"class":46},"Ingress\n",[32,816,817,819],{"class":34,"line":287},[32,818,64],{"class":38},[32,820,67],{"class":42},[32,822,823,825,827],{"class":34,"line":298},[32,824,73],{"class":38},[32,826,43],{"class":42},[32,828,78],{"class":46},[32,830,831,834],{"class":34,"line":308},[32,832,833],{"class":38},"  annotations",[32,835,67],{"class":42},[32,837,838,841,843],{"class":34,"line":316},[32,839,840],{"class":38},"    cert-manager.io\u002Fcluster-issuer",[32,842,43],{"class":42},[32,844,845],{"class":46},"letsencrypt-prod\n",[32,847,848,850],{"class":34,"line":324},[32,849,102],{"class":38},[32,851,67],{"class":42},[32,853,854,857],{"class":34,"line":332},[32,855,856],{"class":38},"  tls",[32,858,67],{"class":42},[32,860,861,863,866],{"class":34,"line":342},[32,862,763],{"class":42},[32,864,865],{"class":38},"hosts",[32,867,67],{"class":42},[32,869,870,872],{"class":34,"line":350},[32,871,361],{"class":42},[32,873,874],{"class":46},"api.example.com\n",[32,876,877,880,882],{"class":34,"line":358},[32,878,879],{"class":38},"      secretName",[32,881,43],{"class":42},[32,883,884],{"class":46},"api-tls\n",[32,886,887,890],{"class":34,"line":371},[32,888,889],{"class":38},"  rules",[32,891,67],{"class":42},[32,893,894,896,899,901],{"class":34,"line":382},[32,895,763],{"class":42},[32,897,898],{"class":38},"host",[32,900,43],{"class":42},[32,902,874],{"class":46},[32,904,905,908],{"class":34,"line":390},[32,906,907],{"class":38},"      http",[32,909,67],{"class":42},[32,911,912,915],{"class":34,"line":404},[32,913,914],{"class":38},"        paths",[32,916,67],{"class":42},[32,918,919,922,925,927],{"class":34,"line":412},[32,920,921],{"class":42},"          - ",[32,923,924],{"class":38},"path",[32,926,43],{"class":42},[32,928,929],{"class":46},"\u002F\n",[32,931,932,935,937],{"class":34,"line":420},[32,933,934],{"class":38},"            pathType",[32,936,43],{"class":42},[32,938,939],{"class":46},"Prefix\n",[32,941,942,945],{"class":34,"line":431},[32,943,944],{"class":38},"            backend",[32,946,67],{"class":42},[32,948,949,952],{"class":34,"line":442},[32,950,951],{"class":38},"              service",[32,953,67],{"class":42},[32,955,956,959,961],{"class":34,"line":450},[32,957,958],{"class":38},"                name",[32,960,43],{"class":42},[32,962,78],{"class":46},[32,964,965,968],{"class":34,"line":460},[32,966,967],{"class":38},"                port",[32,969,67],{"class":42},[32,971,972,975,977],{"class":34,"line":470},[32,973,974],{"class":38},"                  number",[32,976,43],{"class":42},[32,978,771],{"class":230},[10,980,981,982,985],{},"The ",[29,983,984],{},"---"," separator lets you define multiple resources in one file—a common convention for resources that are always deployed together.",[14,987,989],{"id":988},"best-practices","Best Practices",[10,991,992,995,996,999],{},[119,993,994],{},"Pin image tags."," Avoid ",[29,997,998],{},":latest"," in production—it makes rollbacks impossible and creates reproducibility issues. Use semantic version tags or SHA digests for maximum certainty.",[10,1001,1002,1005,1006,1009,1010,1013,1014,151],{},[119,1003,1004],{},"Use namespaces logically."," Group resources by environment (",[29,1007,1008],{},"production",", ",[29,1011,1012],{},"staging",") or by team. Never put all workloads in ",[29,1015,1016],{},"default",[10,1018,1019,1022,1023,1009,1026,1009,1029,1009,1032,1035],{},[119,1020,1021],{},"Label consistently."," Define a labeling convention (",[29,1024,1025],{},"app",[29,1027,1028],{},"version",[29,1030,1031],{},"team",[29,1033,1034],{},"environment",") and apply it across all resources. Labels are the primary mechanism for selection and filtering.",[10,1037,1038,1041,1042,1045,1046,1049,1050,1053],{},[119,1039,1040],{},"Validate before applying."," Use ",[29,1043,1044],{},"kubectl apply --dry-run=client"," or tools like ",[29,1047,1048],{},"kubeval"," and ",[29,1051,1052],{},"kubeconform"," to validate manifests against the Kubernetes API schema before pushing to the cluster.",[10,1055,1056,1059],{},[119,1057,1058],{},"Store manifests in Git."," GitOps tools like ArgoCD and Flux watch a Git repository and apply changes automatically. Storing manifests in version control provides audit trails and rollback capability.",[10,1061,1062,1063,1068],{},"For converting between JSON and YAML formats when working with Kubernetes configs, the ",[1064,1065,1067],"a",{"href":1066},"\u002Ftools\u002Fjson-yaml","JSON-YAML Converter tool"," handles expansion and validation of multi-document files.",[1070,1071,1072],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":27,"searchDepth":50,"depth":50,"links":1074},[1075,1076,1077,1078],{"id":16,"depth":50,"text":17},{"id":161,"depth":50,"text":162},{"id":690,"depth":50,"text":691},{"id":988,"depth":50,"text":989},"2026-05-28","Practical guide to structuring K8s deployment manifests with YAML best practices.","md",{},true,"\u002Fguides\u002Fyaml-to-kubernetes-manifests",{"title":5,"description":1080},"guides\u002Fyaml-to-kubernetes-manifests","Cgs9Eg2EZP3EvNSU3MUvheGGhFXeZV5F5MQ70GtimY8",1780401338629]