blob: 78e46108c044f146eab5694a462c295f5587d36a [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Caching images for faster workspace start :: Eclipse Che Documentation</title>
<link rel="canonical" href="https://www.eclipse.org/che/docs/che-7/administration-guide/caching-images-for-faster-workspace-start/">
<meta name="keywords" content="administration-guide, caching-images-for-faster-workspace-start">
<meta name="generator" content="Antora 2.3.3">
<link rel="stylesheet" href="../../../_/css/site.css">
<link rel="stylesheet" href="../../../_/css/extra.css">
<link rel="stylesheet" href="../../../_/font-awesome-4.7.0/css/font-awesome.min.css">
<link rel="icon" href="../../../favicon.ico" type="image/x-icon">
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-37306001-2"></script>
<script>function gtag(){dataLayer.push(arguments)};window.dataLayer=window.dataLayer||[];gtag('js',new Date());gtag('config','UA-37306001-2')</script>
</head>
<body class="article">
<header class="header" role="banner">
<nav class="navbar">
<div class="navbar-brand">
<div class="navbar-item">
<button class="navbar-burger" data-target="topbar-nav">
<span></span>
<span></span>
<span></span>
</button>
<img src="../../../_/img/icon-eclipse-che.svg" class="navbar-logo" alt="Eclipse Che logo">
<a href="https://www.eclipse.org/che/docs">Eclipse Che Documentation</a>
</div>
</div>
<div id="topbar-nav" class="navbar-menu">
<div class="navbar-end">
<div class="navbar-item hide-for-print">
<script async src="https://cse.google.com/cse.js?cx=002898025167115630151:gnr5edrg2eo"></script>
<div class="gcse-searchbox" enableAutoComplete="true"></div>
</div>
<a class="navbar-item" href="#">Home</a>
<a class="navbar-item" href="https://che.eclipse.org/">Blog</a>
<a class="navbar-item" href="https://github.com/eclipse/che">Source Code</a>
</div>
</div>
</nav>
<div class="gcse-searchresults"></div>
</header>
<div class="body">
<div class="nav-container" data-component="che-7" data-version="master">
<aside class="nav">
<div class="panels">
<div class="nav-panel-menu is-active" data-panel="menu">
<nav class="nav-menu">
<h3 class="title"><a href="../../overview/introduction-to-eclipse-che/">Eclipse Che 7 Documentation</a></h3>
<ul class="nav-list">
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../overview/introduction-to-eclipse-che/">Introduction to Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../overview/che-architecture/">Che architecture</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../hosted-che/hosted-che/">Hosted Che</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<button class="nav-item-toggle"></button>
<span class="nav-text">End-user Guide</span>
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/navigating-che/">Navigating Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/navigating-che-using-the-dashboard/">Navigating Che: dashboard</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/importing-certificates-to-browsers/">Importing certificates to browsers</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/accessing-che-from-openshift-developer-perspective/">Navigating Che from OpenShift Developer Perspective</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/che-theia-ide-basics/">Che-Theia IDE basics</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/defining-custom-commands-for-che-theia/">Defining custom commands for Che-Theia</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/version-control/">Version Control</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/che-theia-troubleshooting/">Che-Theia Troubleshooting</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/workspaces-overview/">Using developer workspaces</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/configuring-a-workspace-using-a-devfile/">Configuring a workspace using a devfile</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/making-a-workspace-portable-using-a-devfile/">Making a workspace portable using a devfile</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/creating-and-configuring-a-new-workspace/">Creating and configuring a new workspace</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/importing-a-kubernetes-application-into-a-workspace/">Importing a Kubernetes application into a workspace</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/remotely-accessing-workspaces/">Remotely accessing workspaces</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/creating-a-workspace-from-code-sample/">Creating a workspace from code sample</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/creating-a-workspace-by-importing-source-code-of-a-project/">Creating a workspace by importing source code of a project</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/mounting-a-secret-as-a-file-or-an-environment-variable-into-a-workspace-container/">Mounting a secret as a file or an environment variable into a workspace container</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/customizing-developer-environments/">Customizing developer environments</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/what-is-a-che-theia-plug-in/">What is a Che-Theia plug-in</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-alternative-ides-in-che/">Using alternative IDEs in Che</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/adding-tools-to-che-after-creating-a-workspace/">Adding tools to Che after creating a workspace</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/configuring-oauth-authorization/">Configuring OAuth authorization</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/configuring-github-oauth/">Configuring GitHub OAuth</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/configuring-openshift-oauth/">Configuring OpenShift OAuth</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/using-artifact-repositories-in-a-restricted-environment/">Using artifact repositories in a restricted environment</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-maven-artifact-repositories/">Using Maven artifact repositories</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-gradle-artifact-repositories/">Using Gradle artifact repositories</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-python-artifact-repositories/">Using Python artifact repositories</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-go-artifact-repositories/">Using Go artifact repositories</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-nuget-artifact-repositories/">Using NuGet artifact repositories</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/using-npm-artifact-repositories/">Using npm artifact repositories</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../end-user-guide/troubleshooting-che/">Troubleshooting Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/troubleshooting-slow-workspaces/">Troubleshooting slow workspaces</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/troubleshooting-network-problems/">Troubleshooting network problems</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/starting-a-che-workspace-in-debug-mode/">Starting a workspace in debug mode</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../end-user-guide/restarting-a-che-workspace-in-debug-mode-after-start-failure/">Restarting a workspace in debug mode after start failure</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<button class="nav-item-toggle"></button>
<span class="nav-text">Installation Guide</span>
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../installation-guide/supported-platforms/">Supported platforms</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../installation-guide/configuring-the-che-installation/">Configuring the Che installation</a>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../installation-guide/installing-che/">Installing Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../installation-guide/installing-che-in-cloud/">Installing Che in cloud</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-openshift-4-using-operatorhub/">Installing Che on OpenShift 4</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-openshift-3-using-the-operator/">Installing Che on OpenShift 3</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-kubespray/">Installing Che on Kubespray</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-aws/">Installing Che on AWS</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-google-cloud-platform/">Installing Che on Google Cloud</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-microsoft-azure/">Installing Che on Microsoft Azure</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../installation-guide/installing-che-locally/">Installing Che locally</a>
<ul class="nav-list">
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-codeready-containers/">Installing Che on CodeReady Containers</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-docker-desktop/">Installing Che on Docker Desktop</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-minikube/">Installing Che on Minikube</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-minishift/">Installing Che on Minishift</a>
</li>
<li class="nav-item" data-depth="3">
<a class="nav-link" href="../../installation-guide/installing-che-on-kind/">Installing Che on Kind</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/using-the-chectl-management-tool/">Using the chectl management tool</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/installing-che-in-a-restricted-environment/">Installing Che in restricted environment</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../installation-guide/advanced-configuration/">Advanced configuration</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/advanced-configuration-options-for-the-che-server-component/">Advanced configuration options for Che server</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/configuring-namespace-strategies/">Configuring namespace strategies</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/configuring-workspace-exposure-strategies/">Configuring workspace exposure strategies</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/configuring-workspaces-nodeselector/">Configuring workspaces nodeSelector</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/configuring-che-hostname/">Configuring Che hostname</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/deploying-che-with-support-for-git-repositories-with-self-signed-certificates/">Deploying Che with support for Git repositories with self-signed certificates</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/installing-che-using-storage-classes/">Installing Che using storage classes</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/configuring-storage-types/">Configuring storage types</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/importing-tls-certificates-to-che-server-java-truststore/">Importing TLS certificates to Che server Java truststore</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../installation-guide/upgrading-che/">Upgrading Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/upgrading-che-using-operatorhub/">Upgrading Che using OperatorHub</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/upgrading-che-using-the-cli-management-tool/">Upgrading Che using the CLI management tool</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../installation-guide/uninstalling-che/">Uninstalling Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/uninstalling-che-after-operatorhub-installation-using-openshift-web-console/">Using the OpenShift web console</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/uninstalling-che-after-operatorhub-installation-using-openshift-cli/">Using OpenShift CLI</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../installation-guide/uninstalling-che-after-chectl-installation/">Using chectl</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<button class="nav-item-toggle"></button>
<span class="nav-text">Administration Guide</span>
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../che-architecture-overview/">Che architecture</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../che-workspace-controller/">Che workspace controller</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../che-workspaces-architecture/">Che workspaces architecture</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../calculating-che-resource-requirements/">Calculating Che resource requirements</a>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../customizing-the-devfile-and-plug-in-registries/">Customizing devfile and plug-in registries</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../building-and-running-a-custom-registry-image/">Building and running a custom registry image</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../including-the-plug-in-binaries-in-the-registry-image/">Including the plug-in binaries in the registry image</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../editing-a-devfile-and-plug-in-at-runtime/">Editing a devfile and plug-in at runtime</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../using-a-visual-studio-code-extension-in-che/">Using a VS Code extension in Che</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../testing-a-visual-studio-code-extension-in-che/">Testing a VS Code extension in Che</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../retrieving-che-logs/">Retrieving Che logs</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../viewing-kubernetes-events/">Accessing Kubernetes events on OpenShift</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../viewing-operator-events/">Viewing the Operator events on OpenShift</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../viewing-che-server-logs/">Viewing Che server logs</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../viewing-external-service-logs/">Viewing external service logs</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../viewing-che-workspaces-logs/">Viewing Che workspaces logs</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../viewing-plug-in-broker-logs/">Viewing Plug-in broker logs</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../collecting-logs-using-chectl/">Collecting logs using chectl</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../monitoring-che/">Monitoring Che</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../tracing-che/">Tracing Che</a>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../managing-users/">Managing users</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../configuring-authorization/">Configuring authorization</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../removing-user-data/">Removing user data</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../securing-che/">Securing Che</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../authenticating-users/">Authenticating users</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../authorizing-users/">Authorizing users</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../backup-and-disaster-recovery/">Backup and disaster recovery</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../external-database-setup/">External database setup</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../persistent-volumes-backups/">Persistent Volumes backups</a>
</li>
</ul>
</li>
<li class="nav-item is-current-page" data-depth="1">
<a class="nav-link" href="./">Caching images for faster workspace start</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<button class="nav-item-toggle"></button>
<span class="nav-text">Contributor Guide</span>
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../contributor-guide/branding-che-theia/">Branding Che-Theia</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../contributor-guide/developing-che-theia-plug-ins/">Developing Che-Theia plug-ins</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../contributor-guide/testing-che-theia-plug-ins/">Testing Che-Theia plug-ins</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../contributor-guide/publishing-che-theia-plug-ins/">Publishing Che-Theia plug-ins</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../contributor-guide/adding-support-for-a-new-language/">Adding support for a new language</a>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../contributor-guide/adding-support-for-a-new-debugger/">Adding support for a new debugger</a>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../contributor-guide/che-extensibility-reference/">Che extensibility reference</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../contributor-guide/che-extension-points/">Che extension points</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../contributor-guide/che-theia-plug-in-api/">Che-Theia plug-in API</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../contributor-guide/debug-adapter-protocol/">Debug Adapter Protocol</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../contributor-guide/language-server-protocol/">Language Server Protocol</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<button class="nav-item-toggle"></button>
<span class="nav-text">Extensions</span>
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../extensions/eclipse-che4z/">Eclipse Che4z</a>
</li>
<li class="nav-item" data-depth="1">
<button class="nav-item-toggle"></button>
<a class="nav-link" href="../../extensions/openshift-connector-overview/">OpenShift Connector</a>
<ul class="nav-list">
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../extensions/features-of-openshift-connector/">Features of OpenShift Connector</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../extensions/installing-openshift-connector-in-che/">Installing OpenShift Connector in Eclipse Che</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../extensions/authenticating-with-openshift-connector-from-che/">Authenticating with OpenShift Connector from Eclipse Che</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../extensions/creating-components-with-openshift-connector-in-che/">Creating Components with OpenShift Connector in Eclipse Che</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../../extensions/connecting-source-code-from-github-to-a-openshift-component-using-openshift-connector/">Connecting source code from GitHub to a OpenShift Component</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../extensions/telemetry/">Telemetry</a>
</li>
</ul>
</li>
<li class="nav-item" data-depth="0">
<ul class="nav-list">
<li class="nav-item" data-depth="1">
<a class="nav-link" href="../../glossary/che-glossary/">Che glossary</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Eclipse Che 7 Documentation</span>
<span class="version">Stable</span>
</div>
<ul class="components">
<li class="component">
<span class="title">devfile</span>
<ul class="versions">
<li class="version is-latest">
<a href="../../../devfile/">master</a>
</li>
</ul>
</li>
<li class="component is-current">
<span class="title">Eclipse Che 7 Documentation</span>
<ul class="versions">
<li class="version is-current is-latest">
<a href="../../overview/introduction-to-eclipse-che/">Stable</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
</div>
<main class="article">
<div class="toolbar" role="navigation">
<button class="nav-toggle"></button>
<a href="../../overview/introduction-to-eclipse-che/" class="home-link"></a>
<nav class="breadcrumbs" aria-label="breadcrumbs">
<ul>
<li><a href="../../overview/introduction-to-eclipse-che/">Eclipse Che 7 Documentation</a></li>
<li>Administration Guide</li>
<li><a href="./">Caching images for faster workspace start</a></li>
</ul>
</nav>
<div class="edit-this-page"><a href="https://github.com/eclipse/che-docs/edit/master/modules/administration-guide/pages/caching-images-for-faster-workspace-start.adoc">Edit this Page</a></div>
</div>
<div class="content">
<article class="doc">
<h1 class="page">Caching images for faster workspace start</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This section describes installing the <a href="https://github.com/che-incubator/kubernetes-image-puller">Image Puller</a> on a Che cluster to cache images on cluster nodes.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="image-puller-overview_caching-images-for-faster-workspace-start"><a class="anchor" href="#image-puller-overview_caching-images-for-faster-workspace-start"></a>Image Puller overview</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Slow starts of Eclipse&#160;Che workspaces may be caused by waiting for the underlying cluster to pull images used in workspaces from remote registries. As such, pre-pulling images can improve start times significantly. The <em>Image Puller</em> can be used to pre-pull images and shorten workspace start times.</p>
</div>
<div class="paragraph">
<p>The Image Puller is an additional deployment that runs alongside Eclipse&#160;Che. Given a list of images to pre-pull, the application runs inside a cluster and creates a <em>DaemonSet</em> that pulls the images on each node.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The minimal requirement for an image to be pre-pulled is the availability of the <code>sleep</code> command, which means that <code>FROM scratch</code> images (for example, 'che-machine-exec') are currently not supported. Also, images that mount volumes in the dockerfile are not supported for pre-pulling on OpenShift.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The application can be deployed:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>using OperatorHub or installing the <a href="https://github.com/che-incubator/kubernetes-image-puller-operator">kubernetes image puller operator</a></p>
</li>
<li>
<p>using Helm</p>
</li>
<li>
<p>by processing and applying OpenShift templates.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The image puller loads its configuration from a <code>ConfigMap</code> with the following available parameters:</p>
</div>
<table id="image-puller-configuration_caching-images-for-faster-workspace-start" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 1. Image Puller default parameters</caption>
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Parameter</th>
<th class="tableblock halign-left valign-top">Usage</th>
<th class="tableblock halign-left valign-top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_INTERVAL_HOURS</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Interval, in hours, between checking health of DaemonSets</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"1"</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_MEMORY_REQUEST</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The memory request for each cached image when the puller is running</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10Mi</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_MEMORY_LIMIT</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The memory limit for each cached image when the puller is running</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>20Mi</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_CPU_REQUEST</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The CPU request for each cached image when the puller is running</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.05</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_CPU_LIMIT</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The CPU limit for each cached image when the puller is running</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.2</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DAEMONSET_NAME</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Name of DaemonSet to be created</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>kubernetes-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>NAMESPACE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Namespace where DaemonSet is to be created</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>k8s-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IMAGES</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">List of images to be cached, in the format <code>&lt;name&gt;=&lt;image&gt;;&#8230;&#8203;</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Contains a default list of images. Before deploying, fill this with the images that fit the current requirements</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>NODE_SELECTOR</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Node selector applied to the Pods created by the DaemonSet</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>'{}'</code></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>The default memory requests and limits ensure that the container has enough memory to start. When changing <code>CACHING_MEMORY_REQUEST</code> or <code>CACHING_MEMORY_LIMIT</code>, you will need to consider the total memory allocated to the DaemonSet Pods in the cluster:</p>
</div>
<div class="paragraph">
<p><code>(memory limit) * (number of images) * (number of nodes in the cluster)</code></p>
</div>
<div class="paragraph">
<p>For example, running the image puller that caches 5 images on 20 nodes, with a container memory limit of <code>20Mi</code> requires <code>2000Mi</code> of memory.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploying-image-puller-using-operator_caching-images-for-faster-workspace-start"><a class="anchor" href="#deploying-image-puller-using-operator_caching-images-for-faster-workspace-start"></a>Deploying Image Puller using the Operator</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The recommended way to deploy the Image Puller is through the <a href="https://github.com/che-incubator/kubernetes-image-puller-operator">Operator</a>.</p>
</div>
<div class="sect2">
<h3 id="_installing_the_image_puller_on_openshift_using_operatorhub"><a class="anchor" href="#_installing_the_image_puller_on_openshift_using_operatorhub"></a>Installing the Image Puller on OpenShift using OperatorHub</h3>
<div class="ulist">
<div class="title">Prerequisites</div>
<ul>
<li>
<p>A namespace in your cluster to host the image puller. This document uses the namespace <code>image-puller</code> as an example.</p>
</li>
</ul>
</div>
<div class="olist arabic">
<div class="title">Procedure</div>
<ol class="arabic">
<li>
<p>Navigate to your OpenShift cluster console, navigate to <b class="button"><strong>Operators</strong></b> → <b class="button"><strong>OperatorHub</strong></b>.</p>
</li>
<li>
<p>Use the <b class="button"><strong>Filter by keyword</strong></b> box to search for <code>Kubernetes Image Puller Operator</code>. Click the <b class="button">Kubernetes Image Puller Operator</b>.</p>
</li>
<li>
<p>Read the description of the Operator. Click <b class="button"><strong>Continue</strong></b> → <b class="button"><strong>Install</strong></b>.</p>
</li>
<li>
<p>Select <b class="button"><strong>A specific namespace on the cluster</strong></b> for the <b class="button"><strong>Installation Mode</strong></b>. In the drop-down find the namespace you created to install the image puller. Click <b class="button"><strong>Subscribe</strong></b>.</p>
</li>
<li>
<p>Wait for the Image Puller Operator to install. Click the <b class="button"><strong>KubernetesImagePuller</strong></b> → <b class="button"><strong>Create instance</strong></b>.</p>
</li>
<li>
<p>In a redirected window with a YAML editor, make modifications to the <code>KubernetesImagePuller</code> Custom Resource and click <b class="button"><strong>Create</strong></b>.</p>
</li>
<li>
<p>Navigate to the <b class="button"><strong>Workloads</strong></b> and <b class="button"><strong>Pods</strong></b> menu in the namespace and verify that the image puller is installed.</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="_installing_the_image_puller_on_kubernetes_using_the_operator"><a class="anchor" href="#_installing_the_image_puller_on_kubernetes_using_the_operator"></a>Installing the Image Puller on Kubernetes using the Operator</h3>
<div class="paragraph">
<p>Create a namespace to host the kubernetes image puller, and apply the following manifests from the <a href="https://github.com/che-incubator/kubernetes-image-puller-operator">GitHub repository</a>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-shell hljs" data-lang="shell">export NAMESPACE=&lt;namespace you created to host the image puller&gt;
kubectl apply -f https://raw.githubusercontent.com/che-incubator/kubernetes-image-puller-operator/master/deploy/crds/che.eclipse.org_kubernetesimagepullers_crd.yaml -n $NAMESPACE
kubectl apply -f https://raw.githubusercontent.com/che-incubator/kubernetes-image-puller-operator/master/deploy/role.yaml -n $NAMESPACE
kubectl apply -f https://raw.githubusercontent.com/che-incubator/kubernetes-image-puller-operator/master/deploy/role_binding.yaml -n $NAMESPACE
kubectl apply -f https://raw.githubusercontent.com/che-incubator/kubernetes-image-puller-operator/master/deploy/service_account.yaml -n $NAMESPACE
kubectl apply -f https://raw.githubusercontent.com/che-incubator/kubernetes-image-puller-operator/master/deploy/operator.yaml -n $NAMESPACE</code></pre>
</div>
</div>
<div class="paragraph">
<p>Then create a <code>KubernetesImagePuller</code> Custom Resource:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">apiVersion: che.eclipse.org/v1alpha1
kind: KubernetesImagePuller
metadata:
name: image-puller
namespace: &lt;namespace you installed the image puller in&gt;
spec:
configMapName: k8s-image-puller
daemonsetName: k8s-image-puller
deploymentName: kubernetes-image-puller
images: &gt;-
java11-maven=quay.io/eclipse/che-java11-maven:nightly;che-theia=quay.io/eclipse/che-theia:next</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploying-image-puller-using-openshift-templates_caching-images-for-faster-workspace-start"><a class="anchor" href="#deploying-image-puller-using-openshift-templates_caching-images-for-faster-workspace-start"></a>Deploying Image Puller using OpenShift templates</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The Image Puller repository contains OpenShift templates for deploying on OpenShift.</p>
</div>
<div class="paragraph">
<p>Alternatively, you can use <a href="#deploying-image-puller-using-helm_caching-images-for-faster-workspace-start">Deploying Image Puller using Helm</a>.</p>
</div>
<div class="ulist">
<div class="title">Prerequisites</div>
<ul>
<li>
<p>A running OpenShift cluster.</p>
</li>
<li>
<p>The <code>oc</code> tool is available.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The following parameters are available to further configure the OpenShift templates:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 2. Parameters for installing with OpenShift templates</caption>
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Value</th>
<th class="tableblock halign-left valign-top">Usage</th>
<th class="tableblock halign-left valign-top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>DAEMONSET_NAME</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>DAEMONSET_NAME</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>kubernetes-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IMAGE</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Image used for the <code>kubernetes-image-puller</code> deployment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/eclipse/kubernetes-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>IMAGE_TAG</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The image tag to pull</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>latest</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>SERVICEACCOUNT_NAME</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the ServiceAccount used by the deployment (created as part of installation)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>k8s-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_INTERVAL_HOURS</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_INTERVAL_HOURS</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"1"</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_INTERVAL_REQUEST</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_MEMORY_REQUEST</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"10Mi"</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_INTERVAL_LIMIT</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_MEMORY_LIMIT</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"20Mi"`</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_CPU_REQUEST</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_CPU_REQUEST</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.05</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CACHING_CPU_LIMIT</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_CPU_LIMIT</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.2</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>NODE_SELECTOR</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>NODE_SELECTOR</code> to set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"{}"</code></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>See <a href="#image-puller-configuration_caching-images-for-faster-workspace-start">Image Puller default parameters</a> for more information about configuration values, such as <code>DAEMONSET_NAME</code>, <code>CACHING_INTERVAL_HOURS</code>, and <code>CACHING_MEMORY_REQUEST</code>.</p>
</div>
<div class="paragraph">
<div class="title">Procedure</div>
<p><strong>Installing</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Clone the <code>kubernetes-image-puller</code> repository:</p>
<div class="listingblock">
<div class="content">
<pre>$ git clone https://github.com/che-incubator/kubernetes-image-puller
$ cd kubernetes-image-puller</pre>
</div>
</div>
</li>
<li>
<p>Create a new OpenShift project to deploy the puller into:</p>
<div class="listingblock">
<div class="content">
<pre>$ oc new-project k8s-image-puller</pre>
</div>
</div>
</li>
<li>
<p>Process and apply the templates to deploy the puller:</p>
<div class="listingblock">
<div class="content">
<pre>$ oc process -f deploy/openshift/serviceaccount.yaml | oc apply -f -
$ oc process -f deploy/openshift/configmap.yaml | oc apply -f -
$ oc process -f deploy/openshift/app.yaml | oc apply -f -</pre>
</div>
</div>
</li>
</ol>
</div>
<div class="paragraph">
<p><strong>Verifying the installation</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Confirm that a new deployment, <code>kubernetes-image-puller</code>, and a DaemonSet (named based on the value of the <code>DAEMONSET_NAME</code> parameter) exist. The DaemonSet needs to have a Pod for each node in the cluster:</p>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-dummy hljs" data-lang="dummy">$ oc get deployment,daemonset,pod --namespace k8s-image-puller
deployment.extensions/kubernetes-image-puller 1/1 1 1 2m19s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.extensions/kubernetes-image-puller 1 1 1 1 1 &lt;none&gt; 2m10s
NAME READY STATUS RESTARTS AGE
pod/kubernetes-image-puller-5495f46497-mkd4p 1/1 Running 0 2m18s
pod/kubernetes-image-puller-n8bmf 3/3 Running 0 2m10s</code></pre>
</div>
</div>
</li>
<li>
<p>Check that the <code>ConfigMap</code> named <code>k8s-image-puller</code> has the values you specified in your parameter substitution, or that they contain the default values:</p>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-dummy hljs" data-lang="dummy">$ oc get configmap k8s-image-puller --output yaml
apiVersion: v1
data:
CACHING_INTERVAL_HOURS: "1"
CACHING_MEMORY_LIMIT: 20Mi
CACHING_MEMORY_REQUEST: 10Mi
DAEMONSET_NAME: kubernetes-image-puller
IMAGES: |
java11-maven=quay.io/eclipse/che-java11-maven:nightly; che-theia=eclipse/che-theia:next; java-plugin-runner=eclipse/che-remote-plugin-runner-java8:latest;
NAMESPACE: k8s-image-puller
NODE_SELECTOR: '{}'
kind: ConfigMap
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"CACHING_INTERVAL_HOURS":"1","CACHING_MEMORY_LIMIT":"20Mi","CACHING_MEMORY_REQUEST":"10Mi","DAEMONSET_NAME":"kubernetes-image-puller","IMAGES":"java11-maven=quay.io/eclipse/che-java11-maven:nightly; che-th
eia=eclipse/che-theia:next; java-plugin-runner=eclipse/che-remote-plugin-runner-java8:latest;\n","NAMESPACE":"k8s-image-puller","NODE_SELECTOR":"{}"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"k8s-image-puller","namespace":"k
8s-image-puller"},"type":"Opaque"}
creationTimestamp: 2020-02-17T22:40:13Z
name: k8s-image-puller
namespace: k8s-image-puller
resourceVersion: "72250"
selfLink: /api/v1/namespaces/k8s-image-puller/configmaps/k8s-image-puller
uid: 76430ed6-51d6-11ea-9c19-52fdfc072182</code></pre>
</div>
</div>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="deploying-image-puller-using-helm_caching-images-for-faster-workspace-start"><a class="anchor" href="#deploying-image-puller-using-helm_caching-images-for-faster-workspace-start"></a>Deploying Image Puller using Helm</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This section describes how to install the Image Puller using Helm.</p>
</div>
<div class="ulist">
<div class="title">Prerequisites</div>
<ul>
<li>
<p>The <code>helm</code> tool is available.</p>
</li>
<li>
<p>A running OpenShift or Kubernetes cluster.</p>
</li>
<li>
<p>The <code>oc</code> or the <code>kubectl</code> tool is available.</p>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
In the instructions later in this section, use the <code>oc</code> command when installing on OpenShift and the <code>kubectl</code> command for installing on Kubernetes.
</td>
</tr>
</table>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>The following parameters are available for configuring the installation with Helm:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 3. Parameters for installing with Helm</caption>
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Value</th>
<th class="tableblock halign-left valign-top">Usage</th>
<th class="tableblock halign-left valign-top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>appName</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>DAEMONSET_NAME</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>quay.io/eclipse/kubernetes-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>image.repository</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The repository to pull the image from</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>latest</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>image.tag</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The image tag to pull</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>latest</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>serviceAccount.name</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the ServiceAccount to create</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>k8s-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.name</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the ConfigMap to create</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>k8s-image-puller</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.cachingIntervalHours</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_INTERVAL_HOURS</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"1"</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.cachingMemoryRequest</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_MEMORY_REQUEST</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"10Mi"</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.cachingMemoryLimit</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_MEMORY_LIMIT</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"20Mi"`</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.cachingCpuRequest</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_CPU_REQUEST</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.05</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.cachingCpuLimit</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>CACHING_CPU_LIMIT</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.2</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>configMap.nodeSelector</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of <code>NODE_SELECTOR</code> to be set in the ConfigMap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>"{}"</code></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<div class="title">Procedure</div>
<p><strong>Installing</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Clone the <code>kubernetes-image-puller</code> repository:</p>
<div class="listingblock">
<div class="content">
<pre>$ git clone https://github.com/che-incubator/kubernetes-image-puller
$ cd kubernetes-image-puller</pre>
</div>
</div>
</li>
<li>
<p>Create a namespace to deploy the puller into:</p>
<div class="listingblock">
<div class="content">
<pre>$ oc create namespace k8s-image-puller</pre>
</div>
</div>
</li>
<li>
<p>Run <code>helm install</code>:</p>
<div class="listingblock">
<div class="content">
<pre>$ helm install kubernetes-image-puller --namespace k8s-image-puller deploy/helm</pre>
</div>
</div>
<div class="paragraph">
<p>To set values, edit the <code>deploy/helm/values.yaml</code> file, or use the <code>--set property.name=<em>&lt;value&gt;</em></code> parameter.</p>
</div>
</li>
</ol>
</div>
<div class="paragraph">
<p><strong>Verifying the installation</strong></p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Confirm that a new deployment, <code>kubernetes-image-puller</code>, and a DaemonSet (named based on the value of the <code>DAEMONSET_NAME</code> parameter) exist. The DaemonSet needs to have a Pod for each node in the cluster:</p>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-dummy hljs" data-lang="dummy">$ oc get deployment,daemonset,pod --namespace k8s-image-puller
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/kubernetes-image-puller 1/1 1 1 4m21s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/kubernetes-image-puller 3 3 3 3 3 &lt;none&gt; 3m40s
NAME READY STATUS RESTARTS AGE
pod/kubernetes-image-puller-b556c8bd4-qxwwl 1/1 Running 0 4m21s
pod/kubernetes-image-puller-glh87 3/3 Running 0 3m40s
pod/kubernetes-image-puller-h7lxf 3/3 Running 0 3m40s
pod/kubernetes-image-puller-nrt6p 3/3 Running 0 3m40s</code></pre>
</div>
</div>
</li>
<li>
<p>Check that the <code>ConfigMap</code> named <code>k8s-image-puller</code> has the values specified in the Helm configuration, or that they contain the default values:</p>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight nowrap"><code class="language-dummy hljs" data-lang="dummy">$ oc get configmap k8s-image-puller --output yaml
apiVersion: v1
data:
CACHING_INTERVAL_HOURS: "1"
CACHING_MEMORY_LIMIT: 20Mi
CACHING_MEMORY_REQUEST: 10Mi
DAEMONSET_NAME: kubernetes-image-puller
IMAGES: java11-maven=quay.io/eclipse/che-java11-maven:nightly; che-theia=eclipse/che-theia:next;
java-plugin-runner=eclipse/che-remote-plugin-runner-java8:latest;
NAMESPACE: k8s-image-puller
NODE_SELECTOR: '{}'
kind: ConfigMap
metadata:
creationTimestamp: "2020-02-17T22:15:22Z"
name: k8s-image-puller
namespace: k8s-image-puller
resourceVersion: "3078"
selfLink: /api/v1/namespaces/k8s-image-puller/configmaps/k8s-image-puller
uid: 71bc5ce4-d095-468e-ab7b-23c1e0a36638</code></pre>
</div>
</div>
</li>
</ol>
</div>
</div>
</div>
</article>
<aside class="toc sidebar" data-title="Contents" data-levels="2">
<div class="toc-menu"></div>
</aside>
</div>
</main>
</div>
<footer class="footer">
<div><a href="https://www.eclipse.org" target="_blank">Eclipse Foundation</a> |
<a href="https://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> |
<a href="https://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> |
<a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank">Eclipse Public License</a> |
<a href="https://www.eclipse.org/legal" target="_blank">Legal Resources</a></div>
</footer>
<script src="../../../_/js/site.js"></script>
<script async src="../../../_/js/vendor/highlight.js"></script>
</body>
</html>