Convert Figma logo to code with AI

kubernetes-sigs logocri-tools

CLI and validation tools for Kubelet Container Runtime Interface (CRI) .

1,635
445
1,635
4

Top Related Projects

109,710

Production-Grade Container Scheduling and Management

An open and reliable container runtime

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

11,728

CLI tool for spawning and running containers according to the OCI specification

68,613

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

5,196

Open Container Initiative-based implementation of Kubernetes Container Runtime Interface

Quick Overview

CRI-tools is a set of tools for Kubernetes Container Runtime Interface (CRI). It includes crictl, a CLI for CRI-compatible container runtimes, and critest, a benchmarking and conformance testing tool for CRI-compatible runtimes. These tools are essential for developers and operators working with Kubernetes and container runtimes.

Pros

  • Provides a standardized way to interact with different container runtimes
  • Helps ensure compatibility and conformance of container runtimes with Kubernetes
  • Simplifies debugging and troubleshooting of container-related issues
  • Actively maintained and supported by the Kubernetes community

Cons

  • Limited to CRI-compatible runtimes, may not work with non-CRI runtimes
  • Learning curve for users unfamiliar with CRI concepts
  • May require additional setup and configuration in some environments

Code Examples

  1. Listing containers using crictl:
crictl ps
  1. Inspecting a container:
crictl inspect <container-id>
  1. Pulling an image:
crictl pull nginx:latest
  1. Running a container:
crictl run <pod-config.json> <container-config.json>

Getting Started

To get started with CRI-tools:

  1. Install crictl:
VERSION="v1.26.0"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz
  1. Configure crictl:
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: true
EOF
  1. Verify installation:
crictl version

Now you can use crictl to interact with your container runtime. For more advanced usage and critest installation, refer to the project's documentation.

Competitor Comparisons

109,710

Production-Grade Container Scheduling and Management

Pros of kubernetes

  • Comprehensive container orchestration platform with a wide range of features
  • Large and active community, extensive documentation, and ecosystem support
  • Highly scalable and suitable for complex, enterprise-level deployments

Cons of kubernetes

  • Steeper learning curve and more complex setup compared to cri-tools
  • Requires more resources to run and maintain
  • May be overkill for simpler container management needs

Code comparison

kubernetes:

// Sample code from kubernetes/pkg/kubelet/kuberuntime/kuberuntime_container.go
func (m *kubeGenericRuntimeManager) generateContainerConfig(
    container *v1.Container,
    pod *v1.Pod,
    restartCount int,
    podIP, imageRef string,
    podIPs []string,
    nsTarget *kubecontainer.ContainerID,
) (*runtimeapi.ContainerConfig, func(), error) {
    // ... (implementation details)
}

cri-tools:

// Sample code from cri-tools/cmd/crictl/container.go
func CreateContainer(client pb.RuntimeServiceClient, opts createOptions) error {
    config, err := loadContainerConfig(opts.configPath)
    if err != nil {
        return err
    }
    // ... (implementation details)
}

The code snippets show that kubernetes deals with more complex container configurations and management, while cri-tools focuses on simpler container operations and debugging tasks.

An open and reliable container runtime

Pros of containerd

  • More comprehensive container runtime with broader functionality
  • Better performance and scalability for large-scale deployments
  • Active development with frequent updates and improvements

Cons of containerd

  • Higher complexity and steeper learning curve
  • Requires more system resources compared to lightweight alternatives

Code Comparison

cri-tools:

func RunPodSandbox(runtimeService internalapi.RuntimeService, config *runtimeapi.PodSandboxConfig) (string, error) {
    podID, err := runtimeService.RunPodSandbox(config, "")
    if err != nil {
        return "", err
    }
    return podID, nil
}

containerd:

func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandboxRequest) (*runtime.RunPodSandboxResponse, error) {
    config := r.GetConfig()
    sandboxID := util.GenerateID()
    // ... (additional implementation details)
    return &runtime.RunPodSandboxResponse{PodSandboxId: sandboxID}, nil
}

Summary

containerd is a more feature-rich and performant container runtime, suitable for large-scale production environments. It offers broader functionality but comes with increased complexity. cri-tools, on the other hand, is primarily focused on testing and validation of CRI-compatible runtimes, making it simpler to use but more limited in scope. The code comparison shows that containerd's implementation is more detailed and includes additional features, while cri-tools provides a more straightforward interface for basic CRI operations.

:warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning:

Pros of docker-ce

  • More comprehensive container management solution, including image building and orchestration
  • Wider adoption and larger community support
  • Extensive documentation and resources available

Cons of docker-ce

  • Heavier and more resource-intensive
  • Less focused on Kubernetes integration compared to cri-tools
  • Slower release cycle for updates and new features

Code Comparison

cri-tools (crictl):

crictl pull nginx
crictl run nginx.yaml
crictl ps

docker-ce:

docker pull nginx
docker run -d nginx
docker ps

Both tools provide similar functionality for container management, but cri-tools is more tailored for Kubernetes environments, while docker-ce offers a broader range of features for general container operations.

cri-tools focuses on providing a debugging and validation tool for Container Runtime Interface (CRI) implementations, making it more specialized for Kubernetes ecosystems. docker-ce, on the other hand, offers a complete container platform with additional features like image building, network management, and volume control.

While docker-ce has been widely adopted and has extensive community support, cri-tools is gaining traction in Kubernetes-centric environments due to its lightweight nature and specific focus on CRI compatibility.

11,728

CLI tool for spawning and running containers according to the OCI specification

Pros of runc

  • More widely adopted and used in various container runtimes
  • Supports a broader range of container features and specifications
  • Actively maintained by the Open Container Initiative (OCI)

Cons of runc

  • Focused solely on container runtime, lacking container image and registry tools
  • May require additional components for full container management
  • Less integrated with Kubernetes-specific features

Code Comparison

runc:

func (r *Runc) Create(context context.Context, id, bundle string, opts *CreateOpts) error {
    args := []string{"create", "--bundle", bundle}
    if opts != nil {
        args = append(args, opts.AdditionalArgs...)
    }
    cmd := r.command(context, append(args, id)...)
    return runOrError(cmd)
}

cri-tools:

func (c *CriClient) CreateContainer(ctx context.Context, request *runtimeapi.CreateContainerRequest) (*runtimeapi.CreateContainerResponse, error) {
    resp, err := c.RuntimeServiceClient.CreateContainer(ctx, request)
    if err != nil {
        return nil, err
    }
    return resp, nil
}

The code snippets show that runc focuses on low-level container creation, while cri-tools provides a higher-level API for container management in Kubernetes environments.

68,613

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

Pros of moby

  • Broader scope: Moby is a complete container platform, offering more comprehensive features beyond just container runtime
  • Larger community: As the foundation for Docker, Moby has a vast ecosystem and extensive documentation
  • Flexibility: Supports multiple container runtimes and can be used independently of Kubernetes

Cons of moby

  • Complexity: More challenging to set up and maintain due to its extensive feature set
  • Resource usage: Generally requires more system resources compared to lightweight CRI tools
  • Less Kubernetes-specific: May not integrate as seamlessly with Kubernetes as purpose-built CRI tools

Code comparison

cri-tools:

// Example of using crictl to inspect a container
crictl inspect <container-id>

moby:

// Example of using Docker CLI (based on Moby) to inspect a container
docker inspect <container-id>

Summary

While cri-tools is specifically designed for Kubernetes Container Runtime Interface (CRI) debugging and validation, Moby offers a more comprehensive container platform. cri-tools is lightweight and Kubernetes-focused, whereas Moby provides a broader range of features but may be more complex to manage. The choice between them depends on specific use cases and integration requirements within a container ecosystem.

5,196

Open Container Initiative-based implementation of Kubernetes Container Runtime Interface

Pros of cri-o

  • Full-fledged container runtime implementation, not just a set of tools
  • Designed specifically for Kubernetes, offering tight integration
  • Lightweight and optimized for performance in Kubernetes environments

Cons of cri-o

  • More complex setup and configuration compared to cri-tools
  • Limited to Kubernetes use cases, less versatile for general container management
  • Steeper learning curve for users new to container runtimes

Code Comparison

cri-o example (container creation):

container, err := c.ContainerServer.CreateContainer(ctx, &containers.Container{
    ID:     id,
    Name:   name,
    Image:  image,
    Config: config,
})

cri-tools example (container inspection):

resp, err := runtimeClient.ContainerStatus(context.Background(), &runtimeapi.ContainerStatusRequest{
    ContainerId: containerId,
    Verbose:     verbose,
})

While cri-o provides a full runtime implementation, cri-tools focuses on debugging and validation tools for CRI-compatible runtimes. cri-o offers more comprehensive container management capabilities, whereas cri-tools provides utilities for interacting with and testing CRI implementations.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

cri-tools

CLI and validation tools for Kubelet Container Runtime Interface (CRI) .

Build Status e2e critest containerd critest CRI-O Go Report Card

What is the scope of this project?

cri-tools aims to provide a series of debugging and validation tools for Kubelet CRI, which includes:

  • crictl: CLI for kubelet CRI.
  • critest: validation test suites for kubelet CRI.

What is not in scope for this project?

  • Building a new kubelet container runtime based on CRI.
  • Managing pods/containers for CRI-compatible runtimes by end-users, e.g. pods created by crictl may be removed automatically by kubelet because of non-exist on the kube-apiserver.

Compatibility matrix: cri-tools ⬄ Kubernetes

Kubernetes Versioncri-tools Versioncri-tools branch
≥ 1.27.x≥ 1.27.xmaster
≥ 1.16.x ≤ 1.26.x≥ 1.16.x ≤ 1.26.xmaster
1.15.Xv1.15.0release-1.15
1.14.Xv1.14.0release-1.14
1.13.Xv1.13.0release-1.13
1.12.Xv1.12.0release-1.12
1.11.Xv1.11.1release-1.11
1.10.Xv1.0.0-beta.2release-1.10
1.9.Xv1.0.0-alpha.1release-1.9
1.8.Xv0.2release-1.8
1.7.Xv0.1release-1.7

It's recommended to use the same cri-tools and Kubernetes minor version, because new features added to the Container Runtime Interface (CRI) may not be fully supported if they diverge.

cri-tools follows the Kubernetes release cycles with respect to its minor versions (1.x.y). Patch releases (1.x.z) for Kubernetes are not in sync with those from cri-tools, because they are scheduled for each month, whereas cri-tools provides them only if necessary. If a Kubernetes release goes End of Life, then the corresponding cri-tools version can be considered in the same way.

All new minor versions of cri-tools are being created from the master branch, whereas corresponding release-1.x branches will be created if a patch release is planned.

See the roadmap for information about current and future milestones.

Install

Install crictl

VERSION="v1.31.1"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz

Install critest

VERSION="v1.31.1"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/critest-$VERSION-linux-amd64.tar.gz
sudo tar zxvf critest-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f critest-$VERSION-linux-amd64.tar.gz

deb/rpm packages

Packages for various distributions using deb's and rpm's are available in the OBS repository.

Documentation

Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the community page.

You can reach the maintainers of this project at:

Contributing

Interested in contributing? Check out the documentation.

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.