搜索

3.3. 手动安装 KServe

download PDF

如果您已经安装了 Red Hat OpenShift Service Mesh Operator 并创建了 ServiceMeshControlPlane 资源,或者已安装 Red Hat OpenShift Serverless Operator 并创建了 KNativeServing 资源,Red Hat OpenShift AI Operator 无法安装 KServe 并配置其依赖项。在这种情况下,您必须手动安装 KServe。

重要

本节中的步骤演示了如何执行 KServe 及其依赖项的新安装,并作为完整的安装和配置参考。如果您已经安装并配置了 OpenShift Service Mesh 或 OpenShift Serverless,您可能不需要遵循所有步骤。如果您不确定要将哪些更新应用到现有配置以使用 KServe,请联系红帽支持。

3.3.1. 安装 KServe 依赖项

在安装 KServe 之前,您必须安装并配置一些依赖项。具体来说,您必须创建 Red Hat OpenShift Service Mesh 和 Knative Serving 实例,然后为 Knative Serving 配置安全网关。

注意

目前,只支持 OpenShift Service Mesh v2。如需更多信息,请参阅 支持的配置

3.3.2. 创建 OpenShift Service Mesh 实例

以下流程演示了如何创建 Red Hat OpenShift Service Mesh 实例。

先决条件

  • 有 OpenShift 集群的集群管理员特权。
  • 您的集群有一个有 4 个 CPU 和 16 GB 内存的节点。
  • 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
  • 已安装 Red Hat OpenShift Service Mesh Operator 和依赖的 Operator。

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 为 Red Hat OpenShift Service Mesh 创建所需的命名空间。

    $ oc create ns istio-system

    您会看到以下输出:

    namespace/istio-system created
  3. 在名为 smcp.yaml 的 YAML 文件中定义一个 ServiceMeshControlPlane 对象,其内容如下:

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: minimal
      namespace: istio-system
    spec:
      tracing:
        type: None
      addons:
        grafana:
          enabled: false
        kiali:
          name: kiali
          enabled: false
        prometheus:
          enabled: false
        jaeger:
          name: jaeger
      security:
        dataPlane:
          mtls: true
        identity:
          type: ThirdParty
      techPreview:
        meshConfig:
          defaultConfig:
            terminationDrainDuration: 35s
      gateways:
        ingress:
          service:
            metadata:
              labels:
                knative: ingressgateway
      proxy:
        networking:
          trafficControl:
            inbound:
              excludedPorts:
                - 8444
                - 8022

    如需有关 YAML 文件中的值的更多信息,请参阅 Service Mesh control plane 配置参考

  4. 创建服务网格 control plane。

    $ oc apply -f smcp.yaml

验证

  • 验证服务网格实例的创建,如下所示:

    • 在 OpenShift CLI 中输入以下命令:

      $ oc get pods -n istio-system

      前面的命令列出了 istio-system 项目中运行的所有 pod。这是安装 OpenShift Service Mesh 的项目。

    • 确认存在用于服务网格 control plane、入口网关和出口网关的 pod。这些 pod 具有以下命名模式:

      NAME                                          READY   STATUS   	  RESTARTS    AGE
      istio-egressgateway-7c46668687-fzsqj          1/1     Running     0           22h
      istio-ingressgateway-77f94d8f85-fhsp9         1/1     Running     0           22h
      istiod-data-science-smcp-cc8cfd9b8-2rkg4      1/1     Running     0           22h

3.3.3. 创建 Knative Serving 实例

以下流程演示了如何安装 Knative Serving,然后创建实例。

先决条件

  • 有 OpenShift 集群的集群管理员特权。
  • 您的集群有一个有 4 个 CPU 和 16 GB 内存的节点。
  • 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
  • 您已创建了 Red Hat OpenShift Service Mesh 实例。
  • 已安装 Red Hat OpenShift Serverless Operator。

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. 检查 Knative Serving 所需的项目(即 命名空间)是否已存在。

    $ oc get ns knative-serving

    如果项目存在,您会看到类似以下示例的输出:

    NAME              STATUS   AGE
    knative-serving   Active   4d20h
  3. 如果 knative-serving 项目不存在,请创建它。

    $ oc create ns knative-serving

    您会看到以下输出:

    namespace/knative-serving created
  4. 在名为 default-smm.yaml 的 YAML 文件中定义 ServiceMeshMember 对象,其内容如下:

    apiVersion: maistra.io/v1
    kind: ServiceMeshMember
    metadata:
      name: default
      namespace: knative-serving
    spec:
      controlPlaneRef:
        namespace: istio-system
        name: minimal
  5. istio-system 命名空间中创建 ServiceMeshMember 对象。

    $ oc apply -f default-smm.yaml

    您会看到以下输出:

    servicemeshmember.maistra.io/default created
  6. 在名为 knativeserving-istio.yaml 的 YAML 文件中定义 KnativeServing 对象,其内容如下:

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
      annotations:
        serverless.openshift.io/default-enable-http2: "true"
    spec:
      workloads:
        - name: net-istio-controller
          env:
            - container: controller
              envVars:
                - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
                  value: 'true'
        - annotations:
            sidecar.istio.io/inject: "true" 1
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 2
          name: activator
        - annotations:
            sidecar.istio.io/inject: "true"
            sidecar.istio.io/rewriteAppHTTPProbers: "true"
          name: autoscaler
      ingress:
        istio:
          enabled: true
      config:
        features:
          kubernetes.podspec-affinity: enabled
          kubernetes.podspec-nodeselector: enabled
          kubernetes.podspec-tolerations: enabled

    前面的文件为 KnativeServing 对象定义自定义资源(CR)。CR 还为每个激活器和自动扩展 pod 添加以下操作:

    1
    将 Istio sidecar 注入 pod。这使得 pod 成为服务网格的一部分。
    2
    启用 Istio sidecar 为 pod 重写 HTTP 存活度和就绪度探测。
    注意

    如果为 Knative 服务配置自定义域,您可以使用 TLS 证书来保护映射的服务。要做到这一点,您必须创建一个 TLS secret,然后更新 DomainMapping CR 以使用您创建的 TLS secret。如需更多信息,请参阅 Red Hat OpenShift Serverless 文档中的使用 TLS 证书保护映射的服务

  7. 在指定的 knative-serving 命名空间中创建 KnativeServing 对象。

    $ oc apply -f knativeserving-istio.yaml

    您会看到以下输出:

    knativeserving.operator.knative.dev/knative-serving created

验证

  • 查看 istio-system 命名空间中的默认 ServiceMeshMemberRoll 对象。

    $ oc describe smmr default -n istio-system

    ServiceMeshMemberRoll 对象的描述中,找到 Status.Members 字段,并确认它包含 knative-serving 命名空间。

  • 验证 Knative Serving 实例的创建,如下所示:

    • 在 OpenShift CLI 中输入以下命令:

      $ oc get pods -n knative-serving

      前面的命令列出了 knative-serving 项目中运行的所有 Pod。这是在其中创建 Knative Serving 实例的项目。

    • 确认 knative-serving 项目中有许多正在运行的 Pod,包括 activator、autoscaler、controller 和域映射 Pod,以及用于 Knative Istio 控制器的 Pod,用于控制 OpenShift Serverless 和 OpenShift Service Mesh 集成。显示了一个示例。

      NAME                                     	READY       STATUS    	RESTARTS   	AGE
      activator-7586f6f744-nvdlb               	2/2         Running   	0          	22h
      activator-7586f6f744-sd77w               	2/2         Running   	0          	22h
      autoscaler-764fdf5d45-p2v98             	2/2         Running   	0          	22h
      autoscaler-764fdf5d45-x7dc6              	2/2         Running   	0          	22h
      autoscaler-hpa-7c7c4cd96d-2lkzg          	1/1         Running   	0          	22h
      autoscaler-hpa-7c7c4cd96d-gks9j         	1/1         Running   	0          	22h
      controller-5fdfc9567c-6cj9d              	1/1         Running   	0          	22h
      controller-5fdfc9567c-bf5x7              	1/1         Running   	0          	22h
      domain-mapping-56ccd85968-2hjvp          	1/1         Running   	0          	22h
      domain-mapping-56ccd85968-lg6mw          	1/1         Running   	0          	22h
      domainmapping-webhook-769b88695c-gp2hk   	1/1         Running     0          	22h
      domainmapping-webhook-769b88695c-npn8g   	1/1         Running   	0          	22h
      net-istio-controller-7dfc6f668c-jb4xk    	1/1         Running   	0          	22h
      net-istio-controller-7dfc6f668c-jxs5p    	1/1         Running   	0          	22h
      net-istio-webhook-66d8f75d6f-bgd5r       	1/1         Running   	0          	22h
      net-istio-webhook-66d8f75d6f-hld75      	1/1         Running   	0          	22h
      webhook-7d49878bc4-8xjbr                 	1/1         Running   	0          	22h
      webhook-7d49878bc4-s4xx4                 	1/1         Running   	0          	22h

3.3.4. 为 Knative Serving 创建安全网关

要保护 Knative Serving 实例和服务网格之间的流量,您必须为 Knative Serving 实例创建安全网关。

以下流程描述了如何使用 OpenSSL 生成通配符证书和密钥,然后使用它们为 Knative Serving 创建本地和入口网关。

重要

如果您有自己的通配符证书和密钥在配置网关时指定,您可以跳过到此流程的第 11 步。

先决条件

流程

  1. 在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
    重要

    如果您有自己的通配符证书和密钥在配置网关时指定,请跳至此步骤的第 11 步。

  2. 设置环境变量,以定义为网关生成通配符证书和密钥的基础目录。

    $ export BASE_DIR=/tmp/kserve
    $ export BASE_CERT_DIR=${BASE_DIR}/certs
  3. 设置环境变量以定义 OpenShift 集群的入口控制器使用的通用名称。

    $ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
  4. 设置环境变量以定义 OpenShift 集群的入口控制器使用的域名。

    $ export DOMAIN_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
  5. 根据之前设置的环境变量,为证书生成创建所需的基础目录。

    $ mkdir ${BASE_DIR}
    $ mkdir ${BASE_CERT_DIR}
  6. 为生成通配符证书创建 OpenSSL 配置。

    $ cat <<EOF> ${BASE_DIR}/openssl-san.config
    [ req ]
    distinguished_name = req
    [ san ]
    subjectAltName = DNS:*.${DOMAIN_NAME}
    EOF
  7. 生成 root 证书。

    $ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 \
    -subj "/O=Example Inc./CN=${COMMON_NAME}" \
    -keyout $BASE_DIR/root.key \
    -out $BASE_DIR/root.crt
  8. 生成由 root 证书签名的通配符证书。

    $ openssl req -x509 -newkey rsa:2048 \
    -sha256 -days 3560 -nodes \
    -subj "/CN=${COMMON_NAME}/O=Example Inc." \
    -extensions san -config ${BASE_DIR}/openssl-san.config \
    -CA $BASE_DIR/root.crt \
    -CAkey $BASE_DIR/root.key \
    -keyout $BASE_DIR/wildcard.key  \
    -out $BASE_DIR/wildcard.crt
    
    $ openssl x509 -in ${BASE_DIR}/wildcard.crt -text
  9. 验证通配符证书。

    $ openssl verify -CAfile ${BASE_DIR}/root.crt ${BASE_DIR}/wildcard.crt
  10. 将脚本创建的通配符密钥和证书导出到新的环境变量。

    $ export TARGET_CUSTOM_CERT=${BASE_CERT_DIR}/wildcard.crt
    $ export TARGET_CUSTOM_KEY=${BASE_CERT_DIR}/wildcard.key
  11. 可选: 要将 您自己的 通配符密钥和证书导出到新环境变量,请输入以下命令:

    $ export TARGET_CUSTOM_CERT=<path_to_certificate>
    $ export TARGET_CUSTOM_KEY=<path_to_key>
    注意

    在您提供的证书中,您必须指定 OpenShift 集群的入口控制器使用的域名。您可以运行以下命令来检查这个值:

    $ oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}'

  12. 使用您为通配符证书和密钥设置的环境变量,在 istio-system 命名空间中创建 TLS secret。

    $ oc create secret tls wildcard-certs --cert=${TARGET_CUSTOM_CERT} --key=${TARGET_CUSTOM_KEY} -n istio-system
  13. 使用以下内容创建 gateways.yaml YAML 文件:

    apiVersion: v1
    kind: Service 1
    metadata:
      labels:
        experimental.istio.io/disable-gateway-port-translation: "true"
      name: knative-local-gateway
      namespace: istio-system
    spec:
      ports:
        - name: http2
          port: 80
          protocol: TCP
          targetPort: 8081
      selector:
        knative: ingressgateway
      type: ClusterIP
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: knative-ingress-gateway 2
      namespace: knative-serving
    spec:
      selector:
        knative: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            credentialName: wildcard-certs
            mode: SIMPLE
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
     name: knative-local-gateway 3
     namespace: knative-serving
    spec:
     selector:
       knative: ingressgateway
     servers:
       - port:
           number: 8081
           name: https
           protocol: HTTPS
         tls:
           mode: ISTIO_MUTUAL
         hosts:
           - "*"
    1
    istio-system 命名空间中为 Knative 本地网关定义服务。
    2
    knative-serving 命名空间中 定义一个入口网关。网关使用您在此流程前面创建的 TLS secret。入口网关处理 Knative 的外部流量。
    3
    knative-serving 命名空间中为 Knative 定义本地网关。
  14. 应用 gateways.yaml 文件来创建定义的资源。

    $ oc apply -f gateways.yaml

    您会看到以下输出:

    service/knative-local-gateway created
    gateway.networking.istio.io/knative-ingress-gateway created
    gateway.networking.istio.io/knative-local-gateway created

验证

  • 查看您创建的网关。

    $ oc get gateway --all-namespaces

    确认您看到在 knative-serving 命名空间中创建的本地和入口网关,如下例所示:

    NAMESPACE         	NAME                      	AGE
    knative-serving   	knative-ingress-gateway   	69s
    knative-serving     knative-local-gateway     	2m

3.3.5. 安装 KServe

要完成 KServe 的手动安装,您必须安装 Red Hat OpenShift AI 附加组件,它将安装 Red Hat OpenShift AI Operator。然后,您可以使用 Operator 来安装 KServe。

先决条件

  • 有 OpenShift 集群的集群管理员特权。
  • 您的集群有一个有 4 个 CPU 和 16 GB 内存的节点。
  • 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
  • 您已创建了 Red Hat OpenShift Service Mesh 实例。
  • 您已创建了 Knative Serving 实例。
  • 您已为 Knative Serving 创建安全网关
  • 您已在 OpenShift 集群中安装了 Red Hat OpenShift AI 附加组件。这会安装 Red Hat OpenShift AI Operator,并创建一个默认的 DataScienceCluster 对象。

流程

  1. 以集群管理员身份登录 OpenShift Web 控制台。
  2. 在 Web 控制台中,点 Operators Installed Operators,然后点 Red Hat OpenShift AI Operator。
  3. 要安装 KServe,请按如下所示配置 OpenShift Service Mesh 组件:

    1. DSC 初始化选项卡。
    2. default-dsci 对象。
    3. YAML 标签。
    4. spec 部分,添加和配置 serviceMesh 组件,如下所示:

      spec:
       serviceMesh:
         managementState: Unmanaged
    5. 点击 Save
  4. 要安装 KServe,请配置 KServe 和 OpenShift Serverless 组件,如下所示:

    1. 在 Web 控制台中,点 Operators Installed Operators,然后点 Red Hat OpenShift AI Operator。
    2. Data Science Cluster 选项卡。
    3. 单击 default-dsc DSC 对象。
    4. YAML 标签。
    5. spec.components 部分中,配置 kserve 组件,如下所示:

      spec:
       components:
         kserve:
           managementState: Managed
    6. kserve 组件中,添加 服务组件 并配置它,如下所示:

      spec:
       components:
         kserve:
           managementState: Managed
           serving:
             managementState: Unmanaged
    7. 点击 Save

3.3.6. 禁用 KServe 依赖项

如果您还没有 启用 KServe 组件(即,将 managementState 字段设置为 Removed),还必须禁用依赖 Service Mesh 组件以避免错误。

先决条件

  • 您已使用 OpenShift 命令行界面(CLI)或 Web 控制台来禁用 KServe 组件。

流程

  1. 以集群管理员身份登录 OpenShift Web 控制台。
  2. 在 Web 控制台中,点 Operators Installed Operators,然后点 Red Hat OpenShift AI Operator。
  3. 禁用 OpenShift Service Mesh 组件,如下所示:

    1. DSC 初始化选项卡。
    2. default-dsci 对象。
    3. YAML 标签。
    4. spec 部分中,添加 serviceMesh 组件(如果还没有存在),并配置 managementState 字段,如下所示:

      spec:
       serviceMesh:
         managementState: Removed
    5. 点击 Save

验证

  1. 在 Web 控制台中,点 Operators Installed Operators,然后点 Red Hat OpenShift AI Operator。

    Operator 详情页面将打开。

  2. Conditions 部分中,确认没有 ReconcileComplete 条件,状态为 Unknown
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.