3.5. 缓存镜像以便更快地启动工作区


要提高 OpenShift Dev Spaces 工作区的开始时间性能,请使用 Image Puller,它是一个 OpenShift Dev Spaces-agnostic 组件,可用于预拉取 OpenShift 集群的镜像。

Image Puller 是一个额外的 OpenShift 部署,它会创建一个 DaemonSet,它可以配置为在每个节点上预拉取相关的 OpenShift Dev Spaces 工作区镜像。当 OpenShift Dev Spaces 工作区启动时,这些镜像将可用,从而改进了工作区启动时间。

3.5.1. 使用 CLI 在 OpenShift 上安装 Image Puller

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

先决条件

流程

  1. 进入链接来收集要拉取的相关容器镜像列表:

    • https://<openshift_dev_spaces_fqdn>/plugin-registry/v3/external_images.txt
    • https://<openshift_dev_spaces_fqdn>/devfile-registry/devfiles/external_images.txt
  2. 定义内存请求和限值参数,以确保拉取的容器和平台有足够的内存来运行。

    在为 CACHING_MEMORY_REQUESTCACHING_MEMORY_LIMIT 定义最小值时,请考虑运行每个容器镜像进行拉取所需的内存量。

    当为 CACHING_MEMORY_REQUESTCACHING_MEMORY_LIMIT 定义 maximal 值时,请考虑分配给集群中的 DaemonSet Pod 的总内存:

    (memory limit) * (number of images) * (number of nodes in the cluster)

    在 20 个节点上拉取 5 个镜像,容器内存限值为 20Mi 需要 2000Mi 内存。

  3. 克隆 Image Puller 存储库,并在包含 OpenShift 模板的目录中:

    $ git clone https://github.com/che-incubator/kubernetes-image-puller
    $ cd kubernetes-image-puller/deploy/openshift
  4. 使用以下参数配置 app.yamlconfigmap.yamlserviceaccount.yaml OpenShift 模板:

    表 3.37. app.yaml中的 Image Puller OpenShift 模板参数
    使用方法default

    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

    表 3.38. configmap.yaml 中的 Image Puller OpenShift 模板参数
    使用方法default

    CACHING_CPU_LIMIT

    ConfigMap 中的 CACHING_CPU_LIMIT 的值

    .2

    CACHING_CPU_REQUEST

    ConfigMap 中的 CACHING_CPU_REQUEST 的值

    .05

    CACHE_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 的值

    "{}"

    表 3.39. serviceaccount.yaml 中的 Image Puller OpenShift 模板参数
    使用方法default

    SERVICEACCOUNT_NAME

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

    kubernetes-image-puller

  5. 创建 OpenShift 项目来托管 Image Puller:

    $ oc new-project <k8s-image-puller>
  6. 处理并应用模板来安装拉取程序:

    $ 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

3.5.2. 使用 Web 控制台在 OpenShift 上安装 Image 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.3. 将 Image Puller 配置为预拉取默认 Dev Spaces 镜像

您可以将 Kubernetes Image Puller 配置为预拉取默认的 OpenShift Dev Spaces 镜像。Red Hat OpenShift Dev Spaces operator 将控制镜像列表到预拉取(pull)并在 OpenShift Dev Spaces 升级时自动更新它们。

先决条件

  • 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
  • Image Puller 在 Kubernetes 集群上安装。
  • 具有对目标 OpenShift 集群的管理权限的活跃 oc 会话。请参阅 CLI 入门

流程

  1. 将 Image Puller 配置为预拉取 OpenShift Dev Spaces 镜像。

    oc patch checluster/devspaces \
        --namespace openshift-devspaces \
        --type='merge' \
        --patch '{
                  "spec": {
                    "components": {
                      "imagePuller": {
                        "enable": true
                      }
                    }
                  }
                }'

3.5.4. 将 Image Puller 配置为预拉取自定义镜像

您可以将 Kubernetes Image Puller 配置为预拉取自定义镜像。

先决条件

  • 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
  • Image Puller 在 Kubernetes 集群上安装。
  • 具有对目标 OpenShift 集群的管理权限的活跃 oc 会话。请参阅 CLI 入门

流程

  1. 将 Image Puller 配置为预拉取自定义镜像。

    oc patch checluster/devspaces \
        --namespace openshift-devspaces \
        --type='merge' \
        --patch '{
                  "spec": {
                    "components": {
                      "imagePuller": {
                        "enable": true,
                        "spec": {
                          "images": "NAME-1=IMAGE-1;NAME-2=IMAGE-2" 1
                        }
                      }
                    }
                  }
                }'
    1
    分号分隔的镜像列表

3.5.5. 配置 Image Puller 以预拉取额外镜像

您可以将 Kubernetes Image Puller 配置为预拉取额外的 OpenShift Dev Spaces 镜像。

先决条件

  • 您的机构 OpenShift Dev Spaces 实例已安装并在 Kubernetes 集群上运行。
  • Image Puller 在 Kubernetes 集群上安装。
  • 具有对目标 OpenShift 集群的管理权限的活跃 oc 会话。请参阅 CLI 入门

流程

  1. 创建 k8s-image-puller 命名空间:

    oc create namespace k8s-image-puller
  2. 创建 KubernetesImagePuller 自定义资源:

    oc apply -f - <<EOF
    apiVersion: che.eclipse.org/v1alpha1
    kind: KubernetesImagePuller
    metadata:
      name: k8s-image-puller-images
      namespace: k8s-image-puller
    spec:
      images: "__NAME-1__=__IMAGE-1__;__NAME-2__=__IMAGE-2__" 1
    EOF
    1
    分号分隔的镜像列表
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.