Customize Trident operator installation
The Trident operator allows you to customize Trident installation using the attributes in the TridentOrchestrator spec. If you want to customize the installation beyond what TridentOrchestrator arguments allow, consider using tridentctl to generate custom YAML manifests to modify as needed.
Understanding controller pods and node pods
Trident runs as a single controller pod and a node pod on each worker node in the cluster. The node pod must be running on any host where you want to potentially mount a Trident volume.
Kubernetes node selectors and tolerations and taints are used to constrain a pod to run on a specific or preferred node. Using the`ControllerPlugin` and NodePlugin, you can specify constraints and overrides.
- 
The controller plugin handles volume provisioning and management, such as snapshots and resizing.
 - 
The node plugin handles attaching the storage to the node.
 
Configuration options
| 
 | 
spec.namespace is specified in TridentOrchestrator to signify the namespace where Trident is installed. This parameter cannot be updated after Trident is installed. Attempting to do so causes the TridentOrchestrator status to change to Failed. Trident is not intended to be migrated across namespaces.
 | 
This table details TridentOrchestrator attributes.
| Parameter | Description | Default | ||||
|---|---|---|---|---|---|---|
  | 
Namespace to install Trident in  | 
  | 
||||
  | 
Enable debugging for Trident  | 
  | 
||||
  | 
  | 
  | 
||||
  | 
Setting to   | 
  | 
||||
  | 
Set to   | 
  | 
||||
  | 
Set to workload identity ("azure.workload.identity/client-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx") when using cloud identity on an AKS cluster.  | 
  | 
||||
  | 
Install Trident over IPv6  | 
false  | 
||||
  | 
Timeout for Kubernetes operations. 
  | 
  | 
||||
  | 
Don't send autosupport bundles to NetApp  | 
  | 
||||
  | 
The container image for Autosupport Telemetry  | 
  | 
||||
  | 
The address/port of a proxy for sending Autosupport  | 
  | 
||||
  | 
A flag used to uninstall Trident  | 
  | 
||||
  | 
Trident logging format to be used [text,json]  | 
  | 
||||
  | 
Trident image to install  | 
  | 
||||
  | 
Path to internal registry, of the format  | 
  | 
||||
  | 
Path to the kubelet directory on the host  | 
  | 
||||
  | 
A list of resources to delete to perform a complete removal of  | 
|||||
  | 
Secrets to pull images from an internal registry  | 
|||||
  | 
Sets the image pull policy for the the Trident operator. Valid values are:  | 
  | 
||||
  | 
Additional node selectors for pods.	Follows same format as   | 
No default; optional  | 
||||
  | 
Overrides Kubernetes tolerations for pods. Follows the same format as   | 
No default; optional  | 
||||
  | 
Additional node selectors for pods. Follows same format as   | 
No default; optional  | 
||||
  | 
Overrides Kubernetes tolerations for pods. Follows the same format as   | 
No default; optional  | 
||||
  | 
Enables Trident to prepare the nodes of the Kubernetes cluster to manage volumes using the specified data storage protocol. 
  | 
|||||
  | 
The queries per second (QPS) limit used by the controller while communicating with the Kubernetes API server. The Burst value is set automatically based on the QPS value.  | 
  | 
||||
  | 
Enables concurrent Trident controller operations for improved throughput. 
  | 
false  | 
||||
  | 
Sets Kubernetes resource limits and requests for the Trident controller and node pods. You can configure CPU and memory for each container and sidecar to manage resource allocation in Kubernetes. For more information about configuring resource requests and limits, refer to Resource Management for Pods and Containers. 
 
  | 
 | 
||||
  | 
Enable HTTPS for Prometheus metrics endpoint.  | 
false  | 
||||
  | 
Enables host networking for the Trident controller. This is useful when you want to separate the frontend and backend traffic in a multi-home network.  | 
false  | 
| 
 | 
For more information on formatting pod parameters, refer to Assigning Pods to Nodes. | 
Sample configurations
You can use the attributes in Configuration options when defining TridentOrchestrator to customize your installation.
Basic custom configuration
This example, created after running the cat deploy/crds/tridentorchestrator_cr_imagepullsecrets.yaml command, represents a basic custom installation:
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  imagePullSecrets:
  - thisisasecret
Node selectors
This example installs Trident with node selectors.
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  controllerPluginNodeSelector:
    nodetype: master
  nodePluginNodeSelector:
    storage: netapp
Windows worker nodes
This example, created after running the cat deploy/crds/tridentorchestrator_cr.yaml command, installs Trident on a Windows worker node.
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  windows: true
Managed identities on an AKS cluster
This example installs Trident to enable managed identities on an AKS cluster.
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  cloudProvider: "Azure"
Cloud identity on an AKS cluster
This example installs Trident for use with a cloud identity on an AKS cluster.
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  cloudProvider: "Azure"
  cloudIdentity: 'azure.workload.identity/client-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx'
Cloud identity on an EKS cluster
This example installs Trident for use with a cloud identity on an AKS cluster.
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  cloudProvider: "AWS"
  cloudIdentity: "'eks.amazonaws.com/role-arn: arn:aws:iam::123456:role/trident-role'"
Cloud identity for GKE
This example installs Trident for use with a cloud identity on a GKE cluster.
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: backend-tbc-gcp-gcnv
spec:
  version: 1
  storageDriverName: google-cloud-netapp-volumes
  projectNumber: '012345678901'
  network: gcnv-network
  location: us-west2
  serviceLevel: Premium
  storagePool: pool-premium1
Kubernetes resource requests and limits configuration for Trident controller and Trident Linux node pods
This example configures Kubernetes resource requests and limits for Trident controller and Trident Linux node pods.
| 
 | 
Disclaimer: The request and limit values provided in this example are for demonstration purposes only. Adjust these values based on your environment and workload requirements. | 
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  imagePullSecrets:
  - thisisasecret
  resources:
    controller:
      trident-main:
        requests:
          cpu: 10m
          memory: 80Mi
        limits:
          cpu: 200m
          memory: 256Mi
      # sidecars
      csi-provisioner:
        requests:
          cpu: 2m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      csi-attacher:
        requests:
          cpu: 2m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      csi-resizer:
        requests:
          cpu: 3m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      csi-snapshotter:
        requests:
          cpu: 2m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      trident-autosupport:
        requests:
          cpu: 1m
          memory: 30Mi
        limits:
          cpu: 50m
          memory: 128Mi
    node:
      linux:
        trident-main:
          requests:
            cpu: 10m
            memory: 60Mi
          limits:
            cpu: 200m
            memory: 256Mi
        # sidecars
        node-driver-registrar:
          requests:
            cpu: 1m
            memory: 10Mi
          limits:
            cpu: 50m
            memory: 32Mi
Kubernetes resource requests and limits configuration for Trident controller and Trident Windows and Linux node pods
This example configures Kubernetes resource requests and limits for Trident controller and Trident Windows and Linux node pods.
| 
 | 
Disclaimer: The request and limit values provided in this example are for demonstration purposes only. Adjust these values based on your environment and workload requirements. | 
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
  name: trident
spec:
  debug: true
  namespace: trident
  imagePullSecrets:
  - thisisasecret
  windows: true
  resources:
    controller:
      trident-main:
        requests:
          cpu: 10m
          memory: 80Mi
        limits:
          cpu: 200m
          memory: 256Mi
        # sidecars
      csi-provisioner:
        requests:
          cpu: 2m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      csi-attacher:
        requests:
          cpu: 2m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      csi-resizer:
        requests:
          cpu: 3m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      csi-snapshotter:
        requests:
          cpu: 2m
          memory: 20Mi
        limits:
          cpu: 100m
          memory: 64Mi
      trident-autosupport:
        requests:
          cpu: 1m
          memory: 30Mi
        limits:
          cpu: 50m
          memory: 128Mi
    node:
      linux:
        trident-main:
          requests:
            cpu: 10m
            memory: 60Mi
          limits:
            cpu: 200m
            memory: 256Mi
        # sidecars
        node-driver-registrar:
          requests:
            cpu: 1m
            memory: 10Mi
          limits:
            cpu: 50m
            memory: 32Mi
      windows:
        trident-main:
          requests:
            cpu: 6m
            memory: 40Mi
          limits:
            cpu: 200m
            memory: 128Mi
        # sidecars
        node-driver-registrar:
          requests:
            cpu: 6m
            memory: 40Mi
          limits:
            cpu: 100m
            memory: 128Mi
        liveness-probe:
          requests:
            cpu: 2m
            memory: 40Mi
          limits:
            cpu: 50m
            memory: 64Mi