You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/baremetal/index.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ in a Kubernetes-native way. It leverages the power of Kubernetes Custom Resource
14
14
The core components of the baremetal automation in IronCore include:
15
15
-[**Metal Operator**](https://github.com/ironcore-dev/metal-operator): The central component that manages the lifecycle of bare metal servers.
16
16
-[**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.
Copy file name to clipboardExpand all lines: docs/iaas/architecture/runtime-interface.md
+3-5Lines changed: 3 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ There are three main runtime interfaces in IronCore:
12
12
Implementations of these interfaces are done by provider-specific components. More infomation about the provider can
13
13
be found in the [provider concept documentation](/iaas/architecture/providers/).
14
14
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/).
16
16
17
17
## MachineRuntime Interface
18
18
@@ -40,9 +40,7 @@ service MachineRuntime {
40
40
}
41
41
```
42
42
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.
46
44
47
45
The `ListMachines` and `Status` methods are used to retrieve a list of all `Machine` instances managed by the provider.
48
46
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
53
51
54
52
## VolumeRuntime Interface
55
53
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.
57
55
Here the `volumepoollet` takes a similar role as the `machinepoollet` for the `MachineRuntime` and invokes `CreateVolume`,
58
56
`DeleteVolume`, `ExpandVolume`, and other methods to manage `Volume` resources.
Copy file name to clipboardExpand all lines: docs/iaas/kubernetes/csi-driver.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ management capabilities.
8
8
9
9
## IronCore CSI Driver Integration
10
10
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
12
12
plugin that bridges the gap between Kubernetes storage management and IronCore's `storage` resource types.
13
13
14
14
The core components of the IronCore CSI driver include:
@@ -20,8 +20,8 @@ The core components of the IronCore CSI driver include:
20
20
21
21
The CSI driver supports various storage class parameters for customizing volume provisioning:
22
22
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`.
Copy file name to clipboardExpand all lines: docs/iaas/usage-guides/compute.md
+16-38Lines changed: 16 additions & 38 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,7 @@
1
1
# Compute Resources
2
2
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
+
3
5
## Machine
4
6
5
7
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:
34
36
35
37
- `machineClassRef` (`string`): Is a reference to the `MachineClass` of the machine.
36
38
- `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).
38
40
- `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.
39
41
- `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.
54
43
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)
71
47
72
48
## MachineClass
73
49
74
50
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.
77
52
78
-
### Example Machine Resource
53
+
### Example MachineClass Resource
79
54
80
55
An example of how to define a `MachineClass` resource:
81
56
@@ -91,15 +66,18 @@ capabilities:
91
66
92
67
**Key Fields**:
93
68
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.
95
70
96
71
## MachinePool
97
72
98
73
A `MachinePool` is a resource in IronCore that represents a pool of compute resources managed collectively. It defines
99
74
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`.
101
79
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.
103
81
104
82
### Example MachinePool Resource
105
83
@@ -116,5 +94,5 @@ spec:
116
94
117
95
**Key Fields**:
118
96
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
120
98
system within the specific backend compute provider.
Copy file name to clipboardExpand all lines: docs/iaas/usage-guides/core.md
+5-11Lines changed: 5 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,11 +1,12 @@
1
1
# Core Resources
2
2
3
+
This guide describes the core resource types in IronCore and how to use them to manage and limit resource usage.
4
+
3
5
## ResourceQuota
4
6
5
7
A `ResourceQuota` in IronCore provides a mechanism to manage and limit the usage of resources across multiple
6
8
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.
9
10
10
11
::: tip
11
12
`ResourceQuota` is a namespaced resource, and it can only limit resource count/accumulated resource usage within a defined namespace.
@@ -29,16 +30,9 @@ spec:
29
30
30
31
### Key Fields:
31
32
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.
34
35
35
36
::: tip
36
37
By using `scopeSelectors`, only certain resources like CPU and memory may be tracked.
37
38
:::
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.
Copy file name to clipboardExpand all lines: docs/iaas/usage-guides/ipam.md
+5-10Lines changed: 5 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,13 @@
1
1
# 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.
2
3
3
4
## Prefix
4
5
5
6
A `Prefix` resource provides a fully integrated IP address management (IPAM) solution inside IronCore. It serves as a
6
7
means to define IP prefixes along with prefix length to a reserved range of IP addresses. It is also possible to define
7
8
child prefixes with the specified prefix length referring to the parent prefix.
8
9
9
-
### Example Volume Resource
10
+
### Example Prefix Resource
10
11
11
12
An example of how to define a root `Prefix` resource in IronCore:
12
13
@@ -38,21 +39,15 @@ spec:
38
39
39
40
### Key Fields:
40
41
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.
42
43
- `prefix` (`string`): `prefix`is the IP prefix to allocate for this Prefix.
43
44
- `prefixLength` (`int`): `prefixLength`is the length of prefix to allocate for this Prefix.
44
45
- `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.
45
46
- `parentSelector` (`LabelSelector`): `parentSelector`is the LabelSelector to use for determining the parent for this Prefix.
46
47
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.
47
49
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.
0 commit comments