コンテンツへスキップ

YAMLファイルを使用したKnative Servingのインストール

このトピックでは、kubectl CLIを使用してYAMLファイルを適用してKnative Servingをインストールする方法について説明します。

前提条件

Knativeをインストールする前に、以下の前提条件を満たす必要があります。

  • プロトタイピング目的では、KnativeはほとんどのKubernetesのローカルデプロイで動作します。たとえば、3つのCPUと4GBのメモリを持つローカルの単一ノードクラスタを使用できます。

    ヒント

    Knative Quickstartプラグインを使用して、開発目的でKnativeのローカルディストリビューションをインストールできます。

  • 本番環境での使用には、以下が推奨されます。

    • クラスタにノードが1つしかない場合は、少なくとも6つのCPU、6GBのメモリ、および30GBのディスクストレージが必要です。
    • クラスタに複数のノードがある場合は、ノードごとに少なくとも2つのCPU、4GBのメモリ、および20GBのディスクストレージが必要です。
    • Kubernetes v1.28以降を使用するクラスタが必要です。
    • kubectl CLIがインストールされている必要があります。
    • Kubernetesクラスタは、Kubernetesがイメージをフェッチできるようにインターネットにアクセスできる必要があります。プライベートレジストリからプルするには、プライベートコンテナレジストリからのイメージのデプロイを参照してください。

注意

提供されるシステム要件は推奨にすぎません。ネットワークレイヤーなどのオプションコンポーネントを使用するかどうかによって、インストール要件が異なる場合があります。

イメージ署名の検証

1.9以降のKnativeリリースは、cosignで署名されています。

  1. cosignjqをインストールします。

  2. マニフェストからイメージを抽出し、署名を検証します。

curl -sSL https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-core.yaml \
  | grep 'gcr.io/' | awk '{print $2}' | sort | uniq \
  | xargs -n 1 \
    cosign verify -o text \
      --certificate-identity=signer@knative-releases.iam.gserviceaccount.com \
      --certificate-oidc-issuer=https://#

KnativeイメージはKEYLESSモードで署名されています。キーレス署名の詳細については、キーレス署名を参照してください。リリース用の署名ID(件名)はsigner@knative-releases.iam.gserviceaccount.comで、発行者はhttps://#です。

Knative Servingコンポーネントのインストール

Knative Servingコンポーネントをインストールするには

  1. 次のコマンドを実行して、必要なカスタムリソースをインストールします。

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-crds.yaml
    
  2. 次のコマンドを実行して、Knative Servingのコアコンポーネントをインストールします。

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-core.yaml
    

    情報

    Knative ServingのYAMLファイルの詳細については、Knative Servingインストールファイルを参照してください。

ネットワークレイヤーのインストール

次のタブを展開すると、ネットワークレイヤーをインストールする手順が表示されます。選択したネットワークレイヤーの手順に従います。

IBM ZおよびIBM PowerプラットフォームでサポートされているネットワークプラグインはKourierのみです。 Kourierをインストールするには、以下の手順に従います。インストール後、このリンクで説明されているように、RedHat Maistraに基づいてenvoyイメージにパッチを適用します。

次のコマンドは、Kourierをインストールし、Knative統合を有効にします。

  1. 次のコマンドを実行して、Knative Kourierコントローラーをインストールします。

    kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.16.0/kourier.yaml
    

  2. 次のコマンドを実行して、Kourierをデフォルトで使用するようにKnative Servingを構成します。

    kubectl patch configmap/config-network \
      --namespace knative-serving \
      --type merge \
      --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
    

  3. 次のコマンドを実行して、外部IPアドレスまたはCNAMEを取得します。

    kubectl --namespace kourier-system get service kourier
    

    ヒント

    次のDNSの構成セクションで使用するために保存します。

次のコマンドは、Istioをインストールし、Knative統合を有効にします。

  1. 高度なIstioインストール手順に従うか、次のコマンドを実行して、適切に構成されたIstioをインストールします。

    kubectl apply -l knative.dev/crd-install=true -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/istio.yaml
    kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/istio.yaml
    
  2. 次のコマンドを実行して、Knative Istioコントローラーをインストールします。

    kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/net-istio.yaml
    
  3. 次のコマンドを実行して、外部IPアドレスまたはCNAMEを取得します。

    kubectl --namespace istio-system get service istio-ingressgateway
    

    ヒント

    次のDNSの構成セクションで使用するために保存します。

次のコマンドは、Contourをインストールし、Knative統合を有効にします。

  1. 次のコマンドを実行して、適切に構成されたContourをインストールします。

    kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
    

  2. 次のコマンドを実行して、Knative Contourコントローラーをインストールします。

    kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/net-contour.yaml
    

  3. 次のコマンドを実行して、Contourをデフォルトで使用するようにKnative Servingを構成します。

    kubectl patch configmap/config-network \
      --namespace knative-serving \
      --type merge \
      --patch '{"data":{"ingress-class":"contour.ingress.networking.knative.dev"}}'
    

  4. 次のコマンドを実行して、外部IPアドレスまたはCNAMEを取得します。

    kubectl --namespace contour-external get service envoy
    

    ヒント

    次のDNSの構成セクションで使用するために保存します。

インストールの確認

成功

すべてのコンポーネントのSTATUSRunningまたはCompletedになるまで、Knativeコンポーネントを監視します。これを行うには、次のコマンドを実行し、出力を確認します。

kubectl get pods -n knative-serving

出力例

NAME                                      READY   STATUS    RESTARTS   AGE
3scale-kourier-control-54cc54cc58-mmdgq   1/1     Running   0          81s
activator-67656dcbbb-8mftq                1/1     Running   0          97s
autoscaler-df6856b64-5h4lc                1/1     Running   0          97s
controller-788796f49d-4x6pm               1/1     Running   0          97s
domain-mapping-65f58c79dc-9cw6d           1/1     Running   0          97s
domainmapping-webhook-cc646465c-jnwbz     1/1     Running   0          97s
webhook-859796bc7-8n5g2                   1/1     Running   0          96s

DNSの構成

ホストヘッダー付きのcurlコマンドを実行する必要がないように、DNSを構成できます。

次のタブを展開すると、DNSを構成する手順が表示されます。選択したDNSの手順に従います。

Knativeは、sslip.ioをデフォルトのDNSサフィックスとして使用するようにKnative Servingを構成するdefault-domainというKubernetesジョブを提供します。

kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-default-domain.yaml

警告

これは、クラスタのLoadBalancerサービスがIPv4アドレスまたはホスト名を公開する場合にのみ機能するため、minikube tunnelが実行されていない限り、IPv6クラスタやminikubeなどのローカル設定では機能しません。

このような場合は、「実際のDNS」または「DNSなし」タブを参照してください。

KnativeのDNSを構成するには、ネットワーク設定から外部IPまたはCNAMEを取得し、次の手順に従ってDNSプロバイダーで構成します。

  • ネットワークレイヤーが外部IPアドレスを生成した場合は、ドメインのワイルドカードAレコードを構成します。

    # Here knative.example.com is the domain suffix for your cluster
    *.knative.example.com == A 35.233.41.212
    
  • ネットワークレイヤーがCNAMEを生成した場合は、ドメインのCNAMEレコードを構成します。

    # Here knative.example.com is the domain suffix for your cluster
    *.knative.example.com == CNAME a317a278525d111e89f272a164fd35fb-1510370581.eu-central-1.elb.amazonaws.com
    
  • DNSプロバイダーが構成されたら、そのドメインを使用するようにKnativeに指示します。

    # Replace knative.example.com with your domain suffix
    kubectl patch configmap/config-domain \
      --namespace knative-serving \
      --type merge \
      --patch '{"data":{"knative.example.com":""}}'
    

サンプルアプリケーション、または独自のKnativeアプリケーションにアクセスするためにcurlを使用している場合、「マジックDNS(sslip.io)」または「実際のDNS」メソッドを使用できない場合は、一時的なアプローチがあります。これは、「実際のDNS」メソッドのようにDNS構成を変更することなくKnativeを評価したい場合や、ローカルでminikubeを使用している場合やIPv6クラスタを使用しているため、「マジックDNS」メソッドを使用できない場合に役立ちます。

このメソッドを使用してcurlを使用してアプリケーションにアクセスするには

  1. クラスタの外部から到達可能なドメインを使用するようにKnativeを構成します。

    kubectl patch configmap/config-domain \
          --namespace knative-serving \
          --type merge \
          --patch '{"data":{"example.com":""}}'
    

  2. アプリケーションを起動した後、アプリケーションのURLを取得します。

    kubectl get ksvc
    
    出力は次のようになります。
    NAME            URL                                        LATESTCREATED         LATESTREADY           READY   REASON
    helloworld-go   http://helloworld-go.default.example.com   helloworld-go-vqjlf   helloworld-go-vqjlf   True
    

  3. セクション3で説明したネットワークレイヤーによって定義された外部IPまたはCNAMEに接続するようにcurlに指示し、-H "Host:"コマンドラインオプションを使用してKnativeアプリケーションのホスト名を指定します。たとえば、ネットワークレイヤーが外部IPとポートをhttp://192.168.39.228:32198として定義し、前述のhelloworld-goアプリケーションにアクセスする場合は、次のように使用します。

    curl -H "Host: helloworld-go.default.example.com" http://192.168.39.228:32198
    
    提供されたhelloworld-goサンプルアプリケーションの場合、デフォルト構成を使用すると、出力は次のようになります。
    Hello Go Sample v1!
    
    永続的な解決策については、「実際のDNS」メソッドを参照してください。

オプションのServing拡張機能のインストール

次のタブを展開すると、各Serving拡張機能をインストールする手順が表示されます。

Knativeは、オートスケーリングの決定を促進するために、Kubernetes Horizontal Pod Autoscaler(HPA)の使用もサポートしています。

  • 次のコマンドを実行して、HPAクラスのオートスケーリングをサポートするために必要なコンポーネントをインストールします。

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-hpa.yaml
    

Knativeは、cert-managerを通じて暗号化機能をサポートしています。詳細については、Serving暗号化のドキュメントを参照してください。

当サイトでは、サイトトラフィックを把握するためにアナリティクスと Cookie を使用しています。 お客様のサイト利用に関する情報は、その目的のために Google と共有されます。詳細はこちら。