LoginSignup
6
0

More than 1 year has passed since last update.

OKEでKnative Servingを動かしてみよう

Last updated at Posted at 2022-12-20

はじめに

この記事は、Oracle Cloud Infrastructure Advent Calendar 2022 その1 Day 21の記事として書かれています。

みなさんはKnativeをご存知でしょうか?

KnativeはKubernetes上でサーバレス & イベントドリブンワークロードを動作させるためのプラットフォームです。

今回はKnativeをOKEで動作させるチュートリアル的な内容を簡単にご紹介します。

Knativeとは

まず、Knativeについて簡単にご紹介します。

Knativeは、大きく以下の2つのコンポーネントに分かれています。

今回はKnative Servingの方を取り上げます。

Knative Servingについて

Knative Servingは以下のようなコンポーネントをもちます。

スクリーンショット 2022-12-20 13.24.13.png
こちらはドキュメントに記載されている図になります。

最上位に位置するServiceはKubernetesの標準リソースであるServiceとはまた別のリソースになっており、基本的にはこのServiceを作成することにより、いかに紐づくリソースが自動的に作成されるようになっています。
また、Knativeのコンポーネントだけではなく、Kubernetesの標準リソースであるPod,Deployment,Ingressなども一緒に作成してくれます。
Kubernetesの基本的なリソース部分の面倒を見てくれるという意味では、まさにサーバレスです!!

文字だけだと分かりづらいので、早速実際に動かしてみましょう。

OKEでKnative Servingを動かしてみよう

OKEクラスタの構築については、こちらを参考に行ってください。

ここからはKnativeのドキュメントをベースに進めていきます。
今回は、v1.8.3を利用します。

まずは、Knativeのカスタムリソースとコアコンポーネントをインストールします。

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

次にKnativeのnetworking layerとしてKourierをインストールします。
Knativeは他にもIstio、Contourなどのサービスをサポートしています。

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

デフォルトでは、networking layerの設定がIstioになっているので、変更します。

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

最後にサーバレスワークロードにアクセスするためのDNS設定を行っていきます。
今回はsslip.ioというDNSを利用します。

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

これでKnativeのインストールは完了です!簡単ですね!!

では、実際にサーバレスワークロードを動かしてみましょう。

まず、以下のようなManifestを作成し、applyします。

knative.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go
          ports:
            - containerPort: 8080
          env:
            - name: TARGET
              value: "World"

ここでのServiceは、上記で説明したKnativeのコンポーネントです。(標準リソースのServiceはありません)
apiVersionを見ると、serving.knative.dev/v1となっており、Knativeのカスタムリソースであることがわかります。

applyします。

kubectl apply -f knative.yaml

applyできたら、以下のコマンドでKnative Serviceについて確認します。

kubectl get ksvc

以下のように出力されます。

NAME            URL                                                   LATESTCREATED         LATESTREADY           READY   REASON
helloworld-go   http://helloworld-go.default.xxx.xxx.xxx.xxx.sslip.io   helloworld-go-00001   helloworld-go-00001   True    

URL列に記載されている値でブラウザやcurlからアクセスできますが、その前に確認しておくことがあります。

今回実行しているのはサーバレスワークロードなので、トラフィックやリクエストが発生していない今はアプリケーションが停止されています。

試しにPodを確認してみると・・・

kubectl get pods

何も出力されないはずです。
※もし、出力されている場合はしばらく待機するとPodが消えると思います。

No resources found in default namespace.

では、curlでアクセスしてみます。

curl http://helloworld-go.default.xxx.xxx.xxx.xxx.sslip.io  

以下のように出力されます。

Hello World!

そしてPodを確認すると・・・

$ kubectl get pods
NAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-00001-deployment-6986cb9fbf-6zxhw   2/2     Running   0          42s

先ほどまではなかったPodが生成されています!これがKnativeの特徴です。

このように、Knativeを利用すると簡単にワークロードのゼロスケールやオートスケールを行うことができます。

まとめ

KnativeはKubernetes上でのワークロード実行時に非常に強力な武器を提供してくれます。

みなさんもぜひ使ってみてください!!

参考資料

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0