Skip to content

Commit ad2051f

Browse files
committed
Improve usage doc, fix typos and follow style guide
1 parent a322152 commit ad2051f

File tree

10 files changed

+125
-199
lines changed

10 files changed

+125
-199
lines changed

docs/baremetal/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ in a Kubernetes-native way. It leverages the power of Kubernetes Custom Resource
1414
The core components of the baremetal automation in IronCore include:
1515
- [**Metal Operator**](https://github.com/ironcore-dev/metal-operator): The central component that manages the lifecycle of bare metal servers.
1616
- [**Boot Operator**](https://github.com/ironcore-dev/boot-operator): iPXE and HTTP boot server that provides boot images and Ignition configurations.
17-
- [**FeDHCP**](https://github.com/ironcore-dev/fedhcp): A DHCP server that provides inband and out of band network configuration to bare metal servers.
17+
- [**FeDHCP**](https://github.com/ironcore-dev/fedhcp): A DHCP server that provides in-band and out-of-band network configuration to bare metal servers.
1818

1919
## Concepts and Usage Guides
2020

docs/iaas/architecture/networking.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ The `apinetlet` will reconcile this `VirtualIP` by performing the following step
5050
1. Create an `IP` object in the `ironcore-net` API, which reserves a unique IP address.
5151
2. Update the `VirtualIP` status with the allocated IP address.
5252

53-
The `ironcore` API server is agnostic on how the underlying global IP address is allocated and delegates this responsibility
53+
The `IronCore` API server is agnostic on how the underlying global IP address is allocated and delegates this responsibility
5454
to `ironcore-net`.
5555

56-
A similar flow happens for `Networks`, `LoadBalancer` and `NatGateways` resources, where the `apinetlet` is responsible
56+
A similar flow happens for `Network`, `LoadBalancer` and `NatGateway` resources, where the `apinetlet` is responsible
5757
for translating and allocating the necessary resources in `ironcore-net` to ensure that the networking requirements are met.
5858

5959
### `metalnetlet` and `metalnet`

docs/iaas/architecture/runtime-interface.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ There are three main runtime interfaces in IronCore:
1212
Implementations of these interfaces are done by provider-specific components. More infomation about the provider can
1313
be found in the [provider concept documentation](/iaas/architecture/providers/).
1414

15-
The definition of the runtime interfaces can be found in IronCores [`iri` package](https://github.com/ironcore-dev/ironcore/tree/main/iri/).
15+
The definition of the runtime interfaces can be found in IronCore's [`iri` package](https://github.com/ironcore-dev/ironcore/tree/main/iri/).
1616

1717
## MachineRuntime Interface
1818

@@ -40,9 +40,7 @@ service MachineRuntime {
4040
}
4141
```
4242

43-
The general idea is that a `machinepoollet` ensures that the API level dependencies are met. For example, a `Machine`s
44-
`Volume` which is used as a root disk is in the state `Available`. If those prerequisites are met, the `poollet` will
45-
call the corresponding `CreateMachine` method of the `RuntimeInterface` to create the `Machine` resource.
43+
The general idea is that a `machinepoollet` ensures that the API level dependencies are met. For example, a `Machine`'s `Volume` which is used as a root disk is in the state `Available`. If those prerequisites are met, the `poollet` will call the corresponding `CreateMachine` method of the `RuntimeInterface` to create the `Machine` resource.
4644

4745
The `ListMachines` and `Status` methods are used to retrieve a list of all `Machine` instances managed by the provider.
4846
The result of those methods is then used to propagate `Machine` state changes. Those methods are periodically called by
@@ -53,7 +51,7 @@ methods to attach volumes or network interfaces to a `Machine` if a change in th
5351

5452
## VolumeRuntime Interface
5553

56-
Similar to the `MachineRuntime`, the `VolumeRuntime` interface is responsible for managing storage resources in IronCore.
54+
Similar to the `MachineRuntime`, the `VolumeRuntime` interface is responsible for managing block storage resources in IronCore.
5755
Here the `volumepoollet` takes a similar role as the `machinepoollet` for the `MachineRuntime` and invokes `CreateVolume`,
5856
`DeleteVolume`, `ExpandVolume`, and other methods to manage `Volume` resources.
5957

docs/iaas/kubernetes/csi-driver.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ management capabilities.
88

99
## IronCore CSI Driver Integration
1010

11-
The [Ironcore CSI Driver](https://github.com/ironcore-dev/ironcore-csi-driver) is implemented as a Kubernetes storage
11+
The [IronCore CSI Driver](https://github.com/ironcore-dev/ironcore-csi-driver) is implemented as a Kubernetes storage
1212
plugin that bridges the gap between Kubernetes storage management and IronCore's `storage` resource types.
1313

1414
The core components of the IronCore CSI driver include:
@@ -20,8 +20,8 @@ The core components of the IronCore CSI driver include:
2020

2121
The CSI driver supports various storage class parameters for customizing volume provisioning:
2222

23-
- **Volume Type**: Specifies the type of volume to be created (e.g., standard, high-performance)
24-
- **AllowVolumeExpansion**: This Specifies the Volume can be resized if set to `true` and the respective volume Type has `ResizePolicy` set to `ExpandOnly`
23+
- **Volume Type**: Specifies the type of volume to be created (e.g., standard, high-performance).
24+
- **AllowVolumeExpansion**: This specifies that the `Volume` can be resized if set to `true` and the respective volume Type has `ResizePolicy` set to `ExpandOnly`.
2525

2626
### Volume Management
2727

docs/iaas/usage-guides/compute.md

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Compute Resources
22

3+
IronCore compute resources are `Machines`, their associated `Machineclasses` and `MachinePools` that allow you to define, provision, and manage virtual machines. This guide explains the core compute resource types and how to use them.
4+
35
## Machine
46

57
A `Machine` resource in IronCore is used to represent a compute resource or a virtual machine. It serves as a means to
@@ -34,48 +36,21 @@ spec:
3436
3537
- `machineClassRef` (`string`): Is a reference to the `MachineClass` of the machine.
3638
- `machinePoolRef` (`string`): Defines the `MachinePool` to run the `Machine` on. If empty, the IronCore scheduler will figure out an appropriate pool to run the `Machine` on.
37-
- `image` (`string`): Image is the optional URL providing the operating system image to memory boot the `Machine`. A detailed description of OS images can be found the corresponding [section](/iaas/architecture/os-images).
39+
- `image` (`string`): Image is the optional URL providing the operating system image to memory boot the `Machine`. A detailed description of OS images can be found in the corresponding [section](/iaas/architecture/os-images).
3840
- `volumes` (`list`): Are list of `Volumes` attached to this machine. Here the first volume is considered as the root disk. Each volume is defined with a name and a reference to the `Volume` resource.
3941
- `networkInterfaces` (`list`): Define a list of network interfaces present on the machine.
40-
- `ignitionRef` (`string`): Is a reference to a `secret` containing the ignition YAML for the machine to boot up. If the `key` value is empty, the `DefaultIgnitionKey=ignition` will be used as a fallback.
41-
42-
43-
### Reconciliation Process
44-
45-
1. **Machine Scheduling**:
46-
The `MachineScheduler` controller continuously watches for `Machines` without an assigned `MachinePool` and tries to schedule it on available and matching MachinePool.
47-
- **Monitor Unassigned Machines**: The scheduler continuously watches for machines without an assigned `machinePoolRef`.
48-
- **Retrieve Available Machine Pools**: The scheduler fetches the list of available machine pools from the cache.
49-
- **Make Scheduling Decisions**: The scheduler selects the most suitable machine pool based on resource availability and other policies.
50-
- **Update Cache**: The scheduler updates the cache with recalculated allocatable `machineClass` quantities.
51-
- **Assign MachinePoolRef**: The scheduler assigns the selected `machinePoolRef` to the machine object.
52-
53-
More information on how the IRI contract works can be found in the [IronCore Runtime Interface (IRI)](/iaas/architecture/runtime-interface) section.
42+
- `ignitionRef` (`string`): Is a reference to a `Secret` containing the ignition YAML for the machine to boot up. If the `key` value is empty, the `DefaultIgnitionKey=ignition` will be used as a fallback.
5443

55-
4. **Network Interface handling**: `MachineControllerNetworkinterface` takes care of attaching/detaching `NetworkInterfaces` defined for the `Machine`. Once the attachment is successful status is updated from `Pending` to `Attached`.
56-
57-
5. **Volume handling**: `MachineControllerVolume` takes care of attach/detach of `Volumes` defined for a `Machine`. Once the attachment is successful status is updated from `Pending` to `Attached`.
58-
59-
6. **Ephemeral resource handling**:
60-
- The `Volume` and `NetworkIntreface` can be bound with the lifecycle of the Machine by creating them as ephemeral resources. (`Note`: For more details on how to create ephemeral resources refer to <a href="https://github.com/ironcore-dev/ironcore/tree/main/config/samples/e2e/machine-with-ephemeral-resources">Machine with ephemeral resources</a>)
61-
- If a `NetworkIntreface` or a `Volume` is defined as ephemeral `MachineEphemeralControllers` takes care of creating and destroying respective objects on creation/deletion of the machine.
62-
63-
### Lifecycle and States
64-
65-
A Machine can be in the following states:
66-
1. **Pending**: A Machine is in a Pending state when the Machine has been accepted by the system, but not yet completely started. This includes time before being bound to a MachinePool, as well as time spent setting up the Machine on that MachinePool.
67-
2. **Running**: A Machine in Running state when the machine is running on a MachinePool.
68-
2. **Shutdown**: A Machine is in a Shutdown state.
69-
3. **Terminating**: A Machine is Terminating.
70-
2. **Terminated**: A Machine is in the Terminated state when the machine has been permanently stopped and cannot be started.
44+
Detailed e2e examples on `Machine` creation with ephemeral/non-ephemeral `Volume` and `NetworkInterface`
45+
- [Machine with ephemeral resources](https://github.com/ironcore-dev/ironcore/tree/main/config/samples/e2e/machine-with-ephemeral-resources)
46+
- [Machine with non ephemeral resources](https://github.com/ironcore-dev/ironcore/tree/main/config/samples/e2e/machine-with-non-ephemeral-resources)
7147

7248
## MachineClass
7349

7450
A `MachineClass` is an IronCore resource used to represent a class/flavor of a `Machine`. It serves as a means to
75-
define the number of resources a `Machine` object can have as capabilities (e.g. CPU, memory) associated with a
76-
particular class.
51+
define the number of resources a `Machine` object can have as capabilities (e.g. CPU, memory) associated with a particular class.
7752

78-
### Example Machine Resource
53+
### Example MachineClass Resource
7954

8055
An example of how to define a `MachineClass` resource:
8156

@@ -91,15 +66,18 @@ capabilities:
9166

9267
**Key Fields**:
9368

94-
- capabilities (`ResourceList`): capabilities are used to define a list of resources a Machine can have along with its capacity.
69+
- `capabilities` (`ResourceList`): Capabilities are used to define a list of resources a Machine can have, along with its capacity.
9570

9671
## MachinePool
9772

9873
A `MachinePool` is a resource in IronCore that represents a pool of compute resources managed collectively. It defines
9974
the infrastructure's compute configuration used to provision and manage `Machines`, ensuring resource availability and
100-
compatibility with associated `MachineClasses`. (`Note`: One `machinepoollet` is responsible for one `MachinePool`)
75+
compatibility with associated `MachineClasses`.
76+
77+
**Note:**
78+
One `machinepoollet` is responsible for one `MachinePool`.
10179

102-
Details on how `Pools` are announced and used can be found in the [Pools and Poollets](/iaas/architecture/scheduling) section.
80+
Details on how `MachinePools` are announced and used can be found in the [Pools and Poollets](/iaas/architecture/scheduling) section.
10381

10482
### Example MachinePool Resource
10583

@@ -116,5 +94,5 @@ spec:
11694

11795
**Key Fields**:
11896

119-
- `ProviderID`(`string`): The `providerId` helps the controller identify and communicate with the correct compute
97+
- `providerID` (`string`): The `providerId` helps the controller identify and communicate with the correct compute
12098
system within the specific backend compute provider.

docs/iaas/usage-guides/core.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
# Core Resources
22

3+
This guide describes the core resource types in IronCore and how to use them to manage and limit resource usage.
4+
35
## ResourceQuota
46

57
A `ResourceQuota` in IronCore provides a mechanism to manage and limit the usage of resources across multiple
68
requesting entities. This allows protecting the system from usage spikes and services can be kept responsive. With the
7-
help of `ResourceQuota` a hard limit with a list of resources along with `ScopeSelector` can be set for `Namespace` and
8-
restricted hereby the amount of resources a user can create.
9+
help of `ResourceQuota`, you can set a hard limit with a list of resources and a `ScopeSelector` for a `Namespace`, restricting the amount of resources a user can create.
910

1011
::: tip
1112
`ResourceQuota` is a namespaced resource, and it can only limit resource count/accumulated resource usage within a defined namespace.
@@ -29,16 +30,9 @@ spec:
2930
3031
### Key Fields:
3132
32-
- `hard`(`ResourceList`): Is a `ResourceList` of the strictly enforced number of resources. `ResourceList` is a list of ResourceName alongside their resource quantity.
33-
- `scopeSelector`(`ResourceScopeSelector`): scopeSelector selects the resources that are subject to this quota.
33+
- `hard` (`ResourceList`): Is a `ResourceList` of the strictly enforced number of resources. `ResourceList` is a list of ResourceName alongside their resource quantity.
34+
- `scopeSelector` (`ResourceScopeSelector`): scopeSelector selects the resources that are subject to this quota.
3435

3536
::: tip
3637
By using `scopeSelectors`, only certain resources like CPU and memory may be tracked.
3738
:::
38-
39-
### Reconciliation Process:
40-
41-
- **Gathering matching evaluators**: The `ResourceQuotaController` retrieves all the matching evaluators from the registry for the specified resources in hard spec. Each resource evaluator implements set of Evaluator interface methods which helps in retrieving the current usage of that particular resource type.
42-
- **Calculating resource usage**: Resource usage is calculated by iterating over each evaluator and listing the namespace resource of that particular type. Listed resources are then filtered out by matching specified scope selector and accumulated usage is calculated.
43-
- **Status update**: Once usage data is available, the `ResourceQuota` status is updated with the enforced hard resource limits and currently used resources.
44-
- **Resource quota handling**: On request of create/update resources whether to allow creating/update based on `ResourceQuota` usage is handled via admission controller. Resources that would exceed the quota will fail with HTTP status code 403 Forbidden.

docs/iaas/usage-guides/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ operations. Those guides are intended to give the user a comprehensive understan
77
More examples and detailed usage can be found in the [end to end examples](https://github.com/ironcore-dev/ironcore/tree/main/config/samples/e2e)
88
in the `ironcore` repository.
99

10-
Detailed API references for the IronCore IaaS types can be found in the [API References](../api-references/) section.
10+
Detailed API references for the IronCore IaaS types can be found in the [API References](../api-references/) section.

docs/iaas/usage-guides/ipam.md

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# IPAM Resources
2+
This guide explains how to use IronCore's integrated IP address management (IPAM) resources to define and manage IP prefixes and allocations.
23

34
## Prefix
45

56
A `Prefix` resource provides a fully integrated IP address management (IPAM) solution inside IronCore. It serves as a
67
means to define IP prefixes along with prefix length to a reserved range of IP addresses. It is also possible to define
78
child prefixes with the specified prefix length referring to the parent prefix.
89

9-
### Example Volume Resource
10+
### Example Prefix Resource
1011

1112
An example of how to define a root `Prefix` resource in IronCore:
1213

@@ -38,21 +39,15 @@ spec:
3839

3940
### Key Fields:
4041

41-
- `ipFamily`(`string`): Is the IPFamily of the prefix. If unset but `Prefix` is set, this can be inferred.
42+
- `ipFamily` (`string`): Is the IPFamily of the prefix. If unset but `Prefix` is set, this can be inferred.
4243
- `prefix` (`string`): `prefix` is the IP prefix to allocate for this Prefix.
4344
- `prefixLength` (`int`): `prefixLength` is the length of prefix to allocate for this Prefix.
4445
- `parentRef` (`string`): `parentRef` references the parent to allocate the Prefix from. If `parentRef` and `parentSelector` is empty, the Prefix is considered a root prefix and thus allocated by itself.
4546
- `parentSelector` (`LabelSelector`): `parentSelector` is the LabelSelector to use for determining the parent for this Prefix.
4647

48+
Once prefix allocation is successful, status is updated to `Allocated`. In the case of sub-prefixes once the prefix is allocated the parent Prefix's status gets updated with the used prefix IPs list.
4749

48-
# Reconciliation Process:
49-
50-
- **Allocate root prefix**: If `parentRef` and `parentSelector` is empty, the PrefixController reconciler considers it as a root prefix and allocates by itself and the status is updated as `Allocated`.
51-
- **Allocating sub-prefix**: If `parentRef` or `parentSelector` is set PrefixController lists all the previously allocated prefix allocations by parent prefix. Finds all the active allocations and prunes outdated ones. If no existing PrefixAllocation object is found new `PrefixAllocation` object is created for the new prefix to allocate. If prefix allocation is successful status is updated to `Allocated` otherwise to `Failed`.
52-
- **Prefix allocation scheduler**: `PrefixAllocationScheduler` continuously watches for Prefix resource and tries to schedule all PrefixAllocation objects for which prefix is not yet allocated. PrefixAllocationScheduler determines suitable prefix for allocation by listing available prefixes based on label filter, namespace and desired IP family. Once a suitable prefix is found PrefixAllocation spec.parentRef is updated with the selected prefix reference.
53-
- **Status update**: Once prefix allocation is successful status is updated to `Allocated`. In the case of sub-prefixes once the prefix is allocated `PrefixController` updates the parent Prefix's status with the used prefix IPs list.
54-
55-
Below is the sample `Prefix.status` :
50+
Below is the sample `Prefix.status`:
5651

5752
```yaml
5853
status:

0 commit comments

Comments
 (0)