mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	Stop munger produce the link to a release version doc if it doesn't exit in the release branch
		
			
				
	
	
		
			111 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| <!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
 | |
| 
 | |
| <!-- BEGIN STRIP_FOR_RELEASE -->
 | |
| 
 | |
| <img src="http://kubernetes.io/img/warning.png" alt="WARNING"
 | |
|      width="25" height="25">
 | |
| <img src="http://kubernetes.io/img/warning.png" alt="WARNING"
 | |
|      width="25" height="25">
 | |
| <img src="http://kubernetes.io/img/warning.png" alt="WARNING"
 | |
|      width="25" height="25">
 | |
| <img src="http://kubernetes.io/img/warning.png" alt="WARNING"
 | |
|      width="25" height="25">
 | |
| <img src="http://kubernetes.io/img/warning.png" alt="WARNING"
 | |
|      width="25" height="25">
 | |
| 
 | |
| <h2>PLEASE NOTE: This document applies to the HEAD of the source tree</h2>
 | |
| 
 | |
| If you are using a released version of Kubernetes, you should
 | |
| refer to the docs that go with that version.
 | |
| 
 | |
| <!-- TAG RELEASE_LINK, added by the munger automatically -->
 | |
| <strong>
 | |
| The latest release of this document can be found
 | |
| [here](http://releases.k8s.io/release-1.1/docs/admin/garbage-collection.md).
 | |
| 
 | |
| Documentation for other releases can be found at
 | |
| [releases.k8s.io](http://releases.k8s.io).
 | |
| </strong>
 | |
| --
 | |
| 
 | |
| <!-- END STRIP_FOR_RELEASE -->
 | |
| 
 | |
| <!-- END MUNGE: UNVERSIONED_WARNING -->
 | |
| 
 | |
| # Garbage Collection
 | |
| 
 | |
| - [Introduction](#introduction)
 | |
| - [Image Collection](#image-collection)
 | |
| - [Container Collection](#container-collection)
 | |
| - [User Configuration](#user-configuration)
 | |
| 
 | |
| ### Introduction
 | |
| 
 | |
| Garbage collection is managed by kubelet automatically, mainly including unreferenced
 | |
| images and dead containers. kubelet applies container garbage collection every minute
 | |
| and image garbage collection every 5 minutes.
 | |
| Note that we don't recommend external garbage collection tool generally, since it could
 | |
| break the behavior of kubelet potentially if it attempts to remove all of the containers
 | |
| which acts as the tombstone kubelet relies on. Yet those garbage collector aims to deal
 | |
| with the docker leaking issues would be appreciated.
 | |
| 
 | |
| ### Image Collection
 | |
| 
 | |
| kubernetes manages lifecycle of all images through imageManager, with the cooperation
 | |
| of cadvisor.
 | |
| The policy for garbage collecting images we apply takes two factors into consideration,
 | |
| `HighThresholdPercent` and `LowThresholdPercent`. Disk usage above the high threshold
 | |
| will trigger garbage collection, which attempts to delete unused images until the low
 | |
| threshold is met. Least recently used images are deleted first.
 | |
| 
 | |
| ### Container Collection
 | |
| 
 | |
| The policy for garbage collecting containers we apply takes on three variables, which can
 | |
| be user-defined. `MinAge` is the minimum age at which a container can be garbage collected,
 | |
| zero for no limit. `MaxPerPodContainer` is the max number of dead containers any single
 | |
| pod (UID, container name) pair is allowed to have, less than zero for no limit.
 | |
| `MaxContainers` is the max number of total dead containers, less than zero for no limit as well.
 | |
| 
 | |
| kubelet sorts out containers which are unidentified or stay out of bounds set by previous
 | |
| mentioned three flags. Generally the oldest containers are removed first. Since we take both
 | |
| `MaxPerPodContainer` and `MaxContainers` into consideration, it could happen when they
 | |
| have conflict -- retaining the max number of containers per pod goes out of range set by max
 | |
| number of global dead containers. In this case, we would sacrifice the `MaxPerPodContainer`
 | |
| a little bit. For the worst case, we first downgrade it to 1 container per pod, and then
 | |
| evict the oldest containers for the greater good.
 | |
| 
 | |
| When kubelet removes the dead containers, all the files inside the container will be cleaned up as well.
 | |
| Note that we will skip the containers that are not managed by kubelet.
 | |
| 
 | |
| ### User Configuration
 | |
| 
 | |
| Users are free to set their own value to address image garbage collection.
 | |
| 
 | |
| 1. `image-gc-high-threshold`, the percent of disk usage which triggers image garbage collection.
 | |
| Default is 90%.
 | |
| 2. `image-gc-low-threshold`, the percent of disk usage to which image garbage collection attempts
 | |
| to free. Default is 80%.
 | |
| 
 | |
| We also allow users to customize garbage collection policy, basically via following three flags.
 | |
| 
 | |
| 1. `minimum-container-ttl-duration`, minimum age for a finished container before it is
 | |
| garbage collected. Default is 1 minute.
 | |
| 2. `maximum-dead-containers-per-container`, maximum number of old instances to retain
 | |
| per container. Default is 2.
 | |
| 3. `maximum-dead-containers`, maximum number of old instances of containers to retain globally.
 | |
| Default is 100.
 | |
| 
 | |
| Note that we highly recommend a large enough value for `maximum-dead-containers-per-container`
 | |
| to allow at least 2 dead containers retaining per expected container when you customize the flag
 | |
| configuration. A loose value for `maximum-dead-containers` also assumes importance for a similar reason.
 | |
| See [this issue](https://github.com/kubernetes/kubernetes/issues/13287) for more details.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| <!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
 | |
| []()
 | |
| <!-- END MUNGE: GENERATED_ANALYTICS -->
 |