Skip to content

Commit

Permalink
feat(scheduling): add volume group capacity tracking (openebs#21)
Browse files Browse the repository at this point in the history
Signed-off-by: Yashpal Choudhary <yashpal.c1995@gmail.com>
  • Loading branch information
iyashu authored and akhilerm committed Mar 10, 2021
1 parent 7c9d1e3 commit 736ca0c
Show file tree
Hide file tree
Showing 26 changed files with 2,373 additions and 7 deletions.
18 changes: 18 additions & 0 deletions buildscripts/generate-manifests.sh
Expand Up @@ -61,6 +61,21 @@ echo '
cat deploy/yamls/local.openebs.io_lvmsnapshots.yaml >> deploy/yamls/lvmsnapshot-crd.yaml
rm deploy/yamls/local.openebs.io_lvmsnapshots.yaml

echo '
##############################################
########### ############
########### LVMNode CRD ############
########### ############
##############################################
# LVMNode CRD is autogenerated via `make manifests` command.
# Do the modification in the code and run the `make manifests` command
# to generate the CRD definition' > deploy/yamls/lvmnode-crd.yaml

cat deploy/yamls/local.openebs.io_lvmnodes.yaml >> deploy/yamls/lvmnode-crd.yaml
rm deploy/yamls/local.openebs.io_lvmnodes.yaml

## create the operator file using all the yamls

echo '# This manifest is autogenerated via `make manifests` command
Expand All @@ -80,6 +95,9 @@ cat deploy/yamls/lvmvolume-crd.yaml >> deploy/lvm-operator.yaml
# Add LVMSnapshot v1alpha1 CRDs to the Operator yaml
cat deploy/yamls/lvmsnapshot-crd.yaml >> deploy/lvm-operator.yaml

# Add LVMNode v1alpha1 CRDs to the Operator yaml
cat deploy/yamls/lvmnode-crd.yaml >> deploy/lvm-operator.yaml

# Add the driver deployment to the Operator yaml
cat deploy/yamls/lvm-driver.yaml >> deploy/lvm-operator.yaml

Expand Down
119 changes: 117 additions & 2 deletions deploy/lvm-operator.yaml
Expand Up @@ -260,6 +260,118 @@ status:
conditions: []
storedVersions: []


##############################################
########### ############
########### LVMNode CRD ############
########### ############
##############################################

# LVMNode CRD is autogenerated via `make manifests` command.
# Do the modification in the code and run the `make manifests` command
# to generate the CRD definition

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.8
creationTimestamp: null
name: lvmnodes.local.openebs.io
spec:
group: local.openebs.io
names:
kind: LVMNode
listKind: LVMNodeList
plural: lvmnodes
shortNames:
- lvmnode
singular: lvmnode
preserveUnknownFields: false
scope: Namespaced
validation:
openAPIV3Schema:
description: LVMNode records information about all lvm volume groups available
in a node. In general, the openebs node-agent creates the LVMNode object &
periodically synchronizing the volume groups available in the node. LVMNode
has an owner reference pointing to the corresponding node object.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
type: string
metadata:
type: object
volumeGroups:
items:
description: VolumeGroup specifies attributes of a given vg exists on
node.
properties:
free:
anyOf:
- type: integer
- type: string
description: Free specifies the available capacity of volume group.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
lvCount:
description: LVCount denotes total number of logical volumes in volume
group.
format: int32
minimum: 0
type: integer
name:
description: Name of the lvm volume group.
minLength: 1
type: string
pvCount:
description: PVCount denotes total number of physical volumes constituting
the volume group.
format: int32
minimum: 0
type: integer
size:
anyOf:
- type: integer
- type: string
description: Size specifies the total size of volume group.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
uuid:
description: UUID denotes a unique identity of a lvm volume group.
minLength: 1
type: string
required:
- free
- lvCount
- name
- pvCount
- size
- uuid
type: object
type: array
required:
- volumeGroups
type: object
version: v1alpha1
versions:
- name: v1alpha1
served: true
storage: true
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []

---

# Create the CSI Driver object
Expand Down Expand Up @@ -939,6 +1051,9 @@ rules:
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses", "csinodes"]
verbs: ["get", "list", "watch"]
- apiGroups: [ "storage.k8s.io" ]
resources: [ "csistoragecapacities"]
verbs: ["*"]
- apiGroups: [""]
resources: ["events"]
verbs: ["list", "watch", "create", "update", "patch"]
Expand All @@ -952,7 +1067,7 @@ rules:
resources: ["pods"]
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["local.openebs.io"]
resources: ["lvmvolumes", "lvmsnapshots"]
resources: ["lvmvolumes", "lvmsnapshots", "lvmnodes"]
verbs: ["*"]
---

Expand Down Expand Up @@ -1159,7 +1274,7 @@ rules:
resources: ["persistentvolumes", "nodes", "services"]
verbs: ["get", "list"]
- apiGroups: ["local.openebs.io"]
resources: ["lvmvolumes", "lvmsnapshots"]
resources: ["lvmvolumes", "lvmsnapshots", "lvmnodes"]
verbs: ["get", "list", "watch", "create", "update", "patch"]

---
Expand Down
7 changes: 5 additions & 2 deletions deploy/yamls/lvm-driver.yaml
Expand Up @@ -678,6 +678,9 @@ rules:
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses", "csinodes"]
verbs: ["get", "list", "watch"]
- apiGroups: [ "storage.k8s.io" ]
resources: [ "csistoragecapacities"]
verbs: ["*"]
- apiGroups: [""]
resources: ["events"]
verbs: ["list", "watch", "create", "update", "patch"]
Expand All @@ -691,7 +694,7 @@ rules:
resources: ["pods"]
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["local.openebs.io"]
resources: ["lvmvolumes", "lvmsnapshots"]
resources: ["lvmvolumes", "lvmsnapshots", "lvmnodes"]
verbs: ["*"]
---

Expand Down Expand Up @@ -898,7 +901,7 @@ rules:
resources: ["persistentvolumes", "nodes", "services"]
verbs: ["get", "list"]
- apiGroups: ["local.openebs.io"]
resources: ["lvmvolumes", "lvmsnapshots"]
resources: ["lvmvolumes", "lvmsnapshots", "lvmnodes"]
verbs: ["get", "list", "watch", "create", "update", "patch"]

---
Expand Down
112 changes: 112 additions & 0 deletions deploy/yamls/lvmnode-crd.yaml
@@ -0,0 +1,112 @@


##############################################
########### ############
########### LVMNode CRD ############
########### ############
##############################################

# LVMNode CRD is autogenerated via `make manifests` command.
# Do the modification in the code and run the `make manifests` command
# to generate the CRD definition

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.8
creationTimestamp: null
name: lvmnodes.local.openebs.io
spec:
group: local.openebs.io
names:
kind: LVMNode
listKind: LVMNodeList
plural: lvmnodes
shortNames:
- lvmnode
singular: lvmnode
preserveUnknownFields: false
scope: Namespaced
validation:
openAPIV3Schema:
description: LVMNode records information about all lvm volume groups available
in a node. In general, the openebs node-agent creates the LVMNode object &
periodically synchronizing the volume groups available in the node. LVMNode
has an owner reference pointing to the corresponding node object.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
type: string
metadata:
type: object
volumeGroups:
items:
description: VolumeGroup specifies attributes of a given vg exists on
node.
properties:
free:
anyOf:
- type: integer
- type: string
description: Free specifies the available capacity of volume group.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
lvCount:
description: LVCount denotes total number of logical volumes in volume
group.
format: int32
minimum: 0
type: integer
name:
description: Name of the lvm volume group.
minLength: 1
type: string
pvCount:
description: PVCount denotes total number of physical volumes constituting
the volume group.
format: int32
minimum: 0
type: integer
size:
anyOf:
- type: integer
- type: string
description: Size specifies the total size of volume group.
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
uuid:
description: UUID denotes a unique identity of a lvm volume group.
minLength: 1
type: string
required:
- free
- lvCount
- name
- pvCount
- size
- uuid
type: object
type: array
required:
- volumeGroups
type: object
version: v1alpha1
versions:
- name: v1alpha1
served: true
storage: true
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []

0 comments on commit 736ca0c

Please sign in to comment.