3.5. 缓存镜像以便更快地启动工作区
要提高 OpenShift Dev Spaces 工作区的开始时间性能,请使用 Image Puller,它是一个 OpenShift Dev Spaces 无关的组件,可用于为 OpenShift 集群预拉取镜像。Image Puller 是一个额外的 OpenShift 部署,它会创建一个 DaemonSet,它可以配置为在每个节点上预拉取相关的 OpenShift Dev Spaces 工作区镜像。当 OpenShift Dev Spaces 工作区启动时,这些镜像可能已经可用,因此改进了工作空间开始时间。
Image Puller 为配置提供以下参数。
参数 | 使用方法 | 默认 |
---|---|---|
| DaemonSet 健康检查间隔(以小时为单位) |
|
| 拉取器运行时每个缓存的镜像内存请求。请参阅 第 3.5.2 节 “定义内存设置”。 |
|
| 拉取程序运行时每个缓存的镜像的内存限值。请参阅 第 3.5.2 节 “定义内存设置”。 |
|
| 拉取器运行时每个缓存的镜像的处理器请求 |
|
| 拉取器运行时每个缓存的镜像的处理器限制 |
|
| 要创建的 DaemonSet 的名称 |
|
| 要创建的部署名称 |
|
| 包含要创建的 DaemonSet 的 OpenShift 项目 |
|
|
要拉取的镜像的分号分隔列表,格式为 < | |
| 应用到 DaemonSet 创建的 pod 的节点选择器 |
|
| 应用到 DaemonSet 创建的 pod 的关联性 |
|
|
镜像 pull secret 列表,格式为 |
|
其他资源
3.5.1. 定义镜像列表
Image Puller 可以预先拉取大多数镜像,包括 che-machine-exec
等全新镜像。但是,在 Dockerfile 中挂载卷的镜像(如 traefik
)不支持在 OpenShift 3.11 上预拉取(pull)卷的镜像。
流程
-
导航到
"https://devspaces-<openshift_deployment_name>.<domain_name>"/plugin-registry/v3/external_images.txt
URL,以收集要拉取的相关容器镜像列表。 -
确定列表中的镜像,以进行预先拉取。为了加快工作空间启动时间,请考虑拉取与工作区相关的镜像,如
generic-developer-image
、che-code' 和che-gateway
。
3.5.2. 定义内存设置
定义内存请求和限值参数,以确保拉取的容器和平台有足够的内存来运行。
先决条件
流程
-
要为
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)
在 20 个节点上拉取 5 个镜像,容器内存限值为
20Mi
需要2000Mi
内存。
3.5.3. 使用 Web 控制台在 OpenShift 上安装 Image Puller
您可以使用 OpenShift Web 控制台在 OpenShift 上安装社区支持的 Kubernetes Image Puller Operator。
先决条件
- 第 3.5.1 节 “定义镜像列表”
- 第 3.5.2 节 “定义内存设置”.
- 集群管理员的 OpenShift Web 控制台会话。请参阅 访问 Web 控制台。
流程
- 安装社区支持的 Kubernetes Image Puller Operator。请参阅使用 Web 控制台从 OperatorHub 安装。
-
从社区支持的
Kubernetes Image Puller
Operator 创建一个 kubernetes-image-puller KubernetesImagePuller 操作对象。请参阅 从已安装的 Operator 创建应用程序。
3.5.4. 使用 CLI 在 OpenShift 上安装镜像提取程序
您可以使用 OpenShift oc
管理工具在 OpenShift 上安装 Kubernetes Image Puller。
先决条件
- 第 3.5.1 节 “定义镜像列表”.
- 第 3.5.2 节 “定义内存设置”.
-
一个活跃的
oc
会话,具有 OpenShift 集群的管理权限。请参阅 OpenShift CLI 入门。
流程
克隆 Image Puller 存储库,并获取到包含 OpenShift 模板的目录中:
$ git clone https://github.com/che-incubator/kubernetes-image-puller $ cd kubernetes-image-puller/deploy/openshift
使用以下参数配置
app.yaml
、configmap.yaml
和serviceaccount.yaml
OpenShift 模板:表 3.17. app.yaml中的镜像 Puller OpenShift 模板参数 值 使用方法 默认 DEPLOYMENT_NAME
ConfigMap 中的
DEPLOYMENT_NAME
的值kubernetes-image-puller
IMAGE
用于
kubernetes-image-puller
部署的镜像registry.redhat.io/devspaces/imagepuller-rhel8:3.4
IMAGE_TAG
要拉取的镜像标签
latest
SERVICEACCOUNT_NAME
由部署创建的并使用的 ServiceAccount 的名称
kubernetes-image-puller
表 3.18. configmap.yaml中的镜像 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
值"undefined"
NAMESPACE
ConfigMap 中的
NAMESPACE
值k8s-image-puller
NODE_SELECTOR
ConfigMap 中的
NODE_SELECTOR
的值"{}"
表 3.19. serviceaccount.yaml中的镜像 Puller OpenShift 模板参数 值 使用方法 默认 SERVICEACCOUNT_NAME
由部署创建的并使用的 ServiceAccount 的名称
kubernetes-image-puller
创建一个 OpenShift 项目来托管 Image Puller:
$ oc new-project <k8s-image-puller>
处理并应用模板来安装 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 -
验证步骤
验证 < kubernetes-image-puller> 部署和 < kubernetes-image-puller> DaemonSet 是否存在。DaemonSet 需要为集群中的每个节点有一个 Pod:
$ oc get deployment,daemonset,pod --namespace <k8s-image-puller>
验证 < kubernetes-image-puller >
ConfigMap
的值。$ oc get configmap <kubernetes-image-puller> --output yaml