Knative Serving (Red Hat Serverless TP1) を OpenShift 4 にインストールする

f:id:dirtynak3:20190913171919p:plain

前回の記事に引き続き、今回は、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」という名前のオペレーターをインストールすることを忘れないでください。

f:id:dirtynak3:20190913170737p:plain
「Serverless 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 特集です。ぜひ、参加して更なる深い話を聞いたり、参加者で情報を共有しましょう。

openshift.connpass.com

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません