1+ #! /bin/sh
2+
3+ export TUTORIAL_HOME=$( pwd) /../
4+ DNS_DOMAIN=nip.io
5+ KNATIVE_EVENTING_KAFKA_VERSION=v1.8.1
6+ KNATIVE_SERVING_VERSION=v1.8.3
7+ KNATIVE_EVENTING_VERSION=v1.8.5
8+ MINIKUBE_PROFILE=knativetutorial
9+ KOURIER_VERSION=v1.8.1
10+ STRIMZI_OP_VERSION=0.32.0
11+
12+ function confirm() {
13+ read -p " press enter to proceed or 'Ctrl+c' to cancel" -n 1 -r
14+ echo
15+ }
16+
17+ echo " This script automatically install and configure: Knative, Strimzi Kafka, Kourier Ingress, Contour Ingress Controller, Nexus and Camel-K on a Minikube Environment"
18+ confirm
19+
20+ echo
21+ echo " Install Knative Serving ($KNATIVE_SERVING_VERSION ) and Eventing ($KNATIVE_EVENTING_VERSION ) CRDs..."
22+ confirm
23+ kubectl apply \
24+ --filename https://github.com/knative/serving/releases/download/knative-$KNATIVE_SERVING_VERSION /serving-crds.yaml \
25+ --filename https://github.com/knative/eventing/releases/download/knative-$KNATIVE_EVENTING_VERSION /eventing-crds.yaml
26+
27+ echo
28+ echo " Serving CRDs"
29+ kubectl api-resources --api-group=' serving.knative.dev'
30+ echo
31+ echo " Messaging CRDs"
32+ kubectl api-resources --api-group=' messaging.knative.dev'
33+ echo
34+ echo " Eventing CRDs"
35+ kubectl api-resources --api-group=' eventing.knative.dev'
36+ echo
37+ echo " Sources CRDs"
38+ kubectl api-resources --api-group=' sources.knative.dev'
39+
40+ echo
41+ echo " ----"
42+ echo " Install Knative Serving ($KNATIVE_SERVING_VERSION )..."
43+ confirm
44+ kubectl apply \
45+ --filename https://github.com/knative/serving/releases/download/knative-$KNATIVE_SERVING_VERSION /serving-core.yaml
46+
47+ sleep 2
48+
49+ echo
50+ echo " Knative deploy status"
51+ kubectl rollout status deploy controller -n knative-serving
52+ kubectl rollout status deploy activator -n knative-serving
53+ kubectl rollout status deploy autoscaler -n knative-serving
54+ kubectl rollout status deploy webhook -n knative-serving
55+ kubectl get pods -n knative-serving
56+
57+ echo " ----"
58+ echo " Install Kourier Ingress Gateway ($KOURIER_VERSION )"
59+ confirm
60+ kubectl apply \
61+ --filename https://github.com/knative/net-kourier/releases/download/knative-$KOURIER_VERSION /kourier.yaml
62+
63+ sleep 2
64+
65+ echo
66+ echo " Kourier deployment status"
67+ kubectl rollout status deploy 3scale-kourier-control -n knative-serving
68+ kubectl rollout status deploy 3scale-kourier-gateway -n kourier-system
69+ kubectl get pods --all-namespaces -l ' app in(3scale-kourier-gateway,3scale-kourier-control)'
70+
71+ echo
72+ echo " configure Knative serving to use Kourier as the ingress by patching 'configmap/config-network'"
73+ kubectl patch configmap/config-network \
74+ -n knative-serving \
75+ --type merge \
76+ -p ' {"data":{"ingress.class":"kourier.ingress.networking.knative.dev"}}'
77+
78+ echo
79+ echo " ----"
80+ echo " Install and Configure Contour Ingress Controller"
81+ confirm
82+ kubectl apply \
83+ --filename https://projectcontour.io/quickstart/contour.yaml
84+
85+ sleep 2
86+ kubectl get pods -n projectcontour
87+
88+ echo
89+ echo " create an Ingress to Kourier Ingress Gateway..."
90+ cat << EOF | kubectl apply -n kourier-system -f -
91+ apiVersion: networking.k8s.io/v1
92+ kind: Ingress
93+ metadata:
94+ name: kourier-ingress
95+ namespace: kourier-system
96+ spec:
97+ rules:
98+ - http:
99+ paths:
100+ - path: /
101+ pathType: Prefix
102+ backend:
103+ service:
104+ name: kourier
105+ port:
106+ number: 80
107+ EOF
108+
109+ echo
110+ echo " Configure Knative to use the kourier-ingress Gateway"
111+ ksvc_domain=" \" data\" :{\" " $( minikube -p $MINIKUBE_PROFILE ip) " .$DNS_DOMAIN \" : \"\" }"
112+ kubectl patch configmap/config-domain \
113+ -n knative-serving \
114+ --type merge \
115+ -p " {$ksvc_domain }"
116+
117+ echo
118+ echo " ----"
119+ echo " Install Knative Eventing ($KNATIVE_EVENTING_VERSION ) resources"
120+ confirm
121+ kubectl apply \
122+ --filename \
123+ https://github.com/knative/eventing/releases/download/knative-$KNATIVE_EVENTING_VERSION /eventing-core.yaml \
124+ --filename \
125+ https://github.com/knative/eventing/releases/download/knative-$KNATIVE_EVENTING_VERSION /in-memory-channel.yaml \
126+ --filename \
127+ https://github.com/knative/eventing/releases/download/knative-$KNATIVE_EVENTING_VERSION /mt-channel-broker.yaml
128+
129+ echo
130+ echo " Knative Eventing deploy status"
131+ kubectl rollout status deploy eventing-controller -n knative-eventing
132+ kubectl rollout status deploy eventing-webhook -n knative-eventing
133+ kubectl rollout status deploy imc-controller -n knative-eventing
134+ kubectl rollout status deploy imc-dispatcher -n knative-eventing
135+ kubectl rollout status deploy mt-broker-controller -n knative-eventing
136+ kubectl rollout status deploy mt-broker-filter -n knative-eventing
137+ kubectl rollout status deploy mt-broker-filter -n knative-eventing
138+
139+ kubectl get pods -n knative-eventing
140+
141+ sleep 3
142+
143+ echo
144+ echo " ----"
145+ echo " Create Tutorial Namespace"
146+ confirm
147+ kubectl create namespace knativetutorial
148+ kubens knativetutorial
149+
150+ echo " Minikube Docker env"
151+ eval $( minikube docker-env)
152+
153+ echo
154+ echo " ----"
155+ echo " Install Apache Camel K"
156+ confirm
157+ echo
158+ echo " Configure Maven Settings pointing to a local Nexus Instance to be used by the Camel-K Operator..."
159+ kubectl create configmap \
160+ -n knativetutorial my-camel-k-maven-settings \
161+ --from-file=settings.xml=" $TUTORIAL_HOME /install/utils/camel-k-maven-settings.xml"
162+
163+ echo
164+ echo " Install Camel-K Operator..."
165+ kamel install \
166+ --namespace knativetutorial \
167+ --olm=false \
168+ --maven-cli-option=" -e, --no-transfer-progress, -Dstyle.color=never" \
169+ --maven-settings=" configmap:my-camel-k-maven-settings/settings.xml" \
170+ --wait
171+
172+ echo
173+ echo " ----"
174+ echo " Deploy Nexus"
175+ confirm
176+ kubectl apply -n knativetutorial -f $TUTORIAL_HOME /install/utils/nexus.yaml
177+
178+ sleep 10
179+ kubectl get -n knativetutorial pods
180+
181+ echo
182+ echo " Get nexus Admin pwd"
183+ export NEXUS_POD=$( kubectl -n knativetutorial get pods \
184+ -lapp=nexus -ojsonpath=' {.items[0].metadata.name}' )
185+ kubectl exec $NEXUS_POD -- cat /nexus-data/admin.password
186+
187+ minikube -p $MINIKUBE_PROFILE service -n knativetutorial nexus
188+
189+ echo
190+ echo " ----"
191+ echo " Deploy Kafka through Strimzi Operator ($STRIMZI_OP_VERSION )"
192+ confirm
193+ kubectl create namespace kafka
194+
195+ curl -L https://github.com/strimzi/strimzi-kafka-operator/releases/download/$STRIMZI_OP_VERSION /strimzi-cluster-operator-$STRIMZI_OP_VERSION .yaml \
196+ | sed ' s/namespace:.*/namespace: kafka/' \
197+ | kubectl apply -n kafka -f -
198+
199+ kubectl api-resources --api-group=' kafka.strimzi.io'
200+
201+ echo
202+ echo " create a Kafka Cluster"
203+ kubectl -n kafka apply -f $TUTORIAL_HOME /eventing/kafka-broker-my-cluster.yaml
204+
205+ kubectl get pods -n kafka
206+
207+ echo
208+ echo " Deploy Knative Eventing KafkaSource ($KNATIVE_EVENTING_KAFKA_VERSION )"
209+ kubectl apply -f https://github.com/knative-sandbox/eventing-kafka/releases/download/knative-$KNATIVE_EVENTING_KAFKA_VERSION /source.yaml
210+
211+ echo
212+ echo " deploy a Knative Kafka Channel"
213+ curl -L " https://github.com/knative-sandbox/eventing-kafka/releases/download/knative-$KNATIVE_EVENTING_KAFKA_VERSION /channel-consolidated.yaml" \
214+ | sed ' s/REPLACE_WITH_CLUSTER_URL/my-cluster-kafka-bootstrap.kafka:9092/' \
215+ | kubectl apply --filename -
216+
217+ kubectl get pods -n knative-eventing
218+ kn source list-types
219+
220+ echo
221+ echo " ----"
222+ echo " Using Kafka Channel as Default Knative Channel"
223+ kubectl apply -f $TUTORIAL_HOME /eventing/default-channel-config.yaml
0 commit comments