Skip to content

Commit 7a69cb3

Browse files
authored
Merge pull request #4833 from GoogleCloudPlatform/release-candidate
Release candidate: v1.72.0
2 parents f355cd9 + 9b68072 commit 7a69cb3

87 files changed

Lines changed: 1579 additions & 364 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ HPC deployments on the Google Cloud Platform.`,
5353
logging.Fatal("cmd.Help function failed: %s", err)
5454
}
5555
},
56-
Version: "v1.71.0",
56+
Version: "v1.72.0",
5757
Annotations: annotation,
5858
}
5959
)

community/examples/gke-tpu-v6/README.md

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,11 @@ This section guides you through the cluster creation process, ensuring that your
9292

9393
## Advanced Blueprint: GKE TPU with GCS Integration
9494

95-
This repository also includes an advanced blueprint, `gke-tpu-v6-gcs.yaml`, designed for production-ready workloads. It builds on the basic blueprint by adding several key features:
95+
This repository also includes an advanced blueprint, `gke-tpu-v6-advanced.yaml`, designed for production-ready workloads. It builds on the basic blueprint by adding several key features:
9696
* **Dedicated Service Accounts** for nodes and workloads, following security best practices.
9797
* **Automatic creation of two GCS buckets** for training data and checkpoints.
9898
* **Performance-tuned GCS FUSE mounts** pre-configured in the cluster as Persistent Volumes.
99+
* **Optional High-Performance Storage: [Managed Lustre](https://cloud.google.com/managed-lustre/docs/overview)** for high-performance, fully managed parallel file system optimized for heavy AI and HPC workloads. For details of configuring Managed Lustre, please refer to the [appendix](#understanding-managed-lustre-integration)
99100

100101
### Deploying the Advanced Blueprint
101102

@@ -114,14 +115,6 @@ The process is nearly identical to the basic deployment.
114115

115116
1. After deployment, the blueprint will output instructions for running a fio benchmark job. This job serves as a validation test to confirm that the GCS mounts are working correctly for both reading and writing. Follow the printed instructions to run the test.
116117

117-
### Understanding the GCS Integration
118-
119-
The advanced blueprint provisions several key technologies to create a robust data pipeline for your TPU workloads. Here are some resources to understand how they work together:
120-
* [Cloud Storage Overview](https://cloud.google.com/storage/docs/introduction#quickstarts): Start here to understand what Cloud Storage buckets are and their role in storing large-scale data.
121-
* [Cloud TPU Storage Options](https://cloud.google.com/tpu/docs/storage-options): Learn about the recommended storage patterns for Cloud TPUs, including why GCS FUSE is a best practice for providing training data.
122-
* [Access GCS Buckets with the GCS FUSE CSI Driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver): This is the core technical guide explaining how GKE mounts GCS buckets into your pods, which this blueprint automates.
123-
* [Configure Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity): Read this to understand the secure, recommended method for GKE applications to access Google Cloud services like GCS, which this blueprint configures for you.
124-
125118
## Run the sample job
126119

127120
The [tpu-available-chips.yaml](https://github.com/GoogleCloudPlatform/cluster-toolkit/blob/main/community/examples/gke-tpu-v6/tpu-available-chips.yaml) file creates a service and a job resource in kubernetes. It is based on https://cloud.google.com/kubernetes-engine/docs/how-to/tpus#tpu-chips-node-pool. The workload returns the number of TPU chips across all of the nodes in a multi-host TPU slice.
@@ -180,6 +173,78 @@ To avoid recurring charges for the resources used on this page, clean up the res
180173
./gcluster destroy gke-tpu-v6/
181174
```
182175

183-
Useful TPU links:
176+
## Appendix
177+
178+
### Useful TPU links
184179
1. [TPU architecture](https://cloud.google.com/tpu/docs/system-architecture-tpu-vm)
185180
2. [TPU v6](https://cloud.google.com/tpu/docs/v6e)
181+
182+
### Understanding the GCS Integration
183+
184+
The advanced blueprint provisions several key technologies to create a robust data pipeline for your TPU workloads. Here are some resources to understand how they work together:
185+
* [Cloud Storage Overview](https://cloud.google.com/storage/docs/introduction#quickstarts): Start here to understand what Cloud Storage buckets are and their role in storing large-scale data.
186+
* [Cloud TPU Storage Options](https://cloud.google.com/tpu/docs/storage-options): Learn about the recommended storage patterns for Cloud TPUs, including why GCS FUSE is a best practice for providing training data.
187+
* [Access GCS Buckets with the GCS FUSE CSI Driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver): This is the core technical guide explaining how GKE mounts GCS buckets into your pods, which this blueprint automates.
188+
* [Configure Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity): Read this to understand the secure, recommended method for GKE applications to access Google Cloud services like GCS, which this blueprint configures for you.
189+
190+
### Understanding Managed Lustre integration
191+
The advanced blueprint `gke-tpu-v6-advanced.yaml` can also be configured to deploy a Managed Lustre filesystem. Google Cloud **Managed Lustre** delivers a high-performance, fully managed parallel file system optimized for AI and HPC applications. With multi-petabyte-scale capacity and up to 1 TBps throughput, [Managed Lustre](https://cloud.google.com/architecture/optimize-ai-ml-workloads-managed-lustre) facilitates the migration of demanding workloads to the cloud.
192+
193+
#### Enabling Managed Lustre
194+
To enable Managed Lustre, you must make these changes before deploying:
195+
196+
1. In the `gke-tpu-v6-advanced.yaml`:
197+
Find the **vars:** section and **uncomment** the Managed Lustre variables. The defaults provide a high-performance **36000GiB** (~35.16TiB) filesystem with **18 GB/s** of throughput.
198+
199+
2. In the `gke-tpu-v6-advanced.yaml`:
200+
Find the section commented # --- MANAGED LUSTRE ADDITIONS ---. **Uncomment** the entire block of four modules: `private_service_access`, `lustre_firewall_rule`, `managed-lustre`, and `lustre-pv`.
201+
202+
After making these changes, run the `gcluster deploy` command as usual.
203+
204+
#### Using Managed Lustre in a Pod
205+
Once deployed, the `Lustre` filesystem is available to the cluster as a `Persistent Volume (PV)`. To use it in your workloads, you need to create a `Persistent Volume Claim (PVC)` and mount it in your pod.
206+
207+
#### Testing the Lustre Mount
208+
209+
1. Create a file named `lustre-claim-pod.yaml`:
210+
211+
```yaml
212+
apiVersion: v1
213+
kind: PersistentVolumeClaim
214+
metadata:
215+
name: my-lustre-claim
216+
spec:
217+
accessModes:
218+
- ReadWriteMany
219+
# storageClassName must be empty to bind to the manually created PV
220+
storageClassName: ""
221+
resources:
222+
requests:
223+
# This size must match lustre_size_gib from your variables
224+
storage: 36000Gi
225+
---
226+
apiVersion: v1
227+
kind: Pod
228+
metadata:
229+
name: lustre-test-pod
230+
spec:
231+
containers:
232+
- name: test-container
233+
image: ubuntu:22.04
234+
command: ["/bin/sleep", "infinity"]
235+
volumeMounts:
236+
- name: lustre-storage
237+
mountPath: /mnt/lustre
238+
volumes:
239+
- name: lustre-storage
240+
persistentVolumeClaim:
241+
claimName: my-lustre-claim
242+
```
243+
244+
2. Apply the manifest to your cluster:
245+
246+
```yaml
247+
kubectl apply -f lustre-claim-pod.yaml
248+
```
249+
250+
The pod will start, and the Managed Lustre filesystem will be available inside the container at `/mnt/lustre`.

community/examples/gke-tpu-v6/gke-tpu-v6-advanced.yaml

Lines changed: 116 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,32 @@ vars:
5151

5252
system_node_pool_disk_size_gb: 200
5353
v6e_node_pool_disk_size_gb: 100
54+
version_prefix: "1.33."
55+
56+
# # To enable Managed-Lustre please uncomment this section and fill out the settings.
57+
# # Additionally, please uncomment the private_service_access, lustre_firewall_rule, managed-lustre and lustre-pv modules.
58+
# # Managed Lustre is only supported in specific regions and zones
59+
# # Please refer https://cloud.google.com/managed-lustre/docs/locations
60+
61+
# # Managed-Lustre instance name. This should be unique for each deployment.
62+
# lustre_instance_id: $(vars.deployment_name)
63+
64+
# # The values of size_gib and per_unit_storage_throughput are co-related
65+
# # Please refer https://cloud.google.com/managed-lustre/docs/create-instance#performance-tiers
66+
# # Storage capacity of the lustre instance in GiB
67+
# lustre_size_gib: 36000
68+
69+
# # Maximum throughput of the lustre instance in MBps per TiB
70+
# per_unit_storage_throughput: 500
5471

5572

5673
deployment_groups:
5774
- group: primary
5875
modules:
59-
- id: gke-tpu-v6-net
76+
- id: gke-tpu-v6-net-0
6077
source: modules/network/vpc
6178
settings:
79+
network_name: $(vars.deployment_name)-net-0
6280
subnetworks:
6381
- subnet_name: $(vars.deployment_name)-sub-0
6482
subnet_region: $(vars.region)
@@ -72,7 +90,25 @@ deployment_groups:
7290
ip_cidr_range: 10.0.32.0/20
7391
firewall_rules:
7492
- name: $(vars.deployment_name)-internal-0
75-
ranges: [192.168.0.0/18]
93+
ranges: [192.168.0.0/16]
94+
allow:
95+
- protocol: tcp
96+
ports: ["0-65535"]
97+
- protocol: udp
98+
ports: ["0-65535"]
99+
- protocol: icmp
100+
101+
- id: gke-tpu-v6-net-1
102+
source: modules/network/vpc
103+
settings:
104+
network_name: $(vars.deployment_name)-net-1
105+
subnetworks:
106+
- subnet_name: $(vars.deployment_name)-sub-1
107+
subnet_region: $(vars.region)
108+
subnet_ip: 192.168.64.0/18
109+
firewall_rules:
110+
- name: $(vars.deployment_name)-internal-1
111+
ranges: [192.168.0.0/16]
76112
allow:
77113
- protocol: tcp
78114
ports: ["0-65535"]
@@ -125,20 +161,36 @@ deployment_groups:
125161

126162
- id: gke-tpu-v6-cluster
127163
source: modules/scheduler/gke-cluster
128-
use: [gke-tpu-v6-net, workload_service_account]
164+
use: [gke-tpu-v6-net-0, workload_service_account]
129165
settings:
130166
system_node_pool_machine_type: "n2-standard-8"
131167
system_node_pool_disk_size_gb: $(vars.system_node_pool_disk_size_gb)
132168
system_node_pool_taints: []
133169
enable_private_endpoint: false # Allows access from authorized public IPs
134170
configure_workload_identity_sa: true
135171
enable_gcsfuse_csi: true
172+
enable_managed_lustre_csi: true
136173
master_authorized_networks:
137174
- cidr_block: $(vars.authorized_cidr) # Allows your machine to run the kubectl command. Required for multi network setup.
138175
display_name: "kubectl-access-network"
176+
additional_networks:
177+
$(concat(
178+
[{
179+
network=gke-tpu-v6-net-1.network_name,
180+
subnetwork=gke-tpu-v6-net-1.subnetwork_name,
181+
subnetwork_project=vars.project_id,
182+
nic_type="GVNIC",
183+
queue_count=null,
184+
network_ip=null,
185+
stack_type=null,
186+
access_config=[{nat_ip=null, public_ptr_domain_name=null, network_tier=null}],
187+
ipv6_access_config=[],
188+
alias_ip_range=[]
189+
}]
190+
))
139191
# Cluster versions cannot be updated through the toolkit after creation
140192
# Please manage cluster version from the Google Cloud Console directly
141-
version_prefix: "1.32."
193+
version_prefix: $(vars.version_prefix)
142194
release_channel: RAPID
143195
maintenance_exclusions:
144196
- name: no-minor-or-node-upgrades-indefinite
@@ -159,6 +211,21 @@ deployment_groups:
159211
zones: [$(vars.zone)]
160212
disk_size_gb: $(vars.v6e_node_pool_disk_size_gb)
161213
static_node_count: $(vars.static_node_count)
214+
additional_networks:
215+
$(concat(
216+
[{
217+
network=gke-tpu-v6-net-1.network_name,
218+
subnetwork=gke-tpu-v6-net-1.subnetwork_name,
219+
subnetwork_project=vars.project_id,
220+
nic_type="GVNIC",
221+
queue_count=null,
222+
network_ip=null,
223+
stack_type=null,
224+
access_config=[{nat_ip=null, public_ptr_domain_name=null, network_tier=null}],
225+
ipv6_access_config=[],
226+
alias_ip_range=[]
227+
}]
228+
))
162229
reservation_affinity:
163230
consume_reservation_type: SPECIFIC_RESERVATION
164231
specific_reservations:
@@ -168,6 +235,51 @@ deployment_groups:
168235
tpu_topology: $(vars.tpu_topology)
169236
outputs: [instructions]
170237

238+
# # --- MANAGED LUSTRE ADDITIONS ---
239+
# # Private Service Access (PSA) requires the compute.networkAdmin role which is
240+
# # included in the Owner role, but not Editor.
241+
# # PSA is required for all Managed Lustre functionality.
242+
# # https://cloud.google.com/vpc/docs/configure-private-services-access#permissions
243+
# - id: private_service_access
244+
# source: community/modules/network/private-service-access
245+
# use: [gke-tpu-v6-net-0]
246+
# settings:
247+
# prefix_length: 24
248+
249+
# # Firewall to allow Managed Lustre connection
250+
# - id: lustre_firewall_rule
251+
# source: modules/network/firewall-rules
252+
# use: [gke-tpu-v6-net-0]
253+
# settings:
254+
# ingress_rules:
255+
# - name: $(vars.deployment_name)-allow-lustre-traffic
256+
# description: Allow Managed Lustre traffic
257+
# source_ranges:
258+
# - $(private_service_access.cidr_range)
259+
# allow:
260+
# - protocol: tcp
261+
# ports:
262+
# - "988"
263+
264+
# - id: managed-lustre
265+
# source: modules/file-system/managed-lustre
266+
# use: [gke-tpu-v6-net-0, private_service_access]
267+
# settings:
268+
# name: $(vars.lustre_instance_id)
269+
# local_mount: /lustre
270+
# remote_mount: lustrefs
271+
# size_gib: $(vars.lustre_size_gib)
272+
# per_unit_storage_throughput: $(vars.per_unit_storage_throughput)
273+
# zone: $(vars.zone)
274+
# # Please ensure the zone of the gke cluster falls in the list of available zones of the managed-lustre instance. If not,
275+
# # please explicitly specify a valid zone for managed-lustre instance. Refer https://cloud.google.com/managed-lustre/docs/locations
276+
277+
# - id: lustre-pv
278+
# source: modules/file-system/gke-persistent-volume
279+
# use: [managed-lustre, gke-tpu-v6-cluster]
280+
# settings:
281+
# capacity_gib: $(vars.lustre_size_gib)
282+
171283
- id: workload-manager-install
172284
source: modules/management/kubectl-apply
173285
use: [gke-tpu-v6-cluster]

0 commit comments

Comments
 (0)