Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/appendix/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
85 changes: 85 additions & 0 deletions docs/appendix/storageclass.md
Original file line number Diff line number Diff line change
@@ -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 <unset> 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
```
17 changes: 10 additions & 7 deletions docs/quickstarts/quickstart-2-remote.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@ 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).

Note that if you have already done one of the other quickstarts, such as our AWS QuickStart ([QuickStart 2 - AWS target environment](quickstart-2-aws.md)) or ([QuickStart 2 - Azure target environment](quickstart-2-azure.md)), you can use the same management cluster, continuing here with steps to add the ability to manage remote clusters. The k0rdent management cluster can accommodate multiple provider and credential setups, enabling management of multiple infrastructures. A big benefit of k0rdent is that it provides a single point of control and visibility across multiple clusters on multiple clouds and infrastructures.

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
Expand Down Expand Up @@ -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.
Expand All @@ -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
Expand Down
3 changes: 2 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down