@@ -4,3 +4,221 @@ unlisted: true
44---
55
66# Multi Cluster Setup
7+
8+ This guide walks you through step-by-step instructions for deploying OpenChoreo across multiple clusters. This deploys a ** Control Plane** , a ** Data Plane** , and optional ** Build** and ** Observability Planes** in separate clusters.
9+
10+ ## Prerequisites
11+
12+ - [ Docker] ( https://docs.docker.com/get-docker/ ) v20.10+ installed and running
13+ - [ Kind] ( https://kind.sigs.k8s.io/docs/user/quick-start/#installation ) v0.20+ installed
14+ - [ kubectl] ( https://kubernetes.io/docs/tasks/tools/ ) v1.32+ installed
15+ - [ Helm] ( https://helm.sh/docs/intro/install/ ) v3.12+ installed
16+
17+ ### Verify Prerequisites
18+
19+ Before proceeding, verify that all tools are installed and meet the minimum version requirements:
20+
21+ ``` bash
22+ # Check Docker (should be v20.10+)
23+ docker --version
24+
25+ # Check Kind (should be v0.20+)
26+ kind --version
27+
28+ # Check kubectl (should be v1.32+)
29+ kubectl version --client
30+
31+ # Check Helm (should be v3.12+)
32+ helm version --short
33+ ```
34+
35+ Make sure Docker is running:
36+
37+ ``` bash
38+ docker info
39+ ```
40+
41+ ### ** Step 1: Setup the Control Plane**
42+
43+ ** Create the Control Plane Cluster:**
44+ This command provisions a ` kind ` cluster that will host the control plane components.
45+
46+ ``` bash
47+ curl -s https://raw.githubusercontent.com/openchoreo/openchoreo/main/install/kind/multi-cluster-setup/kind-config-cp.yaml | kind create cluster --config=-
48+ ```
49+
50+ ** Install the Control Plane via Helm:**
51+
52+ ``` bash
53+ helm install control-plane oci://ghcr.io/openchoreo/helm-charts/openchoreo-control-plane \
54+ --create-namespace --namespace openchoreo-control-plane \
55+ --timeout=10m \
56+ --kube-context kind-openchoreo-cp
57+ ```
58+
59+ ** Verify the Installation:**
60+ Check that all pods in the ` openchoreo-control-plane ` namespace are running correctly.
61+
62+ ``` bash
63+ kubectl get pods -n openchoreo-control-plane
64+ ```
65+
66+ ---
67+
68+ ### ** Step 2: Setup the Data Plane**
69+
70+ ** Create the Data Plane Cluster:**
71+ Provision a separate ` kind ` cluster for the data plane.
72+
73+ ``` bash
74+ curl -s https://raw.githubusercontent.com/openchoreo/openchoreo/main/install/kind/multi-cluster-setup/kind-config-dp.yaml | kind create cluster --config=-
75+ ```
76+
77+
78+ ** Install Cilium CNI:**
79+ Install Cilium as the Container Network Interface (CNI). This will create the Cilium namespace automatically:
80+
81+ ``` bash
82+ helm install cilium oci://ghcr.io/openchoreo/helm-charts/cilium --create-namespace --namespace cilium --wait --kube-context kind-openchoreo-dp
83+ ```
84+ Wait for Cilium pods to be ready:
85+ ``` bash
86+ kubectl wait --for=condition=Ready pod -l k8s-app=cilium -n cilium --timeout=300s --context=kind-openchoreo-dp
87+ ```
88+ Verify that the nodes are now Ready:
89+ ``` bash
90+ kubectl get nodes --context=kind-openchoreo-dp
91+ ```
92+
93+ ** Install the Data Plane via Helm:**
94+ Deploy the data plane components. ` cert-manager ` is enabled to install cert-manager.
95+
96+ ``` bash
97+ helm install data-plane oci://ghcr.io/openchoreo/helm-charts/openchoreo-data-plane \
98+ --create-namespace --namespace openchoreo-data-plane \
99+ --timeout=10m \
100+ --set cert-manager.enabled=true \
101+ --set cert-manager.crds.enabled=true \
102+ --kube-context kind-openchoreo-dp
103+ ```
104+
105+ ``` bash
106+ kubectl get pods -n openchoreo-data-plane --context=kind-openchoreo-dp
107+ ```
108+
109+ ** Register the Data Plane:**
110+ Run the script to connect the newly created data plane to the control plane.
111+
112+ ``` bash
113+ bash -c " $( curl -s https://raw.githubusercontent.com/openchoreo/openchoreo/main/install/add-default-dataplane.sh) " -- --multi-cluster
114+ ```
115+
116+ ** Verify the DataPlane was created:**
117+ ``` bash
118+ kubectl get dataplane -n default
119+ ```
120+
121+ ### ** Step 3: Setup the Build Plane (Optional)**
122+
123+ ** Create the Build Plane Cluster:**
124+ Provision a separate ` kind ` cluster for the build plane.
125+
126+ ``` bash
127+ curl -s https://raw.githubusercontent.com/openchoreo/openchoreo/main/install/kind/multi-cluster-setup/kind-config-bp.yaml | kind create cluster --config=-
128+ ```
129+
130+ ** Install the Build Plane via Helm:**
131+ Deploy the build plane components. ` fluentBit ` is enabled to install Fluent Bit.
132+
133+ ``` bash
134+ helm install build-plane oci://ghcr.io/openchoreo/helm-charts/openchoreo-build-plane \
135+ --create-namespace --namespace openchoreo-build-plane \
136+ --timeout=10m \
137+ --kube-context kind-openchoreo-bp \
138+ --set fluentBit.enabled=true
139+ ```
140+
141+ ** Verify the Installation:**
142+ Wait for the components to be ready and check the pod statuses.
143+ ``` bash
144+ kubectl get pods -n openchoreo-build-plane
145+ ```
146+
147+ ** Register the Build Plane:**
148+ Connect the build plane to the control plane.
149+ ``` bash
150+ bash -c " $( curl -s https://raw.githubusercontent.com/openchoreo/openchoreo/main/install/add-build-plane.sh ) " -- --separate
151+ ```
152+
153+ Make sure to insert the ` build plane Kubernetes context ` , which should be changed to ` kind-openchoreo-bp ` .
154+
155+
156+ Verify that the BuildPlane was created:
157+ ``` bash
158+ kubectl get buildplane -n default
159+ ```
160+
161+ ### ** Step 4: Setup the Observability Plane (Optional)**
162+
163+ ** Create the Observability Plane Cluster:**
164+ Provision a separate ` kind ` cluster for the observability plane.
165+
166+ ``` bash
167+ curl -s https://raw.githubusercontent.com/openchoreo/openchoreo/main/install/kind/multi-cluster-setup/kind-config-op.yaml | kind create cluster --config=-
168+ ```
169+
170+ ** Install the Observability Plane via Helm:**
171+ Deploy the observability components.
172+
173+ ``` bash
174+ helm install observability-plane oci://ghcr.io/openchoreo/helm-charts/openchoreo-observability-plane \
175+ --create-namespace --namespace openchoreo-observability-plane \
176+ --timeout=10m \
177+ --kube-context kind-openchoreo-op
178+ ```
179+
180+ ** Verify the Installation:**
181+ Wait for all pods to become ready before proceeding.
182+
183+ ``` bash
184+ kubectl wait --for=condition=Ready pod --all -n openchoreo-observability-plane --timeout=600s
185+ ```
186+
187+ ** Configure build plane and data plane fluentbit:**
188+
189+ Host and port should be accessible from the data/build plane cluster; this connection will be used to publish telemetry to the observability plane.
190+
191+ ``` bash
192+ helm upgrade openchoreo-build-plane oci://ghcr.io/openchoreo/helm-charts/openchoreo-build-plane \
193+ --set fluentBit.config.opensearch.host=" openchoreo-op-control-plane" \
194+ --set fluentBit.config.opensearch.port=30920 \
195+ --kube-context kind-openchoreo-bp \
196+ --set fluentBit.enabled=true
197+ ```
198+
199+ ``` bash
200+ helm upgrade openchoreo-data-plane oci://ghcr.io/openchoreo/helm-charts/openchoreo-data-plane \
201+ --namespace openchoreo-data-plane \
202+ --set fluentBit.config.opensearch.host=" openchoreo-op-control-plane" \
203+ --set fluentBit.config.opensearch.port=30920 \
204+ --set cert-manager.enabled=false \
205+ --set cert-manager.crds.enabled=false \
206+ --kube-context kind-openchoreo-dp
207+ ```
208+
209+ Congratulations, you have successfully installed OpenChoreo in multiple clusters.
210+
211+ ``` bash
212+ # Delete the Kind cluster
213+ kind delete cluster --name openchoreo-cp
214+ kind delete cluster --name openchoreo-dp
215+ kind delete cluster --name openchoreo-bp
216+ kind delete cluster --name openchoreo-op
217+
218+ # Remove kubectl context (optional)
219+ kubectl config delete-context kind-openchoreo-cp
220+ kubectl config delete-context kind-openchoreo-bp
221+ kubectl config delete-context kind-openchoreo-dp
222+ kubectl config delete-context kind-openchoreo-op
223+
224+ ```
0 commit comments