diff --git a/docs/appendix/index.md b/docs/appendix/index.md index 71df05093..837584fa6 100644 --- a/docs/appendix/index.md +++ b/docs/appendix/index.md @@ -6,4 +6,5 @@ - [Cloud provider credentials management in CAPI](appendix-providers.md) - [Running k0rdent on ARM64](arm64.md) - [KubeVirt Infrastructure Cluster Preparation](kubevirt-infra.md) +- [Confirming default storage class](storageclass.md) - [Glossary](glossary.md) diff --git a/docs/appendix/storageclass.md b/docs/appendix/storageclass.md new file mode 100644 index 000000000..458959fe9 --- /dev/null +++ b/docs/appendix/storageclass.md @@ -0,0 +1,85 @@ +# Verifying a default StorageClass + +Some operations, such as deploying a remote (SSH-based) cluster, require the management cluster to have a default `StorageClass`. Follow these steps: + +1. If not already installed, install and configure a `StorageClass` provider of your choice. + +2. Make sure you see the default setting: + + ```bash + kubectl get storageclass + ``` + + You should see a result such as: + + ```console { .no-copy } + NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE + mayastor-etcd-localpv openebs.io/local Delete WaitForFirstConsumer false 2m2s + openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 2m2s + openebs-loki-localpv openebs.io/local Delete WaitForFirstConsumer false 2m2s + openebs-minio-localpv openebs.io/local Delete WaitForFirstConsumer false 2m2s + openebs-single-replica io.openebs.csi-mayastor Delete Immediate true 2m2s + ``` + +3. Create a test PVC: + + ```bash + cat <<'EOF' | kubectl apply -f - + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: test-pvc + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + EOF + ``` + +4. Create a test pod: + + ```bash + cat <<'EOF' | kubectl apply -f - + apiVersion: v1 + kind: Pod + metadata: + name: test-pvc-pod + spec: + containers: + - name: test + image: busybox + command: ["sh", "-c", "echo hello > /data/test.txt && sleep 3600"] + volumeMounts: + - name: data + mountPath: /data + volumes: + - name: data + persistentVolumeClaim: + claimName: test-pvc + EOF + ``` + +5. Check the results: + + ```bash + kubectl get pod test-pvc-pod + kubectl get pvc test-pvc + ``` + ```console { .no-copy } + NAME READY STATUS RESTARTS AGE + test-pvc-pod 1/1 Running 0 20s + + NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE + test-pvc Bound pvc-61b4dd8b-9bcc-48e3-9055-9f0f80ea9abd 1Gi RWO openebs-hostpath 36s + ``` + + You should see the PVC become `Bound`. + +6. Finally, clean up the test: + + ```bash + kubectl delete pod test-pvc-pod + kubectl delete pvc test-pvc + ``` \ No newline at end of file diff --git a/docs/quickstarts/quickstart-2-remote.md b/docs/quickstarts/quickstart-2-remote.md index 2070d1e92..aa4141c64 100644 --- a/docs/quickstarts/quickstart-2-remote.md +++ b/docs/quickstarts/quickstart-2-remote.md @@ -4,10 +4,10 @@ In many cases, you will want {{{ docsVersionInfo.k0rdentName }}} (running on you The remote machines that will be part of the cluster must meet the following prerequisites: -1. A Linux-based operating system. All remote hosts must satisfy the [k0s system requirements](https://docs.k0sproject.io/stable/system-requirements/). -2. SSH access must be enabled for the root user, and the SSH key must be correctly configured and authorized on all remote machines. -3. Internet connectivity must be available on all remote machines. -4. Network connectivity must exist between the management cluster and the remote hosts’ networks. +1. Linux-based operating system; the remote hosts should meet the [k0s system requirements](https://docs.k0sproject.io/stable/system-requirements/). Note that Ubuntu 26.04 is not yet supported by k0s. +2. SSH access enabled for the root user, with the SSH key be correctly configured and authorized on all remote machines. +3. Internet connectivity must be available on all remote machines. +4. Network connectivity must exist between the management cluster and the remote hosts’ networks. If you haven't yet created a management node and installed k0rdent, go back to [QuickStart 1 - Management node and cluster](quickstart-1-mgmt-node-and-cluster.md). @@ -15,8 +15,9 @@ Note that if you have already done one of the other quickstarts, such as our AWS Before proceeding, make sure your management cluster meets the following requirements: +1. A filesystem with [appropriate limits](../troubleshooting/known-issues-remote.md#control-plane-pods-are-in-crashloopbackoff-too-many-open-files-error) set. 1. CSI provider installed and properly configured for persistent storage to support Persistent Volumes. -2. A [default storage class](https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/) is configured on the management cluster. +2. A [default storage class](https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/) is configured on the management cluster to support Persistent Volumes. Make sure the storage class is [configured and working properly](../appendix/storageclass.md). 2. If the API server will be exposed as a `LoadBalancer` (default), ensure the appropriate cloud provider is installed on the management cluster. ## Create a Secret object containing the private SSH key to access remote machines @@ -157,7 +158,7 @@ kcm-system vsphere-standalone-cp-{{{ extra.docsVersionInfo.providerVersions.da ## Create your ClusterDeployment -To deploy a cluster, create a YAML file called `my-remote-clusterdeployment1.yaml`. We'll use this to create a `ClusterDeployment` object representing the deployed cluster. The `ClusterDeployment` identifies for {{{ docsVersionInfo.k0rdentName }}} the `ClusterTemplate` you want to use for cluster creation, the identity credential object you want to create it under, plus the machines' IP addresses (represented by the placeholder `MACHINE_0_ADDRESS` and `MACHINE_1_ADDRESS` below), the SSH port of the remote machines and the user to use when connecting to remote machines (`root`): +To deploy a cluster, create a YAML file called `my-remote-clusterdeployment1.yaml`. We'll use this to create a `ClusterDeployment` object representing the deployed cluster. The `ClusterDeployment` identifies for {{{ docsVersionInfo.k0rdentName }}} the `ClusterTemplate` you want to use for cluster creation, the identity credential object you want to create it under, plus the machines' IP addresses (represented by the placeholder `MACHINE_0_ADDRESS` and `MACHINE_1_ADDRESS` below), the SSH port of the remote machines and the user to use when connecting to remote machines (`root`). Also, if necessary, specify the k0s version; at the time of this writing, v1.35.4 is required: > NOTE: > The user must have root permissions. @@ -176,9 +177,11 @@ spec: credential: remote-cred propagateCredentials: false config: + k0s: + version: v1.35.4+k0s.0 k0smotron: service: - type: LoadBalancer + type: NodePort machines: - address: $MACHINE_0_ADDRESS user: root # The user must have root permissions diff --git a/mkdocs.yml b/mkdocs.yml index 2d8c1d05b..66ba77616 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -303,6 +303,7 @@ nav: - Configuration: appendix/telemetry/configuration.md - Proxy configuration: appendix/proxy.md - KubeVirt Infrastructure Cluster Preparation: appendix/kubevirt-infra.md + - Verifying a default `StorageClass`: appendix/storageclass.md - Release Notes: - Overview: release-notes/index.md - v1.9.0: release-notes/release-notes-v1.9.0.md @@ -374,7 +375,7 @@ extra: k0rdentVersion: 1-9-0 k0rdentDotVersion: 1.9.0 ociRegistry: oci://ghcr.io/k0rdent/kcm/charts/kcm - k0rdentDigestValue: sha256:0eae48c8098e06138001578945657556ac9aeb21fe9e1f7c4aa8406f9c2f71f0 + k0rdentDigestValue: sha256:6fb502f1625ad4d6cf6d09d93ba4071364fd4d78eafa35181e4196e74d2fe174 k0rdentDigestDate: Tue Apr 28 12:54:32 2026 k0rdentTagList: https://github.com/k0rdent/kcm/tags kofVersions: