前回の記事では、サーバーレスアーキテクチャを実現するための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をインストール
- OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。
- Web コンソールで [Operators] > [OperatorHub] に移動します。
- 検索バーに「OpenShift Serverless」と入力して、 OpenShift Serverless をクリックして Install をクリックします。
- デフォルトのまま Install をクリックします。
Knative Serving をインストール
OpenShift Serverless Operator を使用して Knative Serving をインストールするには、KnativeServing オブジェクトを作成する必要があります。
- Knative Serving をインストールします。
- OpenShift OperatorHub で Administrator のパースペクティブにいることを確認します。
- Web コンソールで [Operators] > [インストール済みのOperator] に移動します。
- Web コンソールでknative-serving プロジェクトに移動します。
- Knative Serving をクリックします。
- Knative Serving の作成をクリックします。
- すべての値をデフォルトのままにして、[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 -w
NAME 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立ち上げの時間があるため、ユースケースに応じて適切に使い分ける必要があります。
参考文献
https://developers.redhat.com/courses/getting-started-openshift-serverless?source=sso