BuildPiper Kubernetes Installation SOP

7 min read

BuildPiper
Kubernetes Installation
SOP v1.0

BuildPiper Kubernetes Installation #

Standard Operating Procedure — Document Version: 1.0
Effective Date: August 11, 2026
Target Audience: DevOps & System Admins

Installation at a Glance #

1. Excel Config

Customer fills the configuration Excel template with required parameters.

2. Chart Update

BuildPiper team updates values.yaml and loadbalancer-setup-values.yaml.

3. Package Delivery

BP team emails the zipped Helm chart with updated values to the customer admin.

4. Deploy Helm

Admin applies the Helm chart on the destination Kubernetes cluster.

1. Objective #

This document defines the standard operating procedure for installing BuildPiper on a Kubernetes cluster using Helm. The setup is configured for a non‑root user and follows a secure, repeatable process involving configuration via an Excel template, Helm chart deployment, and thorough post‑installation verification.

2. Supported OS & Hardware Specifications #

Component Requirement
Supported Operating Systems Ubuntu 18.04, 20.04, 22.04; RHEL 9
Kubernetes Cluster 1 Master + 2 Worker nodes, each with 8 Core CPU, 16 GB RAM
Driver Prerequisite EFS‑based CSI driver must be set up in EKS clusters. For on‑premises / LDC environments, use an alternative like Longhorn.

3. Supported Kubernetes Versions #

BuildPiper officially supports Kubernetes versions v1.25 through v1.33.

4. Prerequisites #

4.1 Managed Redis & MySQL #

The installation requires a managed Redis and MySQL instance. Ensure both are available and network-accessible from the Kubernetes cluster.

Component Version Command Supported Version
MySQL mysql --version MySQL Ver 8.0.45
Redis redis-server --version Redis server v=8.2.2

4.2 MySQL Mandatory Configuration #

Execute the following SQL statements on your MySQL instance:

SET GLOBAL general_log = 0;
SET GLOBAL general_log_file = '/var/lib/mysql/general.log';
SET GLOBAL tls_version = 'TLSv1.2';
SET GLOBAL max_connections = 400;
SET GLOBAL transaction_isolation = 'READ-COMMITTED';
SET GLOBAL sort_buffer_size = 8 * 1024 * 1024; -- 8 MB
SET GLOBAL wait_timeout = 86400;
SET GLOBAL interactive_timeout = 86400;

Execute the validation query below to confirm the applied settings:

SHOW VARIABLES WHERE Variable_name IN (
'general_log', 'general_log_file', 'tls_version',
'max_connections', 'transaction_isolation',
'sort_buffer_size', 'wait_timeout',
'interactive_timeout', 'default_authentication_plugin'
);

4.3 Redis Configuration #

Enable append‑only persistence on the Redis instance:

CONFIG SET appendonly yes

5. BuildPiper Setup Procedure (4‑Step Workflow) #

Step 1: Customer Configuration

Customer fills the configuration Excel file (BP_Installation_Helm_Values.xlsx) with required parameters.

Step 2: Chart Values Updating

BuildPiper team updates the Helm chart’s values.yaml and loadbalancer-setup-values.yaml files using those values.

Step 3: Package Delivery

BuildPiper team emails the zipped Helm chart along with updated values files to the customer’s admin team.

Step 4: Deployment Execution

Customer admin team applies the Helm chart on the destination Kubernetes cluster.

6. Helm Deployment Details #

6.1 Access the Cluster #

Set the environment variable pointing to your cluster kubeconfig:

export KUBECONFIG="<path_to_kubeconfig>"

6.2 Helm Install Command #

Execute the Helm installation command:

helm install bp <helm_files_directory> \
--set optimizedRun.firstTime=true \
--set optimizedRun.withPermission=true \
--namespace <namespace> \
-f <helm_files_directory>/values.yaml \
-f <helm_files_directory>/loadbalancer-setup-values.yaml \
--wait

  • <helm_files_directory> — Path where Helm chart files are unzipped.
  • <namespace> — Target dedicated namespace (e.g., bp).

6.3 Helm Upgrade Command (For Future Updates) #

Use the following command for future upgrades or configuration changes:

helm upgrade bp <helm_files_directory> \
--set optimizedRun.firstTime=true \
--set optimizedRun.withPermission=true \
--namespace <namespace> \
-f <helm_files_directory>/values.yaml \
-f <helm_files_directory>/loadbalancer-setup-values.yaml \
--wait

7. Configuration Values (from Excel Template) #

7.1 Database & Redis Configuration (Sheet: CustomerToShare) #

Key Example Value Value File Reference Description
Fernet Key ix-ztoyXCJlEXpDy8C14-uAg… loadbalancer-setup-values.yaml Encrypted DB credentials
DB username (encrypted string) loadbalancer-setup-values.yaml MySQL username
DB password (encrypted string) loadbalancer-setup-values.yaml MySQL password
Redis Host 100.65.224.34 loadbalancer-setup-values.yaml Redis endpoint
Mysql Host 100.65.224.38 loadbalancer-setup-values.yaml MySQL endpoint

7.2 SMTP Configuration (Sheet: CustomerToShare) #

Key Example Value Value File Reference Description
host 100.65.240.23 loadbalancer-setup-values.yaml SMTP server
port 25 loadbalancer-setup-values.yaml SMTP port
user Anonymous loadbalancer-setup-values.yaml SMTP username
password Anonymous loadbalancer-setup-values.yaml SMTP password

7.3 Cluster & NFS (Sheet: CustomerToShare) #

Key Example Value Value File Reference Description
CLUSTER‑NAME builpiper-poc loadbalancer-setup-values.yaml Cluster name (must match onboarding)
NFS IP details 103.127.30.16 loadbalancer-setup-values.yaml NFS server IP
Share Mount Point /data/nfs loadbalancer-setup-values.yaml NFS export path
File System ID fs-000xxxyyyzzz loadbalancer-setup-values.yaml EFS filesystem ID (AWS)

7.4 Service Account & Storage Class (Sheet: CustomerToShare) #

Key Example Value Value File Reference Description
Service Account name buildpiper-sa values.yaml Kubernetes service account
Storage Class name bp-sc values.yaml Storage class (reclaimpolicy-retain/delete)

7.5 General & BP Team Configuration (Sheet: OwnedbyBuildPiper) #

Key Example Value Value File Ref Filled By Description
publicapi_url http://10.130.0.2:30706 loadbalancer-setup-values.yaml BP Team Master node IP + NodePort
organisationName bp-airtel loadbalancer-setup-values.yaml BP Team Organisation identifier
secretKey (random string) loadbalancer-setup-values.yaml BP Team Internal encryption key
fernet key (generated via SOP) loadbalancer-setup-values.yaml BP Team Fernet key
BP Tags (deployapi) vindh-2.0.0_GA_hotfix7.1 values.yaml BP Team Image tag
BP Tags (frontend) vindh-2.0.0_GA_hotfix7.1 values.yaml BP Team Image tag
BP Tags (publicapi) vindh-2.0.0_GA_hotfix7.1 values.yaml BP Team Image tag
BP Tags (scheduleapi) vindh-2.0.0_GA_hotfix7.1 values.yaml BP Team Image tag
BP Tags (bp‑agent) vindh-2.0.0_GA_hotfix7.1 values.yaml BP Team Image tag
License Microservices 25 values.yaml BP Team Licensed microservices count
License Users 10 values.yaml BP Team Licensed users count
Start‑date today’s date values.yaml BP Team License start date
end‑date end of month values.yaml BP Team License end date
Concurrency 2 values.yaml BP Team Default pipeline concurrency
Registry registry.buildpiper.in loadbalancer-setup-values.yaml BP Team Container registry endpoint
username admin loadbalancer-setup-values.yaml BP Team Registry username
password (encrypted) loadbalancer-setup-values.yaml BP Team Registry password

SECURITY REQUIREMENT: Fernet key and DB credentials must be encrypted per the referenced SOP. Contact the BuildPiper team for the encryption procedure.

8. Verification Steps #

8.1 Verify Pod Status #

Check pod statuses in the installation namespace:

kubectl get pods -n <namespace>

Expected Outcome: All pods must show STATUS as Running and READY as 1/1.

NAME                                READY   STATUS    RESTARTS   AGE
bpagent-74b86b5868-szz2b            1/1     Running   0          20h
bpagent-74b86b5868-x1vvp            1/1     Running   0          19h
deplayout-57d8b5f87c-gpbx2          1/1     Running   0          20h
frontend-bc58c74f4-4f2vg            1/1     Running   0          20h
publicapi-6c7f4c4f4d-k6dkn          1/1     Running   0          20h
scheduleapi-79f98775d4-28pcd        1/1     Running   0          20h

8.2 (Optional) Validate Service & Public Endpoint Access #

1. Fetch NodePort services:

kubectl get svc -n <namespace> | grep NodePort

2. Get master node internal IP:

kubectl get nodes -o wide

3. Test port connectivity:

telnet <MASTER_NODE_IP> <SERVICE_PORT>

4. Check public API health endpoint:

curl <NODE_IP>:<PUBLICAPI_PORT>/api/v1/default/health/

8.3 Fetch Logs for Troubleshooting #

To stream logs from a specific pod for troubleshooting:

kubectl logs -f <pod_name> -n <namespace>
# Example: kubectl logs -f publicapi-6c7f4c4f4d-k6dkn -n bp

9. Generic Troubleshooting Tips #

  • Pods not starting: Run kubectl describe pod <pod_name> -n <namespace> to view detailed lifecycle events.
  • Image pull errors: Verify registry credentials and ensure image tags match loadbalancer-setup-values.yaml.
  • Database connectivity: Test connectivity to MySQL (3306) and Redis (6379) from a temporary pod inside the cluster.
  • Storage issues: Confirm EFS CSI driver / Longhorn is running and StorageClass is bound.
  • Invalid encryption: Ensure Fernet key and encrypted credentials match the expected string format without extra spaces.
  • Helm deployment errors: Confirm the target namespace exists (kubectl create namespace <namespace>) and RBAC permissions are applied.

10. References #

11. Conclusion #

By following this Standard Operating Procedure, system administrators can achieve a consistent and repeatable installation of BuildPiper on Kubernetes. For further assistance or escalation, collect full cluster logs and describe output before reaching out to BuildPiper support.

BuildPiper Documentation · Kubernetes Installation SOP

Version 1.0 · Effective: August 11, 2026