containerd 2.0 will be the first new major release of containerd since the initial stable release of 1.0 in December, 2017. After six years of iteration, development, and refinement, 2.0 will encapsulate the learning we’ve had building and supporting containerd at large scale (and as the default container runtime for a number of managed container offerings). With that, 2.0 brings some major refactorings of core services (CRI, image management), new functionality (sandbox plugins, transfer plugins, image verifier plugins), improvements (better user namespace support, NRI updates), and removals of deprecated functionality.

Removals of functionality (“breaking changes”) can be challenging to deal with. In some cases, you may have an intentional dependency on a deprecated feature that is being removed. In other cases, you may not know that you have a dependency. For some removals, migration can be straightforward, while for others it may not be.

To help you understand what dependencies you have on deprecated and removed functionality, we’ve added a new ctr deprecations list command (backed by new data in containerd’s introspection service Server API). These now return usage-based warnings for deprecated functionality that is being removed in a future version of containerd. For each warning, you can see:

An example of the output of ctr deprecations list is given below:

# ctr deprecations list
ID                                               LAST OCCURRENCE                   MESSAGE    
io.containerd.deprecation/pull-schema-1-image    2023-12-29T01:17:21.672915093Z    Schema 1 images are deprecated since containerd v1.7 and removed in containerd v2.0. Since containerd v1.7.8, schema 1 images are identified by the "io.containerd.image/converted-docker-schema1" label.

For machine-readability, ctr deprecations list also accepts a --format=json flag.

You can find the full set of removals and replacement suggestions on the containerd website. The full set of deprecation warnings first appears in containerd 1.6.27 and 1.7.12; we recommend updating to and using those versions with your normal production workloads prior to attempting to update to 2.0.