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で署名されています。
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コンポーネントをインストールするには
-
次のコマンドを実行して、必要なカスタムリソースをインストールします。
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-crds.yaml
-
次のコマンドを実行して、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統合を有効にします。
-
次のコマンドを実行して、Knative Kourierコントローラーをインストールします。
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.16.0/kourier.yaml
-
次のコマンドを実行して、Kourierをデフォルトで使用するようにKnative Servingを構成します。
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
-
次のコマンドを実行して、外部IPアドレスまたはCNAMEを取得します。
kubectl --namespace kourier-system get service kourier
ヒント
次のDNSの構成セクションで使用するために保存します。
次のコマンドは、Istioをインストールし、Knative統合を有効にします。
-
高度な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
-
次のコマンドを実行して、Knative Istioコントローラーをインストールします。
kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/net-istio.yaml
-
次のコマンドを実行して、外部IPアドレスまたはCNAMEを取得します。
kubectl --namespace istio-system get service istio-ingressgateway
ヒント
次のDNSの構成セクションで使用するために保存します。
次のコマンドは、Contourをインストールし、Knative統合を有効にします。
-
次のコマンドを実行して、適切に構成されたContourをインストールします。
kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
-
次のコマンドを実行して、Knative Contourコントローラーをインストールします。
kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/net-contour.yaml
-
次のコマンドを実行して、Contourをデフォルトで使用するようにKnative Servingを構成します。
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"contour.ingress.networking.knative.dev"}}'
-
次のコマンドを実行して、外部IPアドレスまたはCNAMEを取得します。
kubectl --namespace contour-external get service envoy
ヒント
次のDNSの構成セクションで使用するために保存します。
インストールの確認¶
成功
すべてのコンポーネントのSTATUS
がRunning
または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
を使用してアプリケーションにアクセスするには
-
クラスタの外部から到達可能なドメインを使用するようにKnativeを構成します。
kubectl patch configmap/config-domain \ --namespace knative-serving \ --type merge \ --patch '{"data":{"example.com":""}}'
-
アプリケーションを起動した後、アプリケーションの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で説明したネットワークレイヤーによって定義された外部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
サンプルアプリケーションの場合、デフォルト構成を使用すると、出力は次のようになります。永続的な解決策については、「実際のDNS」メソッドを参照してください。Hello Go Sample v1!
オプションの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暗号化のドキュメントを参照してください。