Skip to content

Commit 3b31ea8

Browse files
JohnGarbuttMatt Pryor
authored andcommitted
Add initial blazar documentation (azimuth-cloud#190)
* Add initial Blazar documentation * Add initial notes about coral credits * Move blazar docs into a separate file * Fix typo * Add note about storage network * Rework new docs * Fix menu item * Small tidy of unclear language --------- Co-authored-by: Matt Pryor <[email protected]>
1 parent 1f7e6dd commit 3b31ea8

File tree

5 files changed

+211
-11
lines changed

5 files changed

+211
-11
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# OpenStack Blazar
2+
3+
!!! warning "Technology preview"
4+
5+
Blazar support is currently in technology preview and under active development.
6+
7+
Its possible how this feature works may radically change in a future release.
8+
9+
When available on the target cloud, Azimuth is able to make use of
10+
[Blazar](https://docs.openstack.org/blazar/latest/), an OpenStack service for reserving
11+
cloud resources. When Blazar support is enabled, Azimuth is able to create reservations
12+
for platforms and deploy platforms into those reservations.
13+
14+
Currently, Azimuth is using Blazar to give users better feedback about when the cloud is full,
15+
meaning that their platform cannot be created right now. This is a common issue with
16+
"fixed capacity" clouds, where there is more demand for resources than available capacity.
17+
18+
When creating a platform, users must specify how long they need that platform for. Azimuth
19+
translates this information, along with the parameters for the platform, into a request for
20+
a Blazar reservation (starting now) that can accomodate the requested platform. If this is
21+
successful then Azimuth creates the platform using the reserved resources. If it is not
22+
successful, Azimuth reports that the cloud is not able to accomodate the platform as currently
23+
configured and the user may try again with different parameters.
24+
25+
!!! info "Future work"
26+
27+
Blazar also supports creating reservations that start in the future, e.g. "can I have three
28+
machines of flavor X and two of flavor Y for two weeks starting tomorrow". This is useful for
29+
cases where it is known advance when resources will be required, and they can be reserved for
30+
that time. In the future, Azimuth will support creating platforms that start in the future
31+
using this mechanism.
32+
33+
## Blazar flavor plugin
34+
35+
Azimuth relies on the new
36+
[Blazar flavor plugin](https://opendev.org/openstack/blazar/src/branch/master/blazar/plugins/flavor/flavor_plugin.py)
37+
that allows resources to be reserved in Blazar using existing Nova flavors. When creating a
38+
reservation, the required number of servers of each flavor is specified and Blazar reserves
39+
the corresponding resources from its pool of hosts.
40+
41+
Azimuth does not currently support the host reservation or instance reservation plugins.
42+
43+
There is active work on the Blazar flavor plugin to improve the support for VMs with GPUs
44+
attached, and to allow [Ironic](https://docs.openstack.org/ironic/latest/) bare-metal nodes
45+
to be added as possible flavor reservation targets.
46+
47+
Currently, Azimuth only supports the case where all projects are able to access all configured
48+
Nova flavors via Blazar.
49+
50+
For more information on Blazar, and how to add hosts into Blazar's control, please see the
51+
[Blazar documentation](https://docs.openstack.org/blazar/latest/cli/flavor-based-instance-reservation.html).
52+
53+
## Coral Credits
54+
55+
Blazar has support for
56+
[delegating to an external service](https://docs.openstack.org/blazar/latest/admin/usage-enforcement.html#externalservicefilter)
57+
to determine whether a reservation is permitted.
58+
59+
[Coral Credits](https://github.com/stackhpc/coral-credits) is a new open-source service for
60+
facilitating sharing of resources using credit allocations. It implements the API required
61+
for Blazar to call out to it, allowing the creation of Blazar reservations to be constrained
62+
by the available credits for a project.
63+
64+
Coral Credits can be deployed as part of an Azimuth installation using the following:
65+
66+
```yaml title="environments/my-site/inventory/group_vars/all/variables.yml"
67+
coral_credits_enabled: yes
68+
```
69+
70+
For Details on how to configure Blazar to use Coral Credits as an enforcement plugin, and how
71+
to configure the credit allocations for each OpenStack project, see the
72+
[Coral Credits documentation](https://github.com/stackhpc/coral-credits/blob/main/README.md#blazar-configuration).
73+
74+
## Azimuth configuration
75+
76+
To enable "time-limited" platforms in Azimuth, i.e. platforms that are automatically deleted
77+
at a specified time in the future, set the following variable:
78+
79+
```yaml title="environments/my-site/inventory/group_vars/all/variables.yml"
80+
azimuth_scheduling_enabled: true
81+
```
82+
83+
When this variable is set, Azimuth users will be required to specify an end time for any
84+
platforms that they create.
85+
86+
!!! warning "Platforms cannot be extended"
87+
88+
Currently, Azimuth does **not** support extending the end time for a platform.
89+
90+
By default, this **does not** use Blazar reservations - Azimuth just ensures that the platform is
91+
deleted at the requested time. This is still useful to help to prevent resource squatting on clouds
92+
where Blazar is not available. However platforms can still encounter issues when the cloud is full
93+
because the resources are not reserved for the platform as they are in Blazar.
94+
95+
To tell Azimuth to create Blazar reservations for platforms, set the following variable:
96+
97+
```yaml title="environments/my-site/inventory/group_vars/all/variables.yml"
98+
azimuth_schedule_operator_blazar_enabled: true
99+
```
100+
101+
When this variable is set, Azimuth will attempt to create a Blazar lease for each platform. If
102+
the creation of the Blazar lease fails, Azimuth will report whether the problem was due to cloud
103+
capacity or being limited by credits. If the Blazar lease is created successfully, Azimuth will
104+
create the platform using the reserved resources.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# OpenStack Manila
2+
3+
!!! warning "Technology preview"
4+
5+
Manila support is currently in technology preview and under active development.
6+
7+
Its possible how this feature works may radically change in a future release.
8+
9+
[Manila](https://docs.openstack.org/manila/latest/) is the OpenStack service for providing shared
10+
read-write-many filesystems for OpenStack workloads.
11+
12+
## Project share
13+
14+
!!! warning "Limited platform support"
15+
16+
Currently, only the `Slurm` and `Linux Workstation` platforms support the project share.
17+
18+
Support for the other reference platforms is planned for the future.
19+
20+
!!! warning "Limited share type and protocol support"
21+
22+
Azimuth will use the default share type for the project, unless there is only one share type
23+
available. Azimuth also assumes that this share type supports the CephFS share protocol.
24+
25+
When Manila is available, Azimuth is able to provide a filesystem to platforms that is shared
26+
across all the platforms in a project, and persists beyond the lifetime of any single platform.
27+
The shared filesystem is mounted at `/project` within each platform, and data written to `/project`
28+
by one platform will be available to all the other platforms.
29+
30+
To enable project shares in Azimuth, set the following variable to the size (in GB) that you want
31+
to use for the project shares:
32+
33+
```yaml title="environments/my-site/inventory/group_vars/all/variables.yml"
34+
azimuth_openstack_manila_project_share_gb: 100
35+
```
36+
37+
For example, with this configuration Azimuth will ensure that a 100GB Manila share exists for each
38+
tenancy and make that available to platforms.
39+
40+
!!! warning "Resizing of shares is not supported"
41+
42+
If you increase the share size in your Azimuth configuration, new shares will be created at
43+
the new size but existing shares **will not** be resized.
44+
45+
Existing shares can be resized manually using the OpenStack CLI or Horizon dashboard.
46+
47+
Ansible-based platforms will receive the following variables that can be use to configure the share:
48+
49+
```yaml
50+
cluster_project_manila_share: true
51+
cluster_project_manila_share_name: "azimuth-project-share"
52+
cluster_project_manila_share_user: "proj-<project_id>"
53+
```
54+
55+
!!! warning "Project shares are not backed up"
56+
57+
There is no automated backup or snapshotting of project shares.
58+
59+
## Storage network automation
60+
61+
In order to access a Manila share, platforms need to be able to route to the storage service that
62+
is providing the share. This often requires an additional network to be attached to the machines
63+
that make up a platform.
64+
65+
Azimuth has the ability to detect and attach an additional network that is used for connecting
66+
to storage. Similar to the
67+
[internal and external network detection](./index.md#networking-configuration), Azimuth uses the
68+
[Neutron resource tag](https://docs.openstack.org/neutron/latest/contributor/internals/tag.html)
69+
`portal-storage` to identify the storage network.
70+
71+
If the storage network supports
72+
[SR-IOV](https://en.wikipedia.org/wiki/Single-root_input/output_virtualization), Azimuth is also
73+
able to utilise this which can improve performance when talking to the storage.
74+
75+
When Azimuth finds a network with the `portal-storage` tag, Ansible-based platforms will receive
76+
the following Ansible variable containing the name of the network, allowing them to connect a
77+
second NIC to it:
78+
79+
```yaml
80+
cluster_storage_network: "name-of-portal-storage-network"
81+
```
82+
83+
To specify that SR-IOV should be used on this network, set the following in your Azimuth
84+
configuration:
85+
86+
```yaml title="environments/my-site/inventory/group_vars/all/variables.yml"
87+
azimuth_caas_operator_global_extravars_overrides:
88+
cluster_storage_vnic_type: direct
89+
```
90+
91+
Additional Kubernetes templates can also be defined that are aware of the storage network - see
92+
[Custom cluster templates](../10-kubernetes-clusters.md#custom-cluster-templates) for an example.
File renamed without changes.

docs/configuration/10-kubernetes-clusters.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,45 +75,46 @@ azimuth_capi_operator_cluster_templates_default: {}
7575
### Custom cluster templates
7676

7777
If you want to include custom cluster templates in addition to the default templates,
78-
e.g. for advanced networking configurations, you can specify them using the variable
79-
`azimuth_capi_operator_cluster_templates_extra`.
78+
e.g. for
79+
[accessing Manila shares](./04-target-cloud/02-openstack-manila.md#storage-network-automation),
80+
you can specify them using the variable `azimuth_capi_operator_cluster_templates_extra`.
8081

8182
For example, the following demonstrates how to configure a template where the cluster
8283
worker nodes have two networks attached - the control plane nodes and workers are all
8384
attached to the Azimuth internal network but the workers are attached to an additional
84-
SR-IOV capable network:
85+
SR-IOV capable storage network:
8586

8687
```yaml title="environments/my-site/inventory/group_vars/all/variables.yml"
8788
azimuth_capi_operator_cluster_templates_extra:
8889
# The index in the dict is the template name
89-
kube-1-24-2-multinet:
90+
kube-1-31-2-multinet:
9091
# Access control annotations
9192
annotations: {}
9293
# The cluster template specification
9394
spec:
9495
# A human-readable label for the template
95-
label: v1.24.2 / multinet
96+
label: v1.31.2 / multinet
9697
# A brief description of the template
9798
description: >-
98-
Kubernetes 1.24.2 with HA control plane and high-performance networking.
99+
Kubernetes 1.31.2 with HA control plane and high-performance networking.
99100
# Values for the openstack-cluster Helm chart
100101
values:
101102
# Specify the image and version for the cluster
102103
# These are the only required values
103-
kubernetesVersion: 1.24.2
104-
machineImageId: "{{ community_images_image_ids.kube_1_24 }}"
104+
kubernetesVersion: 1.31.2
105+
machineImageId: "{{ community_images_image_ids.kube_1_31 }}"
105106
# Use the portal-internal network as the main cluster network
106107
clusterNetworking:
107108
internalNetwork:
108109
networkFilter:
109110
tags: portal-internal
110-
# Configure an extra SR-IOV port on worker nodes using an SR-IOV capable network
111+
# Configure an extra SR-IOV port on worker nodes on the storage network
111112
nodeGroupDefaults:
112113
machineNetworking:
113114
ports:
114115
- {}
115116
- network:
116-
tags: sriov-vlan
117+
tags: portal-storage
117118
securityGroups: []
118119
vnicType: direct
119120
```

mkdocs.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ nav:
1717
- configuration/01-prerequisites.md
1818
- configuration/02-deployment-method.md
1919
- configuration/03-kubernetes-config.md
20-
- configuration/04-target-cloud.md
20+
- 'Target OpenStack cloud':
21+
- configuration/04-target-cloud/index.md
22+
- configuration/04-target-cloud/01-openstack-blazar.md
23+
- configuration/04-target-cloud/02-openstack-manila.md
2124
- configuration/05-secret-key.md
2225
- configuration/06-ingress.md
2326
- configuration/07-platform-identity.md

0 commit comments

Comments
 (0)