From 5a0f98ff8b5a38075a5b6ee1e17730283a340bbb Mon Sep 17 00:00:00 2001 From: CNBU Jenkins Date: Wed, 22 Nov 2023 21:51:09 -0500 Subject: [PATCH] operator portworx-essentials (23.10.1) Signed-off-by: CNBU Jenkins --- .../manifests/core_v1_storagecluster_crd.yaml | 3936 +++++++++++++++++ .../manifests/core_v1_storagenode_crd.yaml | 188 + ...ortworxoperator.clusterserviceversion.yaml | 569 +++ .../23.10.1/metadata/annotations.yaml | 8 + 4 files changed, 4701 insertions(+) create mode 100644 operators/portworx-essentials/23.10.1/manifests/core_v1_storagecluster_crd.yaml create mode 100644 operators/portworx-essentials/23.10.1/manifests/core_v1_storagenode_crd.yaml create mode 100644 operators/portworx-essentials/23.10.1/manifests/portworxoperator.clusterserviceversion.yaml create mode 100644 operators/portworx-essentials/23.10.1/metadata/annotations.yaml diff --git a/operators/portworx-essentials/23.10.1/manifests/core_v1_storagecluster_crd.yaml b/operators/portworx-essentials/23.10.1/manifests/core_v1_storagecluster_crd.yaml new file mode 100644 index 00000000000..021be0af900 --- /dev/null +++ b/operators/portworx-essentials/23.10.1/manifests/core_v1_storagecluster_crd.yaml @@ -0,0 +1,3936 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: storageclusters.core.libopenstorage.org +spec: + group: core.libopenstorage.org + names: + kind: StorageCluster + listKind: StorageClusterList + plural: storageclusters + singular: storagecluster + shortNames: + - stc + scope: Namespaced + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + additionalPrinterColumns: + - description: The unique ID of the storage cluster + jsonPath: .status.clusterUid + name: Cluster UUID + type: string + - description: The status of the storage cluster + jsonPath: .status.phase + name: Status + type: string + - description: The version of the storage cluster + jsonPath: .spec.version + name: Version + type: string + - description: The age of the storage cluster + jsonPath: .metadata.creationTimestamp + name: Age + type: date + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + description: The desired behavior of the storage cluster. + properties: + metadata: + type: object + description: Metadata contains metadata for different storage cluster components. + properties: + annotations: + type: object + x-kubernetes-preserve-unknown-fields: true + description: >- + The annotations section of spec is a map of map to pass custom annotations to different + storage cluster components. The key specifies component in format of "kind/component", + e.g. "deployment/stork" to pass custom annotations to stork deployment. The value is a map of + string that contains custom annotation key and value pairs. + labels: + type: object + x-kubernetes-preserve-unknown-fields: true + description: >- + The labels section of spec is a map of map to pass custom labels to different storage cluster + components. The key specifies component in format of "kind/component", e.g. "service/portworx-api" + to pass custom labels to portworx-api service. The value is a map of string that contains custom + label key and value pairs. + resources: + type: object + description: Specifies the compute resource requirements for the storage pod. + properties: + requests: + type: object + description: Requested resources for the storage pod. + properties: + memory: + type: string + description: Requested memory for the storage pod. + cpu: + type: string + description: Requested cpu for the storage pod. + image: + type: string + description: Docker image of the storage driver. + version: + type: string + description: Version of the storage driver. This field is read-only. + imagePullPolicy: + type: string + description: Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always. + imagePullSecret: + type: string + description: Image pull secret is a reference to secret in the same namespace as the + StorageCluster. It is used for pulling all images used by the StorageCluster. + customImageRegistry: + type: string + description: >- + Custom container image registry server that will be used instead of + index.docker.io to download Docker images. This may include the repository as well. + (Example: myregistry.net:5443 or myregistry.com/myrepository) + preserveFullCustomImageRegistry: + type: boolean + description: >- + Setting this to true this stops part of the image tag being swallowed when setting a + customImageRegistry with a / in it. When set to false using a customImageRegistry of + `example.io/public` and an image of `portworx/oci-monitor` the full image path is is + `example.io/public/oci-monitor`, setting to true gives you + `example.io/public/portworx/oci-monitor`. Defaults to false + secretsProvider: + type: string + description: Secrets provider is the name of secret provider that driver will connect to. + startPort: + type: integer + format: int32 + minimum: 0 + description: Start port is the starting port in the range of ports used by the cluster. + autoUpdateComponents: + type: string + description: A strategy to determine how component versions are to be updated automatically. + updateStrategy: + type: object + description: An update strategy to replace existing StorageCluster pods with new pods. + properties: + type: + type: string + description: Type of storage cluster update. Can be RollingUpdate or OnDelete. + Default is RollingUpdate. + enum: + - RollingUpdate + - OnDelete + rollingUpdate: + type: object + description: Spec to control the desired behavior of storage cluster rolling update. + properties: + minReadySeconds: + description: Minimum number of seconds for which a newly created Portworx pod + should be ready without any of its container crashing for it to + be considered available. Defaults to 0 (pod will be considered available + as soon as it is ready). + format: int32 + type: integer + maxUnavailable: + x-kubernetes-int-or-string: true + description: >- + The maximum number of StorageCluster pods that can be unavailable + during the update. Value can be an absolute number (ex: 5) or a percentage of + total number of StorageCluster pods at the start of the update (ex: 10%). + Absolute number is calculated from percentage by rounding up. This cannot be 0. + Default value is 1. Example: when this is set to 30%, at most 30% of the total + number of nodes that should be running the storage pod can have their pods + stopped for an update at any given time. The update starts by stopping at most + 30% of those StorageCluster pods and then brings up new StorageCluster pods in + their place. Once the new pods are available, it then proceeds onto other + StorageCluster pods, thus ensuring that at least 70% of original number of + StorageCluster pods are available at all times during the update. + deleteStrategy: + type: object + description: Delete strategy to uninstall and wipe the storage cluster. + properties: + type: + type: string + description: Type of storage cluster delete. Can be Uninstall or UninstallAndWipe. + There is no default delete strategy. When no delete strategy only objects managed + by the StorageCluster controller and owned by the StorageCluster object are deleted. + The storage driver will be left in a state where it will not be managed by any object. + Uninstall strategy ensures that the cluster is completely uninstalled even from the + storage driver perspective. UninstallAndWipe strategy ensures that the cluster is + completely uninstalled as well as the storage devices and metadata are wiped for + reuse. This may result in data loss. + enum: + - Uninstall + - UninstallAndWipe + revisionHistoryLimit: + type: integer + format: int32 + description: The number of old history to retain to allow rollback. This is a pointer + to distinguish between an explicit zero and not specified. Defaults to 10. + featureGates: + type: object + x-kubernetes-preserve-unknown-fields: true + description: This is a map of feature names to string values. + runtimeOptions: + type: object + x-kubernetes-preserve-unknown-fields: true + description: This is map of any runtime options that need to be sent to the storage + driver. The value is a string. + placement: + type: object + description: Describes placement configuration for the storage cluster pods. + properties: + nodeAffinity: + type: object + description: Describes node affinity scheduling rules for the storage cluster pods. + This is exactly the same object as Kubernetes node affinity for pods. + properties: + requiredDuringSchedulingIgnoredDuringExecution: + type: object + properties: + nodeSelectorTerms: + type: array + items: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + required: + - key + - operator + matchFields: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + required: + - key + - operator + required: + - nodeSelectorTerms + preferredDuringSchedulingIgnoredDuringExecution: + type: array + items: + type: object + properties: + weight: + type: integer + preference: + type: object + properties: + matchExpressions: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + required: + - key + - operator + matchFields: + type: array + items: + type: object + properties: + key: + type: string + operator: + type: string + values: + type: array + items: + type: string + required: + - key + - operator + required: + - preference + - weight + tolerations: + type: array + description: Tolerations for all the pods deployed by the StorageCluster controller. + The pod with this toleration attached will tolerate any taint that matches the + triple using the matching operator . + items: + type: object + properties: + effect: + type: string + description: Effect indicates the taint effect to match. Empty means match + all taint effects. When specified, allowed values are NoSchedule, + PreferNoSchedule and NoExecute. + key: + type: string + description: Key is the taint key that the toleration applies to. Empty means + match all taint keys. If the key is empty, operator must be Exists; this + combination means to match all values and all keys. + operator: + type: string + description: "Operator represents a key's relationship to the value. Valid + operators are Exists and Equal. Defaults to Equal. Exists is equivalent to + wildcard for value, so that a pod can tolerate all taints of a particular category." + value: + type: string + description: Value is the taint value the toleration matches to. If the operator + is Exists, the value should be empty, otherwise just a regular string. + tolerationSeconds: + type: integer + description: TolerationSeconds represents the period of time the toleration + (which must be of effect NoExecute, otherwise this field is ignored) tolerates + the taint. By default, it is not set, which means tolerate the taint forever + (do not evict). Zero and negative values will be treated as 0 (evict + immediately) by the system. + kvdb: + type: object + description: Details of KVDB that the storage driver will use. + properties: + internal: + type: boolean + description: Flag indicating whether to use internal KVDB or an external KVDB. + endpoints: + type: array + description: If using external KVDB, this is the list of KVDB endpoints. + items: + type: string + authSecret: + type: string + description: Authentication secret is the name of Kubernetes secret containing + information to authenticate with the external KVDB. It could have the username/password + for basic auth, certificate information or an ACL token. + storage: + type: object + description: Details of the storage used by the storage driver. + properties: + useAll: + type: boolean + description: Use all available, unformatted, unpartitioned devices. This will be + ignored if spec.storage.devices is not empty. + useAllWithPartitions: + type: boolean + description: Use all available unformatted devices. This will be + ignored if spec.storage.devices is not empty. + forceUseDisks: + type: boolean + description: Flag indicating to use the devices even if there is file system present + on it. Note that the devices may be wiped before using. + devices: + type: array + description: List of devices to be used by the storage driver. + items: + type: string + cacheDevices: + type: array + description: List of cache devices to be used by the storage driver. + items: + type: string + journalDevice: + type: string + description: Device used for journaling. + systemMetadataDevice: + type: string + description: Device that will be used to store system metadata by the driver. + kvdbDevice: + type: string + description: Device used for internal KVDB. + cloudStorage: + type: object + description: Details of storage used in cloud environment. + properties: + provider: + type: string + description: Cloud provider name. + maxStorageNodes: + type: integer + format: int32 + minimum: 0 + description: Maximum nodes that will have storage in the cluster. + maxStorageNodesPerZone: + type: integer + format: int32 + minimum: 0 + description: Maximum nodes in every zone that will have storage in the cluster. + maxStorageNodesPerZonePerNodeGroup: + type: integer + format: int32 + minimum: 0 + description: Maximum nodes in every zone in every node group that will have storage + in the cluster. + nodePoolLabel: + type: string + description: Kubernetes node label key with which nodes are grouped into node pools + for storage distribution in cloud environment. + deviceSpecs: + type: array + description: List of storage device specs. A cloud storage device will be created + for every spec in the list. The specs will be applied to all nodes in the cluster + up to spec.cloudStorage.maxStorageNodes or spec.cloudStorage.maxStorageNodesPerZone + or spec.cloudStorage.maxStorageNodesPerZonePerNodeGroup. + This will be ignored if spec.cloudStorage.capacitySpecs is present. + items: + type: string + capacitySpecs: + type: array + description: List of cluster wide storage types and their capacities. A single + capacity spec identifies a storage pool with a set of minimum requested IOPS + and size. Based on the cloud provider, the total storage capacity will get + divided amongst the nodes. The nodes bearing storage themselves will get + uniformly distributed across all the zones. + items: + type: object + properties: + minIOPS: + type: integer + format: int64 + minimum: 0 + description: Minimum IOPS expected from the cloud drive. + minCapacityInGiB: + type: integer + format: int64 + minimum: 0 + description: Minimum capacity for this storage cluster. The total capacity + of devices created by this capacity spec should not be less than this + number for the entire cluster. + maxCapacityInGiB: + type: integer + format: int64 + minimum: 0 + description: Maximum capacity for this storage cluster. The total capacity + of devices created by this capacity spec should not be greater than this + number for the entire cluster. + options: + type: object + x-kubernetes-preserve-unknown-fields: true + description: Additional options required to provision the drive in cloud. + journalDeviceSpec: + type: string + description: Device spec for the journal device. + systemMetadataDeviceSpec: + type: string + description: Device spec for the metadata device. This device will be used to store + system metadata by the driver. + kvdbDeviceSpec: + type: string + description: Device spec for internal KVDB device. + network: + type: object + description: Contains network information that is needed by the storage driver. + properties: + dataInterface: + type: string + description: Name of the network interface used by the storage driver for data traffic. + mgmtInterface: + type: string + description: Name of the network interface used by the storage driver for management traffic. + stork: + type: object + description: Contains STORK related spec. + properties: + enabled: + type: boolean + description: Flag indicating whether STORK needs to be enabled. + lockImage: + type: boolean + description: Flag indicating if the STORK image needs to be locked to the given image. + If the image is not locked, it can be updated by the storage driver during upgrades. + image: + type: string + description: Docker image of the STORK container. + hostNetwork: + type: boolean + description: Flag indicating if Stork pods should run in host network. + args: + type: object + x-kubernetes-preserve-unknown-fields: true + description: >- + It is map of arguments given to STORK. Example: driver: pxd + env: + type: array + description: List of environment variables used by STORK. This is an array of + Kubernetes EnvVar where the value can be given directly or from a source like field, + config map or secret. + items: + type: object + properties: + name: + type: string + value: + type: string + valueFrom: + type: object + properties: + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + fieldRef: + type: object + properties: + apiVersion: + type: string + fieldPath: + type: string + resourceFieldRef: + type: object + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + volumes: + type: array + items: + type: object + properties: + name: + type: string + readOnly: + type: boolean + mountPath: + type: string + mountPropagation: + type: string + hostPath: + type: object + properties: + path: + type: string + type: + type: string + secret: + type: object + properties: + secretName: + type: string + defaultMode: + type: integer + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + configMap: + type: object + properties: + name: + type: string + defaultMode: + type: integer + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + projected: + type: object + properties: + defaultMode: + type: integer + sources: + type: array + items: + type: object + properties: + secret: + type: object + properties: + name: + type: string + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + configMap: + type: object + properties: + name: + type: string + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + resources: + type: object + description: Specifies the resource requirements for stork and stork scheduler. + properties: + requests: + type: object + description: Requested resources. + properties: + memory: + type: string + description: Requested memory. + cpu: + type: string + description: Requested cpu. + limits: + type: object + description: Resource limit. + properties: + memory: + type: string + description: Memory limit. + cpu: + type: string + description: CPU limit. + userInterface: + type: object + description: Contains spec of a user interface for the storage driver. + properties: + enabled: + type: boolean + description: Flag indicating whether the user interface needs to be enabled. + lockImage: + type: boolean + description: Flag indicating if the user interface image needs to be locked to the given + image. If the image is not locked, it can be updated by the storage driver during upgrades. + image: + type: string + description: Docker image of the user interface container. + env: + type: array + description: List of environment variables used by the UI components. This is an array + of Kubernetes EnvVar where the value can be given directly or from a source like field, + config map or secret. + items: + type: object + properties: + name: + type: string + value: + type: string + valueFrom: + type: object + properties: + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + fieldRef: + type: object + properties: + apiVersion: + type: string + fieldPath: + type: string + resourceFieldRef: + type: object + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + autopilot: + type: object + description: Contains spec of autopilot component for storage driver. + properties: + enabled: + type: boolean + description: Flag indicating whether autopilot needs to be enabled. + lockImage: + type: boolean + description: Flag indicating if the autopilot image needs to be locked to the given image. + If the image is not locked, it can be updated by the storage driver during upgrades. + image: + type: string + description: Docker image of the autopilot container. + args: + type: object + x-kubernetes-preserve-unknown-fields: true + description: >- + It is a map of arguments provided to autopilot. Example: log-level: debug + env: + type: array + description: List of environment variables used by autopilot. This is an array of + Kubernetes EnvVar where the value can be given directly or from a source like field, + config map or secret. + items: + type: object + properties: + name: + type: string + value: + type: string + valueFrom: + type: object + properties: + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + fieldRef: + type: object + properties: + apiVersion: + type: string + fieldPath: + type: string + resourceFieldRef: + type: object + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + volumes: + type: array + items: + type: object + properties: + name: + type: string + readOnly: + type: boolean + mountPath: + type: string + mountPropagation: + type: string + hostPath: + type: object + properties: + path: + type: string + type: + type: string + secret: + type: object + properties: + secretName: + type: string + defaultMode: + type: integer + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + configMap: + type: object + properties: + name: + type: string + defaultMode: + type: integer + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + projected: + type: object + properties: + defaultMode: + type: integer + sources: + type: array + items: + type: object + properties: + secret: + type: object + properties: + name: + type: string + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + configMap: + type: object + properties: + name: + type: string + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + providers: + type: array + description: List of input data providers to autopilot. + items: + type: object + properties: + name: + type: string + description: Unique name of the data provider. + type: + type: string + description: Type of the data provider. For instance - prometheus + params: + type: object + x-kubernetes-preserve-unknown-fields: true + description: Map of key-value params for the provider. + resources: + type: object + description: Specifies the resource requirements for the autopilot pod. + properties: + requests: + type: object + description: Requested resources. + properties: + memory: + type: string + description: Requested memory. + cpu: + type: string + description: Requested cpu. + limits: + type: object + description: Resource limit. + properties: + memory: + type: string + description: Memory limit. + cpu: + type: string + description: CPU limit. + monitoring: + type: object + description: Contains monitoring configuration for the storage cluster. + properties: + enableMetrics: + type: boolean + description: "If this flag is enabled it will expose the storage cluster metrics to external + monitoring solutions like Prometheus. DEPRECATED - use prometheus.exportMetrics instead" + prometheus: + type: object + description: Contains configuration of Prometheus to monitor the storage cluster. + properties: + resources: + type: object + description: Define resources requests and limits for single Pods. + properties: + limits: + 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: 'Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + 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 amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + securityContext: + description: 'Security options the pod should run with. More + info: https://kubernetes.io/docs/concepts/policy/security-context/ + More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether + a process can gain more privileges than its parent process. + This bool directly controls if the no_new_privs flag will + be set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) run as Privileged + 2) has CAP_SYS_ADMIN' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. + Defaults to the default set of capabilities granted by + the container runtime. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. Processes + in privileged containers are essentially equivalent to + root on the host. Defaults to false. + type: boolean + procMount: + description: procMount denotes the type of proc mount to + use for the containers. The default is DefaultProcMount + which uses the container runtime defaults for readonly + paths and masked paths. This requires the ProcMountType + feature flag to be enabled. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. Default is false. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. Uses runtime default if unset. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a + non-root user. If true, the Kubelet will validate the + image at runtime to ensure that it does not run as UID + 0 (root) and fail to start the container if it does. If + unset or false, no such validation will be performed. + May also be set in PodSecurityContext. If set in both + SecurityContext and PodSecurityContext, the value specified + in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. Defaults to user specified in image metadata + if unspecified. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the container. + If unspecified, the container runtime will allocate a + random SELinux context for each container. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + windowsOptions: + description: The Windows specific settings applied to all + containers. If unspecified, the options from the PodSecurityContext + will be used. If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission + webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential spec named + by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the + GMSA credential spec to use. + type: string + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process. Defaults to the user specified + in image metadata if unspecified. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + exportMetrics: + type: boolean + description: If this flag is enabled it will expose the storage cluster metrics to Prometheus. + enabled: + type: boolean + description: Flag indicating whether Prometheus stack needs to be enabled and deployed + by the Storage operator. + remoteWriteEndpoint: + type: string + description: Specifies the remote write endpoint for Prometheus. + alertManager: + type: object + description: Contains configuration of AlertManager for the storage cluster. + properties: + enabled: + type: boolean + description: Flag indicating whether AlertManager needs to be enabled and deployed + by the Storage operator. + replicas: + description: Total number of non-terminated pods targeted by this + Prometheus deployment (their labels match the selector). + format: int32 + type: integer + retention: + description: Time duration Prometheus shall retain data for. Default + is '24h' if retentionSize is not set, and must match the regular + expression `[0-9]+(ms|s|m|h|d|w|y)` (milliseconds seconds minutes + hours days weeks years). + pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ + type: string + retentionSize: + description: Maximum amount of disk space used by blocks. + pattern: (^0|([0-9]*[.])?[0-9]+((K|M|G|T|E|P)i?)?B)$ + type: string + storage: + description: Storage spec to specify how storage shall be used. + properties: + disableMountSubPath: + description: 'Deprecated: subPath usage will be disabled by default + in a future release, this option will become unnecessary. DisableMountSubPath + allows to remove any subPath usage in volume mounts.' + type: boolean + emptyDir: + description: 'EmptyDirVolumeSource to be used by the StatefulSet. + If specified, used in place of any volumeClaimTemplate. More + info: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir' + properties: + medium: + description: 'medium represents what type of storage medium + should back this directory. The default is "" which means + to use the node''s default medium. Must be an empty string + (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount of local storage + required for this EmptyDir volume. The size limit is also + applicable for memory medium. The maximum usage on memory + medium EmptyDir would be the minimum value between the SizeLimit + specified here and the sum of memory limits of all containers + in a pod. The default is nil which means that the limit + is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: 'EphemeralVolumeSource to be used by the StatefulSet. + This is a beta field in k8s 1.21, for lower versions, starting + with k8s 1.19, it requires enabling the GenericEphemeralVolume + feature gate. More info: https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/#generic-ephemeral-volumes' + properties: + volumeClaimTemplate: + description: "Will be used to create a stand-alone PVC to + provision the volume. The pod in which this EphemeralVolumeSource + is embedded will be the owner of the PVC, i.e. the PVC will + be deleted together with the pod. The name of the PVC will + be `-` where `` is the + name from the `PodSpec.Volumes` array entry. Pod validation + will reject the pod if the concatenated name is not valid + for a PVC (for example, too long). \n An existing PVC with + that name that is not owned by the pod will *not* be used + for the pod to avoid using an unrelated volume by mistake. + Starting the pod is then blocked until the unrelated PVC + is removed. If such a pre-created PVC is meant to be used + by the pod, the PVC has to updated with an owner reference + to the pod once the pod exists. Normally this should not + be necessary, but it may be useful when manually reconstructing + a broken cluster. \n This field is read-only and no changes + will be made by Kubernetes to the PVC after it has been + created. \n Required, must not be nil." + properties: + metadata: + description: May contain labels and annotations that will + be copied into the PVC when creating it. No other fields + are allowed and will be rejected during validation. + type: object + spec: + description: The specification for the PersistentVolumeClaim. + The entire content is copied unchanged into the PVC + that gets created from this template. The same fields + as in a PersistentVolumeClaim are also valid here. + properties: + accessModes: + description: 'accessModes contains the desired access + modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can be used to specify + either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) If the + provisioner or an external controller can support + the specified data source, it will create a new + volume based on the contents of the specified data + source. When the AnyVolumeDataSource feature gate + is enabled, dataSource contents will be copied to + dataSourceRef, and dataSourceRef contents will be + copied to dataSource when dataSourceRef.namespace + is not specified. If the namespace is specified, + then dataSourceRef will not be copied to dataSource.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API group. + For any other third-party types, APIGroup is + required. + type: string + kind: + description: Kind is the type of resource being + referenced + type: string + name: + description: Name is the name of resource being + referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: 'dataSourceRef specifies the object from + which to populate the volume with data, if a non-empty + volume is desired. This may be any object from a + non-empty API group (non core object) or a PersistentVolumeClaim + object. When this field is specified, volume binding + will only succeed if the type of the specified object + matches some installed volume populator or dynamic + provisioner. This field will replace the functionality + of the dataSource field and as such if both fields + are non-empty, they must have the same value. For + backwards compatibility, when namespace isn''t specified + in dataSourceRef, both fields (dataSource and dataSourceRef) + will be set to the same value automatically if one + of them is empty and the other is non-empty. When + namespace is specified in dataSourceRef, dataSource + isn''t set to the same value and must be empty. + There are three important differences between dataSource + and dataSourceRef: * While dataSource only allows + two specific types of objects, dataSourceRef allows + any non-core object, as well as PersistentVolumeClaim + objects. * While dataSource ignores disallowed values + (dropping them), dataSourceRef preserves all values, + and generates an error if a disallowed value is + specified. * While dataSource only allows local + objects, dataSourceRef allows objects in any namespaces. + (Beta) Using this field requires the AnyVolumeDataSource + feature gate to be enabled. (Alpha) Using the namespace + field of dataSourceRef requires the CrossNamespaceVolumeDataSource + feature gate to be enabled.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API group. + For any other third-party types, APIGroup is + required. + type: string + kind: + description: Kind is the type of resource being + referenced + type: string + name: + description: Name is the name of resource being + referenced + type: string + namespace: + description: Namespace is the namespace of resource + being referenced Note that when a namespace + is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent namespace + to allow that namespace's owner to accept the + reference. See the ReferenceGrant documentation + for details. (Alpha) This field requires the + CrossNamespaceVolumeDataSource feature gate + to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents the minimum resources + the volume should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed to specify + resource requirements that are lower than previous + value but must still be higher than capacity recorded + in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are used + by this container. \n This is an alpha field + and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: ResourceClaim references one entry + in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name of + one entry in pod.spec.resourceClaims of + the Pod where this field is used. It makes + that resource available inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + 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: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + 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 amount + of compute resources required. If Requests is + omitted for a container, it defaults to Limits + if that is explicitly specified, otherwise to + an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query over volumes + to consider for binding. + 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 + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is the name of the + StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume + is required by the claim. Value of Filesystem is + implied when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding reference to + the PersistentVolume backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + volumeClaimTemplate: + description: A PVC spec to be used by the StatefulSet. The easiest + way to use a volume that cannot be automatically provisioned + (for whatever reason) is to use a label selector alongside manually + created PersistentVolumes. + 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: + description: EmbeddedMetadata contains metadata relevant to + an EmbeddedResource. + properties: + annotations: + additionalProperties: + type: string + description: 'Annotations is an unstructured key value + map stored with a resource that may be set by external + tools to store and retrieve arbitrary metadata. They + are not queryable and should be preserved when modifying + objects. More info: http://kubernetes.io/docs/user-guide/annotations' + type: object + labels: + additionalProperties: + type: string + description: 'Map of string keys and values that can be + used to organize and categorize (scope and select) objects. + May match selectors of replication controllers and services. + More info: http://kubernetes.io/docs/user-guide/labels' + type: object + name: + description: 'Name must be unique within a namespace. + Is required when creating resources, although some resources + may allow a client to request the generation of an appropriate + name automatically. Name is primarily intended for creation + idempotence and configuration definition. Cannot be + updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names' + type: string + type: object + spec: + description: 'Spec defines the desired characteristics of + a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + accessModes: + description: 'accessModes contains the desired access + modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can be used to specify + either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) If the provisioner + or an external controller can support the specified + data source, it will create a new volume based on the + contents of the specified data source. When the AnyVolumeDataSource + feature gate is enabled, dataSource contents will be + copied to dataSourceRef, and dataSourceRef contents + will be copied to dataSource when dataSourceRef.namespace + is not specified. If the namespace is specified, then + dataSourceRef will not be copied to dataSource.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API group. + For any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: 'dataSourceRef specifies the object from + which to populate the volume with data, if a non-empty + volume is desired. This may be any object from a non-empty + API group (non core object) or a PersistentVolumeClaim + object. When this field is specified, volume binding + will only succeed if the type of the specified object + matches some installed volume populator or dynamic provisioner. + This field will replace the functionality of the dataSource + field and as such if both fields are non-empty, they + must have the same value. For backwards compatibility, + when namespace isn''t specified in dataSourceRef, both + fields (dataSource and dataSourceRef) will be set to + the same value automatically if one of them is empty + and the other is non-empty. When namespace is specified + in dataSourceRef, dataSource isn''t set to the same + value and must be empty. There are three important differences + between dataSource and dataSourceRef: * While dataSource + only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim + objects. * While dataSource ignores disallowed values + (dropping them), dataSourceRef preserves all values, + and generates an error if a disallowed value is specified. + * While dataSource only allows local objects, dataSourceRef + allows objects in any namespaces. (Beta) Using this + field requires the AnyVolumeDataSource feature gate + to be enabled. (Alpha) Using the namespace field of + dataSourceRef requires the CrossNamespaceVolumeDataSource + feature gate to be enabled.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API group. + For any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + namespace: + description: Namespace is the namespace of resource + being referenced Note that when a namespace is specified, + a gateway.networking.k8s.io/ReferenceGrant object + is required in the referent namespace to allow that + namespace's owner to accept the reference. See the + ReferenceGrant documentation for details. (Alpha) + This field requires the CrossNamespaceVolumeDataSource + feature gate to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents the minimum resources + the volume should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed to specify resource + requirements that are lower than previous value but + must still be higher than capacity recorded in the status + field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are used by + this container. \n This is an alpha field and requires + enabling the DynamicResourceAllocation feature gate. + \n This field is immutable." + items: + description: ResourceClaim references one entry + in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name of one + entry in pod.spec.resourceClaims of the Pod + where this field is used. It makes that resource + available inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + 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: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + 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 amount + of compute resources required. If Requests is omitted + for a container, it defaults to Limits if that is + explicitly specified, otherwise to an implementation-defined + value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query over volumes to + consider for binding. + 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 + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is the name of the StorageClass + required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is + required by the claim. Value of Filesystem is implied + when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding reference to the + PersistentVolume backing this claim. + type: string + type: object + status: + description: 'Status represents the current information/status + of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + accessModes: + description: 'accessModes contains the actual access modes + the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + allocatedResources: + 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: allocatedResources is the storage resource + within AllocatedResources tracks the capacity allocated + to a PVC. It may be larger than the actual capacity + when a volume expansion operation is requested. For + storage quota, the larger value from allocatedResources + and PVC.spec.resources is used. If allocatedResources + is not set, PVC.spec.resources alone is used for quota + calculation. If a volume expansion capacity request + is lowered, allocatedResources is only lowered if there + are no expansion operations in progress and if the actual + volume capacity is equal or lower than the requested + capacity. This is an alpha field and requires enabling + RecoverVolumeExpansionFailure feature. + type: object + capacity: + 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: capacity represents the actual resources + of the underlying volume. + type: object + conditions: + description: conditions is the current Condition of persistent + volume claim. If underlying persistent volume is being + resized then the Condition will be set to 'ResizeStarted'. + items: + description: PersistentVolumeClaimCondition contails + details about state of pvc + properties: + lastProbeTime: + description: lastProbeTime is the time we probed + the condition. + format: date-time + type: string + lastTransitionTime: + description: lastTransitionTime is the time the + condition transitioned from one status to another. + format: date-time + type: string + message: + description: message is the human-readable message + indicating details about last transition. + type: string + reason: + description: reason is a unique, this should be + a short, machine understandable string that gives + the reason for condition's last transition. If + it reports "ResizeStarted" that means the underlying + persistent volume is being resized. + type: string + status: + type: string + type: + description: PersistentVolumeClaimConditionType + is a valid value of PersistentVolumeClaimCondition.Type + type: string + required: + - status + - type + type: object + type: array + phase: + description: phase represents the current phase of PersistentVolumeClaim. + type: string + resizeStatus: + description: resizeStatus stores status of resize operation. + ResizeStatus is not set by default but when expansion + is complete resizeStatus is set to empty string by resize + controller or kubelet. This is an alpha field and requires + enabling RecoverVolumeExpansionFailure feature. + type: string + type: object + type: object + type: object + volumes: + description: Volumes allows configuration of additional volumes on + the output StatefulSet definition. Volumes specified will be appended + to other volumes that are generated as a result of StorageSpec objects. + items: + description: Volume represents a named volume in a pod that may + be accessed by any container in the pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents an AWS Disk resource + that is attached to a kubelet''s host machine and then exposed + to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type of the volume + that you want to mount. Tip: Ensure that the filesystem + type is supported by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + partition: + description: 'partition is the partition in the volume that + you want to mount. If omitted, the default is to mount + by volume name. Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force the readOnly + setting in VolumeMounts. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the persistent disk + resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data Disk mount on + the host and bind mount to the pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching mode: None, + Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data disk in the + blob storage + type: string + diskURI: + description: diskURI is the URI of data disk in the blob + storage + type: string + fsType: + description: fsType is Filesystem type to mount. Must be + a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + kind: + description: 'kind expected values are Shared: multiple + blob disks per storage account Dedicated: single blob + disk per storage account Managed: azure managed data + disk (only in managed availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File Service mount + on the host and bind mount to the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret that contains + Azure Storage Account Name and Key + type: string + shareName: + description: shareName is the azure share Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount on the host that + shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors is a collection + of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the mounted root, + rather than the full Ceph tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile is the + path to key ring for User, default is /etc/ceph/user.secret + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef is reference + to the authentication secret for User, default is empty. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is optional: User is the rados user name, + default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume attached and + mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Examples: "ext4", "xfs", "ntfs". Implicitly inferred to + be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points to a secret + object containing parameters used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + description: 'volumeID used to identify the volume in cinder. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap that should populate + this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode bits used to + set permissions on created files by default. Must be an + octal value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value pair in + the Data field of the referenced ConfigMap will be projected + into the volume as a file whose name is the key and content + is the value. If specified, the listed keys will be projected + into the specified paths, and unlisted keys will not be + present. If a key is specified which is not present in + the ConfigMap, the volume setup will error unless it is + marked optional. Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits used to + set permissions on this file. Must be an octal value + between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. If not + specified, the volume defaultMode will be used. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of the file + to map the key to. May not be an absolute path. + May not contain the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether the ConfigMap or its + keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + description: csi (Container Storage Interface) represents ephemeral + storage that is handled by certain external CSI drivers (Beta + feature). + properties: + driver: + description: driver is the name of the CSI driver that handles + this volume. Consult with your admin for the correct name + as registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", "xfs", "ntfs". + If not provided, the empty value is passed to the associated + CSI driver which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference to the + secret object containing sensitive information to pass + to the CSI driver to complete the CSI NodePublishVolume + and NodeUnpublishVolume calls. This field is optional, + and may be empty if no secret is required. If the secret + object contains more than one secret, all secret references + are passed. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + description: readOnly specifies a read-only configuration + for the volume. Defaults to false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific properties + that are passed to the CSI driver. Consult your driver's + documentation for supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API about the pod + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on created files + by default. Must be a Optional: mode bits used to set + permissions on created files by default. Must be an octal + value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: Items is a list of downward API volume file + items: + description: DownwardAPIVolumeFile represents information + to create the file containing the pod field + properties: + fieldRef: + description: 'Required: Selects a field of the pod: + only annotations, labels, name and namespace are + supported.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used to set permissions + on this file, must be an octal value between 0000 + and 0777 or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON requires + decimal values for mode bits. If not specified, + the volume defaultMode will be used. This might + be in conflict with other options that affect the + file mode, like fsGroup, and the result can be other + mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path is the relative path + name of the file to be created. Must not be absolute + or contain the ''..'' path. Must be utf-8 encoded. + The first item of the relative path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the + exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary directory that + shares a pod''s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type of storage medium + should back this directory. The default is "" which means + to use the node''s default medium. Must be an empty string + (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount of local storage + required for this EmptyDir volume. The size limit is also + applicable for memory medium. The maximum usage on memory + medium EmptyDir would be the minimum value between the + SizeLimit specified here and the sum of memory limits + of all containers in a pod. The default is nil which means + that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: "ephemeral represents a volume that is handled + by a cluster storage driver. The volume's lifecycle is tied + to the pod that defines it - it will be created before the + pod starts, and deleted when the pod is removed. \n Use this + if: a) the volume is only needed while the pod runs, b) features + of normal volumes like restoring from snapshot or capacity + tracking are needed, c) the storage driver is specified through + a storage class, and d) the storage driver supports dynamic + volume provisioning through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between this volume + type and PersistentVolumeClaim). \n Use PersistentVolumeClaim + or one of the vendor-specific APIs for volumes that persist + for longer than the lifecycle of an individual pod. \n Use + CSI for light-weight local ephemeral volumes if the CSI driver + is meant to be used that way - see the documentation of the + driver for more information. \n A pod can use both types of + ephemeral volumes and persistent volumes at the same time." + properties: + volumeClaimTemplate: + description: "Will be used to create a stand-alone PVC to + provision the volume. The pod in which this EphemeralVolumeSource + is embedded will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The name of the + PVC will be `-` where `` is the name from the `PodSpec.Volumes` array entry. + Pod validation will reject the pod if the concatenated + name is not valid for a PVC (for example, too long). \n + An existing PVC with that name that is not owned by the + pod will *not* be used for the pod to avoid using an unrelated + volume by mistake. Starting the pod is then blocked until + the unrelated PVC is removed. If such a pre-created PVC + is meant to be used by the pod, the PVC has to updated + with an owner reference to the pod once the pod exists. + Normally this should not be necessary, but it may be useful + when manually reconstructing a broken cluster. \n This + field is read-only and no changes will be made by Kubernetes + to the PVC after it has been created. \n Required, must + not be nil." + properties: + metadata: + description: May contain labels and annotations that + will be copied into the PVC when creating it. No other + fields are allowed and will be rejected during validation. + type: object + spec: + description: The specification for the PersistentVolumeClaim. + The entire content is copied unchanged into the PVC + that gets created from this template. The same fields + as in a PersistentVolumeClaim are also valid here. + properties: + accessModes: + description: 'accessModes contains the desired access + modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can be used to specify + either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) If the + provisioner or an external controller can support + the specified data source, it will create a new + volume based on the contents of the specified + data source. When the AnyVolumeDataSource feature + gate is enabled, dataSource contents will be copied + to dataSourceRef, and dataSourceRef contents will + be copied to dataSource when dataSourceRef.namespace + is not specified. If the namespace is specified, + then dataSourceRef will not be copied to dataSource.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API + group. For any other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type of resource being + referenced + type: string + name: + description: Name is the name of resource being + referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: 'dataSourceRef specifies the object + from which to populate the volume with data, if + a non-empty volume is desired. This may be any + object from a non-empty API group (non core object) + or a PersistentVolumeClaim object. When this field + is specified, volume binding will only succeed + if the type of the specified object matches some + installed volume populator or dynamic provisioner. + This field will replace the functionality of the + dataSource field and as such if both fields are + non-empty, they must have the same value. For + backwards compatibility, when namespace isn''t + specified in dataSourceRef, both fields (dataSource + and dataSourceRef) will be set to the same value + automatically if one of them is empty and the + other is non-empty. When namespace is specified + in dataSourceRef, dataSource isn''t set to the + same value and must be empty. There are three + important differences between dataSource and dataSourceRef: + * While dataSource only allows two specific types + of objects, dataSourceRef allows any non-core + object, as well as PersistentVolumeClaim objects. + * While dataSource ignores disallowed values (dropping + them), dataSourceRef preserves all values, and + generates an error if a disallowed value is specified. + * While dataSource only allows local objects, + dataSourceRef allows objects in any namespaces. + (Beta) Using this field requires the AnyVolumeDataSource + feature gate to be enabled. (Alpha) Using the + namespace field of dataSourceRef requires the + CrossNamespaceVolumeDataSource feature gate to + be enabled.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API + group. For any other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type of resource being + referenced + type: string + name: + description: Name is the name of resource being + referenced + type: string + namespace: + description: Namespace is the namespace of resource + being referenced Note that when a namespace + is specified, a gateway.networking.k8s.io/ReferenceGrant + object is required in the referent namespace + to allow that namespace's owner to accept + the reference. See the ReferenceGrant documentation + for details. (Alpha) This field requires the + CrossNamespaceVolumeDataSource feature gate + to be enabled. + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents the minimum resources + the volume should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed to specify + resource requirements that are lower than previous + value but must still be higher than capacity recorded + in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + claims: + description: "Claims lists the names of resources, + defined in spec.resourceClaims, that are used + by this container. \n This is an alpha field + and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: ResourceClaim references one + entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name + of one entry in pod.spec.resourceClaims + of the Pod where this field is used. + It makes that resource available inside + a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + 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: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + 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 + amount of compute resources required. If Requests + is omitted for a container, it defaults to + Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query over volumes + to consider for binding. + 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 + x-kubernetes-map-type: atomic + storageClassName: + description: 'storageClassName is the name of the + StorageClass required by the claim. More info: + https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume + is required by the claim. Value of Filesystem + is implied when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding reference + to the PersistentVolume backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource that is + attached to a kubelet's host machine and then exposed to the + pod. + properties: + fsType: + description: 'fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. TODO: how do we prevent errors in the + filesystem from compromising the machine' + type: string + lun: + description: 'lun is Optional: FC target lun number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target worldwide + names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world wide identifiers + (wwids) Either wwids or combination of targetWWNs and + lun must be set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume resource + that is provisioned/attached using an exec based plugin. + properties: + driver: + description: driver is the name of the driver to use for + this volume. + type: string + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field holds extra + command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults to false (read/write). + ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef is reference + to the secret object containing sensitive information + to pass to the plugin scripts. This may be empty if no + secret object is specified. If the secret object contains + more than one secret, all secrets are passed to the plugin + scripts.' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume attached to + a kubelet's host machine. This depends on the Flocker control + service being running + properties: + datasetName: + description: datasetName is Name of the dataset stored as + metadata -> name on the dataset for Flocker should be + considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the dataset. This + is unique identifier of a Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE Disk resource + that is attached to a kubelet''s host machine and then exposed + to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of the volume that + you want to mount. Tip: Ensure that the filesystem type + is supported by the host operating system. Examples: "ext4", + "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + partition: + description: 'partition is the partition in the volume that + you want to mount. If omitted, the default is to mount + by volume name. Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can leave the property empty). + More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the PD resource in + GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the ReadOnly setting + in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository at a particular + revision. DEPRECATED: GitRepo is deprecated. To provision + a container with a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the EmptyDir into + the Pod''s container.' + properties: + directory: + description: directory is the target directory name. Must + not contain or start with '..'. If '.' is supplied, the + volume directory will be the git repository. Otherwise, + if specified, the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for the specified + revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs mount on the + host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name that details + Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume path. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the Glusterfs volume + to be mounted with read-only permissions. Defaults to + false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing file or directory + on the host machine that is directly exposed to the container. + This is generally used for system agents or other privileged + things that are allowed to see the host machine. Most containers + will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + --- TODO(jonesdl) We need to restrict who can use host directory + mounts and who can/can not mount host directories as read/write.' + properties: + path: + description: 'path of the directory on the host. If the + path is a symlink, it will follow the link to the real + path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults to "" More + info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource that is + attached to a kubelet''s host machine and then exposed to + the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether support iSCSI + Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether support iSCSI + Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type of the volume + that you want to mount. Tip: Ensure that the filesystem + type is supported by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI Initiator + Name. If initiatorName is specified with iscsiInterface + simultaneously, new iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface Name that uses + an iSCSI transport. Defaults to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal List. The + portal is either an IP or ip_addr:port if the port is + other than default (typically TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the ReadOnly setting + in VolumeMounts. Defaults to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret for iSCSI target + and initiator authentication + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + description: targetPortal is iSCSI Target Portal. The Portal + is either an IP or ip_addr:port if the port is other than + default (typically TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL and unique + within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the host that shares + a pod''s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the NFS server. More + info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the NFS export to + be mounted with read-only permissions. Defaults to false. + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP address of the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource represents a + reference to a PersistentVolumeClaim in the same namespace. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this volume. More + info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly setting in + VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a PhotonController + persistent disk attached and mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + pdID: + description: pdID is the ID that identifies Photon Controller + persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx volume attached + and mounted on kubelets host machine + properties: + fsType: + description: fSType represents the filesystem type to mount + Must be a filesystem type supported by the host operating + system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources secrets, + configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits used to set permissions + on created files by default. Must be an octal value between + 0000 and 0777 or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON requires decimal + values for mode bits. Directories within the path are + not affected by this setting. This might be in conflict + with other options that affect the file mode, like fsGroup, + and the result can be other mode bits set. + format: int32 + type: integer + sources: + description: sources is the list of volume projections + items: + description: Projection that may be projected along with + other supported volume types + properties: + configMap: + description: configMap information about the configMap + data to project + properties: + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced ConfigMap + will be projected into the volume as a file + whose name is the key and content is the value. + If specified, the listed keys will be projected + into the specified paths, and unlisted keys + will not be present. If a key is specified which + is not present in the ConfigMap, the volume + setup will error unless it is marked optional. + Paths must be relative and may not contain the + '..' path or start with '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. + Must be an octal value between 0000 and + 0777 or a decimal value between 0 and + 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. If not specified, the volume + defaultMode will be used. This might be + in conflict with other options that affect + the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be + an absolute path. May not contain the + path element '..'. May not start with + the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + description: downwardAPI information about the downwardAPI + data to project + properties: + items: + description: Items is a list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, + defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + description: 'Optional: mode bits used to + set permissions on this file, must be + an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML + accepts both octal and decimal values, + JSON requires decimal values for mode + bits. If not specified, the volume defaultMode + will be used. This might be in conflict + with other options that affect the file + mode, like fsGroup, and the result can + be other mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path is the relative + path name of the file to be created. Must + not be absolute or contain the ''..'' + path. Must be utf-8 encoded. The first + item of the relative path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the + container: only resources limits and requests + (limits.cpu, limits.memory, requests.cpu + and requests.memory) are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults + to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to + select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + description: secret information about the secret data + to project + properties: + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced Secret + will be projected into the volume as a file + whose name is the key and content is the value. + If specified, the listed keys will be projected + into the specified paths, and unlisted keys + will not be present. If a key is specified which + is not present in the Secret, the volume setup + will error unless it is marked optional. Paths + must be relative and may not contain the '..' + path or start with '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. + Must be an octal value between 0000 and + 0777 or a decimal value between 0 and + 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. If not specified, the volume + defaultMode will be used. This might be + in conflict with other options that affect + the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be + an absolute path. May not contain the + path element '..'. May not start with + the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional field specify whether the + Secret or its key must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + description: serviceAccountToken is information about + the serviceAccountToken data to project + properties: + audience: + description: audience is the intended audience + of the token. A recipient of a token must identify + itself with an identifier specified in the audience + of the token, and otherwise should reject the + token. The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is the requested + duration of validity of the service account + token. As the token approaches expiration, the + kubelet volume plugin will proactively rotate + the service account token. The kubelet will + start trying to rotate the token if the token + is older than 80 percent of its time to live + or if the token is older than 24 hours.Defaults + to 1 hour and must be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative to the + mount point of the file to project the token + into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount on the host + that shares a pod's lifetime + properties: + group: + description: group to map volume access to Default is no + group + type: string + readOnly: + description: readOnly here will force the Quobyte volume + to be mounted with read-only permissions. Defaults to + false. + type: boolean + registry: + description: registry represents a single or multiple Quobyte + Registry services specified as a string as host:port pair + (multiple entries are separated with commas) which acts + as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte volume in the + Backend Used with dynamically provisioned Quobyte volumes, + value is set by the plugin + type: string + user: + description: user to map volume access to Defaults to serivceaccount + user + type: string + volume: + description: volume is a string that references an already + created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device mount on the + host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type of the volume + that you want to mount. Tip: Ensure that the filesystem + type is supported by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + image: + description: 'image is the rados image name. More info: + https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring for RBDUser. + Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of Ceph monitors. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. Default is rbd. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the ReadOnly setting + in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication secret + for RBDUser. If provided overrides keyring. Default is + nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + user: + description: 'user is the rados user name. Default is admin. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent volume + attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of the ScaleIO + API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name of the ScaleIO + Protection Domain for the configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret for ScaleIO + user and other sensitive information. If this is not provided, + Login operation will fail. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + description: sslEnabled Flag enable/disable SSL communication + with Gateway, default false + type: boolean + storageMode: + description: storageMode indicates whether the storage for + a volume should be ThickProvisioned or ThinProvisioned. + Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage Pool associated + with the protection domain. + type: string + system: + description: system is the name of the storage system as + configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume already + created in the ScaleIO system that is associated with + this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that should populate + this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode bits used to + set permissions on created files by default. Must be an + octal value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value pair in + the Data field of the referenced Secret will be projected + into the volume as a file whose name is the key and content + is the value. If specified, the listed keys will be projected + into the specified paths, and unlisted keys will not be + present. If a key is specified which is not present in + the Secret, the volume setup will error unless it is marked + optional. Paths must be relative and may not contain the + '..' path or start with '..'. + items: + description: Maps a string key to a path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits used to + set permissions on this file. Must be an octal value + between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. If not + specified, the volume defaultMode will be used. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of the file + to map the key to. May not be an absolute path. + May not contain the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether the Secret or + its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the secret in the + pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS volume attached + and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret to use for obtaining + the StorageOS API credentials. If not specified, default + values will be attempted. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + description: volumeName is the human-readable name of the + StorageOS volume. Volume names are only unique within + a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the scope of the + volume within StorageOS. If no namespace is specified + then the Pod's namespace will be used. This allows the + Kubernetes name scoping to be mirrored within StorageOS + for tighter integration. Set VolumeName to any name to + override the default behaviour. Set to "default" if you + are not using namespaces within StorageOS. Namespaces + that do not pre-exist within StorageOS will be created. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere volume attached + and mounted on kubelets host machine + properties: + fsType: + description: fsType is filesystem type to mount. Must be + a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage Policy Based + Management (SPBM) profile ID associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage Policy Based + Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies vSphere + volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + volumeMounts: + description: VolumeMounts allows configuration of additional VolumeMounts + on the output StatefulSet definition. VolumeMounts specified will + be appended to other VolumeMounts in the prometheus container, that + are generated as a result of StorageSpec objects. + items: + description: VolumeMount describes a mounting of a Volume within + a container. + properties: + mountPath: + description: Path within the container at which the volume should + be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are propagated + from the host to container and the other way around. When + not set, MountPropagationNone is used. This field is beta + in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise + (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's + volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which the + container's volume should be mounted. Behaves similarly to + SubPath but environment variable references $(VAR_NAME) are + expanded using the container's environment. Defaults to "" + (volume's root). SubPathExpr and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + grafana: + type: object + description: Contains configuration of Grafana to monitor the storage cluster. + properties: + enabled: + type: boolean + description: Flag indicating whether Grafana stack needs to be enabled and deployed + by the Storage operator. + telemetry: + type: object + description: Contains telemetry configuration for the storage cluster. + properties: + enabled: + type: boolean + description: Flag indicates if telemetry component needs to be enabled + image: + type: string + description: Docker image of the telemetry container. + logUploaderImage: + type: string + description: Docker image of the log-upload-service container. + security: + type: object + description: Contains security configuration for the storage cluster. + properties: + enabled: + type: boolean + description: Flag indicating whether security features need to be enabled for the storage cluster. + auth: + type: object + description: Authorization configurations for a RBAC enabled storage cluster + properties: + guestAccess: + type: string + description: Defines the access mode of a guest user + selfSigned: + type: object + description: Configuration for self signed authentication + properties: + issuer: + type: string + description: Token issuer for the tokens used to connect with storage cluster. + tokenLifetime: + type: string + description: Lifetime of auto-generated RBAC tokens to access the storage cluster. + sharedSecret: + type: string + description: Shared secret is the name of the Kubernetes secret containing the shared key + used for signing RBAC tokens. The secret has to be present in the StorageCluster namespace. + csi: + type: object + description: Contains CSI configuration for the storage cluster. + properties: + enabled: + type: boolean + description: Flag indicating whether CSI needs to be installed for the storage cluster. + installSnapshotController: + type: boolean + description: Flag indicating whether CSI Snapshot Controller needs to be installed for the storage cluster. + topology: + type: object + description: Contains CSI topology configurations. + properties: + enabled: + type: boolean + description: Flag indicating whether CSI topology feature gate is enabled. + env: + type: array + description: List of environment variables used by the driver. This is an array of Kubernetes + EnvVar where the value can be given directly or from a source like field, config map or secret. + items: + type: object + properties: + name: + type: string + value: + type: string + valueFrom: + type: object + properties: + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + fieldRef: + type: object + properties: + apiVersion: + type: string + fieldPath: + type: string + resourceFieldRef: + type: object + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + volumes: + type: array + items: + type: object + properties: + name: + type: string + readOnly: + type: boolean + mountPath: + type: string + mountPropagation: + type: string + hostPath: + type: object + properties: + path: + type: string + type: + type: string + secret: + type: object + properties: + secretName: + type: string + defaultMode: + type: integer + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + configMap: + type: object + properties: + name: + type: string + defaultMode: + type: integer + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + projected: + type: object + properties: + defaultMode: + type: integer + sources: + type: array + items: + type: object + properties: + secret: + type: object + properties: + name: + type: string + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + configMap: + type: object + properties: + name: + type: string + optional: + type: boolean + items: + type: array + items: + type: object + properties: + key: + type: string + path: + type: string + mode: + type: integer + nodes: + type: array + description: Node level configurations that will override the configuration at cluster level. + These configurations can be for individual nodes or can be grouped to override configuration + of multiple nodes based on label selectors. + items: + type: object + properties: + selector: + type: object + description: Configuration in this node block is applied to nodes based on this selector. + Use either nodeName of labelSelector, not both. If nodeName is used, labelSelector will + be ignored. + properties: + nodeName: + type: string + description: Name of the Kubernetes node that is to be selected. If present then the + labelSelector is ignored even if the node with the given name is absent and the + labelSelector matches another node. + labelSelector: + type: object + description: It is a label query over all the nodes. The result of matchLabels and + matchExpressions is ANDed. An empty label selector matches all nodes. A null + label selector matches no objects. + properties: + matchLabels: + type: object + x-kubernetes-preserve-unknown-fields: true + description: It 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. + matchExpressions: + type: array + description: It is a list of label selector requirements. The requirements are ANDed. + items: + type: object + properties: + key: + type: string + description: It is the label key that the selector applies to. + operator: + type: string + description: "It represents a key's relationship to a set of values. Valid operators + are In, NotIn, Exists and DoesNotExist." + values: + type: array + description: It 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. + items: + type: string + storage: + type: object + description: Details of the storage used by the storage driver. + properties: + useAll: + type: boolean + description: Use all available, unformatted, unpartitioned devices. This will be + ignored if spec.storage.devices is not empty. + useAllWithPartitions: + type: boolean + description: Use all available unformatted devices. This will be + ignored if spec.storage.devices is not empty. + forceUseDisks: + type: boolean + description: Flag indicating to use the devices even if there is file system present + on it. Note that the devices may be wiped before using. + devices: + type: array + description: List of devices to be used by the storage driver. + items: + type: string + cacheDevices: + type: array + description: List of cache devices to be used by the storage driver. + items: + type: string + journalDevice: + type: string + description: Device used for journaling. + systemMetadataDevice: + type: string + description: Device that will be used to store system metadata by the driver. + kvdbDevice: + type: string + description: Device used for internal KVDB. + cloudStorage: + type: object + description: Details of storage used in cloud environment. + properties: + deviceSpecs: + type: array + description: List of storage device specs. A cloud storage device will be created + for every spec in the list. The specs will be applied to all nodes in the cluster + that match the node group selector. The number of nodes that will come up with + storage are constrained by maxStorageNodes, maxStorageNodesPerZone and + maxStorageNodesPerZonePerNodeGroup. + items: + type: string + journalDeviceSpec: + type: string + description: Device spec for the journal device. + systemMetadataDeviceSpec: + type: string + description: Device spec for the metadata device. This device will be used to store + system metadata by the driver. + kvdbDeviceSpec: + type: string + description: Device spec for internal KVDB device. + maxStorageNodesPerZonePerNodeGroup: + type: integer + format: int32 + minimum: 0 + description: Maximum nodes in every zone in every node group that will have storage + in the cluster. + network: + type: object + description: Contains network information that is needed by the storage driver. + properties: + dataInterface: + type: string + description: Name of the network interface used by the storage driver for data traffic. + mgmtInterface: + type: string + description: Name of the network interface used by the storage driver for + management traffic. + runtimeOptions: + type: object + x-kubernetes-preserve-unknown-fields: true + description: This is map of any runtime options that need to be sent to the storage + driver. The value is a string. If runtime options are present here at node level, + they will override the ones from cluster configuration. + env: + type: array + description: List of environment variables used by the driver. This is an array + of Kubernetes EnvVar where the value can be given directly or from a source + like field, config map or secret. Environment variables specified here at the + node level will be merged with the ones present in cluster configuration and + sent to the nodes. If there is duplicate, the node level value will take precedence. + items: + type: object + properties: + name: + type: string + value: + type: string + valueFrom: + type: object + properties: + configMapKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + fieldRef: + type: object + properties: + apiVersion: + type: string + fieldPath: + type: string + resourceFieldRef: + type: object + properties: + containerName: + type: string + divisor: + type: string + resource: + type: string + secretKeyRef: + type: object + properties: + key: + type: string + name: + type: string + optional: + type: boolean + status: + type: object + description: Most recently observed status of the storage cluster. This data may not be up to date. + properties: + clusterName: + type: string + description: Name of the storage cluster. + version: + type: string + description: Version of the storage driver. + clusterUid: + type: string + description: Unique ID of the storage cluster. + phase: + type: string + description: Phase of the StorageCluster is a simple, high-level summary of where the + StorageCluster is in its lifecycle. The condition array contains more detailed + information about the state of the cluster. + reason: + type: string + description: CamelCase messages split with commas indicating details about why the StorageCluster is in this state. + collisionCount: + type: integer + format: int32 + description: Count of hash collisions for the StorageCluster. The StorageCluster controller + uses this field as a collision avoidance mechanism when it needs to create the name of + the newest ControllerRevision. + storage: + type: object + description: Contains details of storage in the cluster. + properties: + storageNodesPerZone: + type: integer + format: int64 + description: The number of storage nodes per zone in the cluster. + desiredImages: + type: object + description: Represents all the desired images of various components. + properties: + stork: + type: string + description: Desired image for stork. + userInterface: + type: string + description: Desired image for user interface. + autopilot: + type: string + description: Desired image for autopilot. + csiNodeDriverRegistrar: + type: string + description: Desired image for CSI node driver registrar. + csiDriverRegistrar: + type: string + description: Desired image for CSI driver registrar. + csiProvisioner: + type: string + description: Desired image for CSI provisioner. + csiAttacher: + type: string + description: Desired image for CSI attacher. + csiResizer: + type: string + description: Desired image for CSI resizer. + csiSnapshotter: + type: string + description: Desired image for CSI snapshotter. + csiSnapshotController: + type: string + description: Desired image for CSI snapshot controller. + csiHealthMonitorController: + type: string + description: Desired image for CSI health monitor controller. + prometheusOperator: + type: string + description: Desired image for Prometheus operator. + prometheusConfigMapReload: + type: string + description: Desired image for Prometheus config map reload. + prometheusConfigReloader: + type: string + description: Desired image for Prometheus config reloader. + prometheus: + type: string + description: Desired image for Prometheus. + grafana: + type: string + description: Desired image for Grafana. + alertManager: + type: string + description: Desired image for AlertManager. + telemetry: + type: string + description: Desired image for telemetry. + metricsCollector: + type: string + description: Desired image for metrics collector. + metricsCollectorProxy: + type: string + description: Desired image for metrics collector proxy. + telemetryProxy: + type: string + description: Desired image for telemetry proxy. + logUploader: + type: string + description: Desired image for log uploader. + kubeScheduler: + type: string + description: Desired image for kubernetes scheduler. + kubeControllerManager: + type: string + description: Desired image for kubernetes controller manager. + pause: + type: string + description: Desired image for pause image. + dynamicPlugin: + type: string + description: Desired image for dynamic plugin image. + dynamicPluginProxy: + type: string + description: Desired image for nginx proxy image. + conditions: + type: array + description: Contains details for the current condition of this cluster. + items: + type: object + properties: + source: + type: string + description: Name of the component. + type: + type: string + description: Type of the condition. + status: + type: string + description: Status of the condition. + message: + type: string + description: Message is human readable message indicating details about the current + state of the cluster. + lastTransitionTime: + type: string + format: date-time + description: Time at which the condition changed. + - name: v1alpha1 + served: false + storage: false + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true diff --git a/operators/portworx-essentials/23.10.1/manifests/core_v1_storagenode_crd.yaml b/operators/portworx-essentials/23.10.1/manifests/core_v1_storagenode_crd.yaml new file mode 100644 index 00000000000..f4e1c408f6d --- /dev/null +++ b/operators/portworx-essentials/23.10.1/manifests/core_v1_storagenode_crd.yaml @@ -0,0 +1,188 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: storagenodes.core.libopenstorage.org +spec: + group: core.libopenstorage.org + names: + kind: StorageNode + listKind: StorageNodeList + plural: storagenodes + singular: storagenode + shortNames: + - sn + scope: Namespaced + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + additionalPrinterColumns: + - name: ID + type: string + description: The corresponding Kubernetes node name for the storage node + jsonPath: .status.nodeUid + - name: Status + type: string + description: The status of the storage node + jsonPath: .status.phase + - name: Version + type: string + description: The version of the storage node + jsonPath: .spec.version + - name: Age + type: date + description: The age of the storage cluster + jsonPath: .metadata.creationTimestamp + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + description: The desired behavior of the storage node. Currently changing the spec does + not affect the actual storage node in the cluster. Eventually spec in StorageNode will + override the spec from StorageCluster so that configuration can be overridden at node + level. + properties: + version: + type: string + description: Version of the storage driver on the node. + cloudStorage: + type: object + description: Details of storage on the node for cloud environments. + properties: + driveConfigs: + type: array + description: List of cloud drive configs for the storage node. + items: + type: object + properties: + type: + type: string + description: Type of cloud drive. + sizeInGiB: + type: integer + format: int64 + minimum: 0 + description: Size of cloud drive in GiB. + iops: + type: integer + format: int64 + minimum: 0 + description: IOPS required from the cloud drive. + options: + type: object + x-kubernetes-preserve-unknown-fields: true + description: Additional options for the cloud drive. + status: + type: object + description: Most recently observed status of the storage node. The data may not be up + to date. + properties: + nodeUid: + type: string + description: Unique ID of the storage node. + phase: + type: string + description: Phase of the StorageNode is a simple, high-level summary of where + the StorageNode is in its lifecycle. The condition array contains more detailed + information about the state of the node. + network: + type: object + description: Contains network information used by the storage node + properties: + dataIP: + type: string + description: IP address used by the storage driver for data traffic. + mgmtIP: + type: string + description: IP address used by the storage driver for management traffic. + storage: + type: object + description: Contains details of the status of storage for the node + properties: + totalSize: + type: string + description: Cumulative total size of all storage pools on the node. + usedSize: + type: string + description: Cumulative used size of all storage pools on the node. + conditions: + type: array + description: Contains details for the current condition of this storage node. + items: + type: object + properties: + type: + type: string + description: Type of the condition. + status: + type: string + description: Status of the condition. + reason: + type: string + description: Reason is a unique one-word reason about the current state + of the cluster. + message: + type: string + description: Message is the human readable message indicating details about the + current state of the cluster. + lastTransitionTime: + type: string + format: date-time + description: Time at which the condition changed. + checks: + type: array + description: Contains list of pre or post flight checks that are performed by the Operator + items: + type: object + properties: + type: + type: string + description: Type of the check. + reason: + type: string + description: Reason for success or failure of the check + success: + type: boolean + description: If true, the check was successful + geography: + type: object + description: Contains topology information for the storage node. + properties: + region: + type: string + description: Region in which the storage node is placed. + zone: + type: string + description: Zone in which the storage node is placed. + rack: + type: string + description: Rack on which the storage node is placed. + operatingSystem: + type: string + description: Operating system of the underlying host. + kernelVersion: + type: string + description: Kernel version of the underlying host. + nodeAttributes: + type: object + description: Attributes of the storage node. + properties: + storage: + type: boolean + description: Indicates whether the node is a storage node or not. + kvdb: + type: boolean + description: Indicates whether the node is a kvdb node or not. + - name: v1alpha1 + served: false + storage: false + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true diff --git a/operators/portworx-essentials/23.10.1/manifests/portworxoperator.clusterserviceversion.yaml b/operators/portworx-essentials/23.10.1/manifests/portworxoperator.clusterserviceversion.yaml new file mode 100644 index 00000000000..bbb36151f8a --- /dev/null +++ b/operators/portworx-essentials/23.10.1/manifests/portworxoperator.clusterserviceversion.yaml @@ -0,0 +1,569 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + name: portworx-essentials.v23.10.1 + namespace: placeholder + annotations: + olm.skipRange: '=23.10.0' + capabilities: Auto Pilot + categories: "Storage" + description: Free forever cloud native storage solution + containerImage: portworx/px-operator:23.10.1 + repository: https://github.com/libopenstorage/operator + createdAt: 2023-11-23T02:51:08Z + support: Portworx, Inc + certified: "false" + operatorframework.io/initialization-resource: |- + { + "apiVersion": "core.libopenstorage.org/v1", + "kind": "StorageCluster", + "metadata": { + "name": "portworx", + "annotations": { + "portworx.io/is-openshift": "true" + } + } + } + alm-examples: |- + [ + { + "apiVersion": "core.libopenstorage.org/v1", + "kind": "StorageCluster", + "metadata": { + "name": "portworx", + "namespace": "test-operator", + "annotations": { + "portworx.io/is-openshift": "true" + } + }, + "spec": {} + }, + { + "apiVersion": "core.libopenstorage.org/v1", + "kind": "StorageNode", + "metadata": { + "name": "example", + "namespace": "test-operator" + }, + "spec": {} + } + ] +spec: + displayName: Portworx Essentials + version: 23.10.1 + minKubeVersion: "1.21.0" + maturity: stable + replaces: portworx-essentials.v23.7.0 + maintainers: + - name: Portworx + email: support@portworx.com + provider: + name: Portworx + keywords: ["portworx", "persistent storage", "storage", "cloud native", "open source"] + labels: + operated-by: portworx-essentials + selector: + matchLabels: + operated-by: portworx-essentials + links: + - name: Product Features + url: https://portworx.com/products/features + - name: Documentation + url: https://docs.portworx.com + - name: Support + url: https://docs.portworx.com/support + - name: Source Code + url: https://github.com/libopenstorage/operator + icon: + - base64data: iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDMtMjdUMTU6NDY6MjAtMDc6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAzLTI3VDE1OjQ5OjMwLTA3OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTAzLTI3VDE1OjQ5OjMwLTA3OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjNiZjg1ZTk5LTkyNDYtNDEyZC1hZWJjLWNjM2RhNWFhNGE0MCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmJmMjIxNjE2LWE4NzgtY2E0Yi1iMDdmLWQ0MGU1NzU2MjA5YSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwOWJjZDJhLWJiMzYtNDFkZS05M2I1LTIxYTBmNjBjYTk0NyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTA5YmNkMmEtYmIzNi00MWRlLTkzYjUtMjFhMGY2MGNhOTQ3IiBzdEV2dDp3aGVuPSIyMDE5LTAzLTI3VDE1OjQ2OjIwLTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6M2JmODVlOTktOTI0Ni00MTJkLWFlYmMtY2MzZGE1YWE0YTQwIiBzdEV2dDp3aGVuPSIyMDE5LTAzLTI3VDE1OjQ5OjMwLTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4uenEnAAA9MUlEQVR4nO29WZsjV7UtOsZcEWoys3q32MYtxgZjG7O9DQbccvbL/b7zcn/Tebr379zmuxtsw2bTHjhsMK1NY2PAuKpc2UuKiDXHfVgRUkipzGpcnZUx7CxJoVA00hxrtmsuSkKHDh2Ww271BXTocDujI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkegI0iHDkcgu9UXcCNx/r8/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 + mediatype: image/png + description: | + + [Portworx Essentials](https://docs.portworx.com/concepts/portworx-essentials/) + is a free Portworx license with limited functionality that allows you to + run small production or proof-of-concept workloads. Essentials limits capacity + and advanced features, but otherwise functions the same way as the + fully-featured PX-Enterprise version of Portworx such as + + * Run containerized stateful applications that are highly-available (HA) across multiple nodes, + cloud instances, regions, data centers or even clouds + * Migrate workflows between multiple clusters running across same or hybrid clouds + * Run hyperconverged workloads where the data resides on the same host as the applications + * Have programmatic control on your storage resources + + ### Full Features + + * Free forever + * 5 nodes + * 500 volumes + * Cloud Drive provisioning + * Failures across nodes/racks/AZ + + ### Limited features + + * Application consistent Snapshots (5 per volume) + * Cloud Snapshots (1 per volume per day) + * BYOK Encryption (cluster key only) + * Single user cluster management UI (single user, single cluster) + + To learn more about the platform features, please visit our + [product features page](https://portworx.com/products/features) + + The Portworx Essentials license requires that your clusters be connected + to the internet and send usage data to PX-Central. Portworx Essentials + clusters connect with PX-Central once per hour to renew license leases. + Lease periods last for 24 hours, ensuring that any temporary interruptions + to your connectivity do not impact your cluster. + + ### How to install StorageCluster + + To customize your cluster's configuration (specification), use the + [Spec Generator](https://central.portworx.com/) from PX-Central. + + ### Prerequisite + + * Ensure ports 17001-17020 on worker nodes are reachable from master and other worker nodes. + + * Create the following secret with your [Essential Entitlement ID](https://central.portworx.com/profile) + ``` + kubectl -n kube-system create secret generic px-essential \ + --from-literal=px-essen-user-id=YOUR_ESSENTIAL_ENTITLEMENT_ID \ + --from-literal=px-osb-endpoint='https://pxessentials.portworx.com/osb/billing/v1/register' + ``` + + ### Tutorials + + * [Stateful applications on Kubernetes](https://docs.portworx.com/portworx-install-with-kubernetes/application-install-with-kubernetes) + + * [Portworx Enterprise on Kubernetes](https://docs.portworx.com/portworx-install-with-kubernetes) + + * [Kafka on Kubernetes](https://portworx.com/kafka-kubernetes) + + * [Elastisearch on Kubernetes](https://portworx.com/elasticsearch-kubernetes) + + * [PostgreSQL on Kubernetes](https://portworx.com/postgres-kubernetes/) + + * [MongoDB on Kubernetes](https://portworx.com/mongodb-kubernetes/) + + * [Cassandra on Kubernetes](https://portworx.com/cassandra-kubernetes/) + + * [Kubernetes backup and recovery](https://portworx.com/kubernetes-backup/) + + * [Disaster Recovery for Kubernetes](https://portworx.com/kubernetes-disaster-recovery/) + + ### Uninstall + + Deleting the StorageCluster object for Portworx cluster does not stop Portworx + service running on the nodes, to avoid application downtime. + + To uninstall Portworx completely without wiping the data, you should add the + following delete strategy to the StorageCluster spec: + ``` + spec: + deleteStrategy: + type: Uninstall + ``` + **Caution:** To uninstall Portworx and **wipe all the data**, you should use the following + delete strategy: + ``` + spec: + deleteStrategy: + type: UninstallAndWipe + ``` + + ### About Portworx + + Portworx is the solution for running stateful containers in production, + designed with DevOps in mind. With Portworx, users can manage any database + or stateful service on any infrastructure using any container scheduler, + including Kubernetes, Mesosphere DC/OS, and Docker Swarm. Portworx solves + the five most common problems DevOps teams encounter when running stateful + services in production: persistence, high availability, data automation, + security, and support for multiple data stores and infrastructure. + + installModes: + - type: OwnNamespace + supported: true + - type: SingleNamespace + supported: true + - type: MultiNamespace + supported: true + - type: AllNamespaces + supported: true + install: + spec: + clusterPermissions: + - serviceAccountName: portworx-operator + rules: + - apiGroups: + - "*" + resources: + - "*" + verbs: + - "*" + - apiGroups: + - security.openshift.io + resources: + - securitycontextconstraints + resourceNames: + - anyuid + - privileged + verbs: + - use + deployments: + - name: portworx-operator + spec: + replicas: 1 + selector: + matchLabels: + name: portworx-operator + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + name: portworx-operator + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - portworx-operator + topologyKey: kubernetes.io/hostname + containers: + - name: portworx-operator + image: portworx/px-operator:23.10.1 + imagePullPolicy: Always + command: + - /operator + - --verbose + - --driver=portworx + - --leader-elect=true + env: + - name: OPERATOR_NAME + value: portworx-operator + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: PORTWORX_ESSENTIALS + value: "true" + - name: MARKETPLACE_NAME + value: OperatorHub + serviceAccountName: portworx-operator + strategy: deployment + customresourcedefinitions: + owned: + - kind: StorageCluster + name: storageclusters.core.libopenstorage.org + version: v1 + displayName: Storage Cluster + description: Storage Cluster installs Portworx in the cluster. It has all the necessary configurations to setup and update a Portworx cluster. + specDescriptors: + - description: Details of the storage used by the storage driver. + displayName: Storage + path: storage + - description: List of devices to be used by the storage driver. + displayName: Device list + path: storage.devices + - description: Details of storage used in cloud environment. + displayName: Cloud Storage + path: cloudStorage + - description: >- + List of storage device specs. A cloud storage device will be + created for every spec in the list. + displayName: Device spec list + path: cloudStorage.deviceSpecs + - description: Maximum nodes that can have storage in the cluster. + displayName: Max storage nodes + path: cloudStorage.maxStorageNodes + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - description: Maximum nodes in every zone that can have storage in the cluster. + displayName: Max storage nodes per zone + path: cloudStorage.maxStorageNodesPerZone + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - description: >- + Maximum nodes in every zone in every node group that can have + storage in the cluster. + displayName: Max storage nodes per zone per node group + path: cloudStorage.maxStorageNodesPerZonePerNodeGroup + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - description: The docker image name and version of Portworx Enterprise. + displayName: Image + path: image + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - 'urn:alm:descriptor:com.tectonic.ui:text' + - description: >- + CustomImageRegistry is a custom container registry server (may + include repository) that will be used instead of index.docker.io + to download Docker images. (Example: myregistry.net:5443 or + myregistry.com/myrepository) + displayName: Custom Image Registry + path: customImageRegistry + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - 'urn:alm:descriptor:com.tectonic.ui:text' + - description: >- + It is a reference to a secret in the same namespace as the + StorageCluster. This secret is used to pull images from a private + registry. + displayName: Private Registry Image Pull Secret + path: imagePullSecret + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - 'urn:alm:descriptor:io.kubernetes:Secret' + - description: Contains security configuration for the storage cluster. + displayName: Role Based Access Control + path: security + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - description: >- + Flag indicating whether security features need to be enabled for + the storage cluster. + displayName: Enabled + path: security.enabled + - description: >- + The secrets provider which will contain secrets that are needed by + Portworx for features like volume encryption, cloudsnaps, etc. + displayName: Encryption Provider + path: secretsProvider + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - 'urn:alm:descriptor:com.tectonic.ui:select:k8s' + - 'urn:alm:descriptor:com.tectonic.ui:select:vault' + - 'urn:alm:descriptor:com.tectonic.ui:select:aws-kms' + - 'urn:alm:descriptor:com.tectonic.ui:select:azure-kv' + - 'urn:alm:descriptor:com.tectonic.ui:select:ibm-kp' + - description: List of environment variables used by the storage pods. + displayName: Environment variables + path: env + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:advanced' + - description: >- + It is the pull policy for the image. Accepts one of Always, Never, + IfNotPresent. Defaults to Always. + displayName: Image Pull Policy + path: imagePullPolicy + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Use all available, unformatted, unpartitioned devices. + displayName: Use all available devices + path: storage.useAll + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Use all available unformatted devices. + displayName: Use all available unformatted devices + path: storage.useAllWithPartitions + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: >- + Flag indicating to use the devices even if there is file system + present on it. Note that the devices may be wiped before using. + displayName: Force use devices + path: storage.forceUseDisks + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device used for journaling. + displayName: Journal device + path: storage.journalDevice + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device that will be used to store system metadata by the driver. + displayName: System metadata device + path: storage.systemMetadataDevice + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device used for internal KVDB. + displayName: KVDB device + path: storage.kvdbDevice + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device used for caching. + displayName: Cache devices + path: storage.cacheDevices + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device spec for the journal device. + displayName: Journal device spec + path: cloudStorage.journalDeviceSpec + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device spec for the metadata device. + displayName: System metadata device spec + path: cloudStorage.systemMetadataDeviceSpec + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Device spec for internal KVDB device. + displayName: KVDB device spec + path: cloudStorage.kvdbDeviceSpec + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Capacity specs. + displayName: Capacity specs + path: cloudStorage.capacitySpecs + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Node pool label. + displayName: Node pool label + path: cloudStorage.nodePoolLabel + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Cloud provider + displayName: Cloud provider + path: cloudStorage.provider + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: The network configuration used by storage nodes + displayName: Network Configuration + path: network + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: KVDB configuration + displayName: KVDB configuration + path: kvdb + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Resources configuration + displayName: Resources configuration + path: resources + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Autopilot configuration + displayName: Autopilot configuration + path: autopilot + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Stork configuration + displayName: Stork configuration + path: stork + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: UI configuration + displayName: UI configuration + path: userInterface + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Contains monitoring configuration for the storage cluster. + displayName: Monitoring + path: monitoring + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Auth configuration for RBAC + displayName: Auth configuration + path: security.auth + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Volumes configuration + displayName: Volumes configuration + path: volumes + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Nodes configuration + displayName: Nodes configuration + path: nodes + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Delete strategy + displayName: Delete strategy + path: deleteStrategy + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Update strategy + displayName: Update strategy + path: updateStrategy + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Auto update strategy for components + displayName: Component update strategy + path: autoUpdateComponents + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Describes placement configuration for the storage cluster pods. + displayName: Placement + path: placement + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: It is the starting port in the range of ports used by Portworx. + displayName: Start Port + path: startPort + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: >- + Version is a read-only field. It contains the current version of + Portworx. + displayName: Version + path: version + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + - description: Revision history limit is the number of old histories to retain. + displayName: Revision History Limit + path: revisionHistoryLimit + x-descriptors: + - 'urn:alm:descriptor:com.tectonic.ui:hidden' + statusDescriptors: + - path: conditions + displayName: Cluster Conditions + description: Conditions describe the current state of the cluster + x-descriptors: + - 'urn:alm:descriptor:io.kubernetes.conditions' + - path: phase + displayName: Status + description: Status of the Portworx cluster. + x-descriptors: + - 'urn:alm:descriptor:io.kubernetes.phase' + resources: + - kind: Pod + name: "" + version: v1 + - kind: Service + name: "" + version: v1 + - kind: Deployment + name: "" + version: v1 + - kind: DaemonSet + name: "" + version: v1 + - kind: ConfigMap + name: "" + version: v1 + - kind: StorageNode + name: storagenodes.core.libopenstorage.org + version: v1 + displayName: Storage Node + description: Do not create Storage Node as it is internally created by the operator. It represents the status of a Portworx node. + specDescriptors: + - path: version + displayName: Version + description: Version of Portworx on the node. + statusDescriptors: + - path: nodeUid + displayName: Node UID + description: Unique identifier for the Portworx node. + - path: phase + displayName: Status + description: Status of the Portworx node. + x-descriptors: + - 'urn:alm:descriptor:io.kubernetes.phase' + - path: network.dataIP + displayName: Data IP + description: IP address used by the storage driver for data traffic + - path: network.mgmtIP + displayName: Management IP + description: IP address used by the storage driver for management traffic + - path: conditions + displayName: Node Conditions + description: Conditions describe the current state of the storage node + x-descriptors: + - 'urn:alm:descriptor:io.kubernetes.conditions' diff --git a/operators/portworx-essentials/23.10.1/metadata/annotations.yaml b/operators/portworx-essentials/23.10.1/metadata/annotations.yaml new file mode 100644 index 00000000000..79d9a22d84c --- /dev/null +++ b/operators/portworx-essentials/23.10.1/metadata/annotations.yaml @@ -0,0 +1,8 @@ +annotations: + operators.operatorframework.io.bundle.channel.default.v1: stable + operators.operatorframework.io.bundle.channels.v1: stable + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: portworx-essentials + com.redhat.openshift.versions: v4.10