Skip to content

Commit 1161879

Browse files
committed
Merge branch 'master' into docs-rel-4-8-0
2 parents 87c5b85 + 1c2bcbf commit 1161879

29 files changed

+1305
-40
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ artifact.zip
7676
.netlify/
7777
# Ignore _partials/index.ts
7878
_partials/index.ts
79+
_partials/breaking-changes/*
80+
src/components/ReleaseNotesBreakingChanges/versions.json
7981

8082
# Ignore statoc/img/packs
8183
static/img/packs

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ find-unused-images:
335335
###@ Generate _partials/index.ts required to automatic partials usage.
336336

337337
generate-partials: ## Generate
338+
./scripts/index-breaking-changes.sh
338339
./scripts/generate-partials.sh
339340

340341
###@ Fetch cached packs assets.

_partials/self-hosted/management-appliance/_upgrade-palette-prereqs.mdx

Lines changed: 220 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ partial_name: upgrade-palette-prereqs
2121

2222
- Check that your upgrade path is supported by referring to the <PaletteVertexUrlMapper edition={props.edition} text="Supported Upgrade Paths" url="/upgrade#supported-upgrade-paths"/>.
2323

24-
- If upgrading from version **4.7.15**, you must run an additional script to prepare {props.version} for the upgrade.
24+
- If upgrading from version **4.7.15**, you must run an additional script before upgrading {props.version}. This script changes the access mode of the `zot` deployment's PersistentVolumeClaim (PVC) from `RWX` (ReadWriteMany) to `RWO` (ReadWriteOnce), which is required for the upgrade process.
2525

2626
<details>
2727

28-
<summary> Click to expand the instructions for the script </summary>
28+
<summary> Click to expand the instructions for the 4.7.15 script </summary>
2929

3030
1. Log in to Local UI of the leader node of your Palette management cluster. For example, `https://<palette-leader-node-ip>:5080`.
3131

@@ -302,4 +302,222 @@ partial_name: upgrade-palette-prereqs
302302
zot-c96cb7b-hspd2 1/1 Running 0 5m3s
303303
```
304304
305+
</details>
306+
307+
- If upgrading from version **4.7.27**, you must run an additional script before upgrading {props.version}. This script ensures the `linstor-lvm-storage` StorageClass has correct parameters and safely recreates the PVC while preserving data.
308+
309+
<details>
310+
311+
<summary> Click to expand the instructions for the 4.7.27 script </summary>
312+
313+
1. Log in to Local UI of the leader node of your Palette management cluster. For example, `https://<palette-leader-node-ip>:5080`.
314+
315+
2. From the left main menu, click **Cluster**.
316+
317+
3. On the **Overview** tab, within the **Environment** section, click the link for the **Admin Kubeconfig File** to download the kubeconfig file.
318+
319+
4. On your local machine, ensure you have `kubectl` installed and set the `KUBECONFIG` environment variable to point to the file.
320+
321+
```bash
322+
export KUBECONFIG=/path/to/downloaded/kubeconfig/file
323+
```
324+
325+
5. Use the following command to create a script named `recreate.sh`.
326+
327+
The script ensures that the `linstor-lvm-storage` StorageClass has the correct parameters (`resourceGroup: lvm-ha` and `placementCount: 3`). If the StorageClass does not exist or has different parameters, it recreates it. Then, it safely recreates a specified PVC to bind to a new PV while preserving data, handling deployments with `volumeBindingMode=WaitForFirstConsumer` by scaling down the deployment first.
328+
329+
```bash
330+
cat > recreate.sh <<'SCRIPT'
331+
#!/bin/bash
332+
# Recreate a PVC with updated StorageClass configuration
333+
# Ensures the linstor-lvm-storage StorageClass exists with correct parameters,
334+
# then recreates the specified PVC which may bind to a new PV.
335+
# Safely handles volumeBindingMode=WaitForFirstConsumer by scaling down the deployment first.
336+
337+
set -euo pipefail
338+
339+
NAMESPACE=${1:-zot-system}
340+
PVC_NAME=${2:-zot-pvc}
341+
DEPLOY_NAME=${3:-zot}
342+
343+
344+
#!/bin/bash
345+
set -e
346+
347+
SC_NAME="linstor-lvm-storage"
348+
349+
echo "Checking for existing StorageClass '$SC_NAME'..."
350+
351+
if kubectl get storageclass $SC_NAME >/dev/null 2>&1; then
352+
echo "StorageClass '$SC_NAME' exists. Checking parameters..."
353+
354+
CURRENT_RG=$(kubectl get storageclass $SC_NAME -o jsonpath='{.parameters.resourceGroup}')
355+
CURRENT_PC=$(kubectl get storageclass $SC_NAME -o jsonpath='{.parameters.placementCount}')
356+
357+
if [[ "$CURRENT_RG" == "lvm-ha" && "$CURRENT_PC" == "3" ]]; then
358+
echo "✅ StorageClass already has resourceGroup='lvm-ha' and placementCount='3'. Skipping re-creation."
359+
else
360+
echo "StorageClass parameters differ (resourceGroup=$CURRENT_RG, placementCount=$CURRENT_PC). Recreating..."
361+
kubectl delete storageclass $SC_NAME
362+
echo "Recreating StorageClass '$SC_NAME'..."
363+
cat <<EOF | kubectl apply -f -
364+
apiVersion: storage.k8s.io/v1
365+
kind: StorageClass
366+
metadata:
367+
name: $SC_NAME
368+
annotations:
369+
storageclass.kubernetes.io/is-default-class: "false"
370+
helm.sh/hook: post-install,post-upgrade
371+
provisioner: linstor.csi.linbit.com
372+
parameters:
373+
placementCount: "3"
374+
resourceGroup: "lvm-ha"
375+
storagePool: "lvm-thin"
376+
reclaimPolicy: Delete
377+
volumeBindingMode: WaitForFirstConsumer
378+
allowVolumeExpansion: true
379+
EOF
380+
echo "✅ StorageClass '$SC_NAME' updated."
381+
fi
382+
else
383+
echo "StorageClass not found. Creating new one..."
384+
cat <<EOF | kubectl apply -f -
385+
apiVersion: storage.k8s.io/v1
386+
kind: StorageClass
387+
metadata:
388+
name: $SC_NAME
389+
annotations:
390+
storageclass.kubernetes.io/is-default-class: "false"
391+
helm.sh/hook: post-install,post-upgrade
392+
provisioner: linstor.csi.linbit.com
393+
parameters:
394+
placementCount: "3"
395+
resourceGroup: "lvm-ha"
396+
storagePool: "lvm-thin"
397+
reclaimPolicy: Delete
398+
volumeBindingMode: WaitForFirstConsumer
399+
allowVolumeExpansion: true
400+
EOF
401+
echo "✅ StorageClass '$SC_NAME' created."
402+
fi
403+
404+
echo "Getting PV bound to PVC '${PVC_NAME}' in namespace '${NAMESPACE}'..."
405+
PV_NAME=$(kubectl get pvc -n "${NAMESPACE}" "${PVC_NAME}" -o jsonpath='{.spec.volumeName}' 2>/dev/null || true)
406+
if [ -z "${PV_NAME}" ]; then
407+
echo "❌ PVC '${PVC_NAME}' not found or not bound to any PV."
408+
exit 1
409+
fi
410+
echo "Found PV: ${PV_NAME}"
411+
412+
echo "Scaling down deployment '${DEPLOY_NAME}' to release PVC..."
413+
kubectl scale deploy "${DEPLOY_NAME}" -n "${NAMESPACE}" --replicas=0 || true
414+
415+
echo "Deleting PVC '${PVC_NAME}' (PV data will be retained)..."
416+
kubectl delete pvc -n "${NAMESPACE}" "${PVC_NAME}" --ignore-not-found
417+
418+
STORAGE=$(kubectl get pv "${PV_NAME}" -o jsonpath='{.spec.capacity.storage}')
419+
ACCESSMODES=$(kubectl get pv "${PV_NAME}" -o jsonpath='{.spec.accessModes[0]}')
420+
421+
echo "Recreating PVC '${PVC_NAME}' bound to existing PV '${PV_NAME}'..."
422+
cat <<EOF | kubectl apply -f -
423+
apiVersion: v1
424+
kind: PersistentVolumeClaim
425+
metadata:
426+
name: ${PVC_NAME}
427+
namespace: ${NAMESPACE}
428+
spec:
429+
accessModes:
430+
- ${ACCESSMODES}
431+
storageClassName: linstor-lvm-storage
432+
resources:
433+
requests:
434+
storage: ${STORAGE}
435+
EOF
436+
437+
echo "Scaling deployment '${DEPLOY_NAME}' back up..."
438+
kubectl scale deploy "${DEPLOY_NAME}" -n "${NAMESPACE}" --replicas=1 || true
439+
440+
echo "Waiting for PVC '${PVC_NAME}' to rebind..."
441+
for i in {1..30}; do
442+
STATUS=$(kubectl get pvc -n "${NAMESPACE}" "${PVC_NAME}" -o jsonpath='{.status.phase}' 2>/dev/null || echo "")
443+
if [[ "$STATUS" == "Bound" ]]; then
444+
echo "✅ PVC successfully bound."
445+
break
446+
fi
447+
sleep 2
448+
done
449+
450+
# Get the new PV name after PVC is bound
451+
NEW_PV_NAME=$(kubectl get pvc -n "${NAMESPACE}" "${PVC_NAME}" -o jsonpath='{.spec.volumeName}' 2>/dev/null || echo "")
452+
if [ -z "${NEW_PV_NAME}" ]; then
453+
echo "Warning: Could not determine new PV name."
454+
NEW_PV_NAME="<check manually>"
455+
fi
456+
457+
echo "Done!"
458+
echo "✅ PVC '${PVC_NAME}' is bound to PV '${NEW_PV_NAME}' and data preserved."
459+
echo "
460+
Verify with:
461+
kubectl get pvc -n ${NAMESPACE} ${PVC_NAME}
462+
kubectl get pv ${NEW_PV_NAME}
463+
"
464+
SCRIPT
465+
```
466+
467+
6. Make the script executable.
468+
469+
```bash
470+
chmod u+x recreate.sh
471+
```
472+
473+
7. Use the following command to execute the script.
474+
475+
```bash
476+
./recreate.sh
477+
```
478+
479+
```shell hideClipboard title="Example output"
480+
Checking for existing StorageClass 'linstor-lvm-storage'...
481+
StorageClass 'linstor-lvm-storage' exists. Checking parameters...
482+
✅ StorageClass already has resourceGroup='lvm-ha' and placementCount='3'. Skipping re-creation.
483+
Getting PV bound to PVC 'zot-pvc' in namespace 'zot-system'...
484+
Found PV: pvc-3b7a8f9c-1d2e-4f5a-9b0c-1a2b3c4d5e6f
485+
Scaling down deployment 'zot' to release PVC...
486+
deployment.apps/zot scaled
487+
Deleting PVC 'zot-pvc' (PV data will be retained)...
488+
persistentvolumeclaim "zot-pvc" deleted
489+
Recreating PVC 'zot-pvc' bound to existing PV 'pvc-3b7a8f9c-1d2e-4f5a-9b0c-1a2b3c4d5e6f'...
490+
persistentvolumeclaim/zot-pvc created
491+
Scaling deployment 'zot' back up...
492+
deployment.apps/zot scaled
493+
Waiting for PVC 'zot-pvc' to rebind...
494+
✅ PVC successfully bound.
495+
Done!
496+
✅ PVC 'zot-pvc' is bound to PV 'pvc-7e9d2a10-4a6b-431f-b9e7-8c2d1f3a5b6c' and data preserved.
497+
498+
Verify with:
499+
kubectl get pvc -n zot-system zot-pvc
500+
kubectl get pv pvc-7e9d2a10-4a6b-431f-b9e7-8c2d1f3a5b6c
501+
```
502+
503+
8. Verify that the PVC and PV status is `Bound`.
504+
505+
```bash
506+
kubectl get pvc --namespace zot-system zot-pvc
507+
```
508+
509+
```shell hideClipboard title="Example output"
510+
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
511+
zot-pvc Bound pvc-7e9d2a10-4a6b-431f-b9e7-8c2d1f3a5b6c 300Gi RWO linstor-lvm-storage <unset> 5m30s
512+
```
513+
514+
```bash
515+
kubectl get pv pvc-7e9d2a10-4a6b-431f-b9e7-8c2d1f3a5b6c
516+
```
517+
518+
```shell hideClipboard title="Example output"
519+
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
520+
pvc-7e9d2a10-4a6b-431f-b9e7-8c2d1f3a5b6c 300Gi RWO Delete Bound zot-system/zot-pvc linstor-lvm-storage 5m30s
521+
```
522+
305523
</details>

docs/docs-content/cluster-templates/create-cluster-template-policies/maintenance-policy.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,19 @@ cluster templates.
110110
9. When finished, **Confirm** your schedule.
111111

112112
10. Your schedule appears in the **Upgrade schedule** section of the **Basic information** window. If you would like to
113-
add additional schedules, select **Add Schedule**, and repeat steps 5 - 10; otherwise, select **Next**.
113+
add additional schedules, select **Add Schedule**, and repeat steps 5 - 10. When you are finished adding schedules,
114+
select **Next**.
114115

115-
:::tip
116+
:::info
116117

117-
Each template can be linked to one maintenance policy only. All schedules attached to a maintenance policy are
118-
initiated on the attached clusters during the specified upgrade window. If you do not want all schedules applied to
119-
certain clusters, consider making another maintenance policy and attaching it to a separate cluster template.
118+
- If you have multiple schedules for the same maintenance policy, the upgrade windows cannot overlap. For example,
119+
if one schedule begins at 8:00 AM on Sunday with a three-hour upgrade window, and another schedule begins at 10:00
120+
AM on Sunday with a three-hour upgrade window, the upgrade windows overlap at 10:00 AM, and you will receive an
121+
error when attempting to **Finalize** your maintenance policy.
122+
123+
- Each template can be linked to one maintenance policy only. All schedules attached to a maintenance policy are
124+
initiated on the attached clusters during the specified upgrade window. If you do not want all schedules applied
125+
to certain clusters, consider creating another maintenance policy and attaching it to a separate cluster template.
120126

121127
:::
122128

docs/docs-content/downloads/artifact-studio.md

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Agent mode binaries cannot be downloaded at this time.
113113

114114
:::
115115

116-
![Image of Create pack bundle](../../../static/assets/docs/images/downloads/downloads_artifact-studio-build-bundle-4-7-a.webp)
116+
![Image of Create pack bundle](../../../static/assets/docs/images/downloads/downloads_artifact-studio-build-bundle-4-7-45.webp)
117117

118118
3. On the **Select Product** page, select either **Palette Enterprise Appliance** or **Palette Vertex Appliance**.
119119

@@ -136,13 +136,18 @@ Agent mode binaries cannot be downloaded at this time.
136136
Data centers include **MAAS**, **OpenStack**, and **vSphere**.
137137

138138
7. On the **Configure bundle** page, select the **OS** layer to begin building your bundle. Only the packs compatible
139-
with your previous selections are displayed. Choose an operating system and select **Next Layer**.
139+
with your previous selections are displayed. Choose an operating system and use the **Select option** drop-down menu
140+
to choose the desired version of your pack. Once selected, the pack appears in the **Selected items** pane on the
141+
right. Select **Next Layer**.
140142

141-
8. Choose your Kubernetes distribution and version and select **Next Layer**.
143+
8. Choose your Kubernetes distribution and use the **Select option** drop-down menu to choose the desired version of
144+
your pack. Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Layer**.
142145

143-
9. Choose your networking pack and select **Next Layer**.
146+
9. Choose your networking pack and use the **Select option** drop-down menu to choose the desired version of your pack.
147+
Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Layer**.
144148

145-
10. Choose your storage pack and select **Next Layer**.
149+
10. Choose your storage pack and use the **Select option** drop-down menu to choose the desired version of your pack.
150+
Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Layer**.
146151

147152
11. Add additional packs to your bundle as needed. When finished, select **Add to Bundle**.
148153

@@ -170,13 +175,18 @@ infrastructure type of **Edge Native** is assumed.
170175
:::
171176

172177
6. On the **Configure bundle** page, select the **OS** layer to begin building your bundle. Only the packs compatible
173-
with your previous selections are displayed in each layer. Choose an operating system and select **Next Layer**.
178+
with your previous selections are displayed in each layer. Use the **Select option** drop-down menu to choose the
179+
desired version of your pack. Once selected, the pack appears in the **Selected items** pane on the right. Choose an
180+
operating system and select **Next Layer**.
174181

175-
7. Choose your Kubernetes distribution and version and select **Next Layer**.
182+
7. Choose your Kubernetes distribution and use the **Select option** drop-down menu to choose the desired version of
183+
your pack. Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Layer**.
176184

177-
8. Choose your networking pack and select **Next Layer**.
185+
8. Choose your networking pack and use the **Select option** drop-down menu to choose the desired version of your pack.
186+
Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Layer**.
178187

179-
9. Choose your storage pack and select **Next Layer**.
188+
9. Choose your storage pack and use the **Select option** drop-down menu to choose the desired version of your pack.
189+
Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Layer**.
180190

181191
10. Add additional packs to your bundle as needed. When finished, select **Add to Bundle**.
182192

@@ -196,7 +206,9 @@ infrastructure type of **Edge Native** is assumed.
196206
<TabItem label="Add-On" value="addon">
197207

198208
6. When you select **Add-on only**, you are automatically taken to the **Configure bundle** page. Here, you can search
199-
for and select any packs you want to download. Select **Next Step** once you have selected your desired packs.
209+
for and select any packs you want to download. Use the **Select option** drop-down menu to choose the desired version
210+
of your pack. Once selected, the pack appears in the **Selected items** pane on the right. Select **Next Step** once
211+
you have selected your desired packs.
200212

201213
7. Confirm that the bundle specifications and content are correct. If you need to make any changes, return to the
202214
applicable page using the left menu. To add additional packs, select **Explore additional add-ons**.
@@ -222,26 +234,25 @@ information on how to verify the authenticity and integrity of your bundles, ref
222234

223235
2. In the **Create pack bundle** section, select **Browse Packs**.
224236

225-
![Image showing where to download individual packs](../../../static/assets/docs/images/downloads/downloads_artifact-studio-browse-packs-4-7-a.webp)
237+
![Image showing where to download individual packs](../../../static/assets/docs/images/downloads/downloads_artifact-studio-browse-packs-4-7-45.webp)
226238

227239
3. On the left menu, choose any applicable pack filters, such as **Product**, product **Version**, **Cloud type**, and
228240
**Layer type**. Beside the search bar are additional filters: infrastructure type (**AMD64** or **ARM64**), and FIPS
229241
compliance (FIPS or non-FIPS).
230242

231243
4. After you have applied any necessary filters, navigate through the list of packs. Use the **Search** bar to filter
232-
your results further.
244+
your results further. Use the **Select option** drop-down menu to choose the desired version of your pack. Once
245+
selected, the pack appears in the **Selected items** pane on the right.
233246

234-
![Image showing filter and search together](../../../static/assets/docs/images/downloads/downloads_artifact-studio-search-and-filter-4-7-a.webp)
247+
![Image showing download of multiple packs](../../../static/assets/docs/images/downloads/downloads_artifact-studio-ind-packs-dl-4-7-2025-45.webp)
235248

236-
5. When finished, select the **I'm not a robot** reCAPTCHA checkbox, and select **Download Bundle**. Alternatively, you
237-
can **Copy all URLs** so that you can download the applicable files later in an alternate manner of your choosing,
238-
such as via `curl`.
249+
5. Repeat step 4 until you have added all necessary packs. When finished, select the **I'm not a robot** reCAPTCHA
250+
checkbox, and select **Download Bundle**. Alternatively, you can **Copy all URLs** so that you can download the
251+
applicable files later in an alternate manner of your choosing, such as via `curl`.
239252

240253
6. The download begins. Each pack is downloaded as an individual ZST file (`<pack-name>.zst`) with an accompanying
241254
signature file (`<pack-name>.sig.bin`).
242255

243-
![Image showing download of multiple packs](../../../static/assets/docs/images/downloads/downloads_artifact-studio-individual-packs-download-4-7-a.webp)
244-
245256
:::tip
246257

247258
Ensure that pop-ups are enabled in your browser for [Artifact Studio](https://artifact-studio.spectrocloud.com/) to

docs/docs-content/enterprise-version/upgrade/upgrade.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ Refer to the following tables for the supported self-hosted Palette upgrade path
3636
Before upgrading Palette to a new major version, you must first update it to the latest patch version of the latest
3737
minor version available.
3838

39+
Use the [Find Breaking Changes](../../release-notes/breaking-changes.md) page to list all the breaking changes between
40+
Palette versions. Ensure that you have addressed all changes before upgrading Palette.
41+
3942
:::
4043

4144
:::warning

0 commit comments

Comments
 (0)