# 1. Run gcloud CLI with --local-nvme-ssd-block option to create a node pool with # raw block Local SSDs attached. # 2. Deploy this DaemonSet. It will set RAID0 array on all raw block Local SSD # disks and format the device to an ext4 filesystem on each node. # 3. Use the gke-nvme-ssd-block-raid.yaml to create PV and StorageClass # 4. Use gke-pvc-nvme-ssd-block.yaml and gke-pod-nvme-ssd-block.yaml to create # pvc and pod apiVersion: apps/v1 kind: DaemonSet metadata: name: gke-raid-disks namespace: default labels: k8s-app: gke-raid-disks spec: selector: matchLabels: name: gke-raid-disks template: metadata: labels: name: gke-raid-disks spec: nodeSelector: cloud.google.com/gke-local-nvme-ssd: "true" hostPID: true containers: - name: startup-script image: gcr.io/google-containers/startup-script:v1 securityContext: privileged: true env: - name: STARTUP_SCRIPT value: | set -o errexit set -o nounset set -o pipefail devices=() for ssd in /dev/disk/by-id/google-local-ssd-block*; do if [ -e "${ssd}" ]; then devices+=("${ssd}") fi done if [ "${#devices[@]}" -eq 0 ]; then echo "No Local NVMe SSD disks found." exit 0 fi seen_arrays=(/dev/md/*) device=${seen_arrays[0]} echo "Setting RAID array with Local SSDs on device ${device}" if [ ! -e "$device" ]; then device="/dev/md/0" echo "y" | mdadm --create "${device}" --level=0 --force --raid-devices=${#devices[@]} "${devices[@]}" fi if ! tune2fs -l "${device}" ; then echo "Formatting '${device}'" mkfs.ext4 -F "${device}" fi mountpoint=/mnt/disks/raid/0 mkdir -p "${mountpoint}" echo "Mounting '${device}' at '${mountpoint}'" mount -o discard,defaults "${device}" "${mountpoint}" chmod a+w "${mountpoint}"