Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

📖 Add Documentation for CRD and Operator Scope #3804

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

sarthaksarthak9
Copy link
Contributor

@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Mar 3, 2024
@k8s-ci-robot
Copy link
Contributor

Hi @sarthaksarthak9. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@k8s-ci-robot k8s-ci-robot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Mar 3, 2024
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: sarthaksarthak9
Once this PR has been reviewed and has the lgtm label, please assign varshaprasad96 for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


- **Namespaced**: This restricts CR access and management to the specific namespace where the CR is created.

For projects employing the Operator SDK in Go, the `operator-sdk create api` command has a `--namespaced flag`. This flag determines the value of `spec.scope` and modifies the corresponding `types.go` file for the resource. In other operator types, the scope can be directly set by editing the `spec.scope` field in the CRD's YAML manifest file.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to adapt the code since it is the Kubebuilder docs and not Operator-SDK one
Can you please ajust the format

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@camilamacedo86 Will this work here "The scope can be directly set by editing the spec.scope field in the CRD's YAML manifest file" ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I would recommend you:

for you be able to explain and doc something you need to experiment first. The doc is just a final result of the work.

I hope that helps out.

Copy link
Member

@camilamacedo86 camilamacedo86 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@varshaprasad96 @everettraven @rashansmith

The idea here would be move the content that is valid for kubebuilder docs
Therefore, it would be possible simplify in a follow up the Operator-SDK docs as well and keep there only what is Operator-SDK specific and allow you folks just link the pages.

So, please feel free to check this one and give your inputs as well as let us know wdyt?

When creating a new API, the `--namespaced` flag controls whether the resulting CRD will be cluster or namespace scoped. By default, `--namespaced` is set to true which sets the scope to Namespaced. An example command to create a cluster-scoped API would be:

```shell
$ operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource=true --controller=true --namespaced=false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$ operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource=true --controller=true --namespaced=false
$ kubebuilder create api --group cache --version v1alpha1 --kind Memcached --resource=true --controller=true --namespaced=false

@@ -0,0 +1,80 @@
# CRD Scope

This section dives into the Custom Resource Definitions (CRDs), specifically focusing on their scope and how it impacts their behavior. While we'll be exploring CRD scope in detail, for managing an operator's scope (like which namespaces it monitors), refer to the dedicated operator scope documentation.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This section dives into the Custom Resource Definitions (CRDs), specifically focusing on their scope and how it impacts their behavior. While we'll be exploring CRD scope in detail, for managing an operator's scope (like which namespaces it monitors), refer to the dedicated operator scope documentation.


This section dives into the Custom Resource Definitions (CRDs), specifically focusing on their scope and how it impacts their behavior. While we'll be exploring CRD scope in detail, for managing an operator's scope (like which namespaces it monitors), refer to the dedicated operator scope documentation.

## Overview
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Overview


## Setting the Scope

CRD manifests are usually generated using the `operator-sdk create api` command. These manifests reside in the `config/crd/bases` directory. Within a CRD's manifest, the `spec.scope` field controls its API scope. This field accepts two valid values:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
CRD manifests are usually generated using the `operator-sdk create api` command. These manifests reside in the `config/crd/bases` directory. Within a CRD's manifest, the `spec.scope` field controls its API scope. This field accepts two valid values:
CRD manifests are usually generated using the `kubebuilder create api` command. These manifests reside in the `config/crd/bases` directory. Within a CRD's manifest, the `spec.scope` field controls its API scope. This field accepts two valid values:

Comment on lines +58 to +76
```yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.5
creationTimestamp: null
name: memcacheds.cache.example.com
spec:
group: cache.example.com
names:
kind: Memcached
listKind: MemcachedList
plural: memcacheds
singular: memcached
scope: Namespaced
subresources:
status: {}
...
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
```yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.5
creationTimestamp: null
name: memcacheds.cache.example.com
spec:
group: cache.example.com
names:
kind: Memcached
listKind: MemcachedList
plural: memcacheds
singular: memcached
scope: Namespaced
subresources:
status: {}
...
```yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: firstmates.crew.testproject.org
spec:
group: crew.testproject.org
names:
kind: FirstMate
listKind: FirstMateList
plural: firstmates
singular: firstmate
scope: Namespaced
...

@@ -0,0 +1,269 @@
# Operator Scope
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Operator Scope
# Manager Scope

@@ -0,0 +1,269 @@
# Operator Scope

This section dives into the two crucial concepts of Custom Resource Definitions (CRDs) and Operators, specifically their respective scope and how both impact resource management in your Kubernetes environment.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This section dives into the two crucial concepts of Custom Resource Definitions (CRDs) and Operators, specifically their respective scope and how both impact resource management in your Kubernetes environment.


This section dives into the two crucial concepts of Custom Resource Definitions (CRDs) and Operators, specifically their respective scope and how both impact resource management in your Kubernetes environment.

# Overview
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Overview


# Overview

In the world of Kubernetes operators, scope defines the reach of an operator's management capabilities. This essentially means deciding which resources across your Kubernetes cluster the operator can watch and manage. Here's a breakdown of the two main options:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In the world of Kubernetes operators, scope defines the reach of an operator's management capabilities. This essentially means deciding which resources across your Kubernetes cluster the operator can watch and manage. Here's a breakdown of the two main options:
In the world of Kubernetes solutions, scope defines the reach of an projects's management capabilities. This essentially means deciding which resources across your Kubernetes cluster the manager can watch and manage. Here's a breakdown of the two main options:


## Defaults and Considerations:

- The operator-sdk init command by default creates a cluster-scoped operator.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- The operator-sdk init command by default creates a cluster-scoped operator.
- The kubebuilder init command by default creates a cluster-scoped project.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants