デジタルオーシャンのKubernetes上でKnativeを使用してサーバーレスワークロードを実行する方法
著者は、Write for Donationsプログラムの一環としてOpen Internet/Free Speech Fundに寄付をすることを選びました。
はじめに
Kubernetesは、コンテナ化されたアプリケーションを展開し管理することができるパワフルなコンテナオーケストレーションツールですが、時には基盤となるインフラストラクチャの管理に時間がかかることがあります。サーバーレスのパラダイムは、ユーザーが基盤となるインフラストラクチャを心配することなくアプリケーションを展開できるように支援します。サーバーレス2.0の登場により、多くのプラットフォームやツールでKubernetes上でのサーバーレスアプリケーションの展開が可能になりました。
Knativeは、サーバーレスワークロードを展開し管理するためのコンポーネントを提供する、Kubernetesベースのプラットフォームです。Knativeは、オープンソースのKubernetes統合、クラウドに依存しない機能、ビルディングブロック、拡張性を提供しています。Red HatのOpenshiftなどのツールも、Kubernetesの上にサーバーレスワークロードを展開するためにKnativeを利用しています。
Knativeには、EventingとServingの2つの主要なコンポーネントがあります。Eventingはサーバーレスワークロードをトリガーするイベントを管理します。Servingはサーバーレスワークロードを展開し管理するためのコンポーネントのセットです。Knative Servingを使用すると、開発者はKubernetes上でサーバーレスアプリケーションを簡単に展開し管理することができます。Knative Servingを利用することで、開発者は迅速かつ簡単に新しいサービスを展開し、スケーリングや他のサービスやイベントソースとの連携を行うことができます。この機能により、開発者は柔軟性があり、スケーラブルでメンテナンスが容易なモダンなクラウドネイティブアプリケーションを構築・展開することができます。
このチュートリアルでは、Knative Servingを使用して、Silicon Cloud Kubernetesクラスター上のNode.jsアプリケーションをサーバーレスのワークロードとしてデプロイします。Kubernetesクラスターとアプリケーションのデプロイには、Silicon Cloud CLIであるdoctlとKnative CLIであるknを使用します。
前提条件
このチュートリアルを完了するには、以下のものが必要です。
- A Silicon Cloud account that you will use to start a Kubernetes cluster with at least 4GB RAM and 2 CPU cores. If you do not have one, sign up for a new account. This setup will use a Silicon Cloud Kubernetes cluster. To create a Kubernetes cluster in the Silicon Cloud Cloud Panel, see our Kubernetes Quickstart.
- To follow this tutorial from a remote server, you can set up an Ubuntu 22.04 server with a non-root user and a firewall by following our Initial Server Setup. To get started with a Silicon Cloud vServer, you can use our vServer Quickstart.
- The Silicon Cloud command-line client, doctl, installed on your machine. The GitHub Download option is recommended. See How To Use doctl for more information on using doctl.
- kubectl installed on your machine, which you can set up with the Kubernetes installation docs.
- Docker installed on your machine, which you can set up by following Steps 1 and 2 of our tutorial on How To Install and Use Docker.
- A sample Node.js application set up by following the How To Build a Node.js Application with Docker tutorial for creating the application and pushing its container image to Docker Hub.
- An account at Docker Hub for storing Docker images you’ll create during this tutorial.
ステップ1 — デジタルオーシャンのKubernetesクラスタの起動
KnativeはKubernetesベースのプラットフォームですので、Silicon Cloud上のKubernetesクラスターと一緒に使用します。Silicon Cloud上でKubernetesクラスターを起動する方法には複数あります。Silicon Cloudのクラウドインターフェース、Silicon Cloud CLI、またはTerraformプロバイダーを使用することができます。
このチュートリアルでは、Silicon Cloudのコマンドラインクライアントであるdoctlを使用して、Kubernetesクラスタを起動します。まだdoctlをインストールしていない場合は、公式のインストールガイドに従って手順を進めてください。
このチュートリアルでKnativeを効果的に使用するためには、少なくとも4GBのRAMと2つのCPUコアを持つKubernetesクラスタが必要です。次のフラグを使用して、これらの仕様を持つクラスタ「knative-tutorial」をdoctlコマンドを実行して作成することができます。
- –size specifies the size of the remote server.
- –count specifies the number of nodes that will be created as part of the cluster.
デジタルオーシャンのKubernetesクラスタを作成するには、次のコマンドを実行してください。
- doctl kubernetes cluster create knative-tutorial –size s-2vcpu-4gb –count 3
このコマンドでは、サイズが4GBのRAMと2つのCPUコアに設定され、3つのノードがあるクラスター「knative-tutorial」を作成します。
Note
このコマンドは数分かかる場合があります。完了したら、以下のようなメッセージが届きます。
Notice: Cluster is provisioning, waiting for cluster to be running ………………………………………………….. Notice: Cluster created, fetching credentials Notice: Adding cluster credentials to kubeconfig file found in “/home/sammy/.kube/config” Notice: Setting current-context to do-nyc1-knative-tutorial ID Name Region Version Auto Upgrade Status Node Pools d2d1f9bc-114b-45e7-b109-104137f9ab62 knative-tutorial nyc1 1.24.4-do.0 false running knative-tutorial-default-pool
クラスターは現在使用可能です。
以下のコマンドを使用して、現在のシステムに kubectl がセットアップされており、Silicon Cloud Kubernetes クラスタにアクセスできるかを確認できます。
- kubectl cluster-info
似たような出力を受け取るべきです。
Kubernetes control plane is running at https://69de217e-0284-4e18-a6d7-5606915a4e88.k8s.ondigitalocean.com CoreDNS is running at https://69de217e-0284-4e18-a6d7-5606915a4e88.k8s.ondigitalocean.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
出力には、制御プレーンとCoreDNSサービスのURLがリストされています(出力ブロックで強調表示されています)。したがって、システムでkubectlが正しく設定され、クラスタに到達できることがわかります。
クラスター作成の過程として、doctlは自動的にkubectlのコンテキストを新しいクラスターに設定します。この設定が行われているかは、以下のコマンドを実行することで確認できます。
- kubectl config current-context
このコマンドは、現在のコンテキストの名前を返します。
次の出力を受け取るべきです。 (Tsugi no shutsuryoku o uketoru beki desu.)
do-nyc1-knative-tutorial
出力は、「do-nyc1-knative-tutorial」という現在のコンテキストを示しており、これは作成したクラスターの名前であり、その場所は(nyc1)です。
このコマンドを使用して、クラスターが実行中であり、ノードがワークロードを受け入れる準備ができていることも確認できます。
- kubectl get nodes
kubectl get nodesコマンドは、クラスタ内のすべてのノードと、それらの状態やその他の情報を一覧表示します。
以下の出力を受け取るべきです。
NAME STATUS ROLES AGE VERSION do-nyc1-knative-tutorial-159783000-0v9k5 Ready <none> 2m52s v1.24.4 do-nyc1-knative-tutorial-159783000-1h4qj Ready <none> 2m52s v1.24.4 do-nyc1-knative-tutorial-159783000-1q9qf Ready <none> 2m52s v1.24.4
出力によると、クラスタには作業を受け入れる準備ができたノードが3つあります。
このステップでは、Silicon Cloud上でKubernetesクラスターを起動しました。それでは、KnativeをインストールしてKubernetes上でサーバーレスのワークロードを展開することができます。
ステップ2 – Knative Servingをインストールする
このステップでは、KubernetesクラスターにKnative Servingをインストールします。Knative Servingは、サーバーレスのワークロードの展開と管理を担当します。
Knative Servingをインストールするには、Knativeのコアコンポーネントとカスタムリソースが必要です。次のコマンドを実行して、コアコンポーネントをインストールしてください。
- kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-crds.yaml
- kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-core.yaml
kubectl applyコマンドは、KubernetesクラスターにKnativeのコアコンポーネントとカスタムリソースをインストールします。-fフラグは、設定の変更が含まれているファイルを指定します。この場合、設定の変更はKnativeリポジトリからダウンロードしたYAMLファイルにあります。
これらのコマンドは数分かかります。以下の出力を受け取ります(以下の出力は簡潔にするために一部省略されています)。
customresourcedefinition.apiextensions.k8s.io/certificates.networking.internal.knative.dev created customresourcedefinition.apiextensions.k8s.io/clusteringresses.networking.internal.knative.dev created customresourcedefinition.apiextensions.k8s.io/configurations.serving.knative.dev created customresourcedefinition.apiextensions.k8s.io/images.caching.internal.knative.dev created customresourcedefinition.apiextensions.k8s.io/ingresses.networking.internal.knative.dev created …
この出力は、Knativeのコアコンポーネントとカスタムリソースがクラスター上にあることを示しています。すべてのコンポーネントは、knative-servingの名前空間にあります。
ダウンロードが完了したら、Knative Servingがインストールされていることを確認できます。
- kubectl get pods –namespace knative-serving
kubectl get podsコマンドは、namespace knative-serving内でクラスターに起動されたすべてのポッドのリストを取得します。このコマンドは、クラスター内のポッド、現在のステータス、ポッド内のコンテナの数、および特定の名前空間のコンテナの名前を識別します。
同様の結果を受け取るべきです。+(Some variations could be: 同じような出力を受け取るべきです。, 類似した結果が出力されるべきです。)
NAME READY STATUS RESTARTS AGE activator-5f6b4bf5c8-kfxrv 1/1 Running 0 4m37s autoscaler-bc7d6c9c9-v5jqt 1/1 Running 0 4m34s controller-687d88ff56-9g4gz 1/1 Running 0 4m32s domain-mapping-69cc86d8d5-kr57g 1/1 Running 0 4m29s domainmapping-webhook-65dfdd9b96-nzs9c 1/1 Running 0 4m27s net-kourier-controller-55c99987b4-hkfpl 1/1 Running 0 3m49s webhook-587cdd8dd7-qbb9b 1/1 Running 0 4m22s
出力は、Knative Servingの名前空間で実行されているすべてのポッドを表示します。ポッドは、Knative Servingのさまざまなコンポーネントに責任を持っています。
以下の文を日本語で表現すると、以下のようになります。
Knativeでは、ネットワーキング層が必要です。ネットワーキング層は、マイクロサービスの展開と通信を分散環境で可能にします。Knative Servingでは、ネットワーキング層としてIstio、Contour、およびKourierをサポートしています。
このチュートリアルでは、Knativeとシームレスに統合するためにネットワーキングレイヤーとしてKourierを使用します。Kourierは、Knativeエコシステムの他の部分と同じAPIと規格を使用しており、既にKnativeを使用している開発者や組織が強力なネットワーキング機能を活用したい場合には良い選択肢です。
このコマンドを使ってKourierをインストールしてください。
- kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.8.0/kourier.yaml
以下の出力を受け取る必要があります。 (Anata wa kōno shuppatsu o uketoru hitsuyō ga arimasu.)
namespace/kourier-system configured configmap/kourier-bootstrap configured configmap/config-kourier configured serviceaccount/net-kourier configured clusterrole.rbac.authorization.k8s.io/net-kourier configured clusterrolebinding.rbac.authorization.k8s.io/net-kourier configured deployment.apps/net-kourier-controller configured service/net-kourier-controller configured deployment.apps/3scale-kourier-gateway configured service/kourier configured service/kourier-internal configured
KubernetesクラスタへのKourierのインストールプロセスの一環として作成された、すべてのリソース(NamespacesやConfigMapsなど)が出力されます。
KnativeをKourierをネットワーキングレイヤーとして使用するように構成するには、config-network ConfigMapを編集します。
これには、Kubernetesクラスター内のオブジェクトのフィールドを更新するためにkubectl patchコマンドを使用する必要があります。また、このコマンドにはいくつかのフラグを含める必要があります。
- –namespace specifies where you can find the object you want to patch.
- –type specifies which patch to perform when applying configs with the patch command. The available types are json, merge, and strategic.
- –patch specifies the patch data directly on the command line rather than in a file.
関連するフラグを付けてこのコマンドを実行してください。
- kubectl patch configmap/config-network \
- –namespace knative-serving \
- –type merge \
- –patch ‘{“data”:{“ingress-class”:”kourier.ingress.networking.knative.dev”}}’
kubectl patchコマンドは、configmap/config-networkのnamespaceをknative-servingに設定し、typeをmergeに設定します。
マージパッチタイプは、よりターゲットとなるアップデートを可能にします。一方、JSONまたはストラテジックパッチタイプは、より包括的なアップデートを可能にします。マージパッチタイプでは、パッチコマンドでリソース設定全体を含めずに更新する個々のフィールドが指定されますが、他のタイプではその場合になります。パッチフラグを使用して、パッチ適用対象のデータが特定されます。
以下の出力を受け取る必要があります:
configmap/config-network patched
このコマンドの出力により、Kourierがクラスター内で正しく設定されていることが確認されます。
最後に、以下のコマンドを使用してKourierロードバランサーの外部IPアドレスを取得してください。
- kubectl get svc kourier –namespace kourier-system
kubectl get svcコマンドは、指定された名前空間(この場合、kourier-system)で実行中のKubernetesクラスタのサービスに関する情報を取得します。このコマンドにより、クラスタ内のすべてのサービスとそれに関連するIPアドレスとポート番号がリストされます。
次の出力を受け取る必要があります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 10.245.186.153 138.197.231.61 80:31245/TCP,443:30762/TCP 2m33s
このコマンドの出力には、サービスの名前、サービスのタイプ(ClusterIP、NodePortなど)、クラスタのIPアドレスとポート番号、外部のIPアドレスとポート番号が含まれます。ここにリストされている数字は例であり、あなたの出力では異なる数字が表示されます。
ロードバランサーのプロビジョニングには数分かかる場合があります。EXTERNAL-IPフィールドには空の値または「」が表示されることがあります。その場合は、数分待ってコマンドを再実行してください。
Note
ドメイン名のDNSも設定することができ、それをロードバランサーの外部IPアドレスに向けることもできます。Knativeには、sslip.ioをデフォルトのDNSサフィックスとして使用するためにKubernetesのジョブであるdefault-domainが自動的に設定されます。
sslip.ioは、ユーザーがIPアドレスの代わりにカスタムドメイン名を使用して、自分のデバイスにアクセスすることができる動的DNS(Domain Name System)サービスです。sslip.ioを利用することで、複雑なIPアドレスを覚える必要なく、リモートでデバイスに簡単にアクセスできます。
デフォルトのDNSサフィックスを設定する場合は、以下のコマンドを実行する必要があります。
- kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-default-domain.yaml
以下の出力結果を受け取ります。
job.batch/default-domain configured service/default-domain-service configured
マジックDNSサービスの実行に必要なリソースが正常に設定されました。
Note
あなたは現在、KubernetesクラスターにKnative Servingを正常にインストールしました。これにより、Kubernetesクラスター上でKnative Servingを使用してServerlessのワークロードを展開することができます。
ステップ3 — サーバーレスなワークロードの展開
このステップでは、現在Kubernetesクラスターで実行中のKnativeの上にサーバーレスのワークロードを展開します。前提条件の一環として作成したNode.jsアプリケーションを使用します。
進む前に、サーバーレスのワークロードを展開するための新しい名前空間を作成します。次のコマンドを実行してこれを行うことができます。
- kubectl create namespace serverless-workload
このコマンドは、serverless-workloadという新しいネームスペースを作成します。
以下の出力を受け取る必要があります。
namespace/serverless-workload configured
出力は、名前空間が正常に作成されたことを確認します。
Knative Servingは、サーバーレスのワークロードを展開し管理するために、サービスと呼ばれるカスタムリソースを使用します。サービスリソースは、Knative Serving APIによって定義されています。
Serviceリソースを作成または変更すると、Knative Servingは自動的に新しいRevisionを作成します。Revisionは、ワークロードのポイントインタイムのスナップショットです。
新しいRevisionが作成された時、Routeによってトラフィックは新しいRevisionにルーティングされます。Knative Servingは、各Serviceに対して自動的にRouteを作成します。Routeからのドメイン名を使用して、ワークロードにアクセスすることができます。
Knativeでサーバーレスなワークロードを展開するには、Serviceリソースを作成する必要があります。これには2つの異なる方法があります。
- Using the kn, the official Knative CLI tool.
- Using the kubectl command line tool for applying YAML files to your Kubernetes cluster.
以下のサブセクションでは、これらの方法をそれぞれ使用します。
オプション1 – Knative CLIを使用します。
Knativeと対話するためのコマンドラインインターフェースであるKnative CLI(kn)。
最初に、Knative CLIバイナリの最新バージョンをダウンロードして、knをインストールしてください。
- wget https://github.com/knative/client/releases/download/knative-v1.8.1/kn-linux-amd64
wgetコマンドを使用すると、ツールを取得できます。
その後、「kn」という名前のフォルダにバイナリを移動してください。
- mv kn-linux-amd64 kn
次に、次のコマンドで実行可能にしてください。
- chmod +x kn
最後に、実行可能なバイナリファイルをPATHのディレクトリに移動してください。
- cp kn /usr/local/bin/
knがインストールされているかを確認してください。
- kn version
同様の出力を受け取るべきです。 (Dōyō no shutsuryoku o uketoru beki desu.)
Version: v1.8.1 Build Date: 2022-10-20 16:09:37 Git Revision: 1db36698 Supported APIs: * Serving – serving.knative.dev/v1 (knative-serving v1.8.0) * Eventing – sources.knative.dev/v1 (knative-eventing v1.8.0) – eventing.knative.dev/v1 (knative-eventing v1.8.0)
このコマンドの出力によれば、knがインストールされていると述べています。
Node.jsアプリケーションをknを使って展開するためには、kn service createコマンドを使用します。このコマンドにはいくつかのフラグを含めます。
- –image specifies the image of the container you want to deploy.
- –port specifies the port that your application listens on.
- –name specifies the name of the Service you want to create.
- –namespace specifies the namespace to which you want to deploy the workload.
Node.js アプリケーションをデプロイするために、次のコマンドを実行し、ハイライトされた部分を DockerHub ユーザー名に更新してください。
- kn service create node-service \
- –image your_dockerhub_username/nodejs-image-demo \
- –port 8080 \
- –namespace serverless-workload
kn serviceコマンドを使用して、ポートが8080に設定され、名前空間フラグがserverless-workloadに設定されたKnative Serviceであるnode-serviceを作成します。imageフラグは、Dockerhubにアップロードされたアプリケーションコンテナの場所を示しています。
以下の出力結果を受け取るべきです。 (Anata wa kōkai kekka o uketoru beki desu.)
Creating service ‘node-service’ in namespace ‘serverless-workload’: 0.236s Configuration “node-service” is waiting for a Revision to become ready. 2.230s … 2.311s Ingress has not yet been reconciled. 2.456s Waiting for load balancer to be ready 2.575s Ready to serve. Service ‘node-service’ created to latest revision ‘node-service-00001’ is available at URL: http://node-service.serverless-workload.138.197.231.61.sslip.io
この出力は、Knativeサービスの作成状態を提供します。サービスが作成されると、サービスにリンクされたルートのURLが表示されます。
以下のコマンドを実行して、Serviceリソースが作成されたことを確認してください。
- kn service list –namespace serverless-workload
Knative Servingで現在特定の名前空間に展開されているすべてのサービスを列挙する「kn service list」コマンドがあります。このコマンドを使用すると、各サービスの名前、ステータス、URLなどの詳細情報にアクセスできます。
同じような結果を受け取るべきです。
NAME URL LATEST AGE CONDITIONS READY REASON node-service http://node-service.serverless-workload.138.197.231.61.sslip.io node-service-00001 88s 3 OK / 3 True
この出力から、前に実行した”kn service”コマンドによって新しいKnativeサービスが作成されたことを確認できます。また、ルートのURLやサービスの経過時間やステータスも見つけることができます。
このセクションでは、Knative CLIをインストールし、それを使用してNode.jsアプリケーションのサーバーレスワークロードをデプロイしました。
オプション2 – YAMLファイルを使用してサービスリソースを作成
サービスリソースは、リソースを定義するYAMLファイルを作成することで展開することもできます。この方法は、ワークロードのバージョン管理を確実にするために役立ちます。
最初に、Dockerfileを含むディレクトリにサブディレクトリを作成します。このチュートリアルでは、サブディレクトリの名前を”knative”とします。フォルダを作成してください。
- mkdir knative
次に、Knativeディレクトリにservice.yamlというYAMLファイルを作成します。
- nano knative/service.yaml
新たに作成されたservice.yamlファイルに、以下の行を追加して、Node.jsアプリを展開するためのServiceを定義します。
「~/node_project/knative/service.yaml」
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: node-yaml-service
namespace: serverless-workload
spec:
template:
metadata:
name: node-yaml-service-v1
spec:
containers:
- image: docker.io/your_dockerhub_username/nodejs-image-demo
ports:
- containerPort: 8080
KnativeサービスのYAMLファイルには、以下の情報が指定されています。
- name in the first metadata section specifies the name of the Service resource.
- namespace specifies the namespace to which you want to deploy the workload.
- name in the first spec section specifies the name of the Revision.
- image in the second spec section specifies the image of the container you want to deploy.
- containerPort specifies the port your application listens on.
アプリとシステムに選択した情報とDockerHubのユーザー名を更新する際には、強調されたテキストを必ず更新してください。
保存してファイルを閉じてください。
以下のコマンドを実行することで、サービスリソースを展開できます。
- kubectl apply -f knative/service.yaml
以下の出力を受け取るべきです。
service.serving.knative.dev/node-yaml-service created
出力結果は、Serviceリソースが正常に作成されたことを示しています。
以下のコマンドを実行して、Serviceリソースが作成されたかを確認してください。
- kn service list –namespace serverless-workload
「kn service list」コマンドは、特定のネームスペースで現在展開されているすべてのKnative Servingサービスの一覧を表示します。このコマンドを使用することで、各サービスの詳細にアクセスすることができます。
以下の出力結果を受け取るべきです。
NAME URL LATEST AGE CONDITIONS READY REASON node-service http://node-service.serverless-workload.174.138.127.211.sslip.io node-service-00001 9d 3 OK / 3 True node-yaml-service http://node-yaml-service.serverless-workload.174.138.127.211.sslip.io node-yaml-service-v1 9d 3 OK / 3 True
以前に実行したKnative Service YAMLファイルに基づいて、新しいKnative Serviceが作成されたことを確認できます。このセクションでは、node-yaml-serviceを作成しました。また、Knative RouteのURLも見つけることができます。
このセクションでは、Node.jsアプリのサーバーレスワークロードを作成するためにYAMLファイルを使用しました。
この段階では、kn CLI ツールと YAML ファイルの両方を使用して、Knative サービスリソースを作成しました。次に、Knative で展開したアプリケーションのワークロードにアクセスします。
ステップ4 — アプリケーションのワークロードにアクセスする
サーバーレスのワークロードをデプロイしたので、サーバーレスのワークロードの一部として作成されたKnativeルートのURLからアクセスできます。Knativeルートは、どのサービスやアプリケーションに対して受信HTTPトラフィックがどのようにルーティングされるかを定義しています。
すべてのKnativeルートのリストを取得するには、次のコマンドを実行してください。 (To get the list of all Knative routes, run the following command:)
- kn route list –namespace serverless-workload
Kubernetesクラスター内の特定の名前空間で、knルートリストコマンドはすべてのKnativeルートをリストします。
同様の結果を受け取るべきです。 (Dōyō no kekka o uketoru beki desu.)
NAME URL READY node-service http://node-service.serverless-workload.138.197.231.61.sslip.io True node-yaml-service http://node-yaml-service.serverless-workload.138.197.231.61.sslip.io True
予想通りに機能していることを確認するために、Knativeルートの生成されたURLを使用します。
ブラウザーでどちらかのURLを開いてください。ブラウザーでサイトにアクセスすると、Nodeアプリのランディングページが表示されます。
あなたはKubernetesクラスター上でKnativeを使ってサーバーレスのワークロードを成功裏に展開しました。
結論としては、
このチュートリアルでは、Knativeを使用してサーバーレスワークロードをデプロイしました。kn CLIツールおよびYAMLファイルを使用してKnative Serviceリソースを作成しました。このリソースは、Kubernetesクラスター上にNode.jsアプリケーションをデプロイし、ルートURLを使用してアクセスしました。
Knativeの提供する機能について詳しく知りたい場合は、Podの自動スケーリング、トラフィックの段階的なロールアウト、そしてイベントコンポーネントなど、公式のKnativeドキュメントをご覧ください。
デジタルオーシャンのKubernetes(DOKS)を使い続けるためには、KubernetesのHow-Toドキュメンテーションを参照してください。また、DOKSの機能や利用可能性についても詳しく学ぶことができます。DOKSのトラブルシューティングには、Kubernetesサポートガイドを参照してください。