Install OCP 4.1.2
This blog assumes that you went to try.openshift.com and created your OCP 4.1 IPI cluster. If you have not, you can go to try.openshift.com –> Get Started to set up an OCP 4.1 cluster.
Install Istio (Maistra 0.11)
Istio is required before installing Knative. However, Knative operator will install the minimum Istio components if Istio is not installed on the platform. For my test, I did install service mesh on OCP 4.1 using the community version. Here are my steps:
- Install service mesh operator
oc new-project istio-operator oc new-project istio-system oc project istio-operator oc apply -f https://raw.githubusercontent.com/Maistra/istio-operator/maistra-0.11/deploy/maistra-operator.yaml
- Service Mesh operator is up and running
#to get the name of the operator pod
oc get pods
#view the logs of the pod
oc logs <name of the pod from above step>
#log shown as below
{"level":"info","ts":1562602857.4691303,"logger":"kubebuilder.controller","caller":"controller/controller.go:153","msg":"Starting workers","Controller":"servicemeshcontrolplane-controller","WorkerCount":1}
- Create custom resource as cr.yaml using the below content.
apiVersion: maistra.io/v1 kind: ServiceMeshControlPlane metadata: name: basic-install spec: # NOTE, if you remove all children from an element, you should remove the # element too. An empty element is interpreted as null and will override all # default values (i.e. no values will be specified for that element, not even # the defaults baked into the chart values.yaml). istio: global: proxy: # constrain resources for use in smaller environments resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 128Mi gateways: istio-egressgateway: # disable autoscaling for use in smaller environments autoscaleEnabled: false istio-ingressgateway: # disable autoscaling for use in smaller environments autoscaleEnabled: false # set to true to enable IOR ior_enabled: true mixer: policy: # disable autoscaling for use in smaller environments autoscaleEnabled: false telemetry: # disable autoscaling for use in smaller environments autoscaleEnabled: false # constrain resources for use in smaller environments resources: requests: cpu: 100m memory: 1G limits: cpu: 500m memory: 4G pilot: # disable autoscaling for use in smaller environments autoscaleEnabled: false # increase random sampling rate for development/testing traceSampling: 100.0 kiali: # change to false to disable kiali enabled: true # to use oauth, remove the following 'dashboard' section (note, oauth is broken on OCP 4.0 with kiali 0.16.2) # create a secret for accessing kiali dashboard with the following credentials dashboard: user: admin passphrase: admin tracing: # change to false to disable tracing (i.e. jaeger) enabled: true
- Install service mesh
oc project istio-system oc create -f cr.yaml #it will take a while to have all the pods up watch 'oc get pods'
- When service mesh is available
Every 2.0s: oc get pod -n istio-system Mon Jul 8 16:39:46 2019 NAME READY STATUS RESTARTS AGE elasticsearch-0 1/1 Running 0 13m grafana-86dc5978b8-k2dvl 1/1 Running 0 9m15s ior-6656b5cfdb-cjt7z 1/1 Running 0 9m55s istio-citadel-7678d4749b-bjqq8 1/1 Running 0 14m istio-egressgateway-66d8b969b8-wmcfm 1/1 Running 0 9m55s istio-galley-7f57cd4c6c-6d2r8 1/1 Running 0 11m istio-ingressgateway-7794d8d4fc-dd72g 1/1 Running 0 9m55s istio-pilot-77d65868d4-68lzd 2/2 Running 0 10m istio-policy-7486f4cb6c-fdw6q 2/2 Running 0 11m istio-sidecar-injector-66d49c6865-clqzm 1/1 Running 0 9m39s istio-telemetry-799557976b-9ljz4 2/2 Running 0 11m jaeger-agent-b7bz8 1/1 Running 0 13m jaeger-agent-j4dnp 1/1 Running 0 13m jaeger-agent-xmwzz 1/1 Running 0 13m jaeger-collector-96756f879-n889z 1/1 Running 3 13m jaeger-query-6f4456546c-mwjkk 1/1 Running 3 13m kiali-c58c8476d-wzhj6 1/1 Running 0 8m45s prometheus-5cb5d7549b-lmjtk 1/1 Running 0 14m
Install Knative 0.6
- Install Knative serving operator
- Click Catalog -> OperatorHub -> search for “knative” keyword
- Click “Knative Serving Operator”
- Click “Install”
- Install Knative eventing operator
- Click Catalog -> OperatorHub -> search for “knative” keyword
- Click “Knative Eventing Operator”
- Click “Install”
- I also manually scale up my nodes to prepare for the tutorial deployment.
- Click Compute -> Machine Sets
- Click “3 dots” at the end of each machine set-> click Edit Count -> enter 2
- validate (Installed Operator under openshift-operators project)
Install Knative Client – kn
Knative client CLI (kn) can list, create, delete, and update Knative service.
- Download the kn binary from https://github.com/knative/client/blob/master/docs/README.md#service-management
- Add to your path
- My kn installation
$ which kn /usr/local/bin/kn $ kn version Version: v20190625-13ff277 Build Date: 2019-06-25 09:52:20 Git Revision: 13ff277 Dependencies: - serving:
Let’s Have Some Fun
- The tutorial material is from https://github.com/redhat-developer-demos/knative-tutorial
Knative serving via kn
I am using my already build an image that is out in docker hub for this example. Here are the steps to create a simple Knative service.
oc new-project knative-demo oc adm policy add-scc-to-user anyuid -z default -n knative-demo oc adm policy add-scc-to-user privileged -z default -n knative-demo kn service create mysvc --image docker.io/piggyvenus/greeter:0.0.1
List Knative service
$ kn service list NAME DOMAIN GENERATION AGE CONDITIONS READY REASON mysvc mysvc.knative-demo.apps.cluster-6c33.sandbox661.opentlc.com 1 29s 3 OK / 3 True
Execute the service
$ curl mysvc.knative-demo.apps.cluster-6c33.sandbox661.opentlc.com Hi greeter => '0bd7a995d27e' : 1
Knative serving via a YAML file
Create Knative service YAML can also do the trick. Example, as shown below.
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: greeter spec: runLatest: configuration: revisionTemplate: spec: container: image: docker.io/piggyvenus/greeter:0.0.1 livenessProbe: httpGet: path: /healthz readinessProbe: httpGet: path: /healthz
Create Knative service
oc apply -f service.yaml
Check out Knative service resources
oc get deployment
oc get pods
oc get services.serving.knative.dev
oc get configuration.serving.knative.dev
oc get routes.serving.knative.dev
Invoke Knative service
oc get routes.serving.knative.dev curl mysvc.knative-demo.apps.cluster-6c33.sandbox661.opentlc.com
Please check out Knative tutorial! There are more examples of Knative. I hope you find this blog useful.