12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007 |
- # This manifest deploys the OpenEBS control plane components,
- # with associated CRs & RBAC rules
- # NOTE: On GKE, deploy the openebs-operator.yaml in admin context
- #
- # NOTE: The Jiva and cStor components previously included in the Operator File
- # are now removed and it is recommended for users to use cStor and Jiva CSI operators.
- # To upgrade your Jiva and cStor volumes to CSI, please checkout the documentation at:
- # https://github.com/openebs/upgrade
- #
- # To deploy the legacy Jiva and cStor:
- # kubectl apply -f https://openebs.github.io/charts/legacy-openebs-operator.yaml
- #
- # To deploy cStor CSI:
- # kubectl apply -f https://openebs.github.io/charts/cstor-operator.yaml
- #
- # To deploy Jiva CSI:
- # kubectl apply -f https://openebs.github.io/charts/jiva-operator.yaml
- #
- # Create the OpenEBS namespace
- apiVersion: v1
- kind: Namespace
- metadata:
- name: openebs
- ---
- # Create Maya Service Account
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: openebs-maya-operator
- namespace: openebs
- ---
- # Define Role that allows operations on K8s pods/deployments
- kind: ClusterRole
- apiVersion: rbac.authorization.k8s.io/v1
- metadata:
- name: openebs-maya-operator
- rules:
- - apiGroups: ["*"]
- resources: ["nodes", "nodes/proxy"]
- verbs: ["*"]
- - apiGroups: ["*"]
- resources: ["namespaces", "services", "pods", "pods/exec", "deployments", "deployments/finalizers", "replicationcontrollers", "replicasets", "events", "endpoints", "configmaps", "secrets", "jobs", "cronjobs"]
- verbs: ["*"]
- - apiGroups: ["*"]
- resources: ["statefulsets", "daemonsets"]
- verbs: ["*"]
- - apiGroups: ["*"]
- resources: ["resourcequotas", "limitranges"]
- verbs: ["list", "watch"]
- - apiGroups: ["*"]
- resources: ["ingresses", "horizontalpodautoscalers", "verticalpodautoscalers", "certificatesigningrequests"]
- verbs: ["list", "watch"]
- - apiGroups: ["*"]
- resources: ["storageclasses", "persistentvolumeclaims", "persistentvolumes"]
- verbs: ["*"]
- - apiGroups: ["volumesnapshot.external-storage.k8s.io"]
- resources: ["volumesnapshots", "volumesnapshotdatas"]
- verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- - apiGroups: ["apiextensions.k8s.io"]
- resources: ["customresourcedefinitions"]
- verbs: [ "get", "list", "create", "update", "delete", "patch"]
- - apiGroups: ["openebs.io"]
- resources: [ "*"]
- verbs: ["*" ]
- - apiGroups: ["cstor.openebs.io"]
- resources: [ "*"]
- verbs: ["*" ]
- - apiGroups: ["coordination.k8s.io"]
- resources: ["leases"]
- verbs: ["get", "watch", "list", "delete", "update", "create"]
- - apiGroups: ["admissionregistration.k8s.io"]
- resources: ["validatingwebhookconfigurations", "mutatingwebhookconfigurations"]
- verbs: ["get", "create", "list", "delete", "update", "patch"]
- - nonResourceURLs: ["/metrics"]
- verbs: ["get"]
- - apiGroups: ["*"]
- resources: ["poddisruptionbudgets"]
- verbs: ["get", "list", "create", "delete", "watch"]
- - apiGroups: ["coordination.k8s.io"]
- resources: ["leases"]
- verbs: ["get", "create", "update"]
- ---
- # Bind the Service Account with the Role Privileges.
- # TODO: Check if default account also needs to be there
- kind: ClusterRoleBinding
- apiVersion: rbac.authorization.k8s.io/v1
- metadata:
- name: openebs-maya-operator
- subjects:
- - kind: ServiceAccount
- name: openebs-maya-operator
- namespace: openebs
- roleRef:
- kind: ClusterRole
- name: openebs-maya-operator
- apiGroup: rbac.authorization.k8s.io
- ---
- apiVersion: apiextensions.k8s.io/v1
- kind: CustomResourceDefinition
- metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.5.0
- creationTimestamp: null
- name: blockdevices.openebs.io
- spec:
- group: openebs.io
- names:
- kind: BlockDevice
- listKind: BlockDeviceList
- plural: blockdevices
- shortNames:
- - bd
- singular: blockdevice
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .spec.nodeAttributes.nodeName
- name: NodeName
- type: string
- - jsonPath: .spec.path
- name: Path
- priority: 1
- type: string
- - jsonPath: .spec.filesystem.fsType
- name: FSType
- priority: 1
- type: string
- - jsonPath: .spec.capacity.storage
- name: Size
- type: string
- - jsonPath: .status.claimState
- name: ClaimState
- type: string
- - jsonPath: .status.state
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: BlockDevice is the Schema for the blockdevices API
- 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/sig-architecture/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/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: DeviceSpec defines the properties and runtime status of a BlockDevice
- properties:
- aggregateDevice:
- description: AggregateDevice was intended to store the hierarchical information in cases of LVM. However this is currently not implemented and may need to be re-looked into for better design. To be deprecated
- type: string
- capacity:
- description: Capacity
- properties:
- logicalSectorSize:
- description: LogicalSectorSize is blockdevice logical-sector size in bytes
- format: int32
- type: integer
- physicalSectorSize:
- description: PhysicalSectorSize is blockdevice physical-Sector size in bytes
- format: int32
- type: integer
- storage:
- description: Storage is the blockdevice capacity in bytes
- format: int64
- type: integer
- required:
- - storage
- type: object
- claimRef:
- description: ClaimRef is the reference to the BDC which has claimed this BD
- properties:
- apiVersion:
- description: API version of the referent.
- type: string
- fieldPath:
- description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.'
- type: string
- kind:
- description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
- type: string
- name:
- description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
- type: string
- namespace:
- description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
- type: string
- resourceVersion:
- description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
- type: string
- uid:
- description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
- type: string
- type: object
- details:
- description: Details contain static attributes of BD like model,serial, and so forth
- properties:
- compliance:
- description: Compliance is standards/specifications version implemented by device firmware such as SPC-1, SPC-2, etc
- type: string
- deviceType:
- description: DeviceType represents the type of device like sparse, disk, partition, lvm, crypt
- enum:
- - disk
- - partition
- - sparse
- - loop
- - lvm
- - crypt
- - dm
- - mpath
- type: string
- driveType:
- description: DriveType is the type of backing drive, HDD/SSD
- enum:
- - HDD
- - SSD
- - Unknown
- - ""
- type: string
- firmwareRevision:
- description: FirmwareRevision is the disk firmware revision
- type: string
- hardwareSectorSize:
- description: HardwareSectorSize is the hardware sector size in bytes
- format: int32
- type: integer
- logicalBlockSize:
- description: LogicalBlockSize is the logical block size in bytes reported by /sys/class/block/sda/queue/logical_block_size
- format: int32
- type: integer
- model:
- description: Model is model of disk
- type: string
- physicalBlockSize:
- description: PhysicalBlockSize is the physical block size in bytes reported by /sys/class/block/sda/queue/physical_block_size
- format: int32
- type: integer
- serial:
- description: Serial is serial number of disk
- type: string
- vendor:
- description: Vendor is vendor of disk
- type: string
- type: object
- devlinks:
- description: DevLinks contains soft links of a block device like /dev/by-id/... /dev/by-uuid/...
- items:
- description: DeviceDevLink holds the mapping between type and links like by-id type or by-path type link
- properties:
- kind:
- description: Kind is the type of link like by-id or by-path.
- enum:
- - by-id
- - by-path
- type: string
- links:
- description: Links are the soft links
- items:
- type: string
- type: array
- type: object
- type: array
- filesystem:
- description: FileSystem contains mountpoint and filesystem type
- properties:
- fsType:
- description: Type represents the FileSystem type of the block device
- type: string
- mountPoint:
- description: MountPoint represents the mountpoint of the block device.
- type: string
- type: object
- nodeAttributes:
- description: NodeAttributes has the details of the node on which BD is attached
- properties:
- nodeName:
- description: NodeName is the name of the Kubernetes node resource on which the device is attached
- type: string
- type: object
- parentDevice:
- description: "ParentDevice was intended to store the UUID of the parent Block Device as is the case for partitioned block devices. \n For example: /dev/sda is the parent for /dev/sda1 To be deprecated"
- type: string
- partitioned:
- description: Partitioned represents if BlockDevice has partitions or not (Yes/No) Currently always default to No. To be deprecated
- enum:
- - "Yes"
- - "No"
- type: string
- path:
- description: Path contain devpath (e.g. /dev/sdb)
- type: string
- required:
- - capacity
- - devlinks
- - nodeAttributes
- - path
- type: object
- status:
- description: DeviceStatus defines the observed state of BlockDevice
- properties:
- claimState:
- description: ClaimState represents the claim state of the block device
- enum:
- - Claimed
- - Unclaimed
- - Released
- type: string
- state:
- description: State is the current state of the blockdevice (Active/Inactive/Unknown)
- enum:
- - Active
- - Inactive
- - Unknown
- type: string
- required:
- - claimState
- - state
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
- status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
- ---
- apiVersion: apiextensions.k8s.io/v1
- kind: CustomResourceDefinition
- metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.5.0
- creationTimestamp: null
- name: blockdeviceclaims.openebs.io
- spec:
- group: openebs.io
- names:
- kind: BlockDeviceClaim
- listKind: BlockDeviceClaimList
- plural: blockdeviceclaims
- shortNames:
- - bdc
- singular: blockdeviceclaim
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .spec.blockDeviceName
- name: BlockDeviceName
- type: string
- - jsonPath: .status.phase
- name: Phase
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: BlockDeviceClaim is the Schema for the blockdeviceclaims API
- 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/sig-architecture/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/sig-architecture/api-conventions.md#types-kinds'
- type: string
- metadata:
- type: object
- spec:
- description: DeviceClaimSpec defines the request details for a BlockDevice
- properties:
- blockDeviceName:
- description: BlockDeviceName is the reference to the block-device backing this claim
- type: string
- blockDeviceNodeAttributes:
- description: BlockDeviceNodeAttributes is the attributes on the node from which a BD should be selected for this claim. It can include nodename, failure domain etc.
- properties:
- hostName:
- description: HostName represents the hostname of the Kubernetes node resource where the BD should be present
- type: string
- nodeName:
- description: NodeName represents the name of the Kubernetes node resource where the BD should be present
- type: string
- type: object
- deviceClaimDetails:
- description: Details of the device to be claimed
- properties:
- allowPartition:
- description: AllowPartition represents whether to claim a full block device or a device that is a partition
- type: boolean
- blockVolumeMode:
- description: 'BlockVolumeMode represents whether to claim a device in Block mode or Filesystem mode. These are use cases of BlockVolumeMode: 1) Not specified: VolumeMode check will not be effective 2) VolumeModeBlock: BD should not have any filesystem or mountpoint 3) VolumeModeFileSystem: BD should have a filesystem and mountpoint. If DeviceFormat is specified then the format should match with the FSType in BD'
- type: string
- formatType:
- description: Format of the device required, eg:ext4, xfs
- type: string
- type: object
- deviceType:
- description: DeviceType represents the type of drive like SSD, HDD etc.,
- nullable: true
- type: string
- hostName:
- description: Node name from where blockdevice has to be claimed. To be deprecated. Use NodeAttributes.HostName instead
- type: string
- resources:
- description: Resources will help with placing claims on Capacity, IOPS
- properties:
- requests:
- additionalProperties:
- anyOf:
- - type: integer
- - type: string
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- description: 'Requests describes the minimum resources required. eg: if storage resource of 10G is requested minimum capacity of 10G should be available TODO for validating'
- type: object
- required:
- - requests
- type: object
- selector:
- description: Selector is used to find block devices to be considered for claiming
- properties:
- matchExpressions:
- description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
- items:
- description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
- properties:
- key:
- description: key is the label key that the selector applies to.
- type: string
- operator:
- description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
- type: string
- values:
- description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
- items:
- type: string
- type: array
- required:
- - key
- - operator
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
- type: object
- type: object
- type: object
- status:
- description: DeviceClaimStatus defines the observed state of BlockDeviceClaim
- properties:
- phase:
- description: Phase represents the current phase of the claim
- type: string
- required:
- - phase
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
- status:
- acceptedNames:
- kind: ""
- plural: ""
- conditions: []
- storedVersions: []
- ---
- # This is the node-disk-manager related config.
- # It can be used to customize the disks probes and filters
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: openebs-ndm-config
- namespace: openebs
- labels:
- openebs.io/component-name: ndm-config
- data:
- # udev-probe is default or primary probe it should be enabled to run ndm
- # filterconfigs contains configs of filters. To provide a group of include
- # and exclude values add it as , separated string
- node-disk-manager.config: |
- probeconfigs:
- - key: udev-probe
- name: udev probe
- state: true
- - key: seachest-probe
- name: seachest probe
- state: false
- - key: smart-probe
- name: smart probe
- state: true
- filterconfigs:
- - key: os-disk-exclude-filter
- name: os disk exclude filter
- state: true
- exclude: "/,/etc/hosts,/boot"
- - key: vendor-filter
- name: vendor filter
- state: true
- include: ""
- exclude: "CLOUDBYT,OpenEBS"
- - key: path-filter
- name: path filter
- state: true
- include: ""
- exclude: "/dev/loop,/dev/fd0,/dev/sr0,/dev/ram,/dev/md,/dev/dm-,/dev/rbd,/dev/zd"
- # metconfig can be used to decorate the block device with different types of labels
- # that are available on the node or come in a device properties.
- # node labels - the node where bd is discovered. A whitlisted label prefixes
- # attribute labels - a property of the BD can be added as a ndm label as ndm.io/<property>=<property-value>
- metaconfigs:
- - key: node-labels
- name: node labels
- pattern: ""
- - key: device-labels
- name: device labels
- type: ""
- ---
- apiVersion: apps/v1
- kind: DaemonSet
- metadata:
- name: openebs-ndm
- namespace: openebs
- labels:
- name: openebs-ndm
- openebs.io/component-name: ndm
- openebs.io/version: 3.5.0
- spec:
- selector:
- matchLabels:
- name: openebs-ndm
- openebs.io/component-name: ndm
- updateStrategy:
- type: RollingUpdate
- template:
- metadata:
- labels:
- name: openebs-ndm
- openebs.io/component-name: ndm
- openebs.io/version: 3.5.0
- spec:
- # By default the node-disk-manager will be run on all kubernetes nodes
- # If you would like to limit this to only some nodes, say the nodes
- # that have storage attached, you could label those node and use
- # nodeSelector.
- #
- # e.g. label the storage nodes with - "openebs.io/nodegroup"="storage-node"
- # kubectl label node <node-name> "openebs.io/nodegroup"="storage-node"
- #nodeSelector:
- # "openebs.io/nodegroup": "storage-node"
- serviceAccountName: openebs-maya-operator
- hostNetwork: true
- # host PID is used to check status of iSCSI Service when the NDM
- # API service is enabled
- #hostPID: true
- containers:
- - name: node-disk-manager
- image: openebs/node-disk-manager:2.1.0
- args:
- - -v=4
- # The feature-gate is used to enable the new UUID algorithm.
- - --feature-gates="GPTBasedUUID"
- # Use partition table UUID instead of create single partition to get
- # partition UUID. Require `GPTBasedUUID` to be enabled with.
- # - --feature-gates="PartitionTableUUID"
- # Detect changes to device size, filesystem and mount-points without restart.
- # - --feature-gates="ChangeDetection"
- # The feature gate is used to start the gRPC API service. The gRPC server
- # starts at 9115 port by default. This feature is currently in Alpha state
- # - --feature-gates="APIService"
- # The feature gate is used to enable NDM, to create blockdevice resources
- # for unused partitions on the OS disk
- # - --feature-gates="UseOSDisk"
- imagePullPolicy: IfNotPresent
- securityContext:
- privileged: true
- volumeMounts:
- - name: config
- mountPath: /host/node-disk-manager.config
- subPath: node-disk-manager.config
- readOnly: true
- # make udev database available inside container
- - name: udev
- mountPath: /run/udev
- - name: procmount
- mountPath: /host/proc
- readOnly: true
- - name: devmount
- mountPath: /dev
- - name: basepath
- mountPath: /var/openebs/ndm
- - name: sparsepath
- mountPath: /var/openebs/sparse
- env:
- # namespace in which NDM is installed will be passed to NDM Daemonset
- # as environment variable
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- # pass hostname as env variable using downward API to the NDM container
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- # specify the directory where the sparse files need to be created.
- # if not specified, then sparse files will not be created.
- - name: SPARSE_FILE_DIR
- value: "/var/openebs/sparse"
- # Size(bytes) of the sparse file to be created.
- - name: SPARSE_FILE_SIZE
- value: "10737418240"
- # Specify the number of sparse files to be created
- - name: SPARSE_FILE_COUNT
- value: "0"
- livenessProbe:
- exec:
- command:
- - pgrep
- - "ndm"
- initialDelaySeconds: 30
- periodSeconds: 60
- volumes:
- - name: config
- configMap:
- name: openebs-ndm-config
- - name: udev
- hostPath:
- path: /run/udev
- type: Directory
- # mount /proc (to access mount file of process 1 of host) inside container
- # to read mount-point of disks and partitions
- - name: procmount
- hostPath:
- path: /proc
- type: Directory
- - name: devmount
- # the /dev directory is mounted so that we have access to the devices that
- # are connected at runtime of the pod.
- hostPath:
- path: /dev
- type: Directory
- - name: basepath
- hostPath:
- path: /var/openebs/ndm
- type: DirectoryOrCreate
- - name: sparsepath
- hostPath:
- path: /var/openebs/sparse
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: openebs-ndm-operator
- namespace: openebs
- labels:
- name: openebs-ndm-operator
- openebs.io/component-name: ndm-operator
- openebs.io/version: 3.5.0
- spec:
- selector:
- matchLabels:
- name: openebs-ndm-operator
- openebs.io/component-name: ndm-operator
- replicas: 1
- strategy:
- type: Recreate
- template:
- metadata:
- labels:
- name: openebs-ndm-operator
- openebs.io/component-name: ndm-operator
- openebs.io/version: 3.5.0
- spec:
- serviceAccountName: openebs-maya-operator
- containers:
- - name: node-disk-operator
- image: openebs/node-disk-operator:2.1.0
- imagePullPolicy: IfNotPresent
- env:
- - name: WATCH_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- # the service account of the ndm-operator pod
- - name: SERVICE_ACCOUNT
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: OPERATOR_NAME
- value: "node-disk-operator"
- - name: CLEANUP_JOB_IMAGE
- value: "openebs/linux-utils:3.5.0"
- # OPENEBS_IO_IMAGE_PULL_SECRETS environment variable is used to pass the image pull secrets
- # to the cleanup pod launched by NDM operator
- #- name: OPENEBS_IO_IMAGE_PULL_SECRETS
- # value: ""
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8585
- initialDelaySeconds: 15
- periodSeconds: 20
- readinessProbe:
- httpGet:
- path: /readyz
- port: 8585
- initialDelaySeconds: 5
- periodSeconds: 10
- ---
- # Create NDM cluster exporter deployment.
- # This is an optional component and is not required for the basic
- # functioning of NDM
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: openebs-ndm-cluster-exporter
- namespace: openebs
- labels:
- name: openebs-ndm-cluster-exporter
- openebs.io/component-name: ndm-cluster-exporter
- openebs.io/version: 3.5.0
- spec:
- replicas: 1
- strategy:
- type: Recreate
- selector:
- matchLabels:
- name: openebs-ndm-cluster-exporter
- openebs.io/component-name: ndm-cluster-exporter
- template:
- metadata:
- labels:
- name: openebs-ndm-cluster-exporter
- openebs.io/component-name: ndm-cluster-exporter
- openebs.io/version: 3.5.0
- spec:
- serviceAccountName: openebs-maya-operator
- containers:
- - name: ndm-cluster-exporter
- image: openebs/node-disk-exporter:2.1.0
- command:
- - /usr/local/bin/exporter
- args:
- - "start"
- - "--mode=cluster"
- - "--port=$(METRICS_LISTEN_PORT)"
- - "--metrics=/metrics"
- ports:
- - containerPort: 9100
- protocol: TCP
- name: metrics
- imagePullPolicy: IfNotPresent
- env:
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: METRICS_LISTEN_PORT
- value: :9100
- ---
- # Create NDM cluster exporter service
- # This is optional and required only when
- # ndm-cluster-exporter deployment is used
- apiVersion: v1
- kind: Service
- metadata:
- name: openebs-ndm-cluster-exporter-service
- namespace: openebs
- labels:
- name: openebs-ndm-cluster-exporter-service
- openebs.io/component-name: ndm-cluster-exporter
- app: openebs-ndm-exporter
- spec:
- clusterIP: None
- ports:
- - name: metrics
- port: 9100
- targetPort: 9100
- selector:
- name: openebs-ndm-cluster-exporter
- ---
- # Create NDM node exporter daemonset.
- # This is an optional component used for getting disk level
- # metrics from each of the storage nodes
- apiVersion: apps/v1
- kind: DaemonSet
- metadata:
- name: openebs-ndm-node-exporter
- namespace: openebs
- labels:
- name: openebs-ndm-node-exporter
- openebs.io/component-name: ndm-node-exporter
- openebs.io/version: 3.5.0
- spec:
- updateStrategy:
- type: RollingUpdate
- selector:
- matchLabels:
- name: openebs-ndm-node-exporter
- openebs.io/component-name: ndm-node-exporter
- template:
- metadata:
- labels:
- name: openebs-ndm-node-exporter
- openebs.io/component-name: ndm-node-exporter
- openebs.io/version: 3.5.0
- spec:
- serviceAccountName: openebs-maya-operator
- containers:
- - name: node-disk-exporter
- image: openebs/node-disk-exporter:2.1.0
- command:
- - /usr/local/bin/exporter
- args:
- - "start"
- - "--mode=node"
- - "--port=$(METRICS_LISTEN_PORT)"
- - "--metrics=/metrics"
- ports:
- - containerPort: 9101
- protocol: TCP
- name: metrics
- imagePullPolicy: IfNotPresent
- securityContext:
- privileged: true
- env:
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: METRICS_LISTEN_PORT
- value: :9101
- ---
- # Create NDM node exporter service
- # This is optional and required only when
- # ndm-node-exporter daemonset is used
- apiVersion: v1
- kind: Service
- metadata:
- name: openebs-ndm-node-exporter-service
- namespace: openebs
- labels:
- name: openebs-ndm-node-exporter
- openebs.io/component: openebs-ndm-node-exporter
- app: openebs-ndm-exporter
- spec:
- clusterIP: None
- ports:
- - name: metrics
- port: 9101
- targetPort: 9101
- selector:
- name: openebs-ndm-node-exporter
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: openebs-localpv-provisioner
- namespace: openebs
- labels:
- name: openebs-localpv-provisioner
- openebs.io/component-name: openebs-localpv-provisioner
- openebs.io/version: 3.5.0
- spec:
- selector:
- matchLabels:
- name: openebs-localpv-provisioner
- openebs.io/component-name: openebs-localpv-provisioner
- replicas: 1
- strategy:
- type: Recreate
- template:
- metadata:
- labels:
- name: openebs-localpv-provisioner
- openebs.io/component-name: openebs-localpv-provisioner
- openebs.io/version: 3.5.0
- spec:
- serviceAccountName: openebs-maya-operator
- containers:
- - name: openebs-provisioner-hostpath
- imagePullPolicy: IfNotPresent
- image: openebs/provisioner-localpv:3.4.0
- args:
- - "--bd-time-out=$(BDC_BD_BIND_RETRIES)"
- env:
- # OPENEBS_IO_K8S_MASTER enables openebs provisioner to connect to K8s
- # based on this address. This is ignored if empty.
- # This is supported for openebs provisioner version 0.5.2 onwards
- #- name: OPENEBS_IO_K8S_MASTER
- # value: "http://10.128.0.12:8080"
- # OPENEBS_IO_KUBE_CONFIG enables openebs provisioner to connect to K8s
- # based on this config. This is ignored if empty.
- # This is supported for openebs provisioner version 0.5.2 onwards
- #- name: OPENEBS_IO_KUBE_CONFIG
- # value: "/home/ubuntu/.kube/config"
- # This sets the number of times the provisioner should try
- # with a polling interval of 5 seconds, to get the Blockdevice
- # Name from a BlockDeviceClaim, before the BlockDeviceClaim
- # is deleted. E.g. 12 * 5 seconds = 60 seconds timeout
- - name: BDC_BD_BIND_RETRIES
- value: "12"
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: OPENEBS_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- # OPENEBS_SERVICE_ACCOUNT provides the service account of this pod as
- # environment variable
- - name: OPENEBS_SERVICE_ACCOUNT
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: OPENEBS_IO_ENABLE_ANALYTICS
- value: "true"
- - name: OPENEBS_IO_INSTALLER_TYPE
- value: "openebs-operator"
- - name: OPENEBS_IO_HELPER_IMAGE
- value: "openebs/linux-utils:3.5.0"
- - name: OPENEBS_IO_BASE_PATH
- value: "/var/openebs/local"
- # LEADER_ELECTION_ENABLED is used to enable/disable leader election. By default
- # leader election is enabled.
- #- name: LEADER_ELECTION_ENABLED
- # value: "true"
- # OPENEBS_IO_IMAGE_PULL_SECRETS environment variable is used to pass the image pull secrets
- # to the helper pod launched by local-pv hostpath provisioner
- #- name: OPENEBS_IO_IMAGE_PULL_SECRETS
- # value: ""
- # Process name used for matching is limited to the 15 characters
- # present in the pgrep output.
- # So fullname can't be used here with pgrep (>15 chars).A regular expression
- # that matches the entire command name has to specified.
- # Anchor `^` : matches any string that starts with `provisioner-loc`
- # `.*`: matches any string that has `provisioner-loc` followed by zero or more char
- livenessProbe:
- exec:
- command:
- - sh
- - -c
- - test `pgrep -c "^provisioner-loc.*"` = 1
- initialDelaySeconds: 30
- periodSeconds: 60
- ---
- apiVersion: storage.k8s.io/v1
- kind: StorageClass
- metadata:
- name: openebs-hostpath
- annotations:
- openebs.io/cas-type: local
- cas.openebs.io/config: |
- #hostpath type will create a PV by
- # creating a sub-directory under the
- # BASEPATH provided below.
- - name: StorageType
- value: "hostpath"
- #Specify the location (directory) where
- # where PV(volume) data will be saved.
- # A sub-directory with pv-name will be
- # created. When the volume is deleted,
- # the PV sub-directory will be deleted.
- #Default value is /var/openebs/local
- - name: BasePath
- value: "/var/openebs/local/"
- provisioner: openebs.io/local
- volumeBindingMode: WaitForFirstConsumer
- reclaimPolicy: Delete
- ---
- apiVersion: storage.k8s.io/v1
- kind: StorageClass
- metadata:
- name: openebs-device
- annotations:
- openebs.io/cas-type: local
- cas.openebs.io/config: |
- #device type will create a PV by
- # issuing a BDC and will extract the path
- # values from the associated BD.
- - name: StorageType
- value: "device"
- provisioner: openebs.io/local
- volumeBindingMode: WaitForFirstConsumer
- reclaimPolicy: Delete
- ---
|