5.6. 缓存镜像以便更快地启动工作区
要提高 OpenShift Dev Spaces 工作区的开始时间性能,请使用 Image Puller,它是一个 OpenShift Dev Spaces 组件,可用于预拉取 OpenShift 集群。
Image Puller 是一个额外的 OpenShift 部署,它会创建一个 DaemonSet,可在每个节点上预拉取相关的 OpenShift Dev Spaces 工作区镜像。这些镜像在 OpenShift Dev Spaces 工作区启动时已经可用,因此改进了工作空间开始时间。
安装 Kubernetes Image Puller
配置 Kubernetes Image Puller
5.6.1. 安装 Kubernetes Image Puller 复制链接链接已复制到粘贴板!
按照以下说明,为不同的用例安装 Kubernetes Image Puller。
5.6.1.1. 安装 Kubernetes Image Puller 复制链接链接已复制到粘贴板!
5.6.1.2. 使用 CLI 在 OpenShift 上安装 Image Puller 复制链接链接已复制到粘贴板!
您可以使用 OpenShift oc
管理工具在 OpenShift 上安装 Kubernetes Image Puller。
如果使用 oc
CLI 安装 ImagePuller,则无法通过 CheCluster
自定义资源进行配置。
先决条件
-
具有 OpenShift 集群管理权限的活跃的
oc
会话。请参阅 OpenShift CLI 入门。
流程
- 按照 doc 收集要拉取的相关容器镜像列表: 第 5.6.3 节 “检索 Kubernetes Image Puller 的默认镜像列表”
定义内存请求和限值参数,以确保拉取容器,并且平台有足够的内存来运行。
当定义
CACHING_MEMORY_REQUEST
或CACHING_MEMORY_LIMIT
的最小值时,请考虑运行每个容器镜像所需的内存量。在定义
CACHING_MEMORY_REQUEST
或CACHING_MEMORY_LIMIT
的 maximal 值时,请考虑分配给集群中 DaemonSet Pod 的总内存:(memory limit) * (number of images) * (number of nodes in the cluster)
(memory limit) * (number of images) * (number of nodes in the cluster)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 20 个节点中拉取 5 个镜像,容器内存限制为
20Mi
需要2000Mi
内存。克隆 Image Puller 存储库,并在包含 OpenShift 模板的目录中:
git clone https://github.com/che-incubator/kubernetes-image-puller cd kubernetes-image-puller/deploy/openshift
git clone https://github.com/che-incubator/kubernetes-image-puller cd kubernetes-image-puller/deploy/openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下参数配置
app.yaml
、configmap.yaml
和serviceaccount.yaml
OpenShift 模板:Expand 表 5.37. app.yaml中的 Image Puller OpenShift 模板参数 值 使用方法 默认值 DEPLOYMENT_NAME
ConfigMap 中的
DEPLOYMENT_NAME
的值kubernetes-image-puller
IMAGE
用于
kubernetes-image-puller
部署的镜像registry.redhat.io/devspaces/imagepuller-rhel8
IMAGE_TAG
要拉取的镜像标签
latest
SERVICEACCOUNT_NAME
部署创建和使用的 ServiceAccount 的名称
kubernetes-image-puller
Expand 表 5.38. configmap.yaml 中的 Image Puller OpenShift 模板参数 值 使用方法 默认值 CACHING_CPU_LIMIT
ConfigMap 中的
CACHING_CPU_LIMIT
的值.2
CACHING_CPU_REQUEST
ConfigMap 中的
CACHING_CPU_REQUEST
的值.05
CACHING_INTERVAL_HOURS
ConfigMap 中的
CACHING_INTERVAL_HOURS
的值"1"
CACHING_MEMORY_LIMIT
ConfigMap 中的
CACHING_MEMORY_LIMIT
的值"20Mi"
CACHING_MEMORY_REQUEST
ConfigMap 中的
CACHING_MEMORY_REQUEST
的值"10Mi"
DAEMONSET_NAME
ConfigMap 中的
DAEMONSET_NAME
的值kubernetes-image-puller
DEPLOYMENT_NAME
ConfigMap 中的
DEPLOYMENT_NAME
的值kubernetes-image-puller
镜像
ConfigMap 中的
IMAGES
值{}
NAMESPACE
ConfigMap 中的
NAMESPACE
值k8s-image-puller
NODE_SELECTOR
ConfigMap 中的
NODE_SELECTOR
的值"{}"
Expand 表 5.39. serviceaccount.yaml 中的 Image Puller OpenShift 模板参数 值 使用方法 默认值 SERVICEACCOUNT_NAME
部署创建和使用的 ServiceAccount 的名称
kubernetes-image-puller
KIP_IMAGE
从中复制 sleep 二进制文件的镜像拉取器镜像
registry.redhat.io/devspaces/imagepuller-rhel8:latest
创建一个 OpenShift 项目来托管 Image Puller:
oc new-project <k8s-image-puller>
oc new-project <k8s-image-puller>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 处理并应用模板来安装 puller:
oc process -f serviceaccount.yaml | oc apply -f - oc process -f configmap.yaml | oc apply -f - oc process -f app.yaml | oc apply -f -
oc process -f serviceaccount.yaml | oc apply -f - oc process -f configmap.yaml | oc apply -f - oc process -f app.yaml | oc apply -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
验证是否存在 < kubernetes-image-puller> 部署和一个 < kubernetes-image-puller> DaemonSet。DaemonSet 需要为集群中的每个节点都有一个 Pod:
oc get deployment,daemonset,pod --namespace <k8s-image-puller>
oc get deployment,daemonset,pod --namespace <k8s-image-puller>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 < kubernetes-image-puller >
ConfigMap
的值。oc get configmap <kubernetes-image-puller> --output yaml
oc get configmap <kubernetes-image-puller> --output yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.1.3. 使用 Web 控制台在 OpenShift 上安装 Image Puller 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Web 控制台在 OpenShift 上安装社区支持的 Kubernetes Image Puller Operator。
先决条件
- 集群管理员的 OpenShift Web 控制台会话。请参阅 访问 Web 控制台。
流程
- 安装社区支持的 Kubernetes Image Puller Operator。请参阅使用 Web 控制台从 OperatorHub 安装。
-
从社区支持的
Kubernetes Image Puller
Operator 创建一个 kubernetes-image-puller KubernetesImagePuller 操作对象。请参阅 从已安装的 Operator 创建应用程序。
5.6.2. 配置 Kubernetes Image Puller 复制链接链接已复制到粘贴板!
本节包含为不同用例配置 Kubernetes Image Puller 的说明。
5.6.2.1. 配置 Kubernetes Image Puller 复制链接链接已复制到粘贴板!
5.6.2.2. 将 Image Puller 配置为预先拉取默认 Dev Spaces 镜像 复制链接链接已复制到粘贴板!
您可以将 Kubernetes Image Puller 配置为预先拉取默认的 OpenShift Dev Spaces 镜像。Red Hat OpenShift Dev Spaces operator 将控制镜像列表来预拉取,并在 OpenShift Dev Spaces 升级过程中自动更新它们。
先决条件
- 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
- Image Puller 安装在 Kubernetes 集群上。
-
对目标 OpenShift 集群具有管理权限的活动
oc
会话。请参阅 CLI 入门。
流程
将 Image Puller 配置为预拉取 OpenShift Dev Spaces 镜像。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.3. 配置 Image Puller 以预拉取自定义镜像 复制链接链接已复制到粘贴板!
您可以将 Kubernetes Image Puller 配置为预拉取自定义镜像。
先决条件
- 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
- Image Puller 安装在 Kubernetes 集群上。
-
对目标 OpenShift 集群具有管理权限的活动
oc
会话。请参阅 CLI 入门。
流程
将 Image Puller 配置为预先拉取自定义镜像。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 分号分隔的镜像列表
5.6.2.4. 配置 Image Puller 以预拉取额外镜像 复制链接链接已复制到粘贴板!
您可以将 Kubernetes Image Puller 配置为预拉取额外的 OpenShift Dev Spaces 镜像。
先决条件
- 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
- Image Puller 安装在 Kubernetes 集群上。
-
对目标 OpenShift 集群具有管理权限的活动
oc
会话。请参阅 CLI 入门。
流程
创建
k8s-image-puller
命名空间:oc create namespace k8s-image-puller
oc create namespace k8s-image-puller
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
KubernetesImagePuller
自定义资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 分号分隔的镜像列表
5.6.3. 检索 Kubernetes Image Puller 的默认镜像列表 复制链接链接已复制到粘贴板!
了解如何检索 Kubernetes Image Puller 使用的默认镜像列表。这对希望检查并配置 Image Puller 的管理员很有用,使其提前只使用这些镜像的子集。
先决条件
- 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
-
对目标 OpenShift 集群具有管理权限的活动
oc
会话。请参阅 CLI 入门。
流程
查找部署 OpenShift Dev Spaces Operator 的命名空间:
OPERATOR_NAMESPACE=$(oc get pods -l app.kubernetes.io/component=devspaces-operator -o jsonpath={".items[0].metadata.namespace"} --all-namespaces)
OPERATOR_NAMESPACE=$(oc get pods -l app.kubernetes.io/component=devspaces-operator -o jsonpath={".items[0].metadata.namespace"} --all-namespaces)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查找 Image Puller 预先拉取的镜像:
oc exec -n $OPERATOR_NAMESPACE deploy/devspaces-operator -- cat /tmp/external_images.txt
oc exec -n $OPERATOR_NAMESPACE deploy/devspaces-operator -- cat /tmp/external_images.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow