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
description: Decision making workflows for the Nebari OSS project
5
+
---
6
+
7
+
Nebari's [core team][core-team] is the primary decision making authority for the project.
8
+
9
+
This group makes decisions about the following non-exhaustive list of items:
10
+
11
+
- Major updates to the Nebari project and community, through the Request-for-discussion (RFD) process (see explanation below)
12
+
- Adding and removing members from the [Nebari team following the guidelines][nebari-team]
13
+
14
+
## Consent-based decision making
15
+
16
+
Nebari follows the [consent-based approach][consent-decision-making] for making all project-related decisions.
17
+
18
+
In this approach, everyone gets a chance to:
19
+
20
+
- understand the proposals by asking questions,
21
+
- share their thoughts and reactions, and
22
+
- present any specific objections
23
+
24
+
Each objection is discussed and the proposal is updated accordingly. The proposal is accepted when the team reaches a point where there are no objections.
25
+
26
+
## Major updates - Request-for-discussion (RFD) process
27
+
28
+
New features, sub-projects, and workflow changes that affect a majority of end-users of the core project or the Nebari community, need to follow the Request-for-discussion workflow (sometimes called Enhancement Proposals):
29
+
30
+
1. Open an [RFD-issue in the governance repository][rfd-issue] with your proposal describing the details, benefits, impact, and more as mentioned in the issue template. Add the following labels to the issue: `needs: discussion 💬`, `type: RFD 🗳`
31
+
2. Tag the `@nebari-dev/core-team` and any specific people for questions, comments, and objections on your proposal.
32
+
3. Answer questions and update the proposal addressing the objections. If there are major objections, the best course of action is declining the RFD, closing the issue, and opening a new RFD issue with the updated design proposal.
33
+
4. Once all comments are addressed, request the core-team to cast votes. Team members are expected to vote "yes" with a 👍 reaction on the proposal if they have no objection. Votes can also be taken over synchronous community meetings. In this case, the decision is documented with a comment on the RFD issue. Remove the `needs: discussion 💬` label and add `status: being voted 🗳` at this stage.
34
+
5. If over 50% of team members vote "yes", the proposal is accepted. Remove the `status: being voted 🗳` label and add `status: approved 💪🏾`. Do not close the issue yet.
35
+
6. Once the proposal is implemented, close the RFD issue.
36
+
37
+
Learn more in [Gitpod's documentation on decision making][gitpod-rfd].
38
+
39
+
## Minor updates - Discussion in issues and pull requests
40
+
41
+
Minor updates to the codebase and documentation can be discussed in GitHub issues or in pull requests during code review. Contributors are expected to (informally) follow the consent-based decision making philosophy in these discussions.
- The **[ML Flow extension for AWS](https://github.com/MetroStar/nebari-mlflow-aws)** is designed to integrate [MLFlow](https://mlflow.org/) into Nebari deployments utilizing AWS (Amazon Web Services) as the provider. It provides a robust, collaborative environment for AI/ML professionals to manage experiments, track metrics, and deploy models.
16
+
- The **[Label Studio](https://github.com/MetroStar/nebari-label-studio)** integrates [Label Studio](https://labelstud.io/) into the Nebari platform, allowing seamless labeling functionality within Nebari. Utilizing Python, Terraform, Kubernetes, and Helm charts, the plugin provides a configurable deployment and authentication through Keycloak.
17
+
- The **[Self Registration](https://github.com/nebari-dev/nebari-self-registration)** extension allows potential new users of a Nebari deployment to self-register through a coupon code. A new self-registration page is generated on the Nebari server where users can input their information and a coupon code. Once the form is validated, the new user will be auto-generated on the Nebari deployment. It can also be configured to give new users a set expiration date.
| Triage | Engage with (create or comment on) one or more issue/PR/discussion in [`nebari-dev`](https://github.com/nebari-dev)| Any community member (including self)| Any Core team member|
63
-
| Contributor | Two or more [contributions](./#how-to-contribute) to Nebari with intention to continue contributing regularly | Any community member (including self) | Any Core team member |
64
-
| Core |[Contributors team](#contributors) member with a record of regular, valuable, and high-quality contributions to Nebari for at least one month | Any community member (including self) and one Core team member | Core team makes a [consent-based decision](https://www.sociocracyforall.org/consent-decision-making/)|
65
-
| Conduct | Member of the Contributor or Core Team with adequate training to handle CoC reports | Any community member (including self)| Core team makes a [consent-based decision](https://www.sociocracyforall.org/consent-decision-making/)|
60
+
| Team | Requirements for nomination | Nominators| Approvers|
| Triage | Engage with (create or comment on) one or more issue/PR/discussion in [`nebari-dev`](https://github.com/nebari-dev)| Any community member (including self)| Any Core team member|
63
+
| Contributor | Two or more [contributions](./#how-to-contribute) to Nebari with intention to continue contributing regularly | Any community member (including self) | Any Core team member|
64
+
| Core |[Contributors team](#contributors) member with a record of regular, valuable, and high-quality contributions to Nebari for at least one month | Any community member (including self) and one Core team member | Core team makes a [consent-based decision](https://www.sociocracyforall.org/consent-decision-making/)|
65
+
| Conduct | Member of the Contributor or Core Team with adequate training to handle CoC reports | Any community member (including self)| Core team makes a [consent-based decision](https://www.sociocracyforall.org/consent-decision-making/)|
The `nebari-config.yaml` file can be split into several sections.
240
239
241
-
The first section is the version of Nebari you wish to run.
242
-
243
-
240
+
The first section is the version of Nebari you wish to run.
244
241
245
242
```yaml
246
243
### Nebari version ###
247
244
nebari_version: 2023.7.2
248
245
```
249
246
250
247
:::note
251
-
You will get a validation error if the version of `nebari` used from the command line is different from the one in the `nebari-config.yaml`.
248
+
You will get a validation error if the version of `nebari` used from the command line is different from the one in the `nebari-config.yaml`.
252
249
:::
253
250
254
-
255
251
The next section relates to Nebari's inner mechanics for the initial deployment and is the most important section of the configuration file,
256
252
because the following parameters are heavily propagated throughout all infrastructure components.
257
253
@@ -283,19 +279,21 @@ domain: demo.nebari.dev
283
279
284
280
### Continuous integration and continuous deployment
285
281
286
-
Nebari uses [infrastructure-as-code](https://en.wikipedia.org/wiki/Infrastructure_as_code) to allow developers and users to request changes to the environment via pull requests (PRs) which then get approved by administrators.
287
-
You may configure a CI/CD process to watch for pull-requests or commits on specific branches.
288
-
Currently, CI/CD can be setup for either [GitHub Actions](https://docs.github.com/en/actions) or [GitLab CI](https://docs.gitlab.com/ee/ci/).
282
+
Nebari uses [infrastructure-as-code](https://en.wikipedia.org/wiki/Infrastructure_as_code) to maintain a description of the deployed infrastructure in source control. By using a git repository with CI/CD configured, teams can more quickly modify their deployment, empowering developers and data scientists to request the changes and have them approved by an administrator.
283
+
284
+
When a `ci_cd` section is configured within your `nebari-config.yaml`, the first `nebari deploy` command will create all related files that describe a [CI/CD](https://about.gitlab.com/topics/ci-cd/) process. These pipelines will then be responsible for redeploying Nebari as changes are made to a specified branch. (Alternatively, an administrator can use `nebari render` to generate the necessary files as if running a dry-run.) Currently, Nebari can generate CI/CD for [GitHub Actions](https://docs.github.com/en/actions) and [GitLab CI](https://docs.gitlab.com/ee/ci/).
285
+
286
+
Below is an example `ci_cd` section in a `nebari-config.yaml` file.
289
287
290
288
```yaml
291
289
### Continuous integration ###
292
290
ci_cd:
293
-
type: gitlab-ci
294
-
branch: main
295
-
commit_render: true
296
-
before_script:
291
+
type: gitlab-ci # 'gitlab-ci' or 'github-actions'
292
+
branch: main # Branch that triggers deployment
293
+
commit_render: true # During deployment, commit the rendered IaC back into the repository
294
+
before_script: # GitLab only
297
295
- echo "running commands before ci completes"
298
-
after_script:
296
+
after_script: # GitLab only
299
297
- echo "running commands after ci completes"
300
298
- echo "additional commands to run"
301
299
```
@@ -309,8 +307,17 @@ ci_cd:
309
307
resources. Currently only supported on `gitlab-ci`.
310
308
- `after_script` (optional): Script to run after CI ends infrastructure deployment. This is useful in cases to notify resources of successful Nebari deployment. Currently supported on `gitlab-ci`.
311
309
312
-
If `ci_cd` is not supplied, no CI/CD will be auto-generated, however, we advise employing an infrastructure-as-code approach.
313
-
This allows teams to more quickly modify their deployment, empowering developers and data scientists to request the changes and have them approved by an administrator.
310
+
The CI/CD workflow that is best for you will depend on your organization, but the following tenets will be appropriate for most situations.
311
+
312
+
- You will want to have an upstream Git repository configured - we recommend either GitHub or GitLab since we support generating CI/CD jobs for these products.
313
+
- The branch that triggers deployment (typically `main`, but you can set other ones in Nebari config's `ci_cd.branch`) should be protected so that only sys admins can commit or approve pull (or merge) requests into it.
314
+
- CI/CD variables must be set in your repository so the pipeline can access your cloud (see Note below)
315
+
- Non-admin users who have write access to the repository's non-protected branches may create their own branch off of `main`, locally make changes to the `nebari-config.yaml` and other files, and then push that branch to the origin and propose they be deployed via a Pull Request.
316
+
- Advanced Nebari users may also want to add a step in their deployment flow that includes a `nebari render` so that the administrator may preview the resulting diffs to IaC and/or CI/CD files before `nebari deploy` is executed.
317
+
318
+
:::note
319
+
In order for your CI/CD pipeline to be able to deploy changes into your Nebari cloud hosting provider, you must set the appropriate authentication environment variables for your GitLab or GitHub CI/CD execution environment. See the Authentication section for deploing to [AWS](https://www.nebari.dev/docs/how-tos/nebari-aws/#authentication), [Azure](https://www.nebari.dev/docs/how-tos/nebari-azure#authentication), [GCP](https://www.nebari.dev/docs/how-tos/nebari-gcp/#authentication), or [Digital Ocean](https://www.nebari.dev/docs/how-tos/nebari-do/#authentication) for Nebari's required variables. Guidance on how to set these for your repository/project can be found in the documentation for [GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/variables) and [GitLab CI/CD](https://docs.gitlab.com/ee/ci/variables/).
320
+
:::
314
321
315
322
### Certificates
316
323
@@ -365,11 +372,10 @@ In general you should use the production server, as seen above.
365
372
You can also generate the above configuration automatically by using the `--ssl-cert-email <your-email-address>` flag when you run `nebari init` to initialize your project.
366
373
:::
367
374
368
-
369
-
Let's Encrypt heavily rate limits their production endpoint. In order to avoid throttling, Nebari's traefik deployments will store retrieved certificates for the duration of their validity in a mounted PVC at a default location `/mnt/acme-certificates/acme.json`.
375
+
Let's Encrypt heavily rate limits their production endpoint. In order to avoid throttling, Nebari's traefik deployments will store retrieved certificates for the duration of their validity in a mounted PVC at a default location `/mnt/acme-certificates/acme.json`.
370
376
371
377
:::note
372
-
In order to refresh the certificate before it is invalidated, you will need to delete the `acme.json` file then restart the Traefik deployment by deleting the existing pod and letting a new one spin up. This may be necessary if you change the domain name of your Nebari deployment.
378
+
In order to refresh the certificate before it is invalidated, you will need to delete the `acme.json` file then restart the Traefik deployment by deleting the existing pod and letting a new one spin up. This may be necessary if you change the domain name of your Nebari deployment.
373
379
:::
374
380
375
381
</TabItem>
@@ -405,6 +411,74 @@ Defining a wildcard certificate decreases the amount of Common Name (CN) names y
405
411
</TabItem>
406
412
</Tabs>
407
413
414
+
### Shared Storage Configuration
415
+
416
+
:::note
417
+
As of Nebari 2024.9.1, alpha support for [Ceph](https://docs.ceph.com/en/latest/) shared file systems as an alternative to NFS is available.
418
+
:::
419
+
420
+
Nebari includes shared file systems for the jupyterhub user storage, jupyterhub shared storage, and conda store shared storage. By default, NFS drives are used.
421
+
422
+
The initial benefit of using Ceph is increased read/write performance compared to NFS, but further benefits are expected in future development. Ceph is a distributed storage system which has the potential to provide increased performance, high availability, data redundancy, storage consolidation, and scalability to Nebari.
423
+
424
+
:::danger
425
+
Do not switch from one storage type to another on an existing Nebari deployment. Any files in the user home directory and conda environments will be lost if you do so! On GCP, all node groups in the cluster will be destroyed and recreated. Only change the storage type prior to the initial deployment.
426
+
:::
427
+
428
+
Storage is configured in the `nebari-config.yaml` file under the storage section.
429
+
430
+
```yaml
431
+
storage:
432
+
type: nfs
433
+
conda_store: 200Gi
434
+
shared_filesystem: 200Gi
435
+
```
436
+
437
+
Supported values for `storage.type` are `nfs` (default on most cloud providers), `efs` (default on AWS), and `cephfs`.
438
+
439
+
When using the `cephfs` storage type option, the block storage underlying all Ceph storage will be provisioned through the same Kubernetes storage class. By default, Kubernetes will use the default storage class unless a specific one is provided. For enhanced performance, some cloud providers offer premium storage class options.
440
+
441
+
You can specify the desired storage class under `ceph.storage_class_name` section in the configuration file. Below are examples of potential storage class values for various cloud providers:
442
+
443
+
<Tabs>
444
+
<TabItem label="AWS" value="AWS" default="true">
445
+
446
+
Premium storage is not available on AWS.
447
+
</TabItem>
448
+
<TabItem label="Azure" value="Azure">
449
+
450
+
```yaml
451
+
ceph:
452
+
storage_class_name: managed-premium
453
+
```
454
+
455
+
</TabItem>
456
+
<TabItem label="GCP" value="GCP">
457
+
458
+
```yaml
459
+
ceph:
460
+
storage_class_name: premium-rwo
461
+
```
462
+
463
+
</TabItem>
464
+
<TabItem label="Existing" value="Existing">
465
+
466
+
```yaml
467
+
ceph:
468
+
storage_class_name: some-cluster-storage-class
469
+
```
470
+
471
+
</TabItem>
472
+
<TabItem label="Local" value="Local">
473
+
474
+
Ceph is not supported on local deployments.
475
+
</TabItem>
476
+
</Tabs>
477
+
478
+
:::note
479
+
Premium storage is not available for some cloud providers on all node types. Check the documentation for your specific cloud provider to confirm which node types are compatible with which storage classes.
480
+
:::
481
+
408
482
## More configuration options
409
483
410
484
Learn to configure more aspects of your Nebari deployment with the following topic guides:
0 commit comments