মূল বিষয়বস্তুতে যান

Create and Connect a Remote GKE Cluster to Data Lakehouse

ভূমিকা

Ilum empowers you to manage a powerful multi-cluster setup from a single, central control plane. While Ilum automates the deployment and configuration of its core components, setting up the underlying infrastructure requires precise coordination.

This guide provides a comprehensive walkthrough for setting up a multi-cluster architecture on গুগল কুবারনেটস ইঞ্জিন (জিকেই) . You will learn how to:

  1. Provision a central control plane (Master Cluster).
  2. Set up a dedicated execution environment (Remote Cluster).
  3. Establish secure communication between them using client certificates and ingress rules.

This guide walks you through the steps required to launch your first Ilum Job on a remote cluster. We use Google Kubernetes Engine (GKE) as an example, but you can follow the same flow with any Kubernetes distribution.

পূর্বশর্ত

Before starting the tutorial, make sure you have:

  1. Access to a Google Cloud project with billing enabled.
  2. কুবেক্টল installed and configured on your machine (version compatible with your GKE cluster).
  3. হেলম installed (v3+).
  4. Google Cloud CLI (gcloud) installed and initialized (you can run gcloud auth loginএবং gcloud config list without errors).
  5. gke-gcloud-auth-plugin installed and available in your PATH so that কুবেক্টল can authenticate to GKE clusters.
  6. Permissions in the target Google Cloud project to:
    • create and manage GKE clusters (e.g. Kubernetes Engine Cluster Admin or equivalent),
    • create and use Cloud Storage buckets if you plan to use GCS for data.

What you'll accomplish in this guide:

StepTaskPurpose
1 Create two GKE clustersSet up master (control plane) and remote (job execution)
2 Install Ilum on masterDeploy Ilum's core components
3 Set up authenticationCreate secure credentials for remote cluster access
4 Register remote clusterAdd cluster to Ilum's management interface
5 Configure networkingEnable communication between clusters
6 Run your first jobVerify the multi-cluster setup works

Step 1. Provision Master and Remote GKE Clusters

The foundation of a multi-cluster setup consists of two distinct entities:

  • Master Cluster: Hosts the Ilum control plane (UI, API, Scheduler).
  • Remote Cluster: dedicated environment where Ilum executes the Spark Jobs dispatched from the master.

একটি প্রকল্প তৈরি করুন

  • Open Google Cloud Console.
  • Click the Project selector in the top-left corner.
  • টিপুন New Project.
  • Enter a project name and (if applicable) select an Organization/Folder.
  • টিপুন তৈরি .
  • Select the newly created project in the project selector.

Enable Google Kubernetes Engine API

  • In the Console search bar, type কুবারনেটস ইঞ্জিন .
  • Open কুবারনেটস ইঞ্জিন .
  • টিপুন সক্ষম to enable the Google Kubernetes Engine API for the selected project.

Switch to the chosen project in gcloud

  • In the Console, open the project selector and copy the Project ID.
  • In your terminal, set this project as active:
Set Project
জিক্লাউড কনফিগারেশন সেট প্রকল্প PROJECT_ID 
  • (Optional) If you plan to create clusters in a specific region often, set a default region:
Set Default Region
gcloud config set compute/region europe-central2

This avoids errors requiring --region/ --zone.

একটি ক্লাস্টার তৈরি করুন

Create the master cluster first:

Create Master Cluster
জিক্লাউড কনটেইনার ক্লাস্টারগুলি মাস্টার-ক্লাস্টার তৈরি করে \ 
--machine-type=n1-standard-8 \
--num-nodes=1

Create the remote cluster with a different name:

Create Remote Cluster
gcloud container clusters create remote-cluster \
--machine-type=n1-standard-4 \
--num-nodes=1
important

Resource Requirements & Architecture:

Why two clusters? The master cluster runs Ilum's control plane (UI, API, scheduler). The remote cluster executes your Spark jobs. This separation allows independent scaling and multi-cluster management from one interface.

Sizing:

  • Master cluster: This example uses n1-standard-8 (8 vCPU, 30 GB RAM) for testing only. Minimum recommended: 12 vCPUs and 48 GB RAM (e.g., n1-standard-12). Production environments with many users need significantly more.
  • Remote cluster: This example uses n1-standard-4 (4 vCPU, 15 GB RAM) for testing only. Production workloads require larger machines (e.g., n1-standard-16+) and multiple nodes depending on your Spark job requirements.

Step 2. Install Ilum Control Plane on Master Cluster

Once your clusters are running, the next step is to deploy the Ilum platform on the master cluster.

kubectl এ মাস্টার ক্লাস্টার কনফিগারেশনে স্যুইচ করুন

Switch Context
# কুবেক্টল প্রসঙ্গগুলি পান এবং আপনার ক্লাস্টারের সাথে একটি সন্ধান করুন 
kubectl config get-contexts
# switch to it using this command
Kubectl কনফিগারেশন ব্যবহার-প্রসঙ্গ MASTER_CLUSTER_CONTEXT

নেমস্পেস তৈরি করুন এবং কুবেক্টলে এটিতে স্যুইচ করুন

Setup Namespace
Kubectl নামস্থান ইলুম তৈরি করুন 
Kubectl config set-context --current --namespace=ilum

Install Ilum using Helm charts:

ইলাম ইনস্টল করুন
রেপো যোগ করুন https://charts.ilum.cloud 
helm install ilum -n ilum ilum/ilum
নোট

What just happened? You've installed Ilum's control plane on the master cluster. You can now access Ilum's interface to manage jobs across multiple clusters.

Step 3. Configure Authentication for Remote Cluster Access

important

Goal: Generate secure credentials (client certificates) that authorize the Ilum control plane to deploy and manage resources on the দূরবর্তী ক্লাস্টার .

গুরুত্বপূর্ণ: All steps in this section must be performed while connected to the দূরবর্তী ক্লাস্টার (not the master cluster).

Why this is needed:

When you created the remote cluster with gcloud, it was automatically added to your kubeconfig with your Google Cloud account credentials. However, Ilum doesn't have access to your Google account.

Ilum needs its own authentication method - client certificates - to connect to and manage the remote cluster. This section creates those certificates.

StepActionPurpose
1 Create Client KeyGenerate private key for authentication
2 Create CSRRequest identity verification from cluster
3 Register & Approve CSRCluster admin validates and signs request
4 Get Signed CertificateRetrieve the "ID card" for Ilum
5 Grant Admin PermissionsAuthorize Ilum to manage cluster resources
ফলাফল Ilum can securely manage the cluster

This is similar to how কুবেক্টল authenticates to clusters, but we're doing it programmatically for Ilum.

টিপ

Before you start: Make sure you're connected to the দূরবর্তী ক্লাস্টার context:

Switch to Remote Context
kubectl config use-context gke_<your-project>_<region>_remote-cluster

You can verify with: kubectl config current-context

Step 3.1: Create a Client Key

What we're doing: Generating a private key that will be used for authentication.

First, create a dedicated directory for the certificates and work there:

Create Workspace
mkdir -p ~/remote-cluster
cd ~/remote-cluster

Now generate the private key:

Generate Private Key
openssl genpkey -algorithm RSA -out client.key 
danger

Security: This private key is like a password. Keep client.key secure and never commit it to version control.

Step 3.2: Create Certificate Request

What we're doing: Creating a Certificate Signing Request (CSR) that asks the remote cluster to verify and sign our identity.

প্রতিস্থাপন আমার ইউজার with the username of your choice:

Create CSR
openssl req -new-key client.key -out csr.csr -subj "/CN=myuser" 
টিপ

What is a CSR? A Certificate Signing Request asks the Kubernetes cluster to create a signed certificate for your user. The cluster will verify and sign it, creating a trusted identity.

Step 3.3: Encode the CSR

What we're doing: Converting the CSR to base64 format, which is required by Kubernetes.

Encode CSR
বিড়াল csr.csr | বেস৬৪ | tr -d '\n' 

Copy the output - you'll need it in the next step.

Step 3.4: Register CSR in Kubernetes

What we're doing: Submitting the CSR to the remote cluster for approval.

তৈরি csr.yaml (replace আমার ইউজার and paste your encoded CSR):

csr.yaml
apiVersion : certificates.k8s.io/v1 
প্রকার : সার্টিফিকেটস্বাক্ষর করার অনুরোধ
মেটাডেটা :
নাম : আমার ইউজার # Replace with your username
স্পেসিফিকেশন :
অনুরোধ : <paste your base64 encoded CSR here>
স্বাক্ষরকারীনাম : kubernetes.io/kube - এপিআইসার্ভার - ক্লায়েন্ট
ব্যবহার :
- ক্লায়েন্ট অথ

Apply the CSR to the দূরবর্তী ক্লাস্টার :

Register CSR
Kubectl Apply -f csr.yaml 

Step 3.5: Approve and Retrieve the Certificate

What we're doing: As cluster admin, we approve our own CSR and retrieve the signed certificate.

Approve the CSR:

Approve CSR
কুবেক্টল সার্টিফিকেট মাইইউজার অনুমোদন 

Retrieve the signed certificate:

Retrieve Certificate
Kubectl get CSR myuser -o jsonpath='{.status.certificate}' | Base64 --decode > client.crt 
নোট

What happened? You've registered your certificate request with Kubernetes, approved it (as cluster admin), and retrieved the signed certificate. This certificate + private key pair is now your authentication credential for the remote cluster.

Step 3.6: Get CA Certificate

What we're doing: Extracting the cluster's CA certificate. This will be needed for the optional test in the next section, and later in Step 4 when adding the cluster to Ilum.

Get and save the CA certificate:

Get CA Certificate
kubectl config view --minify --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 --decode > ca.crt

Verify the certificate was saved correctly:

Verify CA Certificate
openssl x509 -in ca.crt -text -noout | head -n 5
টিপ

Why do we need this?

  • CA Certificate: Verifies the cluster's identity (prevents man-in-the-middle attacks)
  • Flags: --minify gets only current context, --raw gets actual data instead of file paths

Step 3.7: Grant Permissions with Role Binding

What we're doing: Giving the certificate user (myuser) admin permissions on the remote cluster.

তৈরি রোলবাইন্ডিং.ইয়ামল :

apiVersion : rbac.authorization.k8s.io/v1 
প্রকার : ClusterRoleBinding
মেটাডেটা :
নাম : আমার ইউজার - অ্যাডমিন - বাঁধাই
বিষয়শ্রেণী :
- প্রকার : ব্যবহারকারী
নাম : আমার ইউজার # Match your username
এপিআইগ্রুপ : rbac.authorization.k8s.io
ভূমিকারেফ :
প্রকার : ক্লাস্টাররোল
নাম : ক্লাস্টার - অ্যাডমিন
এপিআইগ্রুপ : rbac.authorization.k8s.io

Apply the role binding to the দূরবর্তী ক্লাস্টার :

Apply Role Binding
Kubectl apply -f rolebinding.yaml 
সতর্কীকরণ

Security: We're granting cluster-admin for simplicity. In production, create a custom role with only the permissions Ilum needs:

  • Create/delete pods, services, configmaps
  • Read secrets
  • Manage persistent volumes

Step 3.8: Configure Service Account Permissions

What we're doing: Granting permissions to the ServiceAccount that Spark pods will use.

important

What is a Service Account? It's the Kubernetes equivalent of a user for pods. Spark driver pods use it to create executor pods and manage resources in the cluster.

By default, pods use the ডিফল্ট ServiceAccount in their namespace, but it doesn't have sufficient privileges to create other pods.

তৈরি sa_role_binding.ইয়ামল :

sa_role_binding.ইয়ামল
apiVersion : rbac.authorization.k8s.io/v1 
প্রকার : ClusterRoleBinding
মেটাডেটা :
নাম : ইলুম - ডিফল্ট - অ্যাডমিন - বাঁধাই
ভূমিকারেফ :
এপিআইগ্রুপ : rbac.authorization.k8s.io
প্রকার : ক্লাস্টাররোল
নাম : ক্লাস্টার - অ্যাডমিন
বিষয়শ্রেণী :
- প্রকার : ServiceAccount
নাম : ডিফল্ট
নামস্থান : ইলুম # Namespace where Spark jobs will run

Apply the role binding to the দূরবর্তী ক্লাস্টার :

Apply SA Role Binding
Kubectl Apply -f sa_role_binding.yaml 
সতর্কীকরণ

Production Security: We're granting cluster-admin to the default ServiceAccount for simplicity. In production:

  1. Create a dedicated ServiceAccount (e.g., spark-driver) with minimal permissions
  2. Specify it in your cluster configuration:
    spark.kubernetes.authenticate.driver.serviceAccountName=spark-driver
  3. Grant only the permissions needed: create/delete pods, read configmaps/secrets, etc.

(Optional) Test the Client Certificates

টিপ

Why this step? This optional step verifies that the certificates work correctly before we give them to Ilum in Step 4.

We'll create a temporary kubectl context that uses the certificates (instead of your Google Cloud credentials) to confirm they have the correct permissions.

1. Verify certificates are in the directory:

All certificate files should already be in ~/remote-cluster/ from the previous steps:

List Workspace Content
ls ~/remote-cluster/
# You should see: ca.crt client.crt client.key csr.csr csr.yaml

2. Get your remote cluster name:

Get Cluster Name
kubectl config view -o jsonpath='{.clusters[*].name}' | tr ' ' '\n' | grep remote

You should see something like: gke_my-project_europe-central2_remote-cluster

Copy this cluster name.

3. Add the certificate-based user to kubectl:

Set Credentials
kubectl config set-credentials myuser-cert \
--client-certificate=$HOME/remote-cluster/client.crt \
--client-key=$HOME/remote-cluster/client.key

This creates a new user in your kubeconfig that uses certificates instead of your Google account.

4. Create a test context:

Set Context
kubectl config set-context test-remote-certs \
--cluster=<paste-your-remote-cluster-name-here> \
--namespace=default \
--user=myuser-cert

প্রতিস্থাপন <paste-your-remote-cluster-name-here> with the cluster name from step 2.

5. Test the certificate-based authentication:

Test Authentication
kubectl config use-context test-remote-certs
কুবেক্টল শুঁটি পান

Expected output:

ডিফল্ট নামস্থানে কোনো সংস্থান খুঁজে পাওয়া যায়নি। 

If you see this (or a list of pods), the certificates work! ✅

6. Switch back to your normal context:

Revert Context
# Find your original context
kubectl config get-contexts

# Switch back (replace with your actual context name)
kubectl config use-context gke_<your-project>_<region>_remote-cluster
নোট

What we just verified: The client certificates can successfully authenticate to the remote cluster with admin permissions. In Step 4, we'll provide these same certificates to Ilum so it can manage the cluster.


Step 4. Register the Remote Cluster in Ilum UI

With your certificates generated and permissions granted, you are now ready to connect the remote cluster to the Ilum control plane.

What you'll provide: All the credentials and connection details you created in Step 3:

ItemFile/ValuePurpose
CA Certificateসি.সি.আর.টি Verifies cluster identity
Client Certificateক্লায়েন্ট.সিআরটি Your authentication credential
Client Keyclient.keyPrivate key for authentication
সার্ভার URL From kubectlCluster API endpoint
Usernameআমার ইউজার User identity

Access Ilum UI

Before you can add the remote cluster to Ilum, you need to access the Ilum web interface.

1. Switch to the master cluster context:

Switch Context
kubectl config use-context gke_<your-project>_<region>_master-cluster

You can verify with: kubectl config current-context

2. Set up port forwarding to Ilum UI:

Port Forward UI
kubectl port-forward -n ilum svc/ilum-ui 9777:9777

Keep this terminal window open - it needs to run continuously.

3. Open Ilum in your browser:

Open http://localhost:9777 in your web browser.

4. Log in:

  • Username: অ্যাডমিন
  • Password: অ্যাডমিন

Now you're ready to add the remote cluster to Ilum!


Demo: Adding a Kubernetes Cluster

পূর্ণ স্ক্রিনে সহায়িকা

ক্লাস্টার তৈরির পৃষ্ঠায় যান

  • ওয়ার্কলোডে ক্লাস্টার বিভাগে যান
  • টিপুন নতুন ক্লাস্টার বোতাম

সাধারণ সেটিংস নির্দিষ্টভাবে উল্লেখ করুন:

  • আপনি যে নাম এবং বিবরণ চান তা চয়ন করুন।
  • এতে ক্লাস্টারের প্রকার সেট করুন কুবেরনেটস
  • একটি স্পার্ক সংস্করণ চয়ন করুন

স্পার্ক সংস্করণটি স্পার্ক কাজের জন্য একটি চিত্র নির্বাচন করে নির্দিষ্ট করা হয়েছে।

ইলুমের নিজস্ব চিত্রগুলির ব্যবহার প্রয়োজন, যার মধ্যে প্রাক-ইনস্টল করা সমস্ত প্রয়োজনীয় নির্ভরতা অন্তর্ভুক্ত রয়েছে।

এখানে সমস্ত উপলব্ধ চিত্রের একটি তালিকা রয়েছে:

Ilum Spark Versions Selection Screen

স্পার্ক কনফিগারেশন নির্দিষ্টভাবে উল্লেখ করুন

ক্লাস্টার স্তরে আপনি যে স্পার্ক কনফিগারেশনগুলি নির্দিষ্ট করেন তা সেই ক্লাস্টারে মোতায়েন করা প্রতিটি পৃথক আইলাম কাজে প্রয়োগ করা হবে।

আপনি যদি পুনরাবৃত্তি কনফিগারেশন এড়াতে চান তবে এটি কার্যকর হতে পারে। উদাহরণস্বরূপ, আপনি যদি আইসবার্গকে আপনার স্পার্ক ক্যাটালগ হিসাবে ব্যবহার করেন তবে আপনি এটি ক্লাস্টার স্তরে একবার কনফিগার করতে পারেন এবং তারপরে এই ক্লাস্টারে মোতায়েন করা সমস্ত ইলাম কাজ স্বয়ংক্রিয়ভাবে এই কনফিগারেশনগুলি ব্যবহার করবে।

Important: Set the namespace for Spark jobs

এতে প্যারামিটার section, add:

spark.kubernetes.namespace: ilum
নোট

This ensures all Spark jobs run in the ইলুম namespace where you created the external services (ilum-core, ilum-grpc, ilum-minio) in Step 5. Without this, jobs would run in ডিফল্ট namespace and couldn't connect to master cluster services.

স্টোরেজ যোগ করুন

Default cluster storage will be used by Ilum to store all the files required to run Ilum Jobs both provided by user and by Ilum itself.

You can choose any type of storage: এস 3 , জিসিএস , ওয়াসবস , এইচডিএফএস .

টিপ

For detailed instructions on setting up storage (especially GCS), see the স্টোরেজ তৈরি করুন guide.

Quick setup in the UI:

  • ক্লিক করুন "স্টোরেজ যোগ করুন" বোতাম
  • Specify the name and choose the storage type (S3, GCS, etc.)
  • চয়ন স্পার্ক বালতি - ইলাম জবস ফাইলগুলি সংরক্ষণ করতে ব্যবহৃত প্রধান বালতি
  • চয়ন ডাটা বাকেট - আপনি যদি ইলাম টেবিল স্পার্ক ফর্ম্যাট ব্যবহার করেন তবে প্রয়োজন
  • Specify storage endpoint and credentials
  • ক্লিক করুন "জমা দিন" বোতাম

আপনি যে কোনও সংখ্যক স্টোরেজ যুক্ত করতে পারেন এবং ইলাম জবস সেগুলির প্রত্যেকটি ব্যবহার করার জন্য কনফিগার করা হবে।

কুবারনেটস বিভাগে যান এবং কুবারনেটস কনফিগারেশন নির্দিষ্ট করুন

এখানে, আমরা আমাদের কুবারনেটস ক্লাস্টারের সাথে সংযোগ স্থাপনের জন্য সমস্ত প্রয়োজনীয় বিবরণ সহ ইলুম সরবরাহ করি। প্রক্রিয়াটি কুবেক্টল সরঞ্জামের মাধ্যমে ক্লাস্টারের সাথে সংযোগ স্থাপনের অনুরূপ, তবে এখানে এটি ইউআই এর মাধ্যমে করা হয়।

You will need to provide the following:

FieldWhat to provideFile location
UrlCluster API endpoint (text field)⚠️ Switch to remote cluster first, then: kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
CaCertUpload CA certificate file~/remote-cluster/ca.crt (from Step 3.6)
ClientKeyUpload client private key file~/remote-cluster/client.key (from Step 3.1)
ClientCertUpload client certificate file~/remote-cluster/client.crt (from Step 3.5)
UsernameUsername (text field)আমার ইউজার (or whatever you used in Step 3.2)

Once you have specified these items, Ilum will be able to access your Kubernetes cluster.

উপরন্তু, আপনি করতে পারেন:

  • একটি প্রয়োজন কুবারনেটস কনফিগার করুন পাসওয়ার্ড আপনার ব্যবহারকারীর জন্য এই ক্ষেত্রে, আপনাকে ইউআইতে এখানে পাসওয়ার্ড নির্দিষ্ট করতে হবে।
  • একটি যোগ করুন পাসফ্রেজ ক্লায়েন্ট কী তৈরি করার সময়। আপনি যদি এটি করেন তবে আপনাকে ইউআইতে এখানে পাসফ্রেজটি নির্দিষ্ট করতে হবে।
  • নির্দিষ্ট করুন কী অ্যালগরিদম client.key ব্যবহৃত। এটি বাধ্যতামূলক নয়, কারণ এই তথ্যটি সাধারণত কীটির মধ্যেই সংরক্ষণ করা হয়। যাইহোক, এমন কিছু ক্ষেত্রে থাকতে পারে যেখানে আপনাকে এটি স্পষ্টভাবে সংজ্ঞায়িত করতে হবে।

অবশেষে, আপনি ক্লিক করতে পারেন জমা একটি ক্লাস্টার যোগ করার জন্য বোতাম।


অবশেষে, আপনি ক্লিক করতে পারেন জমা একটি ক্লাস্টার যোগ করার জন্য বোতাম।

Step 5. Configure Multi-Cluster Networking

সতর্কীকরণ

The Challenge: While Ilum can now dispatch jobs to the remote cluster, those jobs need a way to report their status, logs, and metrics back to the master cluster.

Why jobs need to communicate:

ComponentActionTarget Serviceঅবস্থান
স্পার্ক জবস Send status updatesIlum Core (gRPC)Master Cluster
স্পার্ক জবস Send metrics & logsMinIO Event LogMaster Cluster
Scheduled JobsTrigger new jobsইলাম কোর Master Cluster

The Solution: Expose Ilum's services from the master cluster and create DNS aliases in the remote cluster.

Step 5.1: Configure Firewall

প্রথমত, আপনাকে আপনার জিকেই মাস্টার-ক্লাস্টারে আগত ট্র্যাফিকের অনুমতি দিতে হবে। গুগল ক্লাউড প্রজেক্ট, ট্রাফিক অ্যাক্সেস তার ফায়ারওয়াল দ্বারা পরিচালিত হয়। ফায়ারওয়াল নিয়ম দ্বারা পরিচালনা করা যেতে পারে। রিমোট-ক্লাস্টারকে মাস্টার-ক্লাস্টার পরিষেবাগুলি অ্যাক্সেস করার অনুমতি দেওয়ার জন্য, আমাদের এই নিয়মটি যুক্ত করতে হবে আমাদের মাস্টার-ক্লাস্টারের প্রকল্প:

Create Firewall Rule
জিক্লাউড কম্পিউট ফায়ারওয়াল-নিয়ম অনুমতি-প্রবেশ-ট্র্যাফিক তৈরি করুন \ 
--নেটওয়ার্ক ডিফল্ট \
--দিক ঢুকিয়ে \
--অ্যাকশন অ্যালাউ \
--নিয়ম টিসিপি: 80, টিসিপি: 443 \
--উৎস-রেঞ্জ 0.0.0.0/0 \
--description "Allow HTTP/HTTPS"
danger

Security Warning: --source-ranges 0.0.0.0/0 allows traffic from anywhere. In production, restrict this to your remote cluster's IP range:

--source-ranges 10.0.0.0/8  # Example: your cluster's CIDR

Step 5.2: Expose Services from Master Cluster

নোট

What is LoadBalancer? It's a Kubernetes service type that provisions a public IP address, making the service accessible from outside the cluster (including from your remote cluster).

আপনাকে মাস্টার ক্লাস্টারের পরিষেবাগুলি বাইরের বিশ্বের কাছে প্রকাশ করতে হবে। এটি অর্জন করতে, তাদের ধরণটি লোডব্যালেন্সারে পরিবর্তন করুন। ইলাম হেলম কনফিগারেশন ব্যবহার করে এই প্রক্রিয়াটিকে সহজবোধ্য করে তোলে।

To expose Ilum Core, gRPC, and MinIO to the outside world, run the following command in your terminal:

Expose Services
helm upgrade ilum -n ilum ilum/ilum \
--set ilum-core.service.type="LoadBalancer" \
--set ilum-core.grpc.service.type="LoadBalancer" \
--set minio.service.type="LoadBalancer" \
--পুনঃব্যবহার-মান

এর পরে আপনার কয়েক মিনিট অপেক্ষা করা উচিত এবং তারপরে চালিয়ে আপনার পরিষেবাগুলি পরীক্ষা করা উচিত

Check Services
কুবেক্টল সেবা পায় 

এটি দেখতে:

GKE LoadBalancer Service Configuration showing External IPs

Here you can notice the ilum-core, ilum-grpc and minio services changed their type to LoadBalancer and got public IP. Now you can go to http://<public-ip>:9888 / এপিআই / ভি 1 / গ্রুপ সবকিছু ঠিক আছে কিনা তা পরীক্ষা করার জন্য।

Step 5.3: Create External Services in Remote Cluster

টিপ

What is ExternalName? It creates a local DNS alias in the remote cluster. When a job tries to connect to ইলুম-কোর:9888 , Kubernetes redirects it to the public IP. Jobs use familiar service names as if everything was in one cluster.

Switch to remote cluster context:

Before creating external services, make sure you're working on the দূরবর্তী ক্লাস্টার :

Switch to Remote Cluster
kubectl config use-context gke_<your-project>_<region>_remote-cluster

তৈরি external_services.ইয়ামল in the remote cluster:

নোট

Use the EXTERNAL-IP addresses from the কুবেক্টল সেবা পায় output in your master cluster (the public IPs shown in the screenshot above). Replace the placeholders below with these actual IP addresses.

external_services.ইয়ামল
apiVersion : v1 
প্রকার : সেবা
মেটাডেটা :
নাম : ইলুম - কোর
নামস্থান : ইলুম # Must match the namespace where jobs will run
স্পেসিফিকেশন :
টাইপ : বহিরাগত নাম
বহিরাগত নাম : 34.118.72.123 # Replace with actual EXTERNAL-IP from master cluster
পোর্ট :
- পোর্ট : 9888
টার্গেট পোর্ট : 9888

---
apiVersion : v1
প্রকার : সেবা
মেটাডেটা :
নাম : ইলুম - জিআরপিসি
নামস্থান : ইলুম # Must match the namespace where jobs will run
স্পেসিফিকেশন :
টাইপ : বহিরাগত নাম
বহিরাগত নাম : 34.118.72.124 # Replace with actual EXTERNAL-IP from master cluster
পোর্ট :
- পোর্ট : 9999
টার্গেট পোর্ট : 9999

---
apiVersion : v1
প্রকার : সেবা
মেটাডেটা :
নাম : ইলুম - মিনিও
নামস্থান : ইলুম # Must match the namespace where jobs will run
স্পেসিফিকেশন :
টাইপ : বহিরাগত নাম
বহিরাগত নাম : 34.118.72.125 # Replace with actual EXTERNAL-IP from master cluster
পোর্ট :
- পোর্ট : 9000
টার্গেট পোর্ট : 9000
important

Before applying:

  1. Replace the example IPs (34.118.72.123, etc.) with your actual EXTERNAL-IP addressesথেকে কুবেক্টল সেবা পায় in the master cluster
  2. Make sure the namespace: ilum matches the namespace where your Spark jobs will run in the remote cluster
  3. If you haven't created the ইলুম namespace in the remote cluster yet, create it first:
    Create Namespace
    Kubectl নামস্থান ইলুম তৈরি করুন 

Apply the external services:

Apply External Services
kubectl apply -f external_services.yaml
নোট

Multi-Cluster Bridge Complete: Jobs running on the remote cluster can now reach Ilum's services on the master cluster using familiar service names (ilum-core, ilum-grpc, ilum-minio), even though they're actually connecting over the internet via public IPs.

Components in Multi-Cluster Architecture

Components compatible with multi-cluster (with additional networking):

ComponentPurposeRequires Exposure
মৌচাক মেটাস্টোর Metadata management for tables✅ Yes
মার্কেজ Data lineage tracking✅ Yes
ইতিহাস সার্ভার Spark application history✅ Yes
গ্রাফাইট Metrics collection✅ Yes

Components restricted to single-cluster:

Componentকারণে
কিউব প্রমিথিউস স্ট্যাক Prometheus needs direct pod access for metrics scraping. Challenging with dynamic pods across clusters.
লোকি এবং প্রমটেল Promtail collects logs similarly to Prometheus. Same multi-cluster limitations.
তথ্য

All other Ilum services not listed above are cluster-independent and work in both single- and multi-cluster setups.


Step 6. Verify the Multi-Cluster Setup

The final step is to validate your configuration by running a real Spark job on the remote cluster.

Step 1: Access Ilum UI

  1. Switch to master cluster context:

    kubectl config use-context gke_<your-project>_<region>_master-cluster
  2. Set up port-forwarding:

    kubectl port-forward -n ilum svc/ilum-ui 9777:9777

    Keep this terminal window open.

  3. Open Ilum in browser:

    • Navigate to http://localhost:9777
    • Login with default credentials: অ্যাডমিন:অ্যাডমিন

Step 2: Create a Test Job

  1. Navigate to Jobs section in Ilum UI

  2. Click "New Job +"বোতাম

  3. Configure the job:

    • নাম: RemoteClusterTest
    • Job Type: Spark Job
    • Cluster: Select your দূরবর্তী ক্লাস্টার (not master)
    • শ্রেণী: org.apache.spark.examples.SparkPi
    • Language: স্কালা
  4. Add Resources:

  5. Submit the job

Step 3: Verify Execution

If everything is configured correctly:

Job starts successfully - Pods are created in the remote cluster

Logs appear - You can see Spark initialization and execution logs

Job completes - Final output shows: Pi is roughly 3.14...

Check remote cluster pods:

Check Remote Pods
kubectl config use-context gke_<your-project>_<region>_remote-cluster
Kubectl get pods -n ilum

You should see Spark driver and executor pods running or completed.

টিপ

For detailed job configuration options, see the Run Simple Spark Job guide.


Troubleshooting & FAQ

Here are solutions to common issues you might encounter when connecting a remote GKE cluster.

Why is my Spark Job stuck in "Pending" state?

This usually happens if the remote cluster lacks resources or can't pull images.

  • Check Resources: Ensure your node pool has enough CPU/RAM.
  • Check Events: Run kubectl get events -n ilum on the remote cluster to see scheduling errors.
Why can't the remote cluster connect to Ilum Core?

If the job runs but fails to report status:

  • Verify Firewall: Ensure the master cluster's firewall allows ingress on ports 9888 (Core), 9999 (gRPC), and 9000 (MinIO).
  • Check DNS: Verify the বহিরাগত নাম services in the remote cluster resolve to the master's public IP.
Can I use a private GKE cluster?

Yes, but you will need to configure VPC Peering or a VPN between the master and remote networks instead of using public LoadBalancers.


পরবর্তী পদক্ষেপ

Congratulations! You've successfully set up a robust multi-cluster Ilum environment. You can now:

  1. Deploy Spark jobs to your remote cluster from the Ilum UI
  2. Monitor job execution across all clusters from one interface
  3. Scale horizontally by adding more remote clusters using the same process
  4. Optimize costs by using different machine types for different workloads
important

Production Checklist:

  • Restrict firewall rules to specific IP ranges
  • Create custom RBAC roles instead of cluster-admin
  • Set up TLS certificates for LoadBalancer services
  • Configure resource quotas and limits
  • সক্ষম monitoring and alerting
  • Document your cluster configurations