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