OpenShift Serverless を構築してみた

前回の記事では、サーバーレスアーキテクチャを実現するためのOpenShift Serverlessについて解説しました。今回は、OpenShift Serverless を実際に構築したいと思います。Red Hat Developer のチュートリアルを参考にOpenShift Serverlessのサンプルアプリケーションをデプロイ、挙動の確認を行っていきます。

事前準備

下記コマンドを実行して作業端末にkn CLIをインストールします(バージョンは2025/01/22時点)。バージョンとアーキテクチャは作業端末に適切なものを選択してください。

$ curl -Lo kn-linux-arm64 https://github.com/knative/client/releases/download/knative-v1.6.0/kn-linux-arm64
$ chmod +x kn-linux-arm64
$ sudo mv kn-linux-arm64 /usr/local/bin/kn

下記コマンドを実行してインストールの完了を確認します。

$ kn version
Version: v20220713-local-bfdc0a21
Build Date: 2022-07-13 09:04:48
Git Revision: bfdc0a21
Supported APIs:
* Serving
- serving.knative.dev/v1 (knative-serving v0.33.0)
* Eventing
- sources.knative.dev/v1 (knative-eventing v0.33.0)
- eventing.knative.dev/v1 (knative-eventing v0.33.0)

前提条件

  • OpenShift 4 クラスターが構築済みであること
  • 作業端末に oc CLI がインストール済みであること

OpenShift Serverless Operatorをインストール

Operatorをインストール

  1. OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。
  2. Web コンソールで [Operators] > [OperatorHub] に移動します。
  3. 検索バーに「OpenShift Serverless」と入力して、 OpenShift Serverless をクリックして Install をクリックします。
  4. デフォルトのまま Install をクリックします。

Knative Serving をインストール

OpenShift Serverless Operator を使用して Knative Serving をインストールするには、KnativeServing オブジェクトを作成する必要があります。

  1. Knative Serving をインストールします。
  2. OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。
  3. Web コンソールで [Operators] > [インストール済みのOperator] に移動します。
  4. Web コンソールでknative-serving プロジェクトに移動します。
  5. Knative Serving をクリックします。
  6. Knative Serving の作成をクリックします。
  7. すべての値をデフォルトのままにして、[Create] ボタンをクリックします。

サンプルアプリケーションデプロイ

下記コマンドを実行してプロジェクトを作成します。

$ oc new-project serverless-tutorial

下記コマンドを実行してアプリケーションをデプロイします。Knative はコマンドライン1つでアプリケーションをデプロイすることが出来ます。もちろん、マニフェストファイルでのデプロイも可能です。

$ kn service create greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus \
--namespace serverless-tutorial
Warning: Kubernetes default value is insecure, Knative may default this to secure in a future release: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation, spec.template.spec.containers[0].securityContext.capabilities, spec.template.spec.containers[0].securityContext.runAsNonRoot, spec.template.spec.containers[0].securityContext.seccompProfile
Creating service 'greeter' in namespace 'serverless-tutorial':

0.058s The Route is still working to reflect the latest desired specification.
0.088s Configuration "greeter" is waiting for a Revision to become ready.
20.686s ...
20.722s Ingress has not yet been reconciled.
20.765s Waiting for load balancer to be ready
20.956s Ready to serve.

Service 'greeter' created to latest revision 'greeter-00001' is available at URL:
https://greeter-serverless-tutorial.apps.<ドメイン名>

挙動確認

下記コマンドを実行してデプロイしたリソースを確認します。

$ kn service list
NAME      URL                                                                                  LATEST          AGE   CONDITIONS   READY   REASON
greeter   https://greeter-serverless-tutorial.apps.<ドメイン名>   greeter-00001   19m   3 OK / 3     True

下記コマンドを実行してリクエストを送った際の pod の増減を確認してみます。上記コマンドで表示された URL に curl やブラウザなどでリクエストを送ります。

$ oc get pod -wNAME READY STATUS RESTARTS AGE greeter-00001-deployment-5677dbb785-lmw27 0/2 Pending 0 0s greeter-00001-deployment-5677dbb785-lmw27 0/2 Pending 0 0s greeter-00001-deployment-5677dbb785-lmw27 0/2 Pending 0 0s greeter-00001-deployment-5677dbb785-lmw27 0/2 ContainerCreating 0 0s greeter-00001-deployment-5677dbb785-lmw27 0/2 ContainerCreating 0 0s greeter-00001-deployment-5677dbb785-lmw27 1/2 Running 0 1s greeter-00001-deployment-5677dbb785-lmw27 2/2 Running 0 1s greeter-00001-deployment-5677dbb785-lmw27 2/2 Terminating 0 108s greeter-00001-deployment-5677dbb785-lmw27 1/2 Terminating 0 2m10s greeter-00001-deployment-5677dbb785-lmw27 0/2 Terminating 0 2m18s greeter-00001-deployment-5677dbb785-lmw27 0/2 Terminating 0 2m19s greeter-00001-deployment-5677dbb785-lmw27 0/2 Terminating 0 2m19s

OpenShift GitOps を用いたデプロイ

事前準備

OpenShift GitOps を構築してみたを参考にして下記手順を実施します。

マニフェスト用リポジトリに下記構成を配置します。

app
├── knative_serving.yaml
└── kustomization.yaml

knative_serving.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: greeter
  namespace: serverless-tutorial
spec:
  template:
    spec:
      containers:
      - image: quay.io/rhdevelopers/knative-tutorial-greeter:quarkus
        livenessProbe:
          httpGet:
            path: /healthz
        readinessProbe:
          httpGet:
            path: /healthz

kustomization.yaml

resources:
- knative_serving.yaml

アプリケーションをデプロイ

下記コマンドを実行して ArgoCD アプリケーションをデプロイします。

$ oc apply -f application.yaml
application.argoproj.io/serverless-dev created

application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: serverless-dev
  namespace: openshift-gitops
spec:
  project: default
  source:
    repoURL: GitHubリポジトリのURL(末尾が .git で終わるURL)
    path: app
    targetRevision: HEAD
  destination:
    server: https://kubernetes.default.svc
    namespace: serverless-tutorial
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

デプロイ確認

ArgoCD の画面から ArgoCD アプリケーションが作成されていることを確認します。

デフォルトのビューだとリソースが多すぎるため、今回はビューを変更します。アプリケーションデプロイから少し時間がたった後に確認したため、pod が立っていないことが確認できます。

挙動確認の時と同じようにリクエストを送って pod の増減を確認して完了です。

まとめ

Red Hat Developer のチュートリアルを参考にOpenShift Serverlessのサンプルアプリケーションをデプロイ、挙動の確認しました。コンテナイメージさえ用意していれば簡単にサーバレスアプリケーションをデプロイすることが出来ます。ゼロスケールによりリソースの節約が可能になりますが、pod立ち上げの時間があるため、ユースケースに応じて適切に使い分ける必要があります。

参考文献

 

Red Hat OpenShift Serverlessとは?

OpenShift GitOps を構築してみた

https://developers.redhat.com/courses/getting-started-openshift-serverless?source=sso

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です