-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
118 lines (101 loc) · 5.58 KB
/
Makefile
File metadata and controls
118 lines (101 loc) · 5.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# Folders
LOCALBIN ?= $(shell pwd)/bin
# Dependencies
CERTMANAGER_VERSION ?= 1.10.0
CMCTL = $(LOCALBIN)/cmctl
OPENTELEMETRY_OPERATOR_VERSION ?= 0.146.0
JAEGER_OPERATOR_VERSION ?= 1.57.0
KUBE_RBAC_PROXY_IMAGE ?= quay.io/brancz/kube-rbac-proxy:v0.13.1
ISTIOCTL ?= $(LOCALBIN)/istioctl
ISTIO_VERSION ?= "1.22.0"
# Applications
REPO ?= ghcr.io/iblancasa
APP_IMG ?= $(REPO)/devconf-demo-app-1
APP2_IMG ?= $(REPO)/devconf-demo-app-2
APP3_IMG ?= $(REPO)/devconf-demo-app-3
APP4_IMG ?= $(REPO)/devconf-demo-app-4
APP5_IMG ?= $(REPO)/devconf-demo-app-5
help: ## Show help message
@printf "Kiali and distributed tracing tutorial\n"
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n"} /^[$$()% a-zA-Z_-]+:.*?##/ { printf " %-15s \t\t%s\n", $$1, $$2 } /^##@/ { printf "\n%s\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
################## Cluster management ###########################################################################################
.PHONY: start-cluster
start-cluster: ## Start kind cluster
kind create cluster --name=workshop --config=kind.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.1/deploy/static/provider/kind/deploy.yaml
.PHONY: clean
clean: ## Clean all the resources
kind delete cluster --name=workshop
rm -rf $(LOCALBIN)
################## Install dependencies #########################################################################################
.PHONY: dependencies
dependencies: ## Deploy all the dependencies in the cluster
dependencies: cert-manager opentelemetry-operator jaeger-operator kiali-operator
.PHONY: cert-manager
cert-manager: ## Deploy cert-manager
mkdir -p $(LOCALBIN)
@{ \
set -e ;\
if (`pwd`/bin/cmctl version | grep ${CERTMANAGER_VERSION}) > /dev/null 2>&1 ; then \
exit 0; \
fi ;\
TMP_DIR=$$(mktemp -d) ;\
curl -L -o $$TMP_DIR/cmctl.tar.gz https://github.com/jetstack/cert-manager/releases/download/v$(CERTMANAGER_VERSION)/cmctl-`go env GOOS`-`go env GOARCH`.tar.gz ;\
tar xzf $$TMP_DIR/cmctl.tar.gz -C $$TMP_DIR ;\
[ -d bin ] || mkdir bin ;\
mv $$TMP_DIR/cmctl $(CMCTL) ;\
rm -rf $$TMP_DIR ;\
}
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v${CERTMANAGER_VERSION}/cert-manager.yaml
$(CMCTL) check api --wait=5m
.PHONY: opentelemetry-operator
opentelemetry-operator: ## Deploy the OpenTelemetry operator
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/download/v$(OPENTELEMETRY_OPERATOR_VERSION)/opentelemetry-operator.yaml
kubectl -n opentelemetry-operator-system set image deployment/opentelemetry-operator-controller-manager kube-rbac-proxy=$(KUBE_RBAC_PROXY_IMAGE)
kubectl -n opentelemetry-operator-system rollout status deployment/opentelemetry-operator-controller-manager --timeout=180s
.PHONY: jaeger-operator
jaeger-operator: ## Deploy the Jaeger operator
kubectl create namespace observability 2>&1 | grep -v "already exists" || true
kubectl apply -f https://github.com/jaegertracing/jaeger-operator/releases/download/v$(JAEGER_OPERATOR_VERSION)/jaeger-operator.yaml
kubectl -n observability set image deployment/jaeger-operator kube-rbac-proxy=$(KUBE_RBAC_PROXY_IMAGE)
kubectl -n observability rollout status deployment/jaeger-operator --timeout=180s
################## Infrastructure management ####################################################################################
.PHONY: infra
infra: ## Deploy the needed infrastructure
infra: istio
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.22/samples/addons/prometheus.yaml
kubectl apply -f infra/otelcol.yaml
kubectl apply -f infra/jaeger.yaml
kubectl apply -f infra/kiali.yaml
.PHONY: istio
istio: ## Deploy istio
mkdir -p $(LOCALBIN)
curl -sLo $(LOCALBIN)/downloadIstio https://istio.io/downloadIstio
chmod +x $(LOCALBIN)/downloadIstio
ISTIO_VERSION=$(ISTIO_VERSION) $(LOCALBIN)/downloadIstio
rm -rf $(LOCALBIN)/istio-$(ISTIO_VERSION)
mv istio-$(ISTIO_VERSION) $(LOCALBIN)
$(LOCALBIN)/istio-$(ISTIO_VERSION)/bin/istioctl install --set profile=demo -y --set meshConfig.defaultConfig.tracing.zipkin.address=instance-collector.istio-system.svc.cluster.local:9411 --set "components.egressGateways[0].name=istio-egressgateway" --set "components.egressGateways[0].enabled=true"
.PHONY: kiali-operator
kiali-operator: ## Deploy the Kiali operator
helm repo add kiali https://kiali.org/helm-charts
helm install --namespace kiali-operator --create-namespace kiali-operator kiali/kiali-operator
################## Application management #######################################################################################
.PHONY: apps
apps: ## Build and push the demo applications images for linux/amd64 and linux/arm64
docker buildx create --use --name multiarch-builder || true
cd apps && docker buildx build --platform linux/amd64,linux/arm64 -t $(APP_IMG) --push app
cd apps && docker buildx build --platform linux/amd64,linux/arm64 -t $(APP2_IMG) --push app2
cd apps && docker buildx build --platform linux/amd64,linux/arm64 -t $(APP3_IMG) --push app3
cd apps && docker buildx build --platform linux/amd64,linux/arm64 -t $(APP4_IMG) --push app4
cd apps && docker buildx build --platform linux/amd64,linux/arm64 -t $(APP5_IMG) --push app5
.PHONY: deploy-apps
deploy-apps: ## Deploy the demo applications in the local cluster
kubectl apply -f apps/manifest.yaml
.PHONY: restart-apps
restart-apps: ## Restart the deployments
kubectl rollout restart deployment app1-v1 -n demo
kubectl rollout restart deployment app2-v1 -n demo
kubectl rollout restart deployment app3-v1 -n demo
kubectl rollout restart deployment app4-v1 -n demo
kubectl rollout restart deployment app5-v1 -n demo