3.3. KServe を手動でインストールする
すでに 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 を使用するために既存の設定にどの更新を適用すればよいかわからない場合は、Red Hat サポートにお問い合わせください。
3.3.1. KServe 依存関係のインストール
KServe をインストールする前に、いくつかの依存関係をインストールして設定する必要があります。具体的には、Red Hat OpenShift Service Mesh および Knative Serving インスタンスを作成し、Knative Serving 用にセキュアゲートウェイを設定する必要があります。
現在、OpenShift Service Mesh v2 のみがサポートされています。詳細は、サポートされる構成 を参照してください。
3.3.1.1. OpenShift Service Mesh インスタンスの作成
次の手順は、Red Hat OpenShift Service Mesh インスタンスを作成する方法を示しています。
前提条件
- OpenShift Container Platform クラスターのクラスター管理者権限を持っている。
- クラスターには 4 つの CPU と 16 GB のメモリーを備えたノードがある。
- OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
- Red Hat OpenShift Service Mesh Operator と依存する Operator が インストール されている。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
Red Hat OpenShift Service Mesh に必要な namespace を作成します。
$ oc create ns istio-system
以下のような出力が表示されます。
namespace/istio-system created
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 コントロールプレーン設定リファレンス を参照してください。
サービスメッシュコントロールプレーンを作成します。
$ oc apply -f smcp.yaml
検証
次のようにサービスメッシュインスタンスの作成を確認します。
OpenShift CLI で、次のコマンドを入力します。
$ oc get pods -n istio-system
前述のコマンドは、
istio-system
プロジェクト内で実行中の Pod 一覧を表示します。これは、OpenShift Service Mesh がインストールされるプロジェクトです。サービスメッシュコントロールプレーン、Ingress ゲートウェイ、および Egress ゲートウェイの実行中の 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.1.2. Knative Serving インスタンスの作成
次の手順は、Knative Serving をインストールしてインスタンスを作成する方法を示しています。
前提条件
- OpenShift Container Platform クラスターのクラスター管理者権限を持っている。
- クラスターには 4 つの CPU と 16 GB のメモリーを備えたノードがある。
- OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
- Red Hat OpenShift Service Mesh インスタンスが 作成 されている。
- Red Hat OpenShift Serverless Operator が インストール されている。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
Knative Serving に必要なプロジェクト (つまり namespace) がすでに存在するかどうかを確認します。
$ oc get ns knative-serving
プロジェクトが存在する場合は、次の例のような出力が表示されます。
NAME STATUS AGE knative-serving Active 4d20h
knative-serving
プロジェクトがまだ存在 しない 場合は、作成します。$ oc create ns knative-serving
以下のような出力が表示されます。
namespace/knative-serving created
以下の内容で、
default-smm.yaml
という YAML ファイルにServiceMeshMember
オブジェクトを定義します。apiVersion: maistra.io/v1 kind: ServiceMeshMember metadata: name: default namespace: knative-serving spec: controlPlaneRef: namespace: istio-system name: minimal
istio-system
namespace にServiceMeshMember
オブジェクトを作成します。$ oc apply -f default-smm.yaml
以下のような出力が表示されます。
servicemeshmember.maistra.io/default created
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 とオートスケーラー Pod のそれぞれに次のアクションも追加します。注記Knative サービスのカスタムドメインを設定する場合、TLS 証明書を使用してマップされたサービスを保護できます。これを行うには、TLS シークレットを作成してから、作成した TLS シークレットを使用するように
DomainMapping
CR を更新する必要があります。詳細は、Red Hat OpenShift Serverless ドキュメントの TLS 証明書を使用したマップされたサービスの保護 を参照してください。指定された
knative-serving
namespace にKnativeServing
オブジェクトを作成します。$ oc apply -f knativeserving-istio.yaml
以下のような出力が表示されます。
knativeserving.operator.knative.dev/knative-serving created
検証
istio-system
namespace のデフォルトのServiceMeshMemberRoll
オブジェクトを確認します。$ oc describe smmr default -n istio-system
ServiceMeshMemberRoll
オブジェクトの説明で、Status.Members
フィールドを見つけて、それにknative-serving
namespace が含まれていることを確認します。次のように、Knative Serving インスタンスの作成を確認します。
OpenShift CLI で、次のコマンドを入力します。
$ oc get pods -n knative-serving
前述のコマンドは、
knative-serving
プロジェクト内で実行中の Pod 一覧を表示します。これは、Knative Serving インスタンスを作成したプロジェクトです。knative-serving
プロジェクト内に、アクティベーター、オートスケーラー、コントローラー、ドメインマッピング Pod、および OpenShift Serverless と OpenShift Service Mesh の統合を制御する Knative Istio コントローラーの Pod を含む多数の実行中の Pod があることを確認します。一例を示します。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.1.3. Knative Serving 用の安全なゲートウェイの作成
Knative Serving インスタンスとサービスメッシュ間のトラフィックを保護するには、Knative Serving インスタンス用のセキュアゲートウェイを作成する必要があります。
次の手順では、OpenSSL を使用してワイルドカード証明書とキーを生成し、それらを使用して Knative Serving のローカルゲートウェイと Ingress ゲートウェイを作成する方法を示します。
ゲートウェイの設定時に指定する独自のワイルドカード証明書とキーがある場合は、この手順のステップ 11 に進んでください。
前提条件
- OpenShift Container Platform クラスターのクラスター管理者権限を持っている。
- OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
- Red Hat OpenShift Service Mesh インスタンスが 作成 されている。
- Knative Serving インスタンスが 作成 されている。
- ワイルドカード証明書とキーを生成する場合は、OpenSSL を ダウンロードしてインストール している。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
重要ゲートウェイの設定時に指定する独自のワイルドカード証明書とキーがある場合は、この手順のステップ 11 に進みます。
環境変数を設定して、ゲートウェイのワイルドカード証明書とキーを生成するためのベースディレクトリーを定義します。
$ export BASE_DIR=/tmp/kserve $ export BASE_CERT_DIR=${BASE_DIR}/certs
環境変数を設定して、OpenShift クラスターの Ingress コントローラーで使用される共通名を定義します。
$ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
環境変数を設定して、OpenShift クラスターの Ingress コントローラーによって使用されるドメイン名を定義します。
$ export DOMAIN_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
以前に設定した環境変数に基づいて、証明書の生成に必要なベースディレクトリーを作成します。
$ mkdir ${BASE_DIR} $ mkdir ${BASE_CERT_DIR}
ワイルドカード証明書を生成するための OpenSSL 設定を作成します。
$ cat <<EOF> ${BASE_DIR}/openssl-san.config [ req ] distinguished_name = req [ san ] subjectAltName = DNS:*.${DOMAIN_NAME} EOF
ルート証明書を生成します。
$ 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
ルート証明書によって署名されたワイルドカード証明書を生成します。
$ 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
ワイルドカード証明書を確認します。
$ openssl verify -CAfile ${BASE_DIR}/root.crt ${BASE_DIR}/wildcard.crt
スクリプトによって作成されたワイルドカードキーと証明書を新しい環境変数にエクスポートします。
$ export TARGET_CUSTOM_CERT=${BASE_CERT_DIR}/wildcard.crt $ export TARGET_CUSTOM_KEY=${BASE_CERT_DIR}/wildcard.key
オプション: 独自 のワイルドカードキーと証明書を新しい環境変数にエクスポートするには、次のコマンドを入力します。
$ export TARGET_CUSTOM_CERT=<path_to_certificate> $ export TARGET_CUSTOM_KEY=<path_to_key>
注記提供する証明書では、OpenShift クラスターの Ingress コントローラーで使用されるドメイン名を指定する必要があります。この値は、次のコマンドを実行して確認できます。
$ oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}'
ワイルドカード証明書とキーに設定した環境変数を使用して、
istio-system
namespace に TLS シークレットを作成します。$ oc create secret tls wildcard-certs --cert=${TARGET_CUSTOM_CERT} --key=${TARGET_CUSTOM_KEY} -n istio-system
次の内容を含む
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: - "*"
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 で作成したローカルゲートウェイと Ingress ゲートウェイが表示されていることを確認します。NAMESPACE NAME AGE knative-serving knative-ingress-gateway 69s knative-serving knative-local-gateway 2m
3.3.2. KServe のインストール
KServe の手動インストールを完了するには、Red Hat OpenShift AI Operator をインストールする必要があります。次に、KServe をインストールするように Operator を設定できます。
前提条件
- OpenShift Container Platform クラスターのクラスター管理者権限を持っている。
- クラスターには 4 つの CPU と 16 GB のメモリーを備えたノードがある。
- OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
- Red Hat OpenShift Service Mesh インスタンスが 作成 されている。
- Knative Serving インスタンスが 作成 されている。
- Knative Serving 用の セキュアなゲートウェイが作成 されている。
-
Red Hat OpenShift AI Operator が インストール され、
DataScienceCluster
オブジェクトが 作成 されている。
手順
- OpenShift Web コンソールにクラスター管理者としてログインします。
-
Web コンソールで、Operators
Installed Operators をクリックし、Red Hat OpenShift AI Operator をクリックします。 KServe をインストールするには、OpenShift Service Mesh コンポーネントを次のように設定します。
- DSC Initialization タブをクリックします。
- default-dsci オブジェクトをクリックします。
- YAML タブをクリックします。
spec
セクションで、次のようにserviceMesh
コンポーネントを追加して設定します。spec: serviceMesh: managementState: Unmanaged
- Save をクリックします。
KServe をインストールするには、KServe および OpenShift Serverless コンポーネントを次のように設定します。
-
Web コンソールで、Operators
Installed Operators をクリックし、Red Hat OpenShift AI Operator をクリックします。 - Data Science Cluster タブをクリックします。
- default-dsc DSC オブジェクトをクリックします。
- YAML タブをクリックします。
spec.components
セクションで、次のようにkserve
コンポーネントを設定します。spec: components: kserve: managementState: Managed
kserve
コンポーネント内で、serving
コンポーネントを追加し、次のように設定します。spec: components: kserve: managementState: Managed serving: managementState: Unmanaged
- Save をクリックします。
-
Web コンソールで、Operators