# Kubernetes In-Place Pod Resource Updates And Vertical Pod Resize Source: https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html Published: 2026-08-16T04:07:21.000-07:00 Updated: 2026-10-10T10:39:40.121-07:00 Author: Unknown Topics: autoscaling, devops, kubernetes, resource-management, sre, vertical-scaling, vpa **Listen to this article** AI-narrated article - 19 min 42 sec. Prose is preserved; code and diagram cues refer to the examples below. Your browser does not support audio playback. [Open the MP3](https://manomatt.github.io/devopsdreams-audio/audio/post-7278216743243491204-v1.mp3). [Read the narration transcript](https://manomatt.github.io/devopsdreams-audio/transcripts/post-7278216743243491204-v1.html) - [Open audio](https://manomatt.github.io/devopsdreams-audio/audio/post-7278216743243491204-v1.mp3) # Kubernetes In-Place Pod Resource Updates And Vertical Pod Resize Kubernetes can now resize a running Pod's CPU and memory without replacing it. This deep dive explains the resize API, kubelet behavior, failure states, VPA integration, and production limits. ## TL;DR [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-1) Kubernetes in-place Pod resource updates make container CPU and memory requests and limits mutable through the Pod resize subresource. Kubernetes records the requested values as desired state, while kubelet reports the resources actually configured on the existing node. CPU changes can usually avoid restarts; memory changes need deliberate resize policies and remain riskier, especially when decreasing limits. The feature is stable from Kubernetes 1.35, but it does not reschedule an undersized Pod, change its QoS class, update its controller template, or guarantee that application runtimes adapt automatically. ![Kubernetes Pod changing CPU and memory resources in place while retaining its identity, network, and storage.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjYzMCIgdmlld0JveD0iMCAwIDEyMDAgNjMwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+S3ViZXJuZXRlcyBpbi1wbGFjZSBQb2QgcmVzb3VyY2UgdXBkYXRlczwvdGl0bGU+CiAgPGRlc2MgaWQ9ImRlc2MiPkEgS3ViZXJuZXRlcyBQb2QgcmV0YWlucyBpdHMgaWRlbnRpdHkgd2hpbGUgQ1BVIGFuZCBtZW1vcnkgbWV0ZXJzIGV4cGFuZCBhcm91bmQgaXQuPC9kZXNjPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiZyIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzA3MWIzNSIvPjxzdG9wIG9mZnNldD0iMC41OCIgc3RvcC1jb2xvcj0iIzE3M2M3OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4N2Y4MyIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImNwdSIgeDE9IjAiIHgyPSIxIj48c3RvcCBzdG9wLWNvbG9yPSIjNWVlYWQ0Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjJkM2VlIi8+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibWVtIiB4MT0iMCIgeDI9IjEiPjxzdG9wIHN0b3AtY29sb3I9IiNmYmJmMjQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmYjcxODUiLz48L2xpbmVhckdyYWRpZW50PgogICAgPGZpbHRlciBpZD0ic2hhZG93IiB4PSItMzAlIiB5PSItMzAlIiB3aWR0aD0iMTYwJSIgaGVpZ2h0PSIxNjAlIj48ZmVEcm9wU2hhZG93IGR4PSIwIiBkeT0iMTQiIHN0ZERldmlhdGlvbj0iMTgiIGZsb29kLWNvbG9yPSIjMDIwNjE3IiBmbG9vZC1vcGFjaXR5PSIuNDUiLz48L2ZpbHRlcj4KICA8L2RlZnM+CiAgPHJlY3Qgd2lkdGg9IjEyMDAiIGhlaWdodD0iNjMwIiByeD0iMzAiIGZpbGw9InVybCgjYmcpIi8+CiAgPGcgb3BhY2l0eT0iLjEiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2Q5ZjdmZiI+PHBhdGggZD0iTTAgOTBIMTIwME0wIDE4MEgxMjAwTTAgMjcwSDEyMDBNMCAzNjBIMTIwME0wIDQ1MEgxMjAwTTAgNTQwSDEyMDAiLz48cGF0aCBkPSJNMTAwIDBWNjMwTTIwMCAwVjYzME0zMDAgMFY2MzBNNDAwIDBWNjMwTTUwMCAwVjYzME02MDAgMFY2MzBNNzAwIDBWNjMwTTgwMCAwVjYzME05MDAgMFY2MzBNMTAwMCAwVjYzME0xMTAwIDBWNjMwIi8+PC9nPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYyIDcwKSI+CiAgICA8dGV4dCB4PSIwIiB5PSIyMiIgZmlsbD0iIzY3ZThmOSIgZm9udC1mYW1pbHk9IlNlZ29lIFVJLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGxldHRlci1zcGFjaW5nPSIzIj5LVUJFUk5FVEVTIERFRVAgRElWRTwvdGV4dD4KICAgIDx0ZXh0IHg9IjAiIHk9Ijg5IiBmaWxsPSIjZmZmIiBmb250LWZhbWlseT0iU2Vnb2UgVUksQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSI1MiIgZm9udC13ZWlnaHQ9IjgwMCI+SW4tUGxhY2UgUG9kPC90ZXh0PgogICAgPHRleHQgeD0iMCIgeT0iMTQ4IiBmaWxsPSIjZmZmIiBmb250LWZhbWlseT0iU2Vnb2UgVUksQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSI1MiIgZm9udC13ZWlnaHQ9IjgwMCI+UmVzb3VyY2UgVXBkYXRlczwvdGV4dD4KICAgIDx0ZXh0IHg9IjAiIHk9IjIwNyIgZmlsbD0iI2NkZWVmZiIgZm9udC1mYW1pbHk9IlNlZ29lIFVJLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMjQiPlJlc2l6ZSBDUFUgYW5kIG1lbW9yeSB3aXRob3V0IHJlcGxhY2luZyB0aGUgUG9kPC90ZXh0PgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyNjEpIiBmb250LWZhbWlseT0iU2Vnb2UgVUksQXJpYWwsc2Fucy1zZXJpZiI+CiAgICAgIDxyZWN0IHdpZHRoPSI0OTAiIGhlaWdodD0iNzIiIHJ4PSIxOCIgZmlsbD0iIzA2MTUyYiIgZmlsbC1vcGFjaXR5PSIuNzIiIHN0cm9rZT0iIzVlZWFkNCIvPjx0ZXh0IHg9IjI0IiB5PSIzMCIgZmlsbD0iIzk0YTNiOCIgZm9udC1zaXplPSIxNSIgZm9udC13ZWlnaHQ9IjcwMCI+UE9EIElERU5USVRZPC90ZXh0Pjx0ZXh0IHg9IjI0IiB5PSI1NSIgZmlsbD0iI2ZmZiIgZm9udC1zaXplPSIyMCIgZm9udC13ZWlnaHQ9IjcwMCI+VUlEIMK3IElQIMK3IHZvbHVtZXMgwrcgbm9kZSBzdGF5IGludGFjdDwvdGV4dD4KICAgICAgPHJlY3QgeT0iOTEiIHdpZHRoPSI0OTAiIGhlaWdodD0iNzIiIHJ4PSIxOCIgZmlsbD0iIzA2MTUyYiIgZmlsbC1vcGFjaXR5PSIuNzIiIHN0cm9rZT0iI2ZiYmYyNCIvPjx0ZXh0IHg9IjI0IiB5PSIxMjEiIGZpbGw9IiM5NGEzYjgiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlJFU09VUkNFIEVOVkVMT1BFPC90ZXh0Pjx0ZXh0IHg9IjI0IiB5PSIxNDYiIGZpbGw9IiNmZmYiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPlJlcXVlc3RzIGFuZCBsaW1pdHMgYmVjb21lIG11dGFibGU8L3RleHQ+CiAgICA8L2c+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY2NSA3OCkiIGZpbHRlcj0idXJsKCNzaGFkb3cpIiBmb250LWZhbWlseT0iU2Vnb2UgVUksQXJpYWwsc2Fucy1zZXJpZiI+CiAgICA8cmVjdCB3aWR0aD0iNDY1IiBoZWlnaHQ9IjQ3NSIgcng9IjMyIiBmaWxsPSIjMDcxYTMzIiBmaWxsLW9wYWNpdHk9Ii45IiBzdHJva2U9IiM4YmRjZjIiIHN0cm9rZS13aWR0aD0iMiIvPgogICAgPHRleHQgeD0iMjMyIiB5PSI0NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2E1ZjNmYyIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCI+U0FNRSBSVU5OSU5HIFBPRDwvdGV4dD4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyOCA3OCkiPgogICAgICA8cG9seWdvbiBwb2ludHM9IjEwNCwxMiAxODIsNTIgMjAyLDE0MiAxNDcsMjEwIDYxLDIxMCA2LDE0MiAyNiw1MiIgZmlsbD0iIzMyNmNlNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDQgMTEyKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICAgIDxjaXJjbGUgcj0iMzAiIHN0cm9rZS13aWR0aD0iOCIvPgogICAgICAgIDxjaXJjbGUgcj0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMyIvPgogICAgICAgIDxnIHN0cm9rZS13aWR0aD0iOCI+CiAgICAgICAgICA8cGF0aCBkPSJNMC0yOVYtNjEiLz4KICAgICAgICAgIDxwYXRoIGQ9Ik0wLTI5Vi02MSIgdHJhbnNmb3JtPSJyb3RhdGUoNTEuNDMpIi8+CiAgICAgICAgICA8cGF0aCBkPSJNMC0yOVYtNjEiIHRyYW5zZm9ybT0icm90YXRlKDEwMi44NikiLz4KICAgICAgICAgIDxwYXRoIGQ9Ik0wLTI5Vi02MSIgdHJhbnNmb3JtPSJyb3RhdGUoMTU0LjI5KSIvPgogICAgICAgICAgPHBhdGggZD0iTTAtMjlWLTYxIiB0cmFuc2Zvcm09InJvdGF0ZSgyMDUuNzEpIi8+CiAgICAgICAgICA8cGF0aCBkPSJNMC0yOVYtNjEiIHRyYW5zZm9ybT0icm90YXRlKDI1Ny4xNCkiLz4KICAgICAgICAgIDxwYXRoIGQ9Ik0wLTI5Vi02MSIgdHJhbnNmb3JtPSJyb3RhdGUoMzA4LjU3KSIvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDggMzQ4KSI+CiAgICAgIDx0ZXh0IHg9IjAiIHk9IjAiIGZpbGw9IiNkZmZiZmYiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI3MDAiPkNQVTwvdGV4dD48cmVjdCB4PSI2MCIgeT0iLTE1IiB3aWR0aD0iMzEwIiBoZWlnaHQ9IjIyIiByeD0iMTEiIGZpbGw9IiMxNzMwNGQiLz48cmVjdCB4PSI2MCIgeT0iLTE1IiB3aWR0aD0iMjYyIiBoZWlnaHQ9IjIyIiByeD0iMTEiIGZpbGw9InVybCgjY3B1KSIvPjx0ZXh0IHg9IjM4NSIgeT0iMyIgZmlsbD0iIzVlZWFkNCIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjgwMCI+4oaRPC90ZXh0PgogICAgICA8dGV4dCB4PSIwIiB5PSI1NSIgZmlsbD0iI2ZmZjFkNCIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjcwMCI+TUVNPC90ZXh0PjxyZWN0IHg9IjYwIiB5PSI0MCIgd2lkdGg9IjMxMCIgaGVpZ2h0PSIyMiIgcng9IjExIiBmaWxsPSIjMTczMDRkIi8+PHJlY3QgeD0iNjAiIHk9IjQwIiB3aWR0aD0iMjE4IiBoZWlnaHQ9IjIyIiByeD0iMTEiIGZpbGw9InVybCgjbWVtKSIvPjx0ZXh0IHg9IjM4NSIgeT0iNTgiIGZpbGw9IiNmYmJmMjQiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI4MDAiPuKGkTwvdGV4dD4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPg==) In-place Pod resize separates resource changes from Pod replacement: Kubernetes can change CPU and memory on the existing node while preserving Pod identity. ## Vertical Scaling No Longer Has to Mean Pod Replacement [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-2) For most of Kubernetes' history, changing a container's CPU or memory meant replacing its Pod. A Deployment or StatefulSet controller created a new Pod from an updated template; the scheduler placed it; kubelet rebuilt the sandbox; and the application started again. That model is simple, but it is expensive for stateful services, long-running jobs, game servers, pre-warmed workers, and latency-sensitive processes. [In-place Pod resize](https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/) breaks that coupling. CPU and memory requests and limits become mutable on the existing Pod. The Pod stays on its node and retains its UID, IP address, volumes, and sandbox. Depending on the container's policy and runtime behavior, even the container can continue running. The feature, also known as **In-Place Pod Vertical Scaling**, entered alpha in Kubernetes 1.27, became beta and default-enabled in 1.33, and [graduated to stable in Kubernetes 1.35](https://kubernetes.io/blog/2025/12/19/kubernetes-v1-35-in-place-pod-resize-ga/). Stable does not mean every resize is immediate or restart-free. It means the API and core behavior are production-grade; capacity, runtime, QoS, and workload-controller constraints still matter. **Version and client boundaries:** | Component | Minimum or feature state | Why it matters | | --- | --- | --- | | Kubernetes server | 1.33 or later for the current workflow | The feature was beta in 1.33 and stable in 1.35. | | Kubernetes 1.35+ | Stable, enabled by default | Container-level CPU and memory resize is GA. | | `kubectl` | 1.32 or later | Older clients do not support `--subresource=resize`. | | Kubernetes 1.36 Pod-level resize | Separate beta feature | It resizes a Pod-level resource budget rather than only container fields. | Start with the [official resize task](https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/) and confirm the versions you actually operate: ```bash kubectl version kubectl get nodes \ -o custom-columns='NAME:.metadata.name,KUBELET:.status.nodeInfo.kubeletVersion,RUNTIME:.status.nodeInfo.containerRuntimeVersion' ``` ## The Core Contract: Desired Resources Are Not Actual Resources [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-3) The most important architectural change is not that `resources` became mutable. It is that Kubernetes now exposes a deliberate gap between **what you requested** and **what kubelet has applied**. - `spec.containers[*].resources` is the desired CPU and memory state. - `status.containerStatuses[*].resources` is the resource state currently configured for the container. - `status.containerStatuses[*].allocatedResources` is kubelet-confirmed allocation data used mainly for internal scheduling decisions. - `status.conditions` explains whether a resize is pending or in progress. An accepted API patch only proves that Kubernetes stored the desired state. It does not prove that the node had capacity, the runtime changed its cgroups, or the application adapted. ![Execution path from kubectl resize request through the API server, scheduler accounting, kubelet, container runtime, and cgroups.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAwIiBoZWlnaHQ9Ijc2MCIgdmlld0JveD0iMCAwIDEyMDAgNzYwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+S3ViZXJuZXRlcyBpbi1wbGFjZSBQb2QgcmVzaXplIGV4ZWN1dGlvbiBwYXRoPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+QSBLdWJlcm5ldGVzLWJyYW5kZWQgYXJjaGl0ZWN0dXJlIGRpYWdyYW0gc2hvd2luZyBhIHJlc2l6ZSByZXF1ZXN0IG1vdmluZyBmcm9tIGt1YmVjdGwgb3IgVlBBIHRocm91Z2ggdGhlIEFQSSBzZXJ2ZXIgYW5kIHNjaGVkdWxlciwgdGhlbiB0byBrdWJlbGV0LCB0aGUgY29udGFpbmVyIHJ1bnRpbWUsIExpbnV4IGNncm91cHMsIGFuZCBiYWNrIGFzIGFjdHVhbCBQb2Qgc3RhdHVzLjwvZGVzYz4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFnZUJnIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2Y3ZmFmZiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlNWVmZmYiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImNvbnRyb2xCZyIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjEiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzMjZjZTUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjQ1NGI4Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJub2RlQmciIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZjhmYmZmIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2U5ZjFmZiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIgaWQ9InNoYWRvdyIgeD0iLTI1JSIgeT0iLTI1JSIgd2lkdGg9IjE1MCUiIGhlaWdodD0iMTYwJSI+CiAgICAgIDxmZURyb3BTaGFkb3cgZHg9IjAiIGR5PSIxMCIgc3RkRGV2aWF0aW9uPSIxMyIgZmxvb2QtY29sb3I9IiMxNzM0NjUiIGZsb29kLW9wYWNpdHk9Ii4yMiIvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyIGlkPSJzb2Z0U2hhZG93IiB4PSItMjUlIiB5PSItMjUlIiB3aWR0aD0iMTUwJSIgaGVpZ2h0PSIxNjAlIj4KICAgICAgPGZlRHJvcFNoYWRvdyBkeD0iMCIgZHk9IjUiIHN0ZERldmlhdGlvbj0iNyIgZmxvb2QtY29sb3I9IiMxNzM0NjUiIGZsb29kLW9wYWNpdHk9Ii4xNiIvPgogICAgPC9maWx0ZXI+CiAgICA8bWFya2VyIGlkPSJibHVlQXJyb3ciIG1hcmtlcldpZHRoPSIxMSIgbWFya2VySGVpZ2h0PSIxMSIgcmVmWD0iOSIgcmVmWT0iNCIgb3JpZW50PSJhdXRvIj4KICAgICAgPHBhdGggZD0iTTAgMCAxMCA0IDAgOFoiIGZpbGw9IiMzMjZjZTUiLz4KICAgIDwvbWFya2VyPgogICAgPG1hcmtlciBpZD0id2hpdGVBcnJvdyIgbWFya2VyV2lkdGg9IjExIiBtYXJrZXJIZWlnaHQ9IjExIiByZWZYPSI5IiByZWZZPSI0IiBvcmllbnQ9ImF1dG8iPgogICAgICA8cGF0aCBkPSJNMCAwIDEwIDQgMCA4WiIgZmlsbD0iI2ZmZmZmZiIvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyIGlkPSJzdGF0dXNBcnJvdyIgbWFya2VyV2lkdGg9IjExIiBtYXJrZXJIZWlnaHQ9IjExIiByZWZYPSI5IiByZWZZPSI0IiBvcmllbnQ9ImF1dG8iPgogICAgICA8cGF0aCBkPSJNMCAwIDEwIDQgMCA4WiIgZmlsbD0iI2Y1OWUwYiIvPgogICAgPC9tYXJrZXI+CgogICAgPCEtLSBLdWJlcm5ldGVzIHNldmVuLXNwb2tlIHdoZWVsLCByZWRyYXduIGFzIG5hdGl2ZSB2ZWN0b3IgZ2VvbWV0cnkuIC0tPgogICAgPGcgaWQ9Imt1YmVXaGVlbCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICA8Y2lyY2xlIHI9IjI5IiBzdHJva2Utd2lkdGg9IjciLz4KICAgICAgPGNpcmNsZSByPSI5IiBmaWxsPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjMiLz4KICAgICAgPGcgc3Ryb2tlLXdpZHRoPSI3Ij4KICAgICAgICA8cGF0aCBkPSJNMC0yOFYtNTAiLz4KICAgICAgICA8cGF0aCBkPSJNMC0yOFYtNTAiIHRyYW5zZm9ybT0icm90YXRlKDUxLjQzKSIvPgogICAgICAgIDxwYXRoIGQ9Ik0wLTI4Vi01MCIgdHJhbnNmb3JtPSJyb3RhdGUoMTAyLjg2KSIvPgogICAgICAgIDxwYXRoIGQ9Ik0wLTI4Vi01MCIgdHJhbnNmb3JtPSJyb3RhdGUoMTU0LjI5KSIvPgogICAgICAgIDxwYXRoIGQ9Ik0wLTI4Vi01MCIgdHJhbnNmb3JtPSJyb3RhdGUoMjA1LjcxKSIvPgogICAgICAgIDxwYXRoIGQ9Ik0wLTI4Vi01MCIgdHJhbnNmb3JtPSJyb3RhdGUoMjU3LjE0KSIvPgogICAgICAgIDxwYXRoIGQ9Ik0wLTI4Vi01MCIgdHJhbnNmb3JtPSJyb3RhdGUoMzA4LjU3KSIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyBpZD0ia3ViZU1hcmsiPgogICAgICA8cG9seWdvbiBwb2ludHM9IjAsLTc4IDYxLC00OSA3NiwxNyAzNCw3MCAtMzQsNzAgLTc2LDE3IC02MSwtNDkiIGZpbGw9IiMzMjZjZTUiLz4KICAgICAgPHVzZSBocmVmPSIja3ViZVdoZWVsIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0icG9kTWFyayI+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMCwtMjkgMjMsLTE4IDI5LDcgMTMsMjYgLTEzLDI2IC0yOSw3IC0yMywtMTgiIGZpbGw9IiMzMjZjZTUiLz4KICAgICAgPGNpcmNsZSByPSIxMSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjQiLz4KICAgICAgPHBhdGggZD0iTTAtMTBWLTIwTTktNGw5LTRNNiA4bDcgOE0tNiA4bC03IDhNLTktNGwtOS00IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CiAgICA8L2c+CiAgPC9kZWZzPgoKICA8cmVjdCB3aWR0aD0iMTIwMCIgaGVpZ2h0PSI3NjAiIHJ4PSIzMCIgZmlsbD0idXJsKCNwYWdlQmcpIi8+CiAgPGcgb3BhY2l0eT0iLjIyIiBmaWxsPSJub25lIiBzdHJva2U9IiM5YmI5ZTgiPgogICAgPHBhdGggZD0iTTAgMTEwSDEyMDBNMCAyMjBIMTIwME0wIDMzMEgxMjAwTTAgNDQwSDEyMDBNMCA1NTBIMTIwME0wIDY2MEgxMjAwIi8+CiAgICA8cGF0aCBkPSJNMTIwIDBWNzYwTTI0MCAwVjc2ME0zNjAgMFY3NjBNNDgwIDBWNzYwTTYwMCAwVjc2ME03MjAgMFY3NjBNODQwIDBWNzYwTTk2MCAwVjc2ME0xMDgwIDBWNzYwIi8+CiAgPC9nPgoKICA8ZyBmb250LWZhbWlseT0iU2Vnb2UgVUksIEFyaWFsLCBzYW5zLXNlcmlmIj4KICAgIDx0ZXh0IHg9IjU0IiB5PSI1NCIgZmlsbD0iIzE3MzQ2NSIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9IjgwMCI+S3ViZXJuZXRlcyBpbi1wbGFjZSBQb2QgcmVzaXplPC90ZXh0PgogICAgPHRleHQgeD0iNTQiIHk9Ijg2IiBmaWxsPSIjNGI2NDg1IiBmb250LXNpemU9IjE3Ij5EZXNpcmVkIHJlc291cmNlcyBlbnRlciB0aHJvdWdoIHRoZSBjb250cm9sIHBsYW5lOyBhY3R1YWwgcmVzb3VyY2VzIHJldHVybiBmcm9tIHRoZSBleGlzdGluZyBub2RlLjwvdGV4dD4KCiAgICA8IS0tIFN0ZXAgMTogY2xpZW50IC0tPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDIgMTc4KSIgZmlsdGVyPSJ1cmwoI3NoYWRvdykiPgogICAgICA8cmVjdCB3aWR0aD0iMTk2IiBoZWlnaHQ9IjE2OCIgcng9IjI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMzMjZjZTUiIHN0cm9rZS13aWR0aD0iMyIvPgogICAgICA8Y2lyY2xlIGN4PSIzNCIgY3k9IjM0IiByPSIyMCIgZmlsbD0iIzMyNmNlNSIvPgogICAgICA8dGV4dCB4PSIzNCIgeT0iNDEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNmZmZmZmYiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI4MDAiPjE8L3RleHQ+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDk4IDU1KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzI2Y2U1IiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CiAgICAgICAgPHJlY3QgeD0iLTM1IiB5PSItMjEiIHdpZHRoPSI3MCIgaGVpZ2h0PSI0NSIgcng9IjciLz4KICAgICAgICA8cGF0aCBkPSJNLTE5IDgtNyAxNyAxNy04TS0yMiAzN0gyMiIvPgogICAgICA8L2c+CiAgICAgIDx0ZXh0IHg9Ijk4IiB5PSIxMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNzM0NjUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI4MDAiPmt1YmVjdGwgb3IgVlBBPC90ZXh0PgogICAgICA8dGV4dCB4PSI5OCIgeT0iMTM5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNWI3MTkwIiBmb250LXNpemU9IjE1Ij5QQVRDSCBQb2QgL3Jlc2l6ZTwvdGV4dD4KICAgIDwvZz4KCiAgICA8IS0tIEt1YmVybmV0ZXMgY29udHJvbCBwbGFuZSAtLT4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMxMCAxMjYpIiBmaWx0ZXI9InVybCgjc2hhZG93KSI+CiAgICAgIDxyZWN0IHdpZHRoPSIzNTQiIGhlaWdodD0iMzkwIiByeD0iMzAiIGZpbGw9InVybCgjY29udHJvbEJnKSIvPgogICAgICA8cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjM4NiIgcng9IjI4IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS1vcGFjaXR5PSIuMzQiIHN0cm9rZS13aWR0aD0iMiIvPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNzcgODgpIj4KICAgICAgICA8cG9seWdvbiBwb2ludHM9IjAsLTcwIDU1LC00NCA2OCwxNSAzMCw2MyAtMzAsNjMgLTY4LDE1IC01NSwtNDQiIGZpbGw9IiNmZmZmZmYiLz4KICAgICAgICA8ZyB0cmFuc2Zvcm09InNjYWxlKC44MikiPgogICAgICAgICAgPHVzZSBocmVmPSIja3ViZU1hcmsiLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPHRleHQgeD0iMTc3IiB5PSIxNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNmZmZmZmYiIGZvbnQtc2l6ZT0iMjMiIGZvbnQtd2VpZ2h0PSI4MDAiPkt1YmVybmV0ZXMgY29udHJvbCBwbGFuZTwvdGV4dD4KICAgICAgPHRleHQgeD0iMTc3IiB5PSIyMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNkYmU4ZmYiIGZvbnQtc2l6ZT0iMTUiPlZhbGlkYXRlLCBzdG9yZSwgYW5kIGFjY291bnQgZm9yIGludGVudDwvdGV4dD4KCiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0IDIzMykiIGZpbHRlcj0idXJsKCNzb2Z0U2hhZG93KSI+CiAgICAgICAgPHJlY3Qgd2lkdGg9IjMwNiIgaGVpZ2h0PSI2MiIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIi8+CiAgICAgICAgPGNpcmNsZSBjeD0iMzEiIGN5PSIzMSIgcj0iMTgiIGZpbGw9IiMzMjZjZTUiLz4KICAgICAgICA8dGV4dCB4PSIzMSIgeT0iMzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNmZmZmZmYiIGZvbnQtc2l6ZT0iMTciIGZvbnQtd2VpZ2h0PSI4MDAiPjI8L3RleHQ+CiAgICAgICAgPHRleHQgeD0iNjIiIHk9IjI3IiBmaWxsPSIjMTczNDY1IiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iODAwIj5BUEkgc2VydmVyPC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjYyIiB5PSI0NyIgZmlsbD0iIzViNzE5MCIgZm9udC1zaXplPSIxNCI+U3RvcmVzIGRlc2lyZWQgcmVxdWVzdHMgYW5kIGxpbWl0czwvdGV4dD4KICAgICAgPC9nPgogICAgICA8cGF0aCBkPSJNMTc3IDMwMFYzMTgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSIzIiBtYXJrZXItZW5kPSJ1cmwoI3doaXRlQXJyb3cpIi8+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0IDMyMSkiIGZpbHRlcj0idXJsKCNzb2Z0U2hhZG93KSI+CiAgICAgICAgPHJlY3Qgd2lkdGg9IjMwNiIgaGVpZ2h0PSI0OCIgcng9IjE0IiBmaWxsPSIjMTYzZjk1IiBzdHJva2U9IiM5MGI2ZmYiLz4KICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI0IiByPSIxNiIgZmlsbD0iI2ZmZmZmZiIvPgogICAgICAgIDx0ZXh0IHg9IjI3IiB5PSIzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzMyNmNlNSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjgwMCI+MzwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI1NCIgeT0iMjEiIGZpbGw9IiNmZmZmZmYiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI4MDAiPlNjaGVkdWxlciBhY2NvdW50aW5nPC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjU0IiB5PSIzOCIgZmlsbD0iI2RiZThmZiIgZm9udC1zaXplPSIxMiI+UHJvdGVjdHMgbm9kZSBjYXBhY2l0eSB3aGlsZSBzdGF0ZSBjb252ZXJnZXM8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KCiAgICA8IS0tIFdvcmtlciBub2RlIC0tPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzM4IDEyNikiIGZpbHRlcj0idXJsKCNzaGFkb3cpIj4KICAgICAgPHJlY3Qgd2lkdGg9IjQyMCIgaGVpZ2h0PSIzOTAiIHJ4PSIzMCIgZmlsbD0idXJsKCNub2RlQmcpIiBzdHJva2U9IiMzMjZjZTUiIHN0cm9rZS13aWR0aD0iMyIvPgogICAgICA8cmVjdCB4PSIxOCIgeT0iMTgiIHdpZHRoPSIzODQiIGhlaWdodD0iNTQiIHJ4PSIxNiIgZmlsbD0iIzE3MzQ2NSIvPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NyA0NSkgc2NhbGUoLjM2KSI+PHVzZSBocmVmPSIja3ViZU1hcmsiLz48L2c+CiAgICAgIDx0ZXh0IHg9IjgyIiB5PSI0MiIgZmlsbD0iI2ZmZmZmZiIgZm9udC1zaXplPSIyMCIgZm9udC13ZWlnaHQ9IjgwMCI+RXhpc3Rpbmcgd29ya2VyIG5vZGU8L3RleHQ+CiAgICAgIDx0ZXh0IHg9IjgyIiB5PSI2MCIgZmlsbD0iI2M5ZDlmMiIgZm9udC1zaXplPSIxMyI+U2FtZSBQb2QgVUlEIMK3IElQIMK3IHZvbHVtZXMgwrcgc2FuZGJveDwvdGV4dD4KCiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0IDk0KSI+CiAgICAgICAgPHJlY3Qgd2lkdGg9IjM3MiIgaGVpZ2h0PSI2NiIgcng9IjE2IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMzMjZjZTUiIHN0cm9rZS13aWR0aD0iMiIvPgogICAgICAgIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzMiIHI9IjE5IiBmaWxsPSIjMzI2Y2U1Ii8+CiAgICAgICAgPHRleHQgeD0iMzIiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmZmZmIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iODAwIj40PC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjY0IiB5PSIyOSIgZmlsbD0iIzE3MzQ2NSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjgwMCI+a3ViZWxldDwvdGV4dD4KICAgICAgICA8dGV4dCB4PSI2NCIgeT0iNTAiIGZpbGw9IiM1YjcxOTAiIGZvbnQtc2l6ZT0iMTQiPkNoZWNrcyBjYXBhY2l0eSBhbmQgcmVzaXplIHBvbGljeTwvdGV4dD4KICAgICAgPC9nPgogICAgICA8cGF0aCBkPSJNMjEwIDE2NFYxODAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMyNmNlNSIgc3Ryb2tlLXdpZHRoPSIzIiBtYXJrZXItZW5kPSJ1cmwoI2JsdWVBcnJvdykiLz4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQgMTg0KSI+CiAgICAgICAgPHJlY3Qgd2lkdGg9IjM3MiIgaGVpZ2h0PSI2NiIgcng9IjE2IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMzMjZjZTUiIHN0cm9rZS13aWR0aD0iMiIvPgogICAgICAgIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzMiIHI9IjE5IiBmaWxsPSIjMzI2Y2U1Ii8+CiAgICAgICAgPHRleHQgeD0iMzIiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmZmZmIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iODAwIj41PC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjY0IiB5PSIyOSIgZmlsbD0iIzE3MzQ2NSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjgwMCI+Q29udGFpbmVyIHJ1bnRpbWU8L3RleHQ+CiAgICAgICAgPHRleHQgeD0iNjQiIHk9IjUwIiBmaWxsPSIjNWI3MTkwIiBmb250LXNpemU9IjE0Ij5VcGRhdGVzIG9yIHJlc3RhcnRzIHRoZSBjb250YWluZXI8L3RleHQ+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzI5IDMzKSI+PHVzZSBocmVmPSIjcG9kTWFyayIvPjwvZz4KICAgICAgPC9nPgogICAgICA8cGF0aCBkPSJNMjEwIDI1NFYyNzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMyNmNlNSIgc3Ryb2tlLXdpZHRoPSIzIiBtYXJrZXItZW5kPSJ1cmwoI2JsdWVBcnJvdykiLz4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQgMjc0KSI+CiAgICAgICAgPHJlY3Qgd2lkdGg9IjM3MiIgaGVpZ2h0PSI4NiIgcng9IjE2IiBmaWxsPSIjMTczNDY1Ii8+CiAgICAgICAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzMSIgcj0iMTkiIGZpbGw9IiNmZmZmZmYiLz4KICAgICAgICA8dGV4dCB4PSIzMiIgeT0iMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMzMjZjZTUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI4MDAiPjY8L3RleHQ+CiAgICAgICAgPHRleHQgeD0iNjQiIHk9IjI4IiBmaWxsPSIjZmZmZmZmIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iODAwIj5MaW51eCBjZ3JvdXBzPC90ZXh0PgogICAgICAgIDx0ZXh0IHg9IjY0IiB5PSI0OSIgZmlsbD0iI2M5ZDlmMiIgZm9udC1zaXplPSIxNCI+QXBwbHkgQ1BVIGFuZCBtZW1vcnkgY29udHJvbHM8L3RleHQ+CiAgICAgICAgPHRleHQgeD0iNjQiIHk9IjcwIiBmaWxsPSIjNzVhN2ZmIiBmb250LXNpemU9IjEzIj5jcHUubWF4IMK3IGNwdS53ZWlnaHQgwrcgbWVtb3J5Lm1heDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgoKICAgIDwhLS0gTWFpbiBkZXNpcmVkLXN0YXRlIGFycm93cyAtLT4KICAgIDxwYXRoIGQ9Ik0yMzggMjYySDI5NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzI2Y2U1IiBzdHJva2Utd2lkdGg9IjUiIG1hcmtlci1lbmQ9InVybCgjYmx1ZUFycm93KSIvPgogICAgPHRleHQgeD0iMjY2IiB5PSIyNDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMzMjZjZTUiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSI3MDAiPkRFU0lSRUQ8L3RleHQ+CiAgICA8cGF0aCBkPSJNNjY0IDMyMUg3MjBRNzI4IDMyMSA3MjggMzExVjIyNVE3MjggMjE1IDczOCAyMTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzMyNmNlNSIgc3Ryb2tlLXdpZHRoPSI1IiBtYXJrZXItZW5kPSJ1cmwoI2JsdWVBcnJvdykiLz4KICAgIDx0ZXh0IHg9IjcwMSIgeT0iMzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMzI2Y2U1IiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iNzAwIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgNzAxIDMwMCkiPkFMTE9DQVRFPC90ZXh0PgoKICAgIDwhLS0gU3RlcCA3OiBhY3R1YWwgc3RhdHVzIHJldHVybmluZyAtLT4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUyIDU5NCkiIGZpbHRlcj0idXJsKCNzaGFkb3cpIj4KICAgICAgPHJlY3Qgd2lkdGg9IjEwOTYiIGhlaWdodD0iMTA4IiByeD0iMjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iI2Y1OWUwYiIgc3Ryb2tlLXdpZHRoPSIzIi8+CiAgICAgIDxjaXJjbGUgY3g9IjQyIiBjeT0iNDIiIHI9IjIyIiBmaWxsPSIjZjU5ZTBiIi8+CiAgICAgIDx0ZXh0IHg9IjQyIiB5PSI1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2ZmZmZmZiIgZm9udC1zaXplPSIyMSIgZm9udC13ZWlnaHQ9IjgwMCI+NzwvdGV4dD4KICAgICAgPHRleHQgeD0iODIiIHk9IjM3IiBmaWxsPSIjMTczNDY1IiBmb250LXNpemU9IjIxIiBmb250LXdlaWdodD0iODAwIj5LdWJlbGV0IHJlcG9ydHMgYWN0dWFsIFBvZCBzdGF0dXM8L3RleHQ+CiAgICAgIDx0ZXh0IHg9IjgyIiB5PSI2MyIgZmlsbD0iIzViNzE5MCIgZm9udC1zaXplPSIxNiI+c3RhdHVzLmNvbnRhaW5lclN0YXR1c2VzWypdLnJlc291cmNlcyBhbmQgcmVzaXplIGNvbmRpdGlvbnMgY29uZmlybSB3aGF0IHRoZSBub2RlIGFwcGxpZWQuPC90ZXh0PgogICAgICA8cmVjdCB4PSI4MiIgeT0iNzYiIHdpZHRoPSI5NTAiIGhlaWdodD0iMiIgZmlsbD0iI2U0ZWJmNSIvPgogICAgICA8dGV4dCB4PSI4MiIgeT0iOTkiIGZpbGw9IiM4YTVhMDAiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlZlcmlmeSBkZXNpcmVkIHNwZWMg4omgIGFjdHVhbCBzdGF0dXMgdW50aWwgYWN0dWF0aW9uIGNvbXBsZXRlcy48L3RleHQ+CiAgICAgIDxwYXRoIGQ9Ik0xMDQ4IDBWLTM1UTEwNDgtNTAgMTAzMy01MEg5OTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2Y1OWUwYiIgc3Ryb2tlLXdpZHRoPSI0IiBtYXJrZXItZW5kPSJ1cmwoI3N0YXR1c0Fycm93KSIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+) Resize is asynchronous. The API server stores intent; kubelet on the existing node actuates it; container status reports what actually changed. The request follows this path: 1. A user or autoscaler writes the Pod's `/resize` subresource. 2. Admission and API validation check the new values and preserve the Pod's QoS invariants. 3. Kubernetes stores the desired resources in the Pod specification. 4. Kubelet sees that desired and actual resources differ. 5. Kubelet checks node capacity and coordinates the change with the container runtime. 6. The runtime updates CPU and memory controls, typically Linux cgroups. 7. Kubelet updates container status and Pod resize conditions. During an incomplete resize, the scheduler accounts for the maximum of desired, allocated, and actual requests. That conservative rule prevents Kubernetes from treating capacity as free while different components still observe different generations of the Pod. Create a Pod with explicit CPU and memory policies: ```yaml apiVersion: v1 kind: Pod metadata: name: resize-demo namespace: qos-example spec: containers: - name: application image: registry.k8s.io/pause:3.10 resizePolicy: - resourceName: cpu restartPolicy: NotRequired - resourceName: memory restartPolicy: RestartContainer resources: requests: cpu: 500m memory: 256Mi limits: cpu: 500m memory: 256Mi ``` This is a Guaranteed-QoS Pod because request equals limit for both resources. Apply it and inspect the initial state: ```bash kubectl create namespace qos-example kubectl apply -f resize-demo.yaml kubectl get pod resize-demo -n qos-example -o yaml ``` ## CPU and Memory Need Different Resize Policies [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-4) The per-container `resizePolicy` separates two decisions: which resource changes and whether that change requires a container restart. ```yaml resizePolicy: - resourceName: cpu restartPolicy: NotRequired - resourceName: memory restartPolicy: RestartContainer ``` `NotRequired` is the default. It tells kubelet to update the running container. `RestartContainer` restarts that container within the same Pod before applying the new value. It does not replace the Pod. ![Decision diagram for CPU and memory resize policies followed by completed, deferred, infeasible, and in-progress outcomes.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjY4MCIgdmlld0JveD0iMCAwIDEyMDAgNjgwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+S3ViZXJuZXRlcyByZXNpemUgcG9saWN5IGFuZCBzdGF0dXMgZGVjaXNpb25zPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+Q1BVIGFuZCBtZW1vcnkgcmVzb3VyY2UgY2hhbmdlcyBzZWxlY3Qgbm8tcmVzdGFydCBvciByZXN0YXJ0IHBvbGljaWVzLCB0aGVuIHJlc29sdmUgdG8gY29tcGxldGVkLCBkZWZlcnJlZCwgaW5mZWFzaWJsZSwgb3IgaW4tcHJvZ3Jlc3Mgc3RhdGVzLjwvZGVzYz4KICA8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImJnIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agc3RvcC1jb2xvcj0iIzA3MWEzMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzEyM2Q2MyIvPjwvbGluZWFyR3JhZGllbnQ+PG1hcmtlciBpZD0iYSIgbWFya2VyV2lkdGg9IjEwIiBtYXJrZXJIZWlnaHQ9IjEwIiByZWZYPSI4IiByZWZZPSIzIiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDBMOSAzIDAgNloiIGZpbGw9IiM2YmRjZmYiLz48L21hcmtlcj48ZmlsdGVyIGlkPSJzIj48ZmVEcm9wU2hhZG93IGR4PSIwIiBkeT0iOCIgc3RkRGV2aWF0aW9uPSIxMCIgZmxvb2QtY29sb3I9IiMwMDAiIGZsb29kLW9wYWNpdHk9Ii4zIi8+PC9maWx0ZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjY4MCIgcng9IjI4IiBmaWxsPSJ1cmwoI2JnKSIvPgogIDx0ZXh0IHg9IjYwIiB5PSI2MiIgZmlsbD0iI2ZmZiIgZm9udC1mYW1pbHk9IlNlZ29lIFVJLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMzAiIGZvbnQtd2VpZ2h0PSI4MDAiPlBvbGljeSBjb250cm9scyBkaXNydXB0aW9uOyBjYXBhY2l0eSBjb250cm9scyBvdXRjb21lPC90ZXh0PgogIDxnIGZvbnQtZmFtaWx5PSJTZWdvZSBVSSxBcmlhbCxzYW5zLXNlcmlmIiBmaWx0ZXI9InVybCgjcykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjAgMTMwKSI+PHJlY3Qgd2lkdGg9IjIyMCIgaGVpZ2h0PSIxMTgiIHJ4PSIxOCIgZmlsbD0iIzEwMmU0ZCIgc3Ryb2tlPSIjNmJkY2ZmIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMTAiIHk9IjQ0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjOGVlZWZmIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNzAwIj5SRVNPVVJDRSBDSEFOR0U8L3RleHQ+PHRleHQgeD0iMTEwIiB5PSI4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2ZmZiIgZm9udC1zaXplPSIyNSIgZm9udC13ZWlnaHQ9IjgwMCI+Q1BVIG9yIG1lbW9yeTwvdGV4dD48L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzODAgMTA1KSI+PHJlY3Qgd2lkdGg9IjI2MCIgaGVpZ2h0PSIxMTgiIHJ4PSIxOCIgZmlsbD0iIzExM2Q0YSIgc3Ryb2tlPSIjNWVlYWQ0IiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMzAiIHk9IjQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNWVlYWQ0IiBmb250LXNpemU9IjE3IiBmb250LXdlaWdodD0iODAwIj5Ob3RSZXF1aXJlZDwvdGV4dD48dGV4dCB4PSIxMzAiIHk9IjczIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmIiBmb250LXNpemU9IjE3Ij5VcGRhdGUgcnVubmluZyBjb250YWluZXI8L3RleHQ+PHRleHQgeD0iMTMwIiB5PSI5NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2E3ZjNkMCIgZm9udC1zaXplPSIxNCI+RGVmYXVsdCBwb2xpY3k8L3RleHQ+PC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzgwIDI2NSkiPjxyZWN0IHdpZHRoPSIyNjAiIGhlaWdodD0iMTE4IiByeD0iMTgiIGZpbGw9IiM0OTM1MWQiIHN0cm9rZT0iI2ZiYmYyNCIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTMwIiB5PSI0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2ZiYmYyNCIgZm9udC1zaXplPSIxNyIgZm9udC13ZWlnaHQ9IjgwMCI+UmVzdGFydENvbnRhaW5lcjwvdGV4dD48dGV4dCB4PSIxMzAiIHk9IjczIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmIiBmb250LXNpemU9IjE3Ij5SZXN0YXJ0IGFmZmVjdGVkIGNvbnRhaW5lcjwvdGV4dD48dGV4dCB4PSIxMzAiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmRlNjhhIiBmb250LXNpemU9IjE0Ij5Qb2QgaWRlbnRpdHkgcmVtYWluczwvdGV4dD48L2c+CiAgPC9nPgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzZiZGNmZiIgc3Ryb2tlLXdpZHRoPSI0IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48cGF0aCBkPSJNMjgwIDE4OUgzNTBRMzY1IDE4OSAzNjUgMTc0VjE2NEgzNzQiLz48cGF0aCBkPSJNMjgwIDE4OUgzMzVRMzY1IDE4OSAzNjUgMjE5VjMyNEgzNzQiLz48cGF0aCBkPSJNNjQwIDE2NEg3MTUiLz48cGF0aCBkPSJNNjQwIDMyNEg2ODBRNzE1IDMyNCA3MTUgMjg5VjE2NCIvPjwvZz4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MzUgMTA0KSIgZm9udC1mYW1pbHk9IlNlZ29lIFVJLEFyaWFsLHNhbnMtc2VyaWYiIGZpbHRlcj0idXJsKCNzKSI+PHJlY3Qgd2lkdGg9IjQwNSIgaGVpZ2h0PSIyODAiIHJ4PSIyMiIgZmlsbD0iIzBiMjAzOCIgc3Ryb2tlPSIjOWFjOWU4Ii8+PHRleHQgeD0iMjAyIiB5PSI0NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2ZmZiIgZm9udC1zaXplPSIyMSIgZm9udC13ZWlnaHQ9IjgwMCI+S3ViZWxldCBjaGVja3MgZXhpc3Rpbmcgbm9kZTwvdGV4dD48dGV4dCB4PSIyMDIiIHk9Ijc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYTljN2RkIiBmb250LXNpemU9IjE2Ij5jYXBhY2l0eSDCtyBRb1MgaW52YXJpYW50cyDCtyBydW50aW1lPC90ZXh0PjxwYXRoIGQ9Ik01NSAxMTJIMzUwIiBzdHJva2U9IiMzNjVhNzYiLz4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ0IDEzNykiPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjMTBiOTgxIi8+PHBhdGggZD0ibTEwIDE4IDYgNiAxMS0xMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjQiLz48dGV4dCB4PSI1MCIgeT0iMjQiIGZpbGw9IiNkMWZhZTUiIGZvbnQtc2l6ZT0iMTciIGZvbnQtd2VpZ2h0PSI3MDAiPkFwcGxpZWQ8L3RleHQ+PC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEwIDEzNykiPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjMzhiZGY4Ii8+PHRleHQgeD0iMTgiIHk9IjI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iODAwIj7igKY8L3RleHQ+PHRleHQgeD0iNTAiIHk9IjI0IiBmaWxsPSIjZGZmNmZmIiBmb250LXNpemU9IjE3IiBmb250LXdlaWdodD0iNzAwIj5JbiBwcm9ncmVzczwvdGV4dD48L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0NCAyMDYpIj48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2Y1OWUwYiIvPjx0ZXh0IHg9IjE4IiB5PSIyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2ZmZiIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjgwMCI+4oa7PC90ZXh0Pjx0ZXh0IHg9IjUwIiB5PSIyNCIgZmlsbD0iI2ZlZjNjNyIgZm9udC1zaXplPSIxNyIgZm9udC13ZWlnaHQ9IjcwMCI+RGVmZXJyZWQgwrcgcmV0cnk8L3RleHQ+PC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEwIDIwNikiPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjZWY0NDQ0Ii8+PHRleHQgeD0iMTgiIHk9IjI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjZmZmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iODAwIj4hPC90ZXh0Pjx0ZXh0IHg9IjUwIiB5PSIyNCIgZmlsbD0iI2ZlZTJlMiIgZm9udC1zaXplPSIxNyIgZm9udC13ZWlnaHQ9IjcwMCI+SW5mZWFzaWJsZTwvdGV4dD48L2c+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwIDQ2MCkiIGZvbnQtZmFtaWx5PSJTZWdvZSBVSSxBcmlhbCxzYW5zLXNlcmlmIj48cmVjdCB3aWR0aD0iMTA4MCIgaGVpZ2h0PSIxNTAiIHJ4PSIyMiIgZmlsbD0iIzA3MTYyNiIgc3Ryb2tlPSIjMzg1Yjc3Ii8+PHRleHQgeD0iMzUiIHk9IjQzIiBmaWxsPSIjN2RkM2ZjIiBmb250LXNpemU9IjE3IiBmb250LXdlaWdodD0iODAwIj5PUEVSQVRPUiBSVUxFPC90ZXh0Pjx0ZXh0IHg9IjM1IiB5PSI4MiIgZmlsbD0iI2ZmZiIgZm9udC1zaXplPSIyMyIgZm9udC13ZWlnaHQ9IjcwMCI+RG8gbm90IGRlY2xhcmUgc3VjY2VzcyB3aGVuIHRoZSBBUEkgcGF0Y2ggcmV0dXJucy48L3RleHQ+PHRleHQgeD0iMzUiIHk9IjExNiIgZmlsbD0iI2I5ZDRlOCIgZm9udC1zaXplPSIxOCI+Q29tcGFyZSBkZXNpcmVkIGFuZCBhY3R1YWwgcmVzb3VyY2VzLCBjb25kaXRpb25zLCBvYnNlcnZlZEdlbmVyYXRpb24sIGFuZCByZXN0YXJ0Q291bnQuPC90ZXh0PjwvZz4KPC9zdmc+) Policy determines whether a container restart is allowed; node capacity and runtime actuation determine the resulting resize state. CPU is usually the safer no-restart case. The runtime can adjust CPU shares, weight, or quota while the process continues. A larger CPU envelope still does not force the application to create more workers, and a smaller limit can increase throttling. Memory is harder. Raising a cgroup memory limit does not guarantee that a managed runtime expands its heap. Lowering a limit can place current usage above the new boundary and trigger an OOM kill. Since Kubernetes 1.35, kubelet allows memory-limit decreases and performs a best-effort usage check when the policy is `NotRequired`, but the [GA announcement explicitly warns](https://kubernetes.io/blog/2025/12/19/kubernetes-v1-35-in-place-pod-resize-ga/) that the check is not race-free. Increase CPU without restarting the container: ```bash kubectl patch pod resize-demo -n qos-example \ --subresource resize \ --patch '{"spec":{"containers":[{"name":"application","resources":{"requests":{"cpu":"1"},"limits":{"cpu":"1"}}}]}}' ``` Increase memory with the policy above: ```bash kubectl patch pod resize-demo -n qos-example \ --subresource resize \ --patch '{"spec":{"containers":[{"name":"application","resources":{"requests":{"memory":"384Mi"},"limits":{"memory":"384Mi"}}}]}}' ``` The CPU change should leave `restartCount` unchanged. The memory change should increment it because `RestartContainer` applies to memory. If both resources change in one request, the container restarts when either policy requires it. A Pod with `restartPolicy: Never` cannot declare a resize policy that requires a restart. Every resizable resource in that Pod must use `NotRequired`. ## A Resize Is an Asynchronous State Machine [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-5) Production automation must treat resize like reconciliation, not like a synchronous setter. Read the desired values, actual values, conditions, and generation together: ```bash kubectl get pod resize-demo -n qos-example -o json | jq '{ generation: .metadata.generation, observedGeneration: .status.observedGeneration, desired: [.spec.containers[] | {name, resources}], actual: [.status.containerStatuses[] | {name, resources, restartCount}], resizeConditions: [ .status.conditions[]? | select(.type == "PodResizePending" or .type == "PodResizeInProgress") ] }' ``` The main outcomes are: ### Completed [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-completed) Desired and actual resources match, the relevant resize condition has cleared, and `status.observedGeneration` shows that kubelet has acknowledged the current Pod generation. ### `PodResizePending` with `Deferred` [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-podresizepending-with-deferred) The node cannot grant the request now, but the request might become feasible after another Pod terminates or shrinks. Kubelet retries deferred resizes. It prioritizes higher `PriorityClass`, then Guaranteed over Burstable at equal priority, then older deferred requests. ### `PodResizePending` with `Infeasible` [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-podresizepending-with-infeasible) The resize cannot be satisfied on the current node—for example, the requested CPU exceeds node capacity. Kubernetes does not automatically reschedule the Pod onto a larger node. Submit a feasible value or use higher-level automation that can replace the Pod or change cluster capacity. ### `PodResizeInProgress` [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-podresizeinprogress) Kubelet accepted the allocation, but runtime actuation is incomplete. The condition can include `reason: Error` and a message when the runtime cannot apply the change. This distinction changes alerting. Do not page because `spec` and `status` differ for a few seconds. Alert when the gap persists beyond an operational threshold, when `Infeasible` appears, or when an in-progress resize reports an error. ## The Limits That Matter in Kubernetes 1.36 [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-6) The [current Kubernetes documentation](https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/#limitations) lists boundaries that determine whether in-place resize fits a workload: - Only CPU and memory are resizable. - Resize cannot change the Pod's original Guaranteed, Burstable, or BestEffort QoS class. - Guaranteed Pods must keep CPU and memory requests equal to limits. - BestEffort Pods cannot gain requests or limits through resize. - Non-restartable init containers and ephemeral containers cannot be resized; sidecar containers can. - A request or limit cannot be removed entirely after it is set; it can only change value. - Windows Pods do not support in-place resize. - Pods managed by static CPU Manager or static Memory Manager policies cannot be resized. - Pods using swap cannot resize memory requests unless memory uses `RestartContainer`. - Memory-limit reduction without restart remains best-effort and can still race with allocation. There is also a critical controller boundary: resizing a Pod does **not** update its owning Deployment or StatefulSet template. ```text Deployment template: 500m CPU Running Pod after resize: 1000m CPU Replacement Pod from unchanged template: 500m CPU ``` If the new size must survive Pod replacement, update the controller template as well or use a system that reconciles both lifecycle stages. Be deliberate when a GitOps controller owns the manifest; otherwise, live and declared state can diverge in ways your next rollout silently reverses. Kubernetes 1.36 also exposes a separate beta workflow for [in-place Pod-level resource resize](https://kubernetes.io/docs/tasks/configure-pod-container/resize-pod-resources/). Do not confuse that Pod-wide resource budget with the stable container-level mechanism explained here. ## VPA Turns the Mechanism Into an Autoscaling Policy [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-7) Core Kubernetes provides the resize actuator but does not decide the correct size. [Vertical Pod Autoscaler](https://kubernetes.io/docs/concepts/workloads/autoscaling/vertical-pod-autoscale/) supplies recommendations and update policy. Its relevant modes are: | VPA mode | Existing Pod behavior | | --- | --- | | `Off` | Produce recommendations only. | | `Initial` | Apply recommendations only when a Pod starts. | | `Recreate` | Evict the Pod so its controller creates a replacement. | | `InPlaceOrRecreate` | Attempt in-place resize, then fall back to eviction when necessary. | | `InPlace` | Never evict; wait and retry pending resize. Alpha in VPA 1.7.0. | ```yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: payments-api spec: targetRef: apiVersion: apps/v1 kind: Deployment name: payments-api updatePolicy: updateMode: InPlaceOrRecreate resourcePolicy: containerPolicies: - containerName: application minAllowed: cpu: 250m memory: 256Mi maxAllowed: cpu: "4" memory: 4Gi controlledResources: [cpu, memory] controlledValues: RequestsAndLimits ``` `InPlaceOrRecreate` is the pragmatic default when availability matters but eventual convergence matters more: it avoids disruption when possible and retains an eviction fallback. `InPlace` is stricter about continuity, but an infeasible resize can remain pending indefinitely because that mode will not evict the Pod. Coordinate VPA with [Horizontal Pod Autoscaler](https://kubernetes.io/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/). HPA commonly evaluates CPU utilization as usage divided by requested CPU. Changing the request changes that denominator, so an in-place vertical resize can alter horizontal scaling decisions even when traffic and raw CPU consumption stay constant. Assign each autoscaler clear ownership of metrics and resources; otherwise, two valid control loops can work against each other. ## Why Kubernetes Built It This Way [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-8) Mutating the Pod specification directly without an explicit resize contract would hide too much. The `/resize` subresource creates a narrower authorization and validation surface. Separate desired and actual fields make asynchronous node actuation observable. Per-resource restart policies acknowledge that CPU and memory have different runtime semantics. Resize conditions distinguish a temporary capacity problem from an impossible request. The design also preserves the scheduler's fundamental safety model. A Pod remains bound to one node, so kubelet cannot promise resources that the node does not have. Conservative accounting protects the cluster while control plane, kubelet, and runtime converge. The trade-off is intentional: in-place resize minimizes disruption, but it is not rescheduling, node autoscaling, preemption, or application-level reconfiguration. That boundary makes the feature composable. VPA can decide values and fallback behavior. A node autoscaler can add capacity. An application controller can adapt worker counts or heap settings. Kubernetes core provides a reliable actuator and an observable state machine instead of pretending one resize primitive solves the entire vertical-scaling problem. ## A Production Rollout Checklist [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-9) Before enabling automated in-place resizing across a fleet: 1. Confirm API server, kubelet, container runtime, and `kubectl` versions. 2. Inventory QoS classes, static CPU/Memory Manager use, swap, Windows workloads, init containers, and sidecars. 3. Define CPU and memory `resizePolicy` explicitly rather than relying on defaults. 4. Test scale-up, scale-down, restart-required memory changes, `Deferred`, and `Infeasible` behavior. 5. Compare desired and actual resource fields in monitoring. 6. Alert on persistent generation gaps and resize error conditions. 7. Verify that application runtimes use newly available CPU or memory as expected. 8. Decide whether controller templates, GitOps state, or VPA own durable resource values. 9. Test HPA and VPA together under stable traffic and changing recommendations. 10. Keep disruption budgets and a recreate fallback for workloads where convergence outranks zero restart. Clean up the manual example when finished: ```bash kubectl delete namespace qos-example ``` ## Frequently Asked Questions [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-10) **Q: What are Kubernetes in-place Pod resource updates?** A: They let Kubernetes change a running container's CPU and memory requests or limits through the Pod `/resize` subresource. The Pod remains on its current node and retains its identity, IP address, sandbox, and mounted volumes. **Q: Does an in-place Pod resize restart the container?** A: Not necessarily. `resizePolicy` can use `NotRequired` to update the running container or `RestartContainer` to restart that container. If no policy is specified for a resource, Kubernetes defaults to `NotRequired`. **Q: How do I verify that a Pod resize succeeded?** A: Compare desired values in `spec.containers[*].resources` with actual values in `status.containerStatuses[*].resources`. Inspect `PodResizePending`, `PodResizeInProgress`, `status.observedGeneration`, and the container restart count before declaring success. **Q: Does resizing a Pod update its Deployment or StatefulSet?** A: No. The resize subresource changes one Pod, not the owning controller's template. Update the template or use a reconciling autoscaler if replacement Pods must inherit the new resources. **Q: Can VPA resize Pods without evicting them?** A: Yes. `InPlaceOrRecreate` first attempts in-place resize and can fall back to eviction. VPA's alpha `InPlace` mode never evicts; it keeps waiting and retrying if a resize is deferred, in progress, or infeasible. ## Primary Sources and Next Steps [Section link](https://devopsdreams.blogspot.com/2026/08/kubernetes-in-place-pod-resource.html#dd-section-11) - [Resize CPU and memory resources assigned to containers](https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/) - [Kubernetes 1.35: In-Place Pod Resize graduates to stable](https://kubernetes.io/blog/2025/12/19/kubernetes-v1-35-in-place-pod-resize-ga/) - [Kubernetes 1.33: In-Place Pod Resize graduates to beta](https://kubernetes.io/blog/2025/05/16/kubernetes-v1-33-in-place-pod-resize-beta/) - [KEP-1287: In-place update of Pod resources](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/1287-in-place-update-pod-resources/README.md) - [Resource management for Pods and containers](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) - [Vertical Pod Autoscaling](https://kubernetes.io/docs/concepts/workloads/autoscaling/vertical-pod-autoscale/) - [Horizontal Pod Autoscaling](https://kubernetes.io/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/) - [Pod lifecycle and resize status](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/) - [Resize CPU and memory resources assigned to Pods](https://kubernetes.io/docs/tasks/configure-pod-container/resize-pod-resources/)