github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/deploy/helm/crds/apps.kubeblocks.io_clusters.yaml (about) 1 apiVersion: apiextensions.k8s.io/v1 2 kind: CustomResourceDefinition 3 metadata: 4 annotations: 5 controller-gen.kubebuilder.io/version: v0.12.1 6 labels: 7 app.kubernetes.io/name: kubeblocks 8 name: clusters.apps.kubeblocks.io 9 spec: 10 group: apps.kubeblocks.io 11 names: 12 categories: 13 - kubeblocks 14 - all 15 kind: Cluster 16 listKind: ClusterList 17 plural: clusters 18 singular: cluster 19 scope: Namespaced 20 versions: 21 - additionalPrinterColumns: 22 - description: ClusterDefinition referenced by cluster. 23 jsonPath: .spec.clusterDefinitionRef 24 name: CLUSTER-DEFINITION 25 type: string 26 - description: Cluster Application Version. 27 jsonPath: .spec.clusterVersionRef 28 name: VERSION 29 type: string 30 - description: Cluster termination policy. 31 jsonPath: .spec.terminationPolicy 32 name: TERMINATION-POLICY 33 type: string 34 - description: Cluster Status. 35 jsonPath: .status.phase 36 name: STATUS 37 type: string 38 - jsonPath: .metadata.creationTimestamp 39 name: AGE 40 type: date 41 name: v1alpha1 42 schema: 43 openAPIV3Schema: 44 description: Cluster is the Schema for the clusters API. 45 properties: 46 apiVersion: 47 description: 'APIVersion defines the versioned schema of this representation 48 of an object. Servers should convert recognized schemas to the latest 49 internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' 50 type: string 51 kind: 52 description: 'Kind is a string value representing the REST resource this 53 object represents. Servers may infer this from the endpoint the client 54 submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' 55 type: string 56 metadata: 57 type: object 58 spec: 59 description: ClusterSpec defines the desired state of Cluster. 60 properties: 61 affinity: 62 description: affinity is a group of affinity scheduling rules. 63 properties: 64 nodeLabels: 65 additionalProperties: 66 type: string 67 description: nodeLabels describes that pods must be scheduled 68 to the nodes with the specified node labels. 69 type: object 70 podAntiAffinity: 71 default: Preferred 72 description: podAntiAffinity describes the anti-affinity level 73 of pods within a component. Preferred means try spread pods 74 by `TopologyKeys`. Required means must spread pods by `TopologyKeys`. 75 enum: 76 - Preferred 77 - Required 78 type: string 79 tenancy: 80 default: SharedNode 81 description: tenancy describes how pods are distributed across 82 node. SharedNode means multiple pods may share the same node. 83 DedicatedNode means each pod runs on their own dedicated node. 84 enum: 85 - SharedNode 86 - DedicatedNode 87 type: string 88 topologyKeys: 89 description: topologyKey is the key of node labels. Nodes that 90 have a label with this key and identical values are considered 91 to be in the same topology. It's used as the topology domain 92 for pod anti-affinity and pod spread constraint. Some well-known 93 label keys, such as "kubernetes.io/hostname" and "topology.kubernetes.io/zone" 94 are often used as TopologyKey, as well as any other custom label 95 key. 96 items: 97 type: string 98 type: array 99 x-kubernetes-list-type: set 100 type: object 101 availabilityPolicy: 102 description: availabilityPolicy describes the availability policy, 103 including zone, node, and none. 104 enum: 105 - zone 106 - node 107 - none 108 type: string 109 backup: 110 description: cluster backup configuration. 111 properties: 112 cronExpression: 113 description: the cron expression for schedule, the timezone is 114 in UTC. see https://en.wikipedia.org/wiki/Cron. 115 type: string 116 enabled: 117 default: false 118 description: enabled defines whether to enable automated backup. 119 type: boolean 120 method: 121 description: backup method name to use, that is defined in backupPolicy. 122 type: string 123 pitrEnabled: 124 default: false 125 description: pitrEnabled defines whether to enable point-in-time 126 recovery. 127 type: boolean 128 repoName: 129 description: repoName is the name of the backupRepo, if not set, 130 will use the default backupRepo. 131 type: string 132 retentionPeriod: 133 default: 7d 134 description: "retentionPeriod determines a duration up to which 135 the backup should be kept. controller will remove all backups 136 that are older than the RetentionPeriod. For example, RetentionPeriod 137 of `30d` will keep only the backups of last 30 days. Sample 138 duration format: - years: \t2y - months: \t6mo - days: \t\t30d 139 - hours: \t12h - minutes: \t30m You can also combine the above 140 durations. For example: 30d12h30m" 141 type: string 142 startingDeadlineMinutes: 143 description: startingDeadlineMinutes defines the deadline in minutes 144 for starting the backup job if it misses scheduled time for 145 any reason. 146 format: int64 147 maximum: 1440 148 minimum: 0 149 type: integer 150 type: object 151 clusterDefinitionRef: 152 description: Cluster referencing ClusterDefinition name. This is an 153 immutable attribute. 154 maxLength: 63 155 pattern: ^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$ 156 type: string 157 x-kubernetes-validations: 158 - message: clusterDefinitionRef is immutable 159 rule: self == oldSelf 160 clusterVersionRef: 161 description: Cluster referencing ClusterVersion name. 162 maxLength: 63 163 pattern: ^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$ 164 type: string 165 componentSpecs: 166 description: List of componentSpecs you want to replace in ClusterDefinition 167 and ClusterVersion. It will replace the field in ClusterDefinition's 168 and ClusterVersion's component if type is matching. 169 items: 170 description: ClusterComponentSpec defines the cluster component 171 spec. 172 properties: 173 affinity: 174 description: affinity describes affinities specified by users. 175 properties: 176 nodeLabels: 177 additionalProperties: 178 type: string 179 description: nodeLabels describes that pods must be scheduled 180 to the nodes with the specified node labels. 181 type: object 182 podAntiAffinity: 183 default: Preferred 184 description: podAntiAffinity describes the anti-affinity 185 level of pods within a component. Preferred means try 186 spread pods by `TopologyKeys`. Required means must spread 187 pods by `TopologyKeys`. 188 enum: 189 - Preferred 190 - Required 191 type: string 192 tenancy: 193 default: SharedNode 194 description: tenancy describes how pods are distributed 195 across node. SharedNode means multiple pods may share 196 the same node. DedicatedNode means each pod runs on their 197 own dedicated node. 198 enum: 199 - SharedNode 200 - DedicatedNode 201 type: string 202 topologyKeys: 203 description: topologyKey is the key of node labels. Nodes 204 that have a label with this key and identical values are 205 considered to be in the same topology. It's used as the 206 topology domain for pod anti-affinity and pod spread constraint. 207 Some well-known label keys, such as "kubernetes.io/hostname" 208 and "topology.kubernetes.io/zone" are often used as TopologyKey, 209 as well as any other custom label key. 210 items: 211 type: string 212 type: array 213 x-kubernetes-list-type: set 214 type: object 215 classDefRef: 216 description: classDefRef references the class defined in ComponentClassDefinition. 217 properties: 218 class: 219 description: Class refers to the name of the class that 220 is defined in the ComponentClassDefinition. 221 type: string 222 name: 223 description: Name refers to the name of the ComponentClassDefinition. 224 maxLength: 63 225 pattern: ^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$ 226 type: string 227 required: 228 - class 229 type: object 230 componentDefRef: 231 description: componentDefRef references componentDef defined 232 in ClusterDefinition spec. Need to comply with IANA Service 233 Naming rule. 234 maxLength: 22 235 pattern: ^[a-z]([a-z0-9\-]*[a-z0-9])?$ 236 type: string 237 x-kubernetes-validations: 238 - message: componentDefRef is immutable 239 rule: self == oldSelf 240 enabledLogs: 241 description: enabledLogs indicates which log file takes effect 242 in the database cluster. element is the log type which is 243 defined in cluster definition logConfig.name, and will set 244 relative variables about this log type in database kernel. 245 items: 246 type: string 247 type: array 248 x-kubernetes-list-type: set 249 issuer: 250 description: issuer defines provider context for TLS certs. 251 required when TLS enabled 252 properties: 253 name: 254 default: KubeBlocks 255 description: 'Name of issuer. Options supported: - KubeBlocks 256 - Certificates signed by KubeBlocks Operator. - UserProvided 257 - User provided own CA-signed certificates.' 258 enum: 259 - KubeBlocks 260 - UserProvided 261 type: string 262 secretRef: 263 description: secretRef. TLS certs Secret reference required 264 when from is UserProvided 265 properties: 266 ca: 267 description: CA cert key in Secret 268 type: string 269 cert: 270 description: Cert key in Secret 271 type: string 272 key: 273 description: Key of TLS private key in Secret 274 type: string 275 name: 276 description: Name of the Secret 277 type: string 278 required: 279 - ca 280 - cert 281 - key 282 - name 283 type: object 284 required: 285 - name 286 type: object 287 monitor: 288 default: false 289 description: monitor is a switch to enable monitoring and is 290 set as false by default. KubeBlocks provides an extension 291 mechanism to support component level monitoring, which will 292 scrape metrics auto or manually from servers in component 293 and export metrics to Time Series Database. 294 type: boolean 295 name: 296 description: name defines cluster's component name, this name 297 is also part of Service DNS name, so this name will comply 298 with IANA Service Naming rule. 299 maxLength: 22 300 pattern: ^[a-z]([a-z0-9\-]*[a-z0-9])?$ 301 type: string 302 x-kubernetes-validations: 303 - message: name is immutable 304 rule: self == oldSelf 305 noCreatePDB: 306 default: false 307 description: noCreatePDB defines the PodDisruptionBudget creation 308 behavior and is set to true if creation of PodDisruptionBudget 309 for this component is not needed. It defaults to false. 310 type: boolean 311 replicas: 312 default: 1 313 description: Component replicas. The default value is used in 314 ClusterDefinition spec if not specified. 315 format: int32 316 minimum: 0 317 type: integer 318 resources: 319 description: Resources requests and limits of workload. 320 properties: 321 claims: 322 description: "Claims lists the names of resources, defined 323 in spec.resourceClaims, that are used by this container. 324 \n This is an alpha field and requires enabling the DynamicResourceAllocation 325 feature gate. \n This field is immutable. It can only 326 be set for containers." 327 items: 328 description: ResourceClaim references one entry in PodSpec.ResourceClaims. 329 properties: 330 name: 331 description: Name must match the name of one entry 332 in pod.spec.resourceClaims of the Pod where this 333 field is used. It makes that resource available 334 inside a container. 335 type: string 336 required: 337 - name 338 type: object 339 type: array 340 x-kubernetes-list-map-keys: 341 - name 342 x-kubernetes-list-type: map 343 limits: 344 additionalProperties: 345 anyOf: 346 - type: integer 347 - type: string 348 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 349 x-kubernetes-int-or-string: true 350 description: 'Limits describes the maximum amount of compute 351 resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 352 type: object 353 requests: 354 additionalProperties: 355 anyOf: 356 - type: integer 357 - type: string 358 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 359 x-kubernetes-int-or-string: true 360 description: 'Requests describes the minimum amount of compute 361 resources required. If Requests is omitted for a container, 362 it defaults to Limits if that is explicitly specified, 363 otherwise to an implementation-defined value. Requests 364 cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 365 type: object 366 type: object 367 x-kubernetes-preserve-unknown-fields: true 368 serviceAccountName: 369 description: serviceAccountName is the name of the ServiceAccount 370 that running component depends on. 371 type: string 372 serviceRefs: 373 description: 'serviceRefs define service references for the 374 current component. Based on the referenced services, they 375 can be categorized into two types: Service provided by external 376 sources: These services are provided by external sources and 377 are not managed by KubeBlocks. They can be Kubernetes-based 378 or non-Kubernetes services. For external services, you need 379 to provide an additional ServiceDescriptor object to establish 380 the service binding. Service provided by other KubeBlocks 381 clusters: These services are provided by other KubeBlocks 382 clusters. You can bind to these services by specifying the 383 name of the hosting cluster. Each type of service reference 384 requires specific configurations and bindings to establish 385 the connection and interaction with the respective services. 386 It should be noted that the ServiceRef has cluster-level semantic 387 consistency, meaning that within the same Cluster, service 388 references with the same ServiceRef.Name are considered to 389 be the same service. It is only allowed to bind to the same 390 Cluster or ServiceDescriptor.' 391 items: 392 properties: 393 cluster: 394 description: 'When referencing a service provided by other 395 KubeBlocks cluster, you need to provide the name of 396 the Cluster being referenced. By default, when other 397 KubeBlocks Cluster are referenced, the ClusterDefinition.spec.connectionCredential 398 secret corresponding to the referenced Cluster will 399 be used to bind to the current component. Currently, 400 if a KubeBlocks cluster is to be referenced, the connection 401 credential secret should include and correspond to the 402 following fields: endpoint, port, username, and password. 403 Under this referencing approach, the ServiceKind and 404 ServiceVersion of service reference declaration defined 405 in the ClusterDefinition will not be validated. If both 406 Cluster and ServiceDescriptor are specified, the Cluster 407 takes precedence.' 408 type: string 409 name: 410 description: name of the service reference declaration. 411 references the serviceRefDeclaration name defined in 412 clusterDefinition.componentDefs[*].serviceRefDeclarations[*].name 413 type: string 414 namespace: 415 description: namespace defines the namespace of the referenced 416 Cluster or the namespace of the referenced ServiceDescriptor 417 object. If not set, the referenced Cluster and ServiceDescriptor 418 will be searched in the namespace of the current cluster 419 by default. 420 type: string 421 serviceDescriptor: 422 description: serviceDescriptor defines the service descriptor 423 of the service provided by external sources. When referencing 424 a service provided by external sources, you need to 425 provide the ServiceDescriptor object name to establish 426 the service binding. And serviceDescriptor is the name 427 of the ServiceDescriptor object, furthermore, the ServiceDescriptor.spec.serviceKind 428 and ServiceDescriptor.spec.serviceVersion should match 429 clusterDefinition.componentDefs[*].serviceRefDeclarations[*].serviceRefDeclarationSpecs[*].serviceKind 430 and the regular expression defines in clusterDefinition.componentDefs[*].serviceRefDeclarations[*].serviceRefDeclarationSpecs[*].serviceVersion. 431 If both Cluster and ServiceDescriptor are specified, 432 the Cluster takes precedence. 433 type: string 434 required: 435 - name 436 type: object 437 type: array 438 services: 439 description: Services expose endpoints that can be accessed 440 by clients. 441 items: 442 properties: 443 annotations: 444 additionalProperties: 445 type: string 446 description: 'If ServiceType is LoadBalancer, cloud provider 447 related parameters can be put here More info: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer.' 448 type: object 449 name: 450 description: Service name 451 maxLength: 15 452 type: string 453 serviceType: 454 default: ClusterIP 455 description: 'serviceType determines how the Service is 456 exposed. Valid options are ClusterIP, NodePort, and 457 LoadBalancer. "ClusterIP" allocates a cluster-internal 458 IP address for load-balancing to endpoints. Endpoints 459 are determined by the selector or if that is not specified, 460 they are determined by manual construction of an Endpoints 461 object or EndpointSlice objects. If clusterIP is "None", 462 no virtual IP is allocated and the endpoints are published 463 as a set of endpoints rather than a virtual IP. "NodePort" 464 builds on ClusterIP and allocates a port on every node 465 which routes to the same endpoints as the clusterIP. 466 "LoadBalancer" builds on NodePort and creates an external 467 load-balancer (if supported in the current cloud) which 468 routes to the same endpoints as the clusterIP. More 469 info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types.' 470 enum: 471 - ClusterIP 472 - NodePort 473 - LoadBalancer 474 type: string 475 x-kubernetes-preserve-unknown-fields: true 476 required: 477 - name 478 type: object 479 type: array 480 switchPolicy: 481 description: switchPolicy defines the strategy for switchover 482 and failover when workloadType is Replication. 483 properties: 484 type: 485 default: Noop 486 description: 'clusterSwitchPolicy defines type of the switchPolicy 487 when workloadType is Replication. MaximumAvailability: 488 [WIP] when the primary is active, do switch if the synchronization 489 delay = 0 in the user-defined lagProbe data delay detection 490 logic, otherwise do not switch. The primary is down, switch 491 immediately. It will be available in future versions. 492 MaximumDataProtection: [WIP] when the primary is active, 493 do switch if synchronization delay = 0 in the user-defined 494 lagProbe data lag detection logic, otherwise do not switch. 495 If the primary is down, if it can be judged that the primary 496 and secondary data are consistent, then do the switch, 497 otherwise do not switch. It will be available in future 498 versions. Noop: KubeBlocks will not perform high-availability 499 switching on components. Users need to implement HA by 500 themselves or integrate open source HA solution.' 501 enum: 502 - Noop 503 type: string 504 type: object 505 tls: 506 description: Enables or disables TLS certs. 507 type: boolean 508 tolerations: 509 description: Component tolerations will override ClusterSpec.Tolerations 510 if specified. 511 items: 512 description: The pod this Toleration is attached to tolerates 513 any taint that matches the triple <key,value,effect> using 514 the matching operator <operator>. 515 properties: 516 effect: 517 description: Effect indicates the taint effect to match. 518 Empty means match all taint effects. When specified, 519 allowed values are NoSchedule, PreferNoSchedule and 520 NoExecute. 521 type: string 522 key: 523 description: Key is the taint key that the toleration 524 applies to. Empty means match all taint keys. If the 525 key is empty, operator must be Exists; this combination 526 means to match all values and all keys. 527 type: string 528 operator: 529 description: Operator represents a key's relationship 530 to the value. Valid operators are Exists and Equal. 531 Defaults to Equal. Exists is equivalent to wildcard 532 for value, so that a pod can tolerate all taints of 533 a particular category. 534 type: string 535 tolerationSeconds: 536 description: TolerationSeconds represents the period of 537 time the toleration (which must be of effect NoExecute, 538 otherwise this field is ignored) tolerates the taint. 539 By default, it is not set, which means tolerate the 540 taint forever (do not evict). Zero and negative values 541 will be treated as 0 (evict immediately) by the system. 542 format: int64 543 type: integer 544 value: 545 description: Value is the taint value the toleration matches 546 to. If the operator is Exists, the value should be empty, 547 otherwise just a regular string. 548 type: string 549 type: object 550 type: array 551 x-kubernetes-preserve-unknown-fields: true 552 userResourceRefs: 553 description: userResourceRefs defines the user-defined volumes. 554 properties: 555 configMapRefs: 556 description: configMapRefs defines the user-defined configmaps. 557 items: 558 properties: 559 asVolumeFrom: 560 description: asVolumeFrom defines the list of containers 561 where volumeMounts will be injected into. 562 items: 563 type: string 564 type: array 565 x-kubernetes-list-type: set 566 configMap: 567 description: configMap defines the configmap volume 568 source. 569 properties: 570 defaultMode: 571 description: 'defaultMode is optional: mode bits 572 used to set permissions on created files by 573 default. Must be an octal value between 0000 574 and 0777 or a decimal value between 0 and 511. 575 YAML accepts both octal and decimal values, 576 JSON requires decimal values for mode bits. 577 Defaults to 0644. Directories within the path 578 are not affected by this setting. This might 579 be in conflict with other options that affect 580 the file mode, like fsGroup, and the result 581 can be other mode bits set.' 582 format: int32 583 type: integer 584 items: 585 description: items if unspecified, each key-value 586 pair in the Data field of the referenced ConfigMap 587 will be projected into the volume as a file 588 whose name is the key and content is the value. 589 If specified, the listed keys will be projected 590 into the specified paths, and unlisted keys 591 will not be present. If a key is specified which 592 is not present in the ConfigMap, the volume 593 setup will error unless it is marked optional. 594 Paths must be relative and may not contain the 595 '..' path or start with '..'. 596 items: 597 description: Maps a string key to a path within 598 a volume. 599 properties: 600 key: 601 description: key is the key to project. 602 type: string 603 mode: 604 description: 'mode is Optional: mode bits 605 used to set permissions on this file. 606 Must be an octal value between 0000 and 607 0777 or a decimal value between 0 and 608 511. YAML accepts both octal and decimal 609 values, JSON requires decimal values for 610 mode bits. If not specified, the volume 611 defaultMode will be used. This might be 612 in conflict with other options that affect 613 the file mode, like fsGroup, and the result 614 can be other mode bits set.' 615 format: int32 616 type: integer 617 path: 618 description: path is the relative path of 619 the file to map the key to. May not be 620 an absolute path. May not contain the 621 path element '..'. May not start with 622 the string '..'. 623 type: string 624 required: 625 - key 626 - path 627 type: object 628 type: array 629 name: 630 description: 'Name of the referent. More info: 631 https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names 632 TODO: Add other useful fields. apiVersion, kind, 633 uid?' 634 type: string 635 optional: 636 description: optional specify whether the ConfigMap 637 or its keys must be defined 638 type: boolean 639 type: object 640 x-kubernetes-map-type: atomic 641 mountPoint: 642 description: mountPath is the path at which to mount 643 the volume. 644 maxLength: 256 645 pattern: ^/[a-z]([a-z0-9\-]*[a-z0-9])?$ 646 type: string 647 name: 648 description: name is the name of the referenced the 649 Configmap/Secret object. 650 maxLength: 63 651 pattern: ^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$ 652 type: string 653 subPath: 654 description: subPath is a relative file path within 655 the volume to mount. 656 type: string 657 required: 658 - configMap 659 - mountPoint 660 - name 661 type: object 662 type: array 663 x-kubernetes-list-map-keys: 664 - name 665 x-kubernetes-list-type: map 666 secretRefs: 667 description: secretRefs defines the user-defined secrets. 668 items: 669 properties: 670 asVolumeFrom: 671 description: asVolumeFrom defines the list of containers 672 where volumeMounts will be injected into. 673 items: 674 type: string 675 type: array 676 x-kubernetes-list-type: set 677 mountPoint: 678 description: mountPath is the path at which to mount 679 the volume. 680 maxLength: 256 681 pattern: ^/[a-z]([a-z0-9\-]*[a-z0-9])?$ 682 type: string 683 name: 684 description: name is the name of the referenced the 685 Configmap/Secret object. 686 maxLength: 63 687 pattern: ^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$ 688 type: string 689 secret: 690 description: secret defines the secret volume source. 691 properties: 692 defaultMode: 693 description: 'defaultMode is Optional: mode bits 694 used to set permissions on created files by 695 default. Must be an octal value between 0000 696 and 0777 or a decimal value between 0 and 511. 697 YAML accepts both octal and decimal values, 698 JSON requires decimal values for mode bits. 699 Defaults to 0644. Directories within the path 700 are not affected by this setting. This might 701 be in conflict with other options that affect 702 the file mode, like fsGroup, and the result 703 can be other mode bits set.' 704 format: int32 705 type: integer 706 items: 707 description: items If unspecified, each key-value 708 pair in the Data field of the referenced Secret 709 will be projected into the volume as a file 710 whose name is the key and content is the value. 711 If specified, the listed keys will be projected 712 into the specified paths, and unlisted keys 713 will not be present. If a key is specified which 714 is not present in the Secret, the volume setup 715 will error unless it is marked optional. Paths 716 must be relative and may not contain the '..' 717 path or start with '..'. 718 items: 719 description: Maps a string key to a path within 720 a volume. 721 properties: 722 key: 723 description: key is the key to project. 724 type: string 725 mode: 726 description: 'mode is Optional: mode bits 727 used to set permissions on this file. 728 Must be an octal value between 0000 and 729 0777 or a decimal value between 0 and 730 511. YAML accepts both octal and decimal 731 values, JSON requires decimal values for 732 mode bits. If not specified, the volume 733 defaultMode will be used. This might be 734 in conflict with other options that affect 735 the file mode, like fsGroup, and the result 736 can be other mode bits set.' 737 format: int32 738 type: integer 739 path: 740 description: path is the relative path of 741 the file to map the key to. May not be 742 an absolute path. May not contain the 743 path element '..'. May not start with 744 the string '..'. 745 type: string 746 required: 747 - key 748 - path 749 type: object 750 type: array 751 optional: 752 description: optional field specify whether the 753 Secret or its keys must be defined 754 type: boolean 755 secretName: 756 description: 'secretName is the name of the secret 757 in the pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' 758 type: string 759 type: object 760 subPath: 761 description: subPath is a relative file path within 762 the volume to mount. 763 type: string 764 required: 765 - mountPoint 766 - name 767 - secret 768 type: object 769 type: array 770 x-kubernetes-list-map-keys: 771 - name 772 x-kubernetes-list-type: map 773 type: object 774 volumeClaimTemplates: 775 description: volumeClaimTemplates information for statefulset.spec.volumeClaimTemplates. 776 items: 777 properties: 778 name: 779 description: Reference `ClusterDefinition.spec.componentDefs.containers.volumeMounts.name`. 780 type: string 781 spec: 782 description: spec defines the desired characteristics 783 of a volume requested by a pod author. 784 properties: 785 accessModes: 786 description: 'accessModes contains the desired access 787 modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1.' 788 items: 789 type: string 790 type: array 791 x-kubernetes-preserve-unknown-fields: true 792 resources: 793 description: 'resources represents the minimum resources 794 the volume should have. If RecoverVolumeExpansionFailure 795 feature is enabled users are allowed to specify 796 resource requirements that are lower than previous 797 value but must still be higher than capacity recorded 798 in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources.' 799 properties: 800 claims: 801 description: "Claims lists the names of resources, 802 defined in spec.resourceClaims, that are used 803 by this container. \n This is an alpha field 804 and requires enabling the DynamicResourceAllocation 805 feature gate. \n This field is immutable. It 806 can only be set for containers." 807 items: 808 description: ResourceClaim references one entry 809 in PodSpec.ResourceClaims. 810 properties: 811 name: 812 description: Name must match the name of 813 one entry in pod.spec.resourceClaims of 814 the Pod where this field is used. It makes 815 that resource available inside a container. 816 type: string 817 required: 818 - name 819 type: object 820 type: array 821 x-kubernetes-list-map-keys: 822 - name 823 x-kubernetes-list-type: map 824 limits: 825 additionalProperties: 826 anyOf: 827 - type: integer 828 - type: string 829 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 830 x-kubernetes-int-or-string: true 831 description: 'Limits describes the maximum amount 832 of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 833 type: object 834 requests: 835 additionalProperties: 836 anyOf: 837 - type: integer 838 - type: string 839 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 840 x-kubernetes-int-or-string: true 841 description: 'Requests describes the minimum amount 842 of compute resources required. If Requests is 843 omitted for a container, it defaults to Limits 844 if that is explicitly specified, otherwise to 845 an implementation-defined value. Requests cannot 846 exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 847 type: object 848 type: object 849 x-kubernetes-preserve-unknown-fields: true 850 storageClassName: 851 description: 'storageClassName is the name of the 852 StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.' 853 type: string 854 volumeMode: 855 description: volumeMode defines what type of volume 856 is required by the claim. 857 type: string 858 type: object 859 required: 860 - name 861 type: object 862 type: array 863 required: 864 - componentDefRef 865 - name 866 - replicas 867 type: object 868 maxItems: 128 869 minItems: 1 870 type: array 871 x-kubernetes-list-map-keys: 872 - name 873 x-kubernetes-list-type: map 874 x-kubernetes-validations: 875 - message: duplicated component 876 rule: self.all(x, size(self.filter(c, c.name == x.name)) == 1) 877 - message: component can not be added dynamically 878 rule: self.all(x, oldSelf.exists(y, y.name == x.name)) 879 - message: component can not be removed dynamically 880 rule: oldSelf.all(x, self.exists(y, y.name == x.name)) 881 monitor: 882 description: monitor specifies the configuration of monitor 883 properties: 884 monitoringInterval: 885 anyOf: 886 - type: integer 887 - type: string 888 description: monitoringInterval specifies interval of monitoring, 889 no monitor if set to 0 890 x-kubernetes-int-or-string: true 891 type: object 892 network: 893 description: network specifies the configuration of network 894 properties: 895 hostNetworkAccessible: 896 default: false 897 description: hostNetworkAccessible specifies whether host network 898 is accessible. It defaults to false 899 type: boolean 900 publiclyAccessible: 901 default: false 902 description: publiclyAccessible specifies whether it is publicly 903 accessible. It defaults to false 904 type: boolean 905 type: object 906 replicas: 907 description: replicas specifies the replicas of the first componentSpec, 908 if the replicas of the first componentSpec is specified, this value 909 will be ignored. 910 format: int32 911 type: integer 912 resources: 913 description: resources specifies the resources of the first componentSpec, 914 if the resources of the first componentSpec is specified, this value 915 will be ignored. 916 properties: 917 cpu: 918 anyOf: 919 - type: integer 920 - type: string 921 description: 'cpu resource needed, more info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 922 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 923 x-kubernetes-int-or-string: true 924 memory: 925 anyOf: 926 - type: integer 927 - type: string 928 description: 'memory resource needed, more info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 929 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 930 x-kubernetes-int-or-string: true 931 type: object 932 storage: 933 description: storage specifies the storage of the first componentSpec, 934 if the storage of the first componentSpec is specified, this value 935 will be ignored. 936 properties: 937 size: 938 anyOf: 939 - type: integer 940 - type: string 941 description: 'storage size needed, more info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' 942 pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ 943 x-kubernetes-int-or-string: true 944 type: object 945 tenancy: 946 description: tenancy describes how pods are distributed across node. 947 SharedNode means multiple pods may share the same node. DedicatedNode 948 means each pod runs on their own dedicated node. 949 enum: 950 - SharedNode 951 - DedicatedNode 952 type: string 953 terminationPolicy: 954 description: Cluster termination policy. Valid values are DoNotTerminate, 955 Halt, Delete, WipeOut. DoNotTerminate will block delete operation. 956 Halt will delete workload resources such as statefulset, deployment 957 workloads but keep PVCs. Delete is based on Halt and deletes PVCs. 958 WipeOut is based on Delete and wipe out all volume snapshots and 959 snapshot data from backup storage location. 960 enum: 961 - DoNotTerminate 962 - Halt 963 - Delete 964 - WipeOut 965 type: string 966 tolerations: 967 description: tolerations are attached to tolerate any taint that matches 968 the triple `key,value,effect` using the matching operator `operator`. 969 items: 970 description: The pod this Toleration is attached to tolerates any 971 taint that matches the triple <key,value,effect> using the matching 972 operator <operator>. 973 properties: 974 effect: 975 description: Effect indicates the taint effect to match. Empty 976 means match all taint effects. When specified, allowed values 977 are NoSchedule, PreferNoSchedule and NoExecute. 978 type: string 979 key: 980 description: Key is the taint key that the toleration applies 981 to. Empty means match all taint keys. If the key is empty, 982 operator must be Exists; this combination means to match all 983 values and all keys. 984 type: string 985 operator: 986 description: Operator represents a key's relationship to the 987 value. Valid operators are Exists and Equal. Defaults to Equal. 988 Exists is equivalent to wildcard for value, so that a pod 989 can tolerate all taints of a particular category. 990 type: string 991 tolerationSeconds: 992 description: TolerationSeconds represents the period of time 993 the toleration (which must be of effect NoExecute, otherwise 994 this field is ignored) tolerates the taint. By default, it 995 is not set, which means tolerate the taint forever (do not 996 evict). Zero and negative values will be treated as 0 (evict 997 immediately) by the system. 998 format: int64 999 type: integer 1000 value: 1001 description: Value is the taint value the toleration matches 1002 to. If the operator is Exists, the value should be empty, 1003 otherwise just a regular string. 1004 type: string 1005 type: object 1006 type: array 1007 x-kubernetes-preserve-unknown-fields: true 1008 required: 1009 - clusterDefinitionRef 1010 - terminationPolicy 1011 type: object 1012 status: 1013 description: ClusterStatus defines the observed state of Cluster. 1014 properties: 1015 clusterDefGeneration: 1016 description: clusterDefGeneration represents the generation number 1017 of ClusterDefinition referenced. 1018 format: int64 1019 type: integer 1020 components: 1021 additionalProperties: 1022 description: ClusterComponentStatus records components status. 1023 properties: 1024 consensusSetStatus: 1025 description: consensusSetStatus specifies the mapping of role 1026 and pod name. 1027 properties: 1028 followers: 1029 description: Followers status. 1030 items: 1031 properties: 1032 accessMode: 1033 default: ReadWrite 1034 description: accessMode defines what service this 1035 pod provides. 1036 enum: 1037 - None 1038 - Readonly 1039 - ReadWrite 1040 type: string 1041 name: 1042 default: leader 1043 description: Defines the role name. 1044 type: string 1045 pod: 1046 default: Unknown 1047 description: Pod name. 1048 type: string 1049 required: 1050 - accessMode 1051 - name 1052 - pod 1053 type: object 1054 type: array 1055 leader: 1056 description: Leader status. 1057 properties: 1058 accessMode: 1059 default: ReadWrite 1060 description: accessMode defines what service this pod 1061 provides. 1062 enum: 1063 - None 1064 - Readonly 1065 - ReadWrite 1066 type: string 1067 name: 1068 default: leader 1069 description: Defines the role name. 1070 type: string 1071 pod: 1072 default: Unknown 1073 description: Pod name. 1074 type: string 1075 required: 1076 - accessMode 1077 - name 1078 - pod 1079 type: object 1080 learner: 1081 description: Learner status. 1082 properties: 1083 accessMode: 1084 default: ReadWrite 1085 description: accessMode defines what service this pod 1086 provides. 1087 enum: 1088 - None 1089 - Readonly 1090 - ReadWrite 1091 type: string 1092 name: 1093 default: leader 1094 description: Defines the role name. 1095 type: string 1096 pod: 1097 default: Unknown 1098 description: Pod name. 1099 type: string 1100 required: 1101 - accessMode 1102 - name 1103 - pod 1104 type: object 1105 required: 1106 - leader 1107 type: object 1108 membersStatus: 1109 description: members' status. 1110 items: 1111 properties: 1112 podName: 1113 default: Unknown 1114 description: PodName pod name. 1115 type: string 1116 role: 1117 properties: 1118 accessMode: 1119 default: ReadWrite 1120 description: AccessMode, what service this member 1121 capable. 1122 enum: 1123 - None 1124 - Readonly 1125 - ReadWrite 1126 type: string 1127 canVote: 1128 default: true 1129 description: CanVote, whether this member has voting 1130 rights 1131 type: boolean 1132 isLeader: 1133 default: false 1134 description: IsLeader, whether this member is the 1135 leader 1136 type: boolean 1137 name: 1138 default: leader 1139 description: Name, role name. 1140 type: string 1141 required: 1142 - accessMode 1143 - name 1144 type: object 1145 required: 1146 - podName 1147 - role 1148 type: object 1149 type: array 1150 message: 1151 additionalProperties: 1152 type: string 1153 description: message records the component details message in 1154 current phase. Keys are podName or deployName or statefulSetName. 1155 The format is `ObjectKind/Name`. 1156 type: object 1157 phase: 1158 description: 'phase describes the phase of the component and 1159 the detail information of the phases are as following: Creating: 1160 `Creating` is a special `Updating` with previous phase `empty`(means 1161 "") or `Creating`. Running: component replicas > 0 and all 1162 pod specs are latest with a Running state. Updating: component 1163 replicas > 0 and has no failed pods. the component is being 1164 updated. Abnormal: component replicas > 0 but having some 1165 failed pods. the component basically works but in a fragile 1166 state. Failed: component replicas > 0 but having some failed 1167 pods. the component doesn''t work anymore. Stopping: component 1168 replicas = 0 and has terminating pods. Stopped: component 1169 replicas = 0 and all pods have been deleted. Deleting: the 1170 component is being deleted.' 1171 enum: 1172 - Creating 1173 - Running 1174 - Updating 1175 - Stopping 1176 - Stopped 1177 - Deleting 1178 - Failed 1179 - Abnormal 1180 type: string 1181 podsReady: 1182 description: podsReady checks if all pods of the component are 1183 ready. 1184 type: boolean 1185 podsReadyTime: 1186 description: podsReadyTime what time point of all component 1187 pods are ready, this time is the ready time of the last component 1188 pod. 1189 format: date-time 1190 type: string 1191 replicationSetStatus: 1192 description: replicationSetStatus specifies the mapping of role 1193 and pod name. 1194 properties: 1195 primary: 1196 description: Primary status. 1197 properties: 1198 pod: 1199 default: Unknown 1200 description: Pod name. 1201 type: string 1202 required: 1203 - pod 1204 type: object 1205 secondaries: 1206 description: Secondaries status. 1207 items: 1208 properties: 1209 pod: 1210 default: Unknown 1211 description: Pod name. 1212 type: string 1213 required: 1214 - pod 1215 type: object 1216 type: array 1217 required: 1218 - primary 1219 type: object 1220 type: object 1221 description: components record the current status information of all 1222 components of the cluster. 1223 type: object 1224 conditions: 1225 description: Describe current state of cluster API Resource, like 1226 warning. 1227 items: 1228 description: "Condition contains details for one aspect of the current 1229 state of this API Resource. --- This struct is intended for direct 1230 use as an array at the field path .status.conditions. For example, 1231 \n type FooStatus struct{ // Represents the observations of a 1232 foo's current state. // Known .status.conditions.type are: \"Available\", 1233 \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge 1234 // +listType=map // +listMapKey=type Conditions []metav1.Condition 1235 `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" 1236 protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 1237 properties: 1238 lastTransitionTime: 1239 description: lastTransitionTime is the last time the condition 1240 transitioned from one status to another. This should be when 1241 the underlying condition changed. If that is not known, then 1242 using the time when the API field changed is acceptable. 1243 format: date-time 1244 type: string 1245 message: 1246 description: message is a human readable message indicating 1247 details about the transition. This may be an empty string. 1248 maxLength: 32768 1249 type: string 1250 observedGeneration: 1251 description: observedGeneration represents the .metadata.generation 1252 that the condition was set based upon. For instance, if .metadata.generation 1253 is currently 12, but the .status.conditions[x].observedGeneration 1254 is 9, the condition is out of date with respect to the current 1255 state of the instance. 1256 format: int64 1257 minimum: 0 1258 type: integer 1259 reason: 1260 description: reason contains a programmatic identifier indicating 1261 the reason for the condition's last transition. Producers 1262 of specific condition types may define expected values and 1263 meanings for this field, and whether the values are considered 1264 a guaranteed API. The value should be a CamelCase string. 1265 This field may not be empty. 1266 maxLength: 1024 1267 minLength: 1 1268 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 1269 type: string 1270 status: 1271 description: status of the condition, one of True, False, Unknown. 1272 enum: 1273 - "True" 1274 - "False" 1275 - Unknown 1276 type: string 1277 type: 1278 description: type of condition in CamelCase or in foo.example.com/CamelCase. 1279 --- Many .condition.type values are consistent across resources 1280 like Available, but because arbitrary conditions can be useful 1281 (see .node.status.conditions), the ability to deconflict is 1282 important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 1283 maxLength: 316 1284 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])$ 1285 type: string 1286 required: 1287 - lastTransitionTime 1288 - message 1289 - reason 1290 - status 1291 - type 1292 type: object 1293 type: array 1294 message: 1295 description: message describes cluster details message in current 1296 phase. 1297 type: string 1298 observedGeneration: 1299 description: observedGeneration is the most recent generation observed 1300 for this Cluster. It corresponds to the Cluster's generation, which 1301 is updated on mutation by the API Server. 1302 format: int64 1303 type: integer 1304 phase: 1305 description: 'phase describes the phase of the Cluster, the detail 1306 information of the phases are as following: Creating: all components 1307 are in `Creating` phase. Running: all components are in `Running` 1308 phase, means the cluster is working well. Updating: all components 1309 are in `Creating`, `Running` or `Updating` phase, and at least one 1310 component is in `Creating` or `Updating` phase, means the cluster 1311 is doing an update. Stopping: at least one component is in `Stopping` 1312 phase, means the cluster is in a stop progress. Stopped: all components 1313 are in ''Stopped` phase, means the cluster has stopped and didn''t 1314 provide any function anymore. Failed: all components are in `Failed` 1315 phase, means the cluster is unavailable. Abnormal: some components 1316 are in `Failed` or `Abnormal` phase, means the cluster in a fragile 1317 state. troubleshoot need to be done. Deleting: the cluster is being 1318 deleted.' 1319 enum: 1320 - Creating 1321 - Running 1322 - Updating 1323 - Stopping 1324 - Stopped 1325 - Deleting 1326 - Failed 1327 - Abnormal 1328 type: string 1329 type: object 1330 type: object 1331 served: true 1332 storage: true 1333 subresources: 1334 status: {}