Kubernetes KNative

Примеры из курса “11 Steps to Awesome with Kubernetes, Istio, and Knative LiveLessons”


Делаю: 23.04.2020


// banch 0.7 https://github.com/redhat-developer-demos/knative-tutorial


https://github.com/burrsutter/scripts-knative


https://github.com/burrsutter/sidebyside


С v1.16.9 были какие-то проблемы. Не заработало.
v1.14.0 норм.


$ {
minikube --profile my-profile config set memory 8192
minikube --profile my-profile config set cpus 4
minikube --profile my-profile config set disk-size 50g

minikube --profile my-profile config set vm-driver virtualbox
// minikube --profile my-profile config set vm-driver docker

// minikube --profile my-profile config set kubernetes-version v1.16.9
minikube --profile my-profile config set kubernetes-version v1.14.0


minikube start --profile my-profile  --extra-config='apiserver.enable-admission-plugins=LimitRanger,NamespaceExists,NamespaceLifecycle,ResourceQuota,ServiceAccount,DefaultStorageClass,MutatingAdmissionWebhook' \
  --insecure-registry='10.0.0.0/24' 

}


$ minikube addons enable registry


Learn Knative serverless capabilities for Kubernetes

По следующей доке:
https://redhat-developer-demos.github.io/knative-tutorial/knative-tutorial-basics/0.7.x/01-setup.html


Install Istio

$ kubectl apply --filename https://raw.githubusercontent.com/knative/serving/v0.7.1/third_party/istio-1.1.7/istio-crds.yaml

$ kubectl apply --filename https://raw.githubusercontent.com/knative/serving/v0.7.1/third_party/istio-1.1.7/istio-lean.yaml


Если нужно конвертануть:

$ cd ~/tmp
$ wget https://raw.githubusercontent.com/knative/serving/v0.7.1/third_party/istio-1.1.7/istio-lean.yaml

$ kubectl convert -f istio-lean.yaml > istio-lean1.yaml  

$ kubectl apply -f istio-lean1.yaml 


$ kubectl get pods -n istio-system
NAME                                     READY   STATUS      RESTARTS   AGE
cluster-local-gateway-644b4689c9-zpqbj   1/1     Running     0          11m
istio-ingressgateway-65648c4585-rtcpv    2/2     Running     0          11m
istio-init-crd-10-qqggl                  0/1     Completed   0          20m
istio-init-crd-11-6786q                  0/1     Completed   0          20m
istio-pilot-5bdbcdd9bc-84glc             1/1     Running     0          11m


Install Custom Resource Definitions

$ kubectl apply --selector knative.dev/crd-install=true \
  --filename https://github.com/knative/serving/releases/download/v0.7.1/serving.yaml \
  --filename https://github.com/knative/eventing/releases/download/v0.7.1/release.yaml


$ kubectl get crds | grep knative
apiserversources.sources.eventing.knative.dev        2020-04-23T01:44:33Z
brokers.eventing.knative.dev                         2020-04-23T01:44:33Z
certificates.networking.internal.knative.dev         2020-04-23T01:44:33Z
channels.eventing.knative.dev                        2020-04-23T01:44:33Z
clusterchannelprovisioners.eventing.knative.dev      2020-04-23T01:44:33Z
clusteringresses.networking.internal.knative.dev     2020-04-23T01:44:33Z
configurations.serving.knative.dev                   2020-04-23T01:44:33Z
containersources.sources.eventing.knative.dev        2020-04-23T01:44:33Z
cronjobsources.sources.eventing.knative.dev          2020-04-23T01:44:33Z
eventtypes.eventing.knative.dev                      2020-04-23T01:44:33Z
images.caching.internal.knative.dev                  2020-04-23T01:44:33Z
ingresses.networking.internal.knative.dev            2020-04-23T01:44:33Z
inmemorychannels.messaging.knative.dev               2020-04-23T01:44:33Z
podautoscalers.autoscaling.internal.knative.dev      2020-04-23T01:44:33Z
revisions.serving.knative.dev                        2020-04-23T01:44:33Z
routes.serving.knative.dev                           2020-04-23T01:44:33Z
sequences.messaging.knative.dev                      2020-04-23T01:44:33Z
serverlessservices.networking.internal.knative.dev   2020-04-23T01:44:33Z
services.serving.knative.dev                         2020-04-23T01:44:33Z
subscriptions.eventing.knative.dev                   2020-04-23T01:44:33Z
triggers.eventing.knative.dev                        2020-04-23T01:44:33Z


$ kubectl apply --selector networking.knative.dev/certificate-provider!=cert-manager \
  --filename https://github.com/knative/serving/releases/download/v0.7.1/serving.yaml


$ kubectl get pods -n knative-serving
NAME                                READY   STATUS    RESTARTS   AGE
activator-7d57675b9b-pf2qp          1/1     Running   0          47s
autoscaler-f6f5494ff-8xl6r          1/1     Running   0          47s
controller-866bd9f69d-9b82q         1/1     Running   0          47s
networking-istio-849bd546ff-snztb   1/1     Running   0          47s
webhook-7884ddd64f-sn2tx            1/1     Running   0          47s


$ kubectl apply --selector networking.knative.dev/certificate-provider!=cert-manager \
--filename https://github.com/knative/eventing/releases/download/v0.7.1/release.yaml


$ kubectl get pods -n knative-eventing
NAME                                           READY   STATUS    RESTARTS   AGE
eventing-controller-7b9f49d46c-xrfxz           1/1     Running   0          44s
eventing-webhook-d55865985-zdj6f               1/1     Running   0          43s
imc-controller-65cc458779-cntbk                1/1     Running   0          43s
imc-dispatcher-d5c5bf954-j2wm9                 1/1     Running   0          43s
in-memory-channel-controller-9cd44c656-hwdj5   1/1     Running   0          43s
in-memory-channel-dispatcher-98d7fcdf6-5fkf5   1/1     Running   0          43s
sources-controller-84b9cb88cd-6cwh5            1/1     Running   0          44s


Learn Knative Serving

$ kubectl get crd | grep serving
configurations.serving.knative.dev                   2020-04-23T00:28:05Z
revisions.serving.knative.dev                        2020-04-23T00:28:05Z
routes.serving.knative.dev                           2020-04-23T00:28:05Z
services.serving.knative.dev                         2020-04-23T00:28:05Z


Prepare and deploy a Knative Service

$ kubectl create namespace knativetutorial
$ kubectl config set-context --current --namespace=knativetutorial
$ cat <<EOF | kubectl apply -f -
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: greeter
spec:
  template:
    metadata:
      name: greeter-v1
      annotations:
        # disable istio-proxy injection
        sidecar.istio.io/inject: "false"
    spec:
      containers:
      - image: quay.io/rhdevelopers/knative-tutorial-greeter:quarkus
        livenessProbe:
          httpGet:
            path: /healthz
        readinessProbe:
          httpGet:
            path: /healthz
EOF


$ kubectl get all | grep in-memory
clusterchannelprovisioner.eventing.knative.dev/in-memory   True             20m


$ watch kubectl get pods


$ kubectl get deployment


$ kubectl exec -it greeter-v1-deployment-567fd49555-mxfkb /bin/bash

$ curl localhost:8080
$ curl localhost:8080
$ curl localhost:8080
$ curl localhost:8080
$ curl localhost:8080


$ kubectl get ksvc
NAME      URL                                          LATESTCREATED   LATESTREADY   READY   REASON
greeter   http://greeter.knativetutorial.example.com   greeter-v1      greeter-v1    True    

$ kubectl describe ksvc
$ kubectl describe ksvc greeter


$ IP_ADDRESS=$(minikube  --profile my-profile ip):$(kubectl get svc istio-ingressgateway --namespace istio-system --output 'jsonpath={.spec.ports[?(@.port==80)].nodePort}')

$ echo ${IP_ADDRESS}
192.168.99.124:30667


$ kubectl get ksvc
NAME      URL                                          LATESTCREATED   LATESTREADY   READY   REASON
greeter   http://greeter.knativetutorial.example.com   greeter-v1      greeter-v1    True    


$ while true; do curl $IP_ADDRESS -H 'Host:greeter.knativetutorial.example.com'; sleep .3; done


Поды поднялись!


Autoscaling HTTP

$ kubectl delete ksvc greeter

https://github.com/redhat-developer-demos/knative-tutorial/blob/release/0.7.x/04-scaling/knative/service-10.yaml


$ cat <<EOF | kubectl apply -f -
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: prime-generator
spec:
  template:
    metadata:
      name: prime-generator-v1
      annotations:
        # disable istio-proxy injection
        sidecar.istio.io/inject: "false"
        # Target 10 in-flight-requests per pod.
        autoscaling.knative.dev/target: "10"
    spec:
      containers:
      - image: quay.io/rhdevelopers/prime-generator:v27-quarkus
        livenessProbe:
          httpGet:
            path: /healthz
        readinessProbe:
          httpGet:
            path: /healthz
EOF


$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE prime-generator-v1-deployment 0/0 0 0 2m34s


Deployment поломалась. Ничего не работает.


$ kubectl get events


2m48s Warning InternalError route/prime-generator Operation cannot be fulfilled on clusteringresses.networking.internal.knative.dev “route-bb5458d0-8506-11ea-ad4a-0800277556f1”: the object has been modified; please apply your changes to the latest version and try again


$ IP_ADDRESS=$(minikube  --profile my-profile ip):$(kubectl get svc istio-ingressgateway --namespace istio-system --output 'jsonpath={.spec.ports[?(@.port==80)].nodePort}')

$ echo ${IP_ADDRESS}
192.168.99.124:30667


$ while true; do curl $IP_ADDRESS -H 'Host:greeter.knativetutorial.example.com'; sleep .3; done


$ kubectl delete ksvc prime-generator