3.5. 缓存镜像以便更快地开始工作区

要提高 OpenShift Dev Spaces 工作区的开始时间性能,请使用 Image Puller (一个 OpenShift Dev Spaces-agnostic)组件,可用于对 OpenShift 集群预拉取镜像。Image Puller 是一个额外的 OpenShift 部署,它会创建一个 DaemonSet,可以配置为在每个节点上预拉取相关的 OpenShift Dev Spaces 工作区镜像。当 OpenShift Dev Spaces 工作区启动时,这些镜像将已经可用,因此改进了工作空间开始时间。

Image Puller 为配置提供以下参数。

表 3.16. 镜像拉取器参数

参数使用默认

CACHING_INTERVAL_HOURS

DaemonSet 健康检查间隔(以小时为单位)

"1"

CACHING_MEMORY_REQUEST

拉取程序运行时每个缓存的镜像的内存请求。请参阅 第 3.5.2 节 “定义内存设置”

10Mi

CACHING_MEMORY_LIMIT

拉取程序运行时每个缓存的镜像的内存限值。请参阅 第 3.5.2 节 “定义内存设置”

20Mi

CACHING_CPU_REQUEST

拉取器运行时每个缓存的镜像的处理器请求

.05 或 50 millicores

CACHING_CPU_LIMIT

拉取器运行时每个缓存的镜像的处理器限制

.2 或 200 毫秒

DAEMONSET_NAME

要创建的 DaemonSet 的名称

kubernetes-image-puller

DEPLOYMENT_NAME

要创建的 Deployment 的名称

kubernetes-image-puller

NAMESPACE

要创建的 DaemonSet 的 OpenShift 项目

k8s-image-puller

镜像

要拉取镜像的分号分隔列表,格式为 < name1> = <image1&gt; ; &lt;name2> = &lt;image2&gt;。请参阅 第 3.5.1 节 “定义镜像列表”

 

NODE_SELECTOR

节点选择器应用到 DaemonSet 创建的 pod

'{}'

关联性

关联性应用到由 DaemonSet 创建的 pod

'{}'

IMAGE_PULL_SECRETS

镜像 pull secret 列表,格式为 pullsecret1;…​ 以添加到由 DaemonSet 创建的 pod。这些 secret 需要位于镜像拉取(puller)的命名空间中,集群管理员必须创建它们。

""

3.5.1. 定义镜像列表

Image Puller 可以预先拉取大多数镜像,包括全新镜像,如 che-machine-exec。但是,在 OpenShift 3.11 上预拉取(pull)时不支持挂载 Dockerfile 中的卷的镜像,如 traefik

流程

  1. 通过导航到 "https://devspaces-<openshift_deployment_name>.<domain_name>"/plugin-registry/v3/external_images.txt URL 来拉取相关容器镜像的列表。
  2. 从列表中确定预拉取的镜像。为了加快工作空间启动时间,请考虑拉取与工作区相关的镜像,如 generic-developer-image、che-code' 和 che-gateway

3.5.2. 定义内存设置

定义内存请求和限值参数,以确保拉取的容器和平台有足够的内存来运行。

流程

  1. 要定义 CACHING_MEMORY_REQUESTCACHING_MEMORY_LIMIT 的最小值,请考虑运行每个容器镜像所需的必要内存量。
  2. 要定义 CACHING_MEMORY_REQUESTCACHING_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 上安装镜像 puller

您可以使用 OpenShift Web 控制台在 OpenShift 上安装社区支持的 Kubernetes Image Puller Operator。

先决条件

流程

  1. 安装社区支持的 Kubernetes Image Puller Operator。请参阅使用 Web 控制台 从 OperatorHub 安装
  2. 从支持的 Kubernetes Image Puller Operator 创建 kubernetes-image-puller KubernetesImagePuller 操作对象。请参阅从已安装的 Operator 创建应用程序

3.5.4. 使用 CLI 在 OpenShift 上安装镜像 puller

您可以使用 OpenShift oc 管理工具在 OpenShift 上安装 Kubernetes Image Puller。

先决条件

流程

  1. 克隆 Image Puller 存储库,并获取包含 OpenShift 模板的目录:

    $ git clone https://github.com/che-incubator/kubernetes-image-puller
    $ cd kubernetes-image-puller/deploy/openshift
  2. 使用以下参数配置 app.yamlconfigmap.yamlserviceaccount.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.3

    IMAGE_TAG

    要拉取的镜像标签

    latest

    SERVICEACCOUNT_NAME

    部署创建和使用的 ServiceAccount 的名称

    kubernetes-image-puller

    表 3.18. 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

    "undefined"

    NAMESPACE

    ConfigMap 中 NAMESPACE 的值

    k8s-image-puller

    NODE_SELECTOR

    ConfigMap 中的 NODE_SELECTOR 的值

    "{}"

    表 3.19. serviceaccount.yaml中的 image Puller OpenShift 模板参数

    使用默认

    SERVICEACCOUNT_NAME

    部署创建和使用的 ServiceAccount 的名称

    kubernetes-image-puller

  3. 创建用于托管 Image Puller 的 OpenShift 项目:

    $ oc new-project <k8s-image-puller>
  4. 处理并应用模板来安装 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 -

验证步骤

  1. 验证是否存在 < kubernetes-image-puller> 部署和 < kubernetes-image-puller> DaemonSet。DaemonSet 需要具有集群中每个节点的 Pod:

    $ oc get deployment,daemonset,pod --namespace <k8s-image-puller>
  2. 验证 < kubernetes-image-puller > ConfigMap 的值。

    $ oc get configmap <kubernetes-image-puller> --output yaml