Skip to main content

Partha Agent Kubernetes Helm Chart

Partha Host Agents can be installed in Kubernetes Cluster environments using Helm Charts.

The Partha Host Agent is installed as a Daemonset as it needs to be installed on each host (node).

Prerequisites

  • Kubernetes version 1.19+
  • kubectl command version 1.19+
  • Helm version 3.2.0+
  • Linux kernel version 4.4+

Requirement of Kernel Headers for older kernels

The Partha Agent container requires Kernel Headers package to be installed on the base host for eBPF support on older kernels.

Older Distributions where Kernel Headers package needed

  • Ubuntu 20 and below
  • Debian 11 and below
  • RHEL, CentOS, Rocky Linux 8
  • Amazon Linux 1 and 2
  • Fedora Linux 35 and below

On Google Container Optimized OS (COS) (used in GKE environments), the partha container will itself download the currently running Kernel's Headers.

Newer Distributions include eBPF CO-RE BTF (BPF Type Format) Support and do not require Kernel Headers for eBPF based applications.

The Partha Helm Chart includes a parameter partha_config.install_kern_headers which, if enabled, the Partha container itself will try installing the Kernel Headers package to the base OS. The parameter is disabled by default as on enabling this, the container may make changes to the base OS.

Please refer to Kernel Headers Installation for instructions on installing Kernel Headers directly on the base OS.

Security Requirements

The Partha container will need to run as a priviliged container as it needs Linux Capabilities beyond the standard capabilities provided by the container runtime.

Also, the Partha pod will need to run with hostPID and hostNetwork set to true as Partha needs to run in the Host Network and PID namespaces.

For Kubernetes versions 1.25+, users may need to enable the priviliged Partha container by enabling the Pod Security Admission for the Partha pod Namespace if priviliged pods are set to be rejected.

The command to enable this is shown below. This creates the gyeeta namespace and allows priviliged containers. The commands below are included in the Install Instructions section.

# Label namespace gyeeta so as to allow privileged containers
kubectl create ns gyeeta 2> /dev/null || :
kubectl label --overwrite ns gyeeta \
pod-security.kubernetes.io/enforce=privileged \
pod-security.kubernetes.io/enforce-version=latest

Install Instructions

The steps to install the Partha Helm chart are :

  • Add Gyeeta Repo to Helm
  • Label namespace gyeeta so as to allow privileged containers
  • Fetch and edit the values.yaml for the Partha chart
  • Install the Partha chart with the edited values
helm repo add gyeeta https://gyeeta.io/helmcharts
helm repo update

# Label namespace gyeeta so as to allow privileged containers
kubectl create ns gyeeta 2> /dev/null || :
kubectl label --overwrite ns gyeeta \
pod-security.kubernetes.io/enforce=privileged \
pod-security.kubernetes.io/enforce-version=latest

helm show values gyeeta/partha > /tmp/partha.yaml

# Please edit the /tmp/partha.yaml file specifying minimum of partha_config.cluster_name, partha_config.shyama_hosts and partha_config.shyama_ports
# After editing the /tmp/partha.yaml, install the Partha Helm chart using :

helm install --namespace gyeeta --create-namespace partha1 gyeeta/partha -f /tmp/partha.yaml

Uninstalling the Chart

To uninstall the Partha deployment say partha1 as per command above :

helm uninstall partha1

Partha Chart Parameters

The default Chart config can be obtained using the command :

helm show values gyeeta/partha > /tmp/partha.yaml

Then users can edit the /tmp/partha.yaml file.

Mandatory parameters to provide

The following are the mandatory parameters which users need to provide while installing the chart either using the --set CLI option or by editing the yaml values in the file saved (for example, the /tmp/partha.yaml file in the command above) :

  • partha_config.cluster_name
  • partha_config.shyama_hosts
  • partha_config.shyama_ports

The Helm chart install will fail if these parameters are not provided. Explanation about these parameters are given below.

NameDescriptionData TypeDefault Value
partha_config.cluster_nameCluster Name : Tag Name for this ClusterString""
partha_config.shyama_hostsShyama Service Domains : Specify one or more Shyama Service Names (e.g., [ "shyama1-headless" ])Array[]
partha_config.shyama_portsShyama Service Ports : Specify one or more Shyama Service Ports (e.g., [ 10037 ])Array[]
partha_config.cloud_typeCloud Operator : Specify as either of aws, gcp, azure. For other clouds or on-prem, leave blankString""
partha_config.region_nameRegion Name : Ignore if cloud_type is set. For on-prem or other clouds, specify as the Network region nameString""
partha_config.zone_nameZone Name : Ignore if cloud_type is set. For on-prem or other clouds, specify as the Network Zone nameString""
partha_config .response_sampling_percentPercent of workload to be analyzed for Response and QPS CalculationsNumber100
partha_config.capture_errcodeCapture HTTP Error codesBooleantrue
partha_config.enable_task_delaysEnable Process Delays if not setNumber1
partha_config.logtofileProcess Log sent to file instead of stdout/stderr. If true will use the emptyDir mount point for loggingBooleantrue
partha_config .install_kern_headersInstall Kernel Headers on hosts without Kernel HeadersBooleanfalse

Other parameters

NameDescriptionData TypeDefault Value
nameOverrideSet a new name if you want to override the release name usedString""
fullnameOverrideSet a new name if you want to override the fullname usedString""
resources.requestsPartha Container Resource RequestsObject{ "memory" : "200Mi" }
resources.limitsPartha Container Resource LimitsObject{ "memory" : "1024Mi" }
podSecurityPolicyEnable PodSecurityPolicy (only for K8s versions < 1.25)Booleantrue
affinityAffinity constraint for pod schedulingObject{}
mounts.volumesList of extra volumes to add to the Partha containerArray[]
mounts.volumeMountsList of extra volume mounts to add to the Partha containerArray[]
extra.envExtra environment variables to pass onto Partha containerObject{}
extra.argsExtra Command Line Arguments (CLI) to pass onto Partha containerArray[]
info

If partha_config.logtofile is set to true, then the Partha process logs will be sent to /hostdata/log/partha.log. Users can analyze the logs by running the command :

# Get the Partha pod name and fill in PARTHAPOD env
kubectl exec -it $PARTHAPOD -- more /hostdata/log/partha.log