1216 lines
54 KiB
YAML
1216 lines
54 KiB
YAML
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
control-plane: controller-manager
|
|
name: valkey-operator-system
|
|
---
|
|
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
annotations:
|
|
controller-gen.kubebuilder.io/version: v0.17.2
|
|
name: valkeys.hyperspike.io
|
|
spec:
|
|
group: hyperspike.io
|
|
names:
|
|
kind: Valkey
|
|
listKind: ValkeyList
|
|
plural: valkeys
|
|
shortNames:
|
|
- vk
|
|
singular: valkey
|
|
scope: Namespaced
|
|
versions:
|
|
- additionalPrinterColumns:
|
|
- jsonPath: .status.ready
|
|
name: Ready
|
|
type: boolean
|
|
- jsonPath: .metadata.creationTimestamp
|
|
name: Age
|
|
type: date
|
|
- jsonPath: .spec.nodes
|
|
name: Nodes
|
|
type: integer
|
|
- jsonPath: .spec.replicas
|
|
name: Replicas
|
|
type: integer
|
|
- jsonPath: .spec.volumePermissions
|
|
name: Volumme Permissions
|
|
priority: 1
|
|
type: boolean
|
|
- jsonPath: .spec.image
|
|
name: Image
|
|
priority: 1
|
|
type: string
|
|
name: v1
|
|
schema:
|
|
openAPIV3Schema:
|
|
description: Valkey is the Schema for the valkeys API
|
|
properties:
|
|
apiVersion:
|
|
description: |-
|
|
APIVersion defines the versioned schema of this representation of an object.
|
|
Servers should convert recognized schemas to the latest internal value, and
|
|
may reject unrecognized values.
|
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
|
type: string
|
|
kind:
|
|
description: |-
|
|
Kind is a string value representing the REST resource this object represents.
|
|
Servers may infer this from the endpoint the client submits requests to.
|
|
Cannot be updated.
|
|
In CamelCase.
|
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
|
type: string
|
|
metadata:
|
|
type: object
|
|
spec:
|
|
description: ValkeySpec defines the desired state of Valkey
|
|
properties:
|
|
anonymousAuth:
|
|
default: false
|
|
description: Anonymous Auth
|
|
type: boolean
|
|
certIssuer:
|
|
description: Certificate Issuer
|
|
type: string
|
|
certIssuerType:
|
|
default: ClusterIssuer
|
|
description: Certificate Issuer Type
|
|
enum:
|
|
- ClusterIssuer
|
|
- Issuer
|
|
type: string
|
|
clusterDomain:
|
|
default: cluster.local
|
|
description: Cluster Domain - used for DNS
|
|
type: string
|
|
clusterPreferredEndpointType:
|
|
default: ip
|
|
description: Which endpoint is shown as the preferred endpoint valid
|
|
values are 'ip', 'hostname', or 'unknown-endpoint'.
|
|
enum:
|
|
- ip
|
|
- hostname
|
|
- unknown-endpoint
|
|
type: string
|
|
exporterImage:
|
|
description: Exporter Image to use
|
|
type: string
|
|
externalAccess:
|
|
description: External access configuration
|
|
properties:
|
|
certIssuer:
|
|
description: Cert Issuer for external access TLS certificate
|
|
type: string
|
|
certIssuerType:
|
|
default: ClusterIssuer
|
|
description: Cert Issuer Type for external access TLS certificate
|
|
enum:
|
|
- ClusterIssuer
|
|
- Issuer
|
|
type: string
|
|
enabled:
|
|
default: false
|
|
description: Enable external access
|
|
type: boolean
|
|
externalDNS:
|
|
default: false
|
|
description: Support External DNS
|
|
type: boolean
|
|
loadBalancer:
|
|
description: LoadBalancer Settings
|
|
properties:
|
|
annotations:
|
|
additionalProperties:
|
|
type: string
|
|
description: Annotations for the load balancer service
|
|
type: object
|
|
type: object
|
|
proxy:
|
|
description: Proxy Settings
|
|
properties:
|
|
annotations:
|
|
additionalProperties:
|
|
type: string
|
|
description: Annotations for the proxy service
|
|
type: object
|
|
extraConfig:
|
|
description: Extra Envoy configuration
|
|
type: string
|
|
hostname:
|
|
description: External Hostname for the proxy
|
|
type: string
|
|
image:
|
|
default: envoyproxy/envoy:v1.32.1
|
|
description: Image to use for the proxy
|
|
type: string
|
|
replicas:
|
|
default: 1
|
|
description: Replicas for the proxy
|
|
format: int32
|
|
type: integer
|
|
resources:
|
|
description: Resources requirements and limits for the proxy
|
|
container
|
|
properties:
|
|
claims:
|
|
description: |-
|
|
Claims lists the names of resources, defined in spec.resourceClaims,
|
|
that are used by this container.
|
|
|
|
This field depends on the
|
|
DynamicResourceAllocation feature gate.
|
|
|
|
This field is immutable. It can only be set for containers.
|
|
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
|
|
request:
|
|
description: |-
|
|
Request is the name chosen for a request in the referenced claim.
|
|
If empty, everything from the claim is made available, otherwise
|
|
only the result of this request.
|
|
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. Requests cannot exceed Limits.
|
|
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
|
type: object
|
|
type: object
|
|
required:
|
|
- replicas
|
|
type: object
|
|
type:
|
|
default: Proxy
|
|
description: |-
|
|
External access type
|
|
LoadBalancer or Proxy, the LoadBalancer type will create a LoadBalancer service for each Valkey Shard (master node)
|
|
The Proxy type will create a single LoadBalancer service and use an envoy proxy to route traffic to the Valkey Shards
|
|
enum:
|
|
- LoadBalancer
|
|
- Proxy
|
|
type: string
|
|
required:
|
|
- enabled
|
|
- type
|
|
type: object
|
|
image:
|
|
description: Image to use
|
|
type: string
|
|
nodeSelector:
|
|
additionalProperties:
|
|
type: string
|
|
description: Node Selector
|
|
type: object
|
|
nodes:
|
|
default: 3
|
|
description: Number of shards
|
|
format: int32
|
|
type: integer
|
|
prometheus:
|
|
default: false
|
|
description: Enable prometheus
|
|
type: boolean
|
|
prometheusLabels:
|
|
additionalProperties:
|
|
type: string
|
|
description: Extra prometheus labels for operator targeting
|
|
type: object
|
|
replicas:
|
|
default: 0
|
|
description: Number of replicas
|
|
format: int32
|
|
type: integer
|
|
resources:
|
|
description: Resources requirements and limits for the Valkey Server
|
|
container
|
|
properties:
|
|
claims:
|
|
description: |-
|
|
Claims lists the names of resources, defined in spec.resourceClaims,
|
|
that are used by this container.
|
|
|
|
This field depends on the
|
|
DynamicResourceAllocation feature gate.
|
|
|
|
This field is immutable. It can only be set for containers.
|
|
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
|
|
request:
|
|
description: |-
|
|
Request is the name chosen for a request in the referenced claim.
|
|
If empty, everything from the claim is made available, otherwise
|
|
only the result of this request.
|
|
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. Requests cannot exceed Limits.
|
|
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
|
type: object
|
|
type: object
|
|
serviceMonitor:
|
|
default: false
|
|
description: ServiceMonitor Enabled
|
|
type: boolean
|
|
servicePassword:
|
|
description: Service Password
|
|
properties:
|
|
key:
|
|
description: The key of the secret to select from. Must be a
|
|
valid secret key.
|
|
type: string
|
|
name:
|
|
default: ""
|
|
description: |-
|
|
Name of the referent.
|
|
This field is effectively required, but due to backwards compatibility is
|
|
allowed to be empty. Instances of this type with an empty value here are
|
|
almost certainly wrong.
|
|
More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
|
type: string
|
|
optional:
|
|
description: Specify whether the Secret or its key must be defined
|
|
type: boolean
|
|
required:
|
|
- key
|
|
type: object
|
|
x-kubernetes-map-type: atomic
|
|
storage:
|
|
description: Persistent volume claim
|
|
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: |-
|
|
Standard object's metadata.
|
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
|
|
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
|
|
x-kubernetes-list-type: atomic
|
|
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:
|
|
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. Requests cannot exceed Limits.
|
|
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
|
|
x-kubernetes-list-type: atomic
|
|
required:
|
|
- key
|
|
- operator
|
|
type: object
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
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
|
|
volumeAttributesClassName:
|
|
description: |-
|
|
volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
|
|
If specified, the CSI driver will create or update the volume with the attributes defined
|
|
in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
|
|
it can be changed after the claim is created. An empty string or nil value indicates that no
|
|
VolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state,
|
|
this field can be reset to its previous value (including nil) to cancel the modification.
|
|
If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
|
|
set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
|
|
exists.
|
|
More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
|
|
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
|
|
x-kubernetes-list-type: atomic
|
|
allocatedResourceStatuses:
|
|
additionalProperties:
|
|
description: |-
|
|
When a controller receives persistentvolume claim update with ClaimResourceStatus for a resource
|
|
that it does not recognizes, then it should ignore that update and let other controllers
|
|
handle it.
|
|
type: string
|
|
description: "allocatedResourceStatuses stores status of resource
|
|
being resized for the given PVC.\nKey names follow standard
|
|
Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed
|
|
keys:\n\t\t- storage - the capacity of the volume.\n\t*
|
|
Custom resources must use implementation-defined prefixed
|
|
names such as \"example.com/my-custom-resource\"\nApart
|
|
from above values - keys that are unprefixed or have kubernetes.io
|
|
prefix are considered\nreserved and hence may not be used.\n\nClaimResourceStatus
|
|
can be in any of following states:\n\t- ControllerResizeInProgress:\n\t\tState
|
|
set when resize controller starts resizing the volume in
|
|
control-plane.\n\t- ControllerResizeFailed:\n\t\tState set
|
|
when resize has failed in resize controller with a terminal
|
|
error.\n\t- NodeResizePending:\n\t\tState set when resize
|
|
controller has finished resizing the volume but further
|
|
resizing of\n\t\tvolume is needed on the node.\n\t- NodeResizeInProgress:\n\t\tState
|
|
set when kubelet starts resizing the volume.\n\t- NodeResizeFailed:\n\t\tState
|
|
set when resizing has failed in kubelet with a terminal
|
|
error. Transient errors don't set\n\t\tNodeResizeFailed.\nFor
|
|
example: if expanding a PVC for more capacity - this field
|
|
can be one of the following states:\n\t- pvc.status.allocatedResourceStatus['storage']
|
|
= \"ControllerResizeInProgress\"\n - pvc.status.allocatedResourceStatus['storage']
|
|
= \"ControllerResizeFailed\"\n - pvc.status.allocatedResourceStatus['storage']
|
|
= \"NodeResizePending\"\n - pvc.status.allocatedResourceStatus['storage']
|
|
= \"NodeResizeInProgress\"\n - pvc.status.allocatedResourceStatus['storage']
|
|
= \"NodeResizeFailed\"\nWhen this field is not set, it means
|
|
that no resize operation is in progress for the given PVC.\n\nA
|
|
controller that receives PVC update with previously unknown
|
|
resourceName or ClaimResourceStatus\nshould ignore the update
|
|
for the purpose it was designed. For example - a controller
|
|
that\nonly is responsible for resizing capacity of the volume,
|
|
should ignore PVC updates that change other valid\nresources
|
|
associated with PVC.\n\nThis is an alpha field and requires
|
|
enabling RecoverVolumeExpansionFailure feature."
|
|
type: object
|
|
x-kubernetes-map-type: granular
|
|
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 tracks the resources allocated
|
|
to a PVC including its capacity.\nKey names follow standard
|
|
Kubernetes label syntax. Valid values are either:\n\t* Un-prefixed
|
|
keys:\n\t\t- storage - the capacity of the volume.\n\t*
|
|
Custom resources must use implementation-defined prefixed
|
|
names such as \"example.com/my-custom-resource\"\nApart
|
|
from above values - keys that are unprefixed or have kubernetes.io
|
|
prefix are considered\nreserved and hence may not be used.\n\nCapacity
|
|
reported here may be larger than the actual capacity when
|
|
a volume expansion operation\nis requested.\nFor storage
|
|
quota, the larger value from allocatedResources and PVC.spec.resources
|
|
is used.\nIf allocatedResources is not set, PVC.spec.resources
|
|
alone is used for quota calculation.\nIf a volume expansion
|
|
capacity request is lowered, allocatedResources is only\nlowered
|
|
if there are no expansion operations in progress and if
|
|
the actual volume capacity\nis equal or lower than the requested
|
|
capacity.\n\nA controller that receives PVC update with
|
|
previously unknown resourceName\nshould ignore the update
|
|
for the purpose it was designed. For example - a controller
|
|
that\nonly is responsible for resizing capacity of the volume,
|
|
should ignore PVC updates that change other valid\nresources
|
|
associated with PVC.\n\nThis 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 'Resizing'.
|
|
items:
|
|
description: PersistentVolumeClaimCondition contains 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 "Resizing" that means the underlying
|
|
persistent volume is being resized.
|
|
type: string
|
|
status:
|
|
description: |-
|
|
Status is the status of the condition.
|
|
Can be True, False, Unknown.
|
|
More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=state%20of%20pvc-,conditions.status,-(string)%2C%20required
|
|
type: string
|
|
type:
|
|
description: |-
|
|
Type is the type of the condition.
|
|
More info: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1/#:~:text=set%20to%20%27ResizeStarted%27.-,PersistentVolumeClaimCondition,-contains%20details%20about
|
|
type: string
|
|
required:
|
|
- status
|
|
- type
|
|
type: object
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- type
|
|
x-kubernetes-list-type: map
|
|
currentVolumeAttributesClassName:
|
|
description: |-
|
|
currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using.
|
|
When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim
|
|
type: string
|
|
modifyVolumeStatus:
|
|
description: |-
|
|
ModifyVolumeStatus represents the status object of ControllerModifyVolume operation.
|
|
When this is unset, there is no ModifyVolume operation being attempted.
|
|
properties:
|
|
status:
|
|
description: "status is the status of the ControllerModifyVolume
|
|
operation. It can be in any of following states:\n -
|
|
Pending\n Pending indicates that the PersistentVolumeClaim
|
|
cannot be modified due to unmet requirements, such as\n
|
|
\ the specified VolumeAttributesClass not existing.\n
|
|
- InProgress\n InProgress indicates that the volume
|
|
is being modified.\n - Infeasible\n Infeasible indicates
|
|
that the request has been rejected as invalid by the
|
|
CSI driver. To\n\t resolve the error, a valid VolumeAttributesClass
|
|
needs to be specified.\nNote: New statuses can be added
|
|
in the future. Consumers should check for unknown statuses
|
|
and fail appropriately."
|
|
type: string
|
|
targetVolumeAttributesClassName:
|
|
description: targetVolumeAttributesClassName is the name
|
|
of the VolumeAttributesClass the PVC currently being
|
|
reconciled
|
|
type: string
|
|
required:
|
|
- status
|
|
type: object
|
|
phase:
|
|
description: phase represents the current phase of PersistentVolumeClaim.
|
|
type: string
|
|
type: object
|
|
type: object
|
|
tls:
|
|
default: false
|
|
description: TLS Support
|
|
type: boolean
|
|
tolerations:
|
|
description: Tolerations
|
|
items:
|
|
description: |-
|
|
The pod this Toleration is attached to tolerates any taint that matches
|
|
the triple <key,value,effect> using the matching operator <operator>.
|
|
properties:
|
|
effect:
|
|
description: |-
|
|
Effect indicates the taint effect to match. Empty means match all taint effects.
|
|
When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
|
|
type: string
|
|
key:
|
|
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.
|
|
type: string
|
|
operator:
|
|
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.
|
|
type: string
|
|
tolerationSeconds:
|
|
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.
|
|
format: int64
|
|
type: integer
|
|
value:
|
|
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.
|
|
type: string
|
|
type: object
|
|
type: array
|
|
volumePermissions:
|
|
default: false
|
|
description: Turn on an init container to set permissions on the persistent
|
|
volume
|
|
type: boolean
|
|
required:
|
|
- anonymousAuth
|
|
- clusterDomain
|
|
- prometheus
|
|
- serviceMonitor
|
|
- volumePermissions
|
|
type: object
|
|
status:
|
|
description: ValkeyStatus defines the observed state of Valkey
|
|
properties:
|
|
conditions:
|
|
description: 'Important: Run "make" to regenerate code after modifying
|
|
this file'
|
|
items:
|
|
description: Condition contains details for one aspect of the current
|
|
state of this API Resource.
|
|
properties:
|
|
lastTransitionTime:
|
|
description: |-
|
|
lastTransitionTime is the last time the condition transitioned from one status to another.
|
|
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
|
format: date-time
|
|
type: string
|
|
message:
|
|
description: |-
|
|
message is a human readable message indicating details about the transition.
|
|
This may be an empty string.
|
|
maxLength: 32768
|
|
type: string
|
|
observedGeneration:
|
|
description: |-
|
|
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
|
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
|
with respect to the current state of the instance.
|
|
format: int64
|
|
minimum: 0
|
|
type: integer
|
|
reason:
|
|
description: |-
|
|
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
|
Producers of specific condition types may define expected values and meanings for this field,
|
|
and whether the values are considered a guaranteed API.
|
|
The value should be a CamelCase string.
|
|
This field may not be empty.
|
|
maxLength: 1024
|
|
minLength: 1
|
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
|
type: string
|
|
status:
|
|
description: status of the condition, one of True, False, Unknown.
|
|
enum:
|
|
- "True"
|
|
- "False"
|
|
- Unknown
|
|
type: string
|
|
type:
|
|
description: type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
maxLength: 316
|
|
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
|
type: string
|
|
required:
|
|
- lastTransitionTime
|
|
- message
|
|
- reason
|
|
- status
|
|
- type
|
|
type: object
|
|
type: array
|
|
ready:
|
|
type: boolean
|
|
required:
|
|
- ready
|
|
type: object
|
|
type: object
|
|
served: true
|
|
storage: true
|
|
subresources:
|
|
status: {}
|
|
---
|
|
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
name: valkey-operator-controller-manager
|
|
namespace: valkey-operator-system
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: Role
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
name: valkey-operator-leader-election-role
|
|
namespace: valkey-operator-system
|
|
rules:
|
|
- apiGroups:
|
|
- ""
|
|
resources:
|
|
- configmaps
|
|
verbs:
|
|
- get
|
|
- list
|
|
- watch
|
|
- create
|
|
- update
|
|
- patch
|
|
- delete
|
|
- apiGroups:
|
|
- coordination.k8s.io
|
|
resources:
|
|
- leases
|
|
verbs:
|
|
- get
|
|
- list
|
|
- watch
|
|
- create
|
|
- update
|
|
- patch
|
|
- delete
|
|
- apiGroups:
|
|
- ""
|
|
resources:
|
|
- events
|
|
verbs:
|
|
- create
|
|
- patch
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: ClusterRole
|
|
metadata:
|
|
name: valkey-operator-manager-role
|
|
rules:
|
|
- apiGroups:
|
|
- ""
|
|
resources:
|
|
- configmaps
|
|
- secrets
|
|
- serviceaccounts
|
|
- services
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- ""
|
|
resources:
|
|
- events
|
|
verbs:
|
|
- create
|
|
- patch
|
|
- apiGroups:
|
|
- ""
|
|
resources:
|
|
- pods
|
|
verbs:
|
|
- get
|
|
- list
|
|
- watch
|
|
- apiGroups:
|
|
- apps
|
|
resources:
|
|
- deployments
|
|
- statefulsets
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- cert-manager.io
|
|
resources:
|
|
- certificates
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- cert-manager.io
|
|
resources:
|
|
- clusterissuers
|
|
- issuers
|
|
verbs:
|
|
- get
|
|
- list
|
|
- watch
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys/finalizers
|
|
verbs:
|
|
- update
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys/status
|
|
verbs:
|
|
- get
|
|
- patch
|
|
- update
|
|
- apiGroups:
|
|
- monitoring.coreos.com
|
|
resources:
|
|
- servicemonitors
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- policy
|
|
resources:
|
|
- poddisruptionbudgets
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- storage.k8s.io
|
|
resources:
|
|
- storageclasses
|
|
verbs:
|
|
- get
|
|
- list
|
|
- watch
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: ClusterRole
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
name: valkey-operator-valkey-editor-role
|
|
rules:
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys
|
|
verbs:
|
|
- create
|
|
- delete
|
|
- get
|
|
- list
|
|
- patch
|
|
- update
|
|
- watch
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys/status
|
|
verbs:
|
|
- get
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: ClusterRole
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
name: valkey-operator-valkey-viewer-role
|
|
rules:
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys
|
|
verbs:
|
|
- get
|
|
- list
|
|
- watch
|
|
- apiGroups:
|
|
- hyperspike.io
|
|
resources:
|
|
- valkeys/status
|
|
verbs:
|
|
- get
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: RoleBinding
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
name: valkey-operator-leader-election-rolebinding
|
|
namespace: valkey-operator-system
|
|
roleRef:
|
|
apiGroup: rbac.authorization.k8s.io
|
|
kind: Role
|
|
name: valkey-operator-leader-election-role
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: valkey-operator-controller-manager
|
|
namespace: valkey-operator-system
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: ClusterRoleBinding
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
name: valkey-operator-manager-rolebinding
|
|
roleRef:
|
|
apiGroup: rbac.authorization.k8s.io
|
|
kind: ClusterRole
|
|
name: valkey-operator-manager-role
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: valkey-operator-controller-manager
|
|
namespace: valkey-operator-system
|
|
---
|
|
apiVersion: v1
|
|
data:
|
|
exporterImage: ghcr.io/hyperspike/valkey-sidecar:v0.0.51
|
|
nodes: "3"
|
|
valkeyImage: ghcr.io/hyperspike/valkey:8.1.3
|
|
kind: ConfigMap
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
control-plane: controller-manager
|
|
name: valkey-operator-config
|
|
namespace: valkey-operator-system
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/managed-by: kustomize
|
|
app.kubernetes.io/name: valkey-operator
|
|
control-plane: controller-manager
|
|
name: valkey-operator-controller-manager
|
|
namespace: valkey-operator-system
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
control-plane: controller-manager
|
|
template:
|
|
metadata:
|
|
annotations:
|
|
kubectl.kubernetes.io/default-container: manager
|
|
labels:
|
|
control-plane: controller-manager
|
|
spec:
|
|
containers:
|
|
- args:
|
|
- --leader-elect=false
|
|
- --health-probe-bind-address=:8081
|
|
command:
|
|
- /manager
|
|
env:
|
|
- name: APP_NAME
|
|
valueFrom:
|
|
fieldRef:
|
|
fieldPath: metadata.labels['app.kubernetes.io/name']
|
|
- name: INSTANCE_NAME
|
|
valueFrom:
|
|
fieldRef:
|
|
fieldPath: metadata.labels['app.kubernetes.io/instance']
|
|
image: ghcr.io/hyperspike/valkey-operator:v0.0.60
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /healthz
|
|
port: 8081
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 20
|
|
name: manager
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /readyz
|
|
port: 8081
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 10
|
|
resources:
|
|
limits:
|
|
cpu: 500m
|
|
memory: 128Mi
|
|
requests:
|
|
cpu: 10m
|
|
memory: 64Mi
|
|
securityContext:
|
|
allowPrivilegeEscalation: false
|
|
capabilities:
|
|
drop:
|
|
- ALL
|
|
securityContext:
|
|
runAsNonRoot: true
|
|
serviceAccountName: valkey-operator-controller-manager
|
|
terminationGracePeriodSeconds: 10
|