# ------------------------------------------------------------------------------ # Talos MachineConfig Extension for Portworx CSI / FlashArray # # This file documents the required Talos configuration for Pure Storage FlashArray # with Portworx CSI. These configurations must be applied to Talos nodes via # talhelper or talosctl. # # DO NOT apply this as a Kubernetes manifest - it's a reference for Talos patches. # # To apply these changes: # 1. Add the patches below to talos/talhelper/talconfig.yaml # 2. Run: talhelper genconfig # 3. Apply updated config: talosctl apply-config --file clusterconfig/... # # Required for: # - iSCSI initiator configuration # - Multipath device mapping (DM-multipath) # - udev rules for Pure Storage devices # ------------------------------------------------------------------------------ # Add this to your Talos worker node patches in talconfig.yaml: # # patches: # - |- # machine: # # Install system extensions for iSCSI and multipath # install: # extensions: # - image: ghcr.io/siderolabs/iscsi-tools:latest # - image: ghcr.io/siderolabs/util-linux-tools:latest # # # Kernel modules required for iSCSI and multipath # kernel: # modules: # - name: iscsi_tcp # - name: dm_multipath # - name: dm_round_robin # # # Configure multipath.conf # files: # - path: /etc/multipath.conf # permissions: 0644 # op: create # content: | # # Multipath configuration for Pure Storage FlashArray # blacklist { # devnode "^pxd[0-9]*" # devnode "^pxd*" # } # # defaults { # polling_interval 10 # find_multipaths yes # user_friendly_names no # } # # devices { # # Pure FlashArray iSCSI devices # device { # vendor "PURE" # product "FlashArray" # path_selector "service-time 0" # hardware_handler "1 alua" # path_grouping_policy group_by_prio # prio alua # failback immediate # path_checker tur # fast_io_fail_tmo 10 # user_friendly_names no # no_path_retry 0 # features 0 # dev_loss_tmo 600 # } # # # Pure FlashArray NVMe-oF devices (if using NVMe-oF instead of iSCSI) # device { # vendor "NVME" # product "Pure FlashArray" # path_selector "queue-length 0" # path_grouping_policy group_by_prio # prio ana # failback immediate # fast_io_fail_tmo 10 # user_friendly_names no # no_path_retry 0 # features 0 # dev_loss_tmo 60 # } # } # # # udev rules for Pure Storage # - path: /etc/udev/rules.d/99-pure-storage.rules # permissions: 0644 # op: create # content: | # # Pure Storage udev rules for FlashArray # # Queue depth settings for optimal performance # # # Set scheduler to none for Pure devices # ACTION=="add|change", KERNEL=="sd*[!0-9]", SUBSYSTEM=="block", \ # ATTRS{vendor}=="PURE", ATTR{queue/scheduler}="none" # # # Set queue depth for Pure iSCSI devices # ACTION=="add|change", KERNEL=="sd*[!0-9]", SUBSYSTEM=="block", \ # ATTRS{vendor}=="PURE", ATTR{queue/nr_requests}="256" # # # Set queue depth for Pure NVMe devices # ACTION=="add|change", KERNEL=="nvme*", SUBSYSTEM=="block", \ # ATTRS{model}=="Pure*", ATTR{queue/nr_requests}="256" # # # Enable and configure iSCSI initiator # kubelet: # extraMounts: # - destination: /var/lib/iscsi # type: bind # source: /var/lib/iscsi # options: # - bind # - rshared # - rw # # NOTE: After applying Talos configuration changes: # 1. Reboot nodes if kernel modules were added # 2. Verify iSCSI initiator: talosctl -n get service iscsi-initiator # 3. Verify multipath: talosctl -n exec -- multipath -ll # 4. Check initiator name uniqueness: talosctl -n read /etc/iscsi/initiatorname.iscsi --- # This marker prevents accidental application as a K8s resource apiVersion: v1 kind: ConfigMap metadata: name: portworx-csi-talos-config-reference namespace: portworx annotations: description: "Reference only - do not apply. See comments for Talos patches." data: README: | This ConfigMap is a documentation artifact only. The actual configuration must be applied via Talos MachineConfig using talhelper or talosctl. See the comments in this file for the complete configuration.