3.5. 缓存镜像以便更快地启动工作区
要提高 OpenShift Dev Spaces 工作区的开始时间性能,请使用 Image Puller,它是一个 OpenShift Dev Spaces-agnostic 组件,可用于预拉取 OpenShift 集群的镜像。Image Puller 是一个额外的 OpenShift 部署,它会创建一个 DaemonSet,它可以配置为在每个节点上预拉取相关的 OpenShift Dev Spaces 工作区镜像。当 OpenShift Dev Spaces 工作区启动时,这些镜像将可用,从而改进了工作区启动时间。
Image Puller 为配置提供以下参数。
参数 | 使用方法 | 默认值 |
---|---|---|
| DaemonSets 健康检查间隔(以小时为单位) |
|
| 拉取程序运行时每个缓存镜像的内存请求。请参阅 第 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:// <openshift_dev_spaces_fqdn> /plugin-registry/v3/external_images.txt
URL 来收集要拉取的相关容器镜像列表。 -
确定预先拉取(pull)列表中的镜像。为加快工作空间启动时间,请考虑拉取与工作区相关的镜像,如
universal-developer-image
、che-code' 和che-gateway
。
3.5.2. 定义内存设置
定义内存请求和限值参数,以确保拉取的容器和平台有足够的内存来运行。
先决条件
流程
-
要定义
CACHING_MEMORY_REQUEST
或CACHING_MEMORY_LIMIT
的最小值,请考虑运行要拉取的每个容器镜像所需的内存量。 要为
CACHING_MEMORY_REQUEST
或CACHING_MEMORY_LIMIT
定义最大值,请考虑分配给集群中的 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 上安装 Image Puller
您可以使用 OpenShift oc
管理工具在 OpenShift 上安装 Kubernetes Image Puller。
先决条件
- 第 3.5.1 节 “定义镜像列表”.
- 第 3.5.2 节 “定义内存设置”.
-
具有 OpenShift 集群的管理权限的活跃
oc
会话。请参阅 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.38. app.yaml中的 Image Puller OpenShift 模板参数 值 使用方法 默认值 DEPLOYMENT_NAME
ConfigMap 中的
DEPLOYMENT_NAME
的值kubernetes-image-puller
IMAGE
用于
kubernetes-image-puller
部署的镜像registry.redhat.io/devspaces/imagepuller-rhel8:3.7
IMAGE_TAG
要拉取的镜像标签
latest
SERVICEACCOUNT_NAME
部署创建和使用的 ServiceAccount 的名称
kubernetes-image-puller
表 3.39. 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
IMAGES
ConfigMap 中的
IMAGES
值"undefined"
NAMESPACE
ConfigMap 中的
NAMESPACE
值k8s-image-puller
NODE_SELECTOR
ConfigMap 中的
NODE_SELECTOR
的值"{}"
表 3.40. serviceaccount.yaml 中的 Image Puller OpenShift 模板参数 值 使用方法 默认值 SERVICEACCOUNT_NAME
部署创建和使用的 ServiceAccount 的名称
kubernetes-image-puller
创建 OpenShift 项目来托管 Image Puller:
$ oc new-project <k8s-image-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