前回の記事に引き続き、今回は、Tech PreviewとなったKnative ServingをOpenShift 4にインストールしてみます。ServiceMesh(Istio)がインストールされている環境が前提になるので、こちらの記事を読んでServiceMeshをインストールしてみてください。
今回もUIは使わずにCLIでインストールをしますが、Web UIからインストールする方は、1つ注意が必要です。現在(9月13日時点)、OperatorHubで「knative」と入力すると、Knativeのアイコンが検索結果に見つかります。 この「Knative Serving Operator」というOperatorは近々廃止される古いOperatorで、「Serverelss Operator」という名前のOperatorをインストールする必要があります。スクリーンショットを貼っておきますが、Red HatアイコンもKnativeアイコンに変えられる可能性もあるので、「Serverelss Operator」という名前のオペレーターをインストールすることを忘れないでください。
CLIでServerless Operatorをインストールする場合、コマンドは次のようになります。まず、CatalogSourceConfigとSubscriptionを作成します。
cat <<-EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: CatalogSourceConfig metadata: name: serverless-operator namespace: openshift-marketplace spec: targetNamespace: openshift-operators packages: serverless-operator source: redhat-operators --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: serverless-operator-sub generateName: serverless-operator- namespace: openshift-operators spec: source: serverless-operator sourceNamespace: openshift-operators name: serverless-operator channel: techpreview EOF
openshift-operatorsプロジェクトに、knative-openshift-ingressとknative-serving-operatorというOperatorが2つ起動すればOKです。
$ oc get pod -n openshift-operators NAME READY STATUS RESTARTS AGE elasticsearch-operator-6c44487696-nr42q 1/1 Running 0 14m istio-node-65vsl 1/1 Running 0 13m istio-node-8mr9b 1/1 Running 0 13m istio-node-b74b9 1/1 Running 0 13m istio-node-crpt2 1/1 Running 0 13m istio-node-krp8d 1/1 Running 0 13m istio-node-nftnj 1/1 Running 0 13m istio-operator-64f969655b-xhf7j 1/1 Running 0 14m jaeger-operator-55f47cccbc-f55rl 1/1 Running 0 14m kiali-operator-865b8cfc7b-nv8h5 1/1 Running 0 14m knative-openshift-ingress-55bdd6b797-mdgjj 1/1 Running 0 20s knative-serving-operator-d5fd5f444-hpsbg 1/1 Running 0 20s
以上で、Operatorのインストールはおしまいです。あとは、knative servingのサービス群をknative-serving
プロジェクトに作成します。
oc new-project knative-serving cat <<-EOF | oc apply -f - apiVersion: serving.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving EOF
コマンドを実行すると、今度は、knative-serving
プロジェクトにknative servingのPodが起動します。oc get ks -n knative-serving
が、READY状態になっていることも確認しておきます。
$ oc get pod -n knative-serving NAME READY STATUS RESTARTS AGE activator-78464cc84-pqpgn 1/1 Running 0 5m39s autoscaler-57479674d6-sp6s6 1/1 Running 0 5m38s controller-6fcb5b4b78-gwpwf 1/1 Running 0 5m33s networking-certmanager-8c6d68d4-nmxbg 1/1 Running 0 5m33s networking-istio-644984496f-fw4cm 1/1 Running 0 5m32s webhook-84b96fdc6f-d2vh4 1/1 Running 0 5m32s $ oc get ks -n knative-serving NAME VERSION READY REASON knative-serving 0.7.1 True
また、knative-serving
プロジェクトとKnativeアプリをデプロイするプロジェクト(今回はdemo
という名前を使っています)をmembers
に加えたServiceMeshMemberRoll
を作成します。
cat <<EOF | oc apply -f - apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default namespace: istio-system spec: members: - knative-serving - demo EOF
以上で、インストールはおしまいです。やはり、OpenShift 4のOperatorはインストールが簡単です。せっかくなので、今回はKnativeアプリのデプロイまで試してみます。
oc new-project demo cat <<EOF | oc apply -f - apiVersion: serving.knative.dev/v1alpha1 # Current version of Knative kind: Service metadata: name: helloworld-go # The name of the app spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-go # The URL to the image of the app env: - name: TARGET # The environment variable printed out by the sample app value: "Go Sample v1" resources: limits: cpu: 10m requests: cpu: 10m EOF
oc get ksvc
でREADY状態になれば、デプロイ完了です。
$ oc get ksvc NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go http://helloworld-go.demo.apps.something.example.com helloworld-go-gccd5 helloworld-go-gccd5 True
URL
に出力されているURLにアクセスしてみましょう。Hello Go Sample v1!
と表示されました。
$ curl http://helloworld-go.demo.apps.something.example.com Hello Go Sample v1!
しばらくするとhellworld-go Podが、Pod数「0」にスケールダウンされますが、URLにアクセスするとPodが起動し正常にアクセスを受け付けます。
$ oc get pod NAME READY STATUS RESTARTS AGE helloworld-go-gccd5-deployment-74b7ff8658-2vrbs 1/2 Terminating 0 5m18s $ oc get pod No resources found.
Knative Servingは、この他にもIstioのネットワークを利用したトラフィックの分割やオートスケール、アプリケーションのリビジョン管理など、多くの機能があります。今回も、記事の説明が少ないし、「やってみた(だけ)」記事だし、Knativeインストールして、この後どうすれば良いか分からない、という方!次回の「OpenShift Meetup Tokyo」は、Service Mesh & Serverless 特集です。ぜひ、参加して更なる深い話を聞いたり、参加者で情報を共有しましょう。