Skip to content

Commit 10d6e73

Browse files
committed
Merge main
Signed-off-by: Pavithra Eswaramoorthy <[email protected]>
2 parents 60a2e07 + b7912a5 commit 10d6e73

File tree

73 files changed

+2009
-781
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2009
-781
lines changed

.github/workflows/test-website.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,8 @@ jobs:
3333
- name: Lint 🔍
3434
run: yarn run lint
3535

36+
- name: Format 🥇
37+
run: yarn run format
38+
3639
- name: Build site 🔨
3740
run: yarn run build

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ci:
1717
repos:
1818
# Codespell: Spell checks the code and documentation
1919
- repo: https://github.com/codespell-project/codespell
20-
rev: v2.2.6
20+
rev: v2.3.0
2121
hooks:
2222
- id: codespell
2323
entry: codespell

docs/community/decision-making.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
---
2+
id: decision-making
3+
title: Decision making process
4+
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.
42+
43+
<!-- Reusable links -->
44+
45+
[nebari-team]: /docs/community/team-structure
46+
[core-team]: https://github.com/orgs/nebari-dev/teams/core-team
47+
[consent-decision-making]: https://www.sociocracyforall.org/consent-decision-making/
48+
[rfd-issue]: https://github.com/nebari-dev/governance/issues/new?assignees=&labels=type%3A+RFD&projects=&template=RFD.md&title=RFD+-+Title
49+
[gitpod-rfd]: https://gitpod.notion.site/Decision-Making-RFCs-eb4a57f3a34f40f1afbd95e05322af70

docs/community/plugins.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ You can learn to use and create Nebari extensions in the [extension mechanism do
1212

1313
The following community-developed extensions are recognized and verified by the Nebari development team.
1414

15-
* [nebari-mlflow-aws](https://github.com/MetroStar/nebari-mlflow-aws)
16-
* [nebari-label-studio](https://github.com/MetroStar/nebari-label-studio)
15+
- 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.

docs/community/team-structure.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ Nebari follows a nomination process to add new team members[^2], as detailed in
5757

5858
[^2]: All except the [Emeritus core](#emeritus-core) team are decided through nominations.
5959

60-
| Team | Requirements for nomination | Nominators | Approvers |
61-
| ----------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
62-
| 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 |
61+
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
62+
| 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/) |

docs/docs/explanations/advanced-configuration.md

Lines changed: 93 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ In the "How to deploy Nebari" pages of our docs we covered how you can auto-gene
1313
After first initializing a project, you can find the configuration file, `nebari-config.yaml`, in your project directory.
1414
This file is a `YAML` file that exports sets of parameters used by Nebari to deploy and redeploy changes to your infrastructure.
1515

16-
1716
<details>
1817
<summary>Complete configuration example.</summary>
1918

@@ -238,20 +237,17 @@ conda_store:
238237
239238
The `nebari-config.yaml` file can be split into several sections.
240239

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.
244241

245242
```yaml
246243
### Nebari version ###
247244
nebari_version: 2023.7.2
248245
```
249246

250247
:::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`.
252249
:::
253250

254-
255251
The next section relates to Nebari's inner mechanics for the initial deployment and is the most important section of the configuration file,
256252
because the following parameters are heavily propagated throughout all infrastructure components.
257253

@@ -283,19 +279,21 @@ domain: demo.nebari.dev
283279

284280
### Continuous integration and continuous deployment
285281

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.
289287

290288
```yaml
291289
### Continuous integration ###
292290
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
297295
- echo "running commands before ci completes"
298-
after_script:
296+
after_script: # GitLab only
299297
- echo "running commands after ci completes"
300298
- echo "additional commands to run"
301299
```
@@ -309,8 +307,17 @@ ci_cd:
309307
resources. Currently only supported on `gitlab-ci`.
310308
- `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`.
311309

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+
:::
314321

315322
### Certificates
316323

@@ -365,11 +372,10 @@ In general you should use the production server, as seen above.
365372
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.
366373
:::
367374

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`.
370376

371377
:::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.
373379
:::
374380

375381
</TabItem>
@@ -405,6 +411,74 @@ Defining a wildcard certificate decreases the amount of Common Name (CN) names y
405411
</TabItem>
406412
</Tabs>
407413

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+
408482
## More configuration options
409483

410484
Learn to configure more aspects of your Nebari deployment with the following topic guides:

0 commit comments

Comments
 (0)