Add Knative Services tutorial

This adds a new short tutorial on how to run Knative services in gVisor by
enabling the runtime class feature flag for Knative.

Fixes #3634

PiperOrigin-RevId: 374999528
This commit is contained in:
Ian Lewis 2021-05-20 19:40:12 -07:00 committed by gVisor bot
parent 9157a91a4e
commit 28c78eb03c
3 changed files with 99 additions and 1 deletions

View File

@ -36,11 +36,20 @@ doc(
weight = "30", weight = "30",
) )
doc(
name = "knative",
src = "knative.md",
category = "User Guide",
permalink = "/docs/tutorials/knative/",
subcategory = "Tutorials",
weight = "40",
)
doc( doc(
name = "cni", name = "cni",
src = "cni.md", src = "cni.md",
category = "User Guide", category = "User Guide",
permalink = "/docs/tutorials/cni/", permalink = "/docs/tutorials/cni/",
subcategory = "Tutorials", subcategory = "Tutorials",
weight = "40", weight = "50",
) )

View File

@ -0,0 +1,88 @@
# Knative Services
[Knative](https://knative.dev/) is a platform for running serverless workloads
on Kubernetes. This guide will show you how to run basic Knative workloads in
gVisor.
## Prerequisites
This guide assumes you have have a cluster that is capable of running gVisor
workloads. This could be a
[GKE Sandbox](https://cloud.google.com/kubernetes-engine/sandbox/) enabled
cluster on Google Cloud Platform or one you have set up yourself using
[containerd Quick Start](https://gvisor.dev/docs/user_guide/containerd/quick_start/).
This guide will also assume you have Knative installed using
[Istio](https://istio.io/) as the network layer. You can follow the
[Knative installation guide](https://knative.dev/docs/install/install-serving-with-yaml/)
to install Knative.
## Enable the RuntimeClass feature flag
Knative allows the use of various parameters on Pods via
[feature flags](https://knative.dev/docs/serving/feature-flags/). We will enable
the
[runtimeClassName](https://knative.dev/docs/serving/feature-flags/#kubernetes-runtime-class)
feature flag to enable the use of the Kubernetes
[Runtime Class](https://kubernetes.io/docs/concepts/containers/runtime-class/).
Edit the feature flags ConfigMap.
```bash
kubectl edit configmap config-features -n knative-serving
```
Add the `kubernetes.podspec-runtimeclassname: enabled` to the `data` field. Once
you are finished the ConfigMap will look something like this (minus all the
system fields).
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-features
namespace: knative-serving
labels:
serving.knative.dev/release: v0.22.0
data:
kubernetes.podspec-runtimeclassname: enabled
```
## Deploy the Service
After you have set the Runtime Class feature flag you can now create Knative
services that specify a `runtimeClassName` in the spec.
```bash
cat <<EOF | kubectl apply -f -
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
spec:
runtimeClassName: gvisor
containers:
- image: gcr.io/knative-samples/helloworld-go
env:
- name: TARGET
value: "gVisor User"
EOF
```
You can see the pods running and their Runtime Class.
```bash
kubectl get pods -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
```
Output should look something like the following. Note that your service might
scale to zero. If you access it via it's URL you should get a new Pod.
```
NAME RUNTIME CLASS STATUS
helloworld-go-00002-deployment-646c87b7f5-5v68s gvisor Running
```
Congrats! Your Knative service is now running in gVisor!

View File

@ -165,6 +165,7 @@ docs(
"//g3doc/user_guide/tutorials:cni", "//g3doc/user_guide/tutorials:cni",
"//g3doc/user_guide/tutorials:docker", "//g3doc/user_guide/tutorials:docker",
"//g3doc/user_guide/tutorials:docker_compose", "//g3doc/user_guide/tutorials:docker_compose",
"//g3doc/user_guide/tutorials:knative",
"//g3doc/user_guide/tutorials:kubernetes", "//g3doc/user_guide/tutorials:kubernetes",
], ],
) )