--- /dev/null
+---
+# Source: calico/templates/calico-kube-controllers.yaml
+# This manifest creates a Pod Disruption Budget for Controller to allow K8s Cluster Autoscaler to evict
+
+apiVersion: policy/v1
+kind: PodDisruptionBudget
+metadata:
+ name: calico-kube-controllers
+ namespace: kube-system
+ labels:
+ k8s-app: calico-kube-controllers
+spec:
+ maxUnavailable: 1
+ selector:
+ matchLabels:
+ k8s-app: calico-kube-controllers
+---
+# Source: calico/templates/calico-kube-controllers.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: calico-kube-controllers
+ namespace: kube-system
+---
+# Source: calico/templates/calico-node.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: calico-node
+ namespace: kube-system
+---
+# Source: calico/templates/calico-node.yaml
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: calico-cni-plugin
+ namespace: kube-system
+---
+# Source: calico/templates/calico-config.yaml
+# This ConfigMap is used to configure a self-hosted Calico installation.
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: calico-config
+ namespace: kube-system
+data:
+ # Typha is disabled.
+ typha_service_name: "none"
+ # Configure the backend to use.
+ calico_backend: "bird"
+
+ # Configure the MTU to use for workload interfaces and tunnels.
+ # By default, MTU is auto-detected, and explicitly setting this field should not be required.
+ # You can override auto-detection by providing a non-zero value.
+ veth_mtu: "0"
+
+ # The CNI network configuration to install on each node. The special
+ # values in this config will be automatically populated.
+ cni_network_config: |-
+ {
+ "name": "k8s-pod-network",
+ "cniVersion": "0.3.1",
+ "plugins": [
+ {
+ "type": "calico",
+ "log_level": "info",
+ "log_file_path": "/var/log/calico/cni/cni.log",
+ "datastore_type": "kubernetes",
+ "nodename": "__KUBERNETES_NODE_NAME__",
+ "mtu": __CNI_MTU__,
+ "ipam": {
+ "type": "calico-ipam"
+ },
+ "policy": {
+ "type": "k8s"
+ },
+ "kubernetes": {
+ "kubeconfig": "__KUBECONFIG_FILEPATH__"
+ }
+ },
+ {
+ "type": "portmap",
+ "snat": true,
+ "capabilities": {"portMappings": true}
+ },
+ {
+ "type": "bandwidth",
+ "capabilities": {"bandwidth": true}
+ }
+ ]
+ }
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: bgpconfigurations.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: BGPConfiguration
+ listKind: BGPConfigurationList
+ plural: bgpconfigurations
+ singular: bgpconfiguration
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: BGPConfiguration contains the configuration for any BGP routing.
+ 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: BGPConfigurationSpec contains the values of the BGP configuration.
+ properties:
+ asNumber:
+ description: 'ASNumber is the default AS number used by a node. [Default:
+ 64512]'
+ format: int32
+ type: integer
+ bindMode:
+ description: BindMode indicates whether to listen for BGP connections
+ on all addresses (None) or only on the node's canonical IP address
+ Node.Spec.BGP.IPvXAddress (NodeIP). Default behaviour is to listen
+ for BGP connections on all addresses.
+ type: string
+ communities:
+ description: Communities is a list of BGP community values and their
+ arbitrary names for tagging routes.
+ items:
+ description: Community contains standard or large community value
+ and its name.
+ properties:
+ name:
+ description: Name given to community value.
+ type: string
+ value:
+ description: Value must be of format `aa:nn` or `aa:nn:mm`.
+ For standard community use `aa:nn` format, where `aa` and
+ `nn` are 16 bit number. For large community use `aa:nn:mm`
+ format, where `aa`, `nn` and `mm` are 32 bit number. Where,
+ `aa` is an AS Number, `nn` and `mm` are per-AS identifier.
+ pattern: ^(\d+):(\d+)$|^(\d+):(\d+):(\d+)$
+ type: string
+ type: object
+ type: array
+ ignoredInterfaces:
+ description: IgnoredInterfaces indicates the network interfaces that
+ needs to be excluded when reading device routes.
+ items:
+ type: string
+ type: array
+ listenPort:
+ description: ListenPort is the port where BGP protocol should listen.
+ Defaults to 179
+ maximum: 65535
+ minimum: 1
+ type: integer
+ logSeverityScreen:
+ description: 'LogSeverityScreen is the log severity above which logs
+ are sent to the stdout. [Default: INFO]'
+ type: string
+ nodeMeshMaxRestartTime:
+ description: Time to allow for software restart for node-to-mesh peerings. When
+ specified, this is configured as the graceful restart timeout. When
+ not specified, the BIRD default of 120s is used. This field can
+ only be set on the default BGPConfiguration instance and requires
+ that NodeMesh is enabled
+ type: string
+ nodeMeshPassword:
+ description: Optional BGP password for full node-to-mesh peerings.
+ This field can only be set on the default BGPConfiguration instance
+ and requires that NodeMesh is enabled
+ properties:
+ secretKeyRef:
+ description: Selects a key of a secret in the node pod's namespace.
+ properties:
+ key:
+ description: The key of the secret to select from. Must be
+ a valid secret key.
+ type: string
+ 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: Specify whether the Secret or its key must be
+ defined
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ nodeToNodeMeshEnabled:
+ description: 'NodeToNodeMeshEnabled sets whether full node to node
+ BGP mesh is enabled. [Default: true]'
+ type: boolean
+ prefixAdvertisements:
+ description: PrefixAdvertisements contains per-prefix advertisement
+ configuration.
+ items:
+ description: PrefixAdvertisement configures advertisement properties
+ for the specified CIDR.
+ properties:
+ cidr:
+ description: CIDR for which properties should be advertised.
+ type: string
+ communities:
+ description: Communities can be list of either community names
+ already defined in `Specs.Communities` or community value
+ of format `aa:nn` or `aa:nn:mm`. For standard community use
+ `aa:nn` format, where `aa` and `nn` are 16 bit number. For
+ large community use `aa:nn:mm` format, where `aa`, `nn` and
+ `mm` are 32 bit number. Where,`aa` is an AS Number, `nn` and
+ `mm` are per-AS identifier.
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ serviceClusterIPs:
+ description: ServiceClusterIPs are the CIDR blocks from which service
+ cluster IPs are allocated. If specified, Calico will advertise these
+ blocks, as well as any cluster IPs within them.
+ items:
+ description: ServiceClusterIPBlock represents a single allowed ClusterIP
+ CIDR block.
+ properties:
+ cidr:
+ type: string
+ type: object
+ type: array
+ serviceExternalIPs:
+ description: ServiceExternalIPs are the CIDR blocks for Kubernetes
+ Service External IPs. Kubernetes Service ExternalIPs will only be
+ advertised if they are within one of these blocks.
+ items:
+ description: ServiceExternalIPBlock represents a single allowed
+ External IP CIDR block.
+ properties:
+ cidr:
+ type: string
+ type: object
+ type: array
+ serviceLoadBalancerIPs:
+ description: ServiceLoadBalancerIPs are the CIDR blocks for Kubernetes
+ Service LoadBalancer IPs. Kubernetes Service status.LoadBalancer.Ingress
+ IPs will only be advertised if they are within one of these blocks.
+ items:
+ description: ServiceLoadBalancerIPBlock represents a single allowed
+ LoadBalancer IP CIDR block.
+ properties:
+ cidr:
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: (devel)
+ creationTimestamp: null
+ name: bgpfilters.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: BGPFilter
+ listKind: BGPFilterList
+ plural: bgpfilters
+ singular: bgpfilter
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: BGPFilterSpec contains the IPv4 and IPv6 filter rules of
+ the BGP Filter.
+ properties:
+ exportV4:
+ description: The ordered set of IPv4 BGPFilter rules acting on exporting
+ routes to a peer.
+ items:
+ description: BGPFilterRuleV4 defines a BGP filter rule consisting
+ a single IPv4 CIDR block and a filter action for this CIDR.
+ properties:
+ action:
+ type: string
+ cidr:
+ type: string
+ interface:
+ type: string
+ matchOperator:
+ type: string
+ source:
+ type: string
+ required:
+ - action
+ type: object
+ type: array
+ exportV6:
+ description: The ordered set of IPv6 BGPFilter rules acting on exporting
+ routes to a peer.
+ items:
+ description: BGPFilterRuleV6 defines a BGP filter rule consisting
+ a single IPv6 CIDR block and a filter action for this CIDR.
+ properties:
+ action:
+ type: string
+ cidr:
+ type: string
+ interface:
+ type: string
+ matchOperator:
+ type: string
+ source:
+ type: string
+ required:
+ - action
+ type: object
+ type: array
+ importV4:
+ description: The ordered set of IPv4 BGPFilter rules acting on importing
+ routes from a peer.
+ items:
+ description: BGPFilterRuleV4 defines a BGP filter rule consisting
+ a single IPv4 CIDR block and a filter action for this CIDR.
+ properties:
+ action:
+ type: string
+ cidr:
+ type: string
+ interface:
+ type: string
+ matchOperator:
+ type: string
+ source:
+ type: string
+ required:
+ - action
+ type: object
+ type: array
+ importV6:
+ description: The ordered set of IPv6 BGPFilter rules acting on importing
+ routes from a peer.
+ items:
+ description: BGPFilterRuleV6 defines a BGP filter rule consisting
+ a single IPv6 CIDR block and a filter action for this CIDR.
+ properties:
+ action:
+ type: string
+ cidr:
+ type: string
+ interface:
+ type: string
+ matchOperator:
+ type: string
+ source:
+ type: string
+ required:
+ - action
+ type: object
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: bgppeers.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: BGPPeer
+ listKind: BGPPeerList
+ plural: bgppeers
+ singular: bgppeer
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: BGPPeerSpec contains the specification for a BGPPeer resource.
+ properties:
+ asNumber:
+ description: The AS Number of the peer.
+ format: int32
+ type: integer
+ filters:
+ description: The ordered set of BGPFilters applied on this BGP peer.
+ items:
+ type: string
+ type: array
+ keepOriginalNextHop:
+ description: Option to keep the original nexthop field when routes
+ are sent to a BGP Peer. Setting "true" configures the selected BGP
+ Peers node to use the "next hop keep;" instead of "next hop self;"(default)
+ in the specific branch of the Node on "bird.cfg".
+ type: boolean
+ maxRestartTime:
+ description: Time to allow for software restart. When specified,
+ this is configured as the graceful restart timeout. When not specified,
+ the BIRD default of 120s is used.
+ type: string
+ node:
+ description: The node name identifying the Calico node instance that
+ is targeted by this peer. If this is not set, and no nodeSelector
+ is specified, then this BGP peer selects all nodes in the cluster.
+ type: string
+ nodeSelector:
+ description: Selector for the nodes that should have this peering. When
+ this is set, the Node field must be empty.
+ type: string
+ numAllowedLocalASNumbers:
+ description: Maximum number of local AS numbers that are allowed in
+ the AS path for received routes. This removes BGP loop prevention
+ and should only be used if absolutely necessary.
+ format: int32
+ type: integer
+ password:
+ description: Optional BGP password for the peerings generated by this
+ BGPPeer resource.
+ properties:
+ secretKeyRef:
+ description: Selects a key of a secret in the node pod's namespace.
+ properties:
+ key:
+ description: The key of the secret to select from. Must be
+ a valid secret key.
+ type: string
+ 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: Specify whether the Secret or its key must be
+ defined
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ peerIP:
+ description: The IP address of the peer followed by an optional port
+ number to peer with. If port number is given, format should be `[<IPv6>]:port`
+ or `<IPv4>:<port>` for IPv4. If optional port number is not set,
+ and this peer IP and ASNumber belongs to a calico/node with ListenPort
+ set in BGPConfiguration, then we use that port to peer.
+ type: string
+ peerSelector:
+ description: Selector for the remote nodes to peer with. When this
+ is set, the PeerIP and ASNumber fields must be empty. For each
+ peering between the local node and selected remote nodes, we configure
+ an IPv4 peering if both ends have NodeBGPSpec.IPv4Address specified,
+ and an IPv6 peering if both ends have NodeBGPSpec.IPv6Address specified. The
+ remote AS number comes from the remote node's NodeBGPSpec.ASNumber,
+ or the global default if that is not set.
+ type: string
+ reachableBy:
+ description: Add an exact, i.e. /32, static route toward peer IP in
+ order to prevent route flapping. ReachableBy contains the address
+ of the gateway which peer can be reached by.
+ type: string
+ sourceAddress:
+ description: Specifies whether and how to configure a source address
+ for the peerings generated by this BGPPeer resource. Default value
+ "UseNodeIP" means to configure the node IP as the source address. "None"
+ means not to configure a source address.
+ type: string
+ ttlSecurity:
+ description: TTLSecurity enables the generalized TTL security mechanism
+ (GTSM) which protects against spoofed packets by ignoring received
+ packets with a smaller than expected TTL value. The provided value
+ is the number of hops (edges) between the peers.
+ type: integer
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: blockaffinities.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: BlockAffinity
+ listKind: BlockAffinityList
+ plural: blockaffinities
+ singular: blockaffinity
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: BlockAffinitySpec contains the specification for a BlockAffinity
+ resource.
+ properties:
+ cidr:
+ type: string
+ deleted:
+ description: Deleted indicates that this block affinity is being deleted.
+ This field is a string for compatibility with older releases that
+ mistakenly treat this field as a string.
+ type: string
+ node:
+ type: string
+ state:
+ type: string
+ required:
+ - cidr
+ - deleted
+ - node
+ - state
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: (devel)
+ creationTimestamp: null
+ name: caliconodestatuses.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: CalicoNodeStatus
+ listKind: CalicoNodeStatusList
+ plural: caliconodestatuses
+ singular: caliconodestatus
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: CalicoNodeStatusSpec contains the specification for a CalicoNodeStatus
+ resource.
+ properties:
+ classes:
+ description: Classes declares the types of information to monitor
+ for this calico/node, and allows for selective status reporting
+ about certain subsets of information.
+ items:
+ type: string
+ type: array
+ node:
+ description: The node name identifies the Calico node instance for
+ node status.
+ type: string
+ updatePeriodSeconds:
+ description: UpdatePeriodSeconds is the period at which CalicoNodeStatus
+ should be updated. Set to 0 to disable CalicoNodeStatus refresh.
+ Maximum update period is one day.
+ format: int32
+ type: integer
+ type: object
+ status:
+ description: CalicoNodeStatusStatus defines the observed state of CalicoNodeStatus.
+ No validation needed for status since it is updated by Calico.
+ properties:
+ agent:
+ description: Agent holds agent status on the node.
+ properties:
+ birdV4:
+ description: BIRDV4 represents the latest observed status of bird4.
+ properties:
+ lastBootTime:
+ description: LastBootTime holds the value of lastBootTime
+ from bird.ctl output.
+ type: string
+ lastReconfigurationTime:
+ description: LastReconfigurationTime holds the value of lastReconfigTime
+ from bird.ctl output.
+ type: string
+ routerID:
+ description: Router ID used by bird.
+ type: string
+ state:
+ description: The state of the BGP Daemon.
+ type: string
+ version:
+ description: Version of the BGP daemon
+ type: string
+ type: object
+ birdV6:
+ description: BIRDV6 represents the latest observed status of bird6.
+ properties:
+ lastBootTime:
+ description: LastBootTime holds the value of lastBootTime
+ from bird.ctl output.
+ type: string
+ lastReconfigurationTime:
+ description: LastReconfigurationTime holds the value of lastReconfigTime
+ from bird.ctl output.
+ type: string
+ routerID:
+ description: Router ID used by bird.
+ type: string
+ state:
+ description: The state of the BGP Daemon.
+ type: string
+ version:
+ description: Version of the BGP daemon
+ type: string
+ type: object
+ type: object
+ bgp:
+ description: BGP holds node BGP status.
+ properties:
+ numberEstablishedV4:
+ description: The total number of IPv4 established bgp sessions.
+ type: integer
+ numberEstablishedV6:
+ description: The total number of IPv6 established bgp sessions.
+ type: integer
+ numberNotEstablishedV4:
+ description: The total number of IPv4 non-established bgp sessions.
+ type: integer
+ numberNotEstablishedV6:
+ description: The total number of IPv6 non-established bgp sessions.
+ type: integer
+ peersV4:
+ description: PeersV4 represents IPv4 BGP peers status on the node.
+ items:
+ description: CalicoNodePeer contains the status of BGP peers
+ on the node.
+ properties:
+ peerIP:
+ description: IP address of the peer whose condition we are
+ reporting.
+ type: string
+ since:
+ description: Since the state or reason last changed.
+ type: string
+ state:
+ description: State is the BGP session state.
+ type: string
+ type:
+ description: Type indicates whether this peer is configured
+ via the node-to-node mesh, or via en explicit global or
+ per-node BGPPeer object.
+ type: string
+ type: object
+ type: array
+ peersV6:
+ description: PeersV6 represents IPv6 BGP peers status on the node.
+ items:
+ description: CalicoNodePeer contains the status of BGP peers
+ on the node.
+ properties:
+ peerIP:
+ description: IP address of the peer whose condition we are
+ reporting.
+ type: string
+ since:
+ description: Since the state or reason last changed.
+ type: string
+ state:
+ description: State is the BGP session state.
+ type: string
+ type:
+ description: Type indicates whether this peer is configured
+ via the node-to-node mesh, or via en explicit global or
+ per-node BGPPeer object.
+ type: string
+ type: object
+ type: array
+ required:
+ - numberEstablishedV4
+ - numberEstablishedV6
+ - numberNotEstablishedV4
+ - numberNotEstablishedV6
+ type: object
+ lastUpdated:
+ description: LastUpdated is a timestamp representing the server time
+ when CalicoNodeStatus object last updated. It is represented in
+ RFC3339 form and is in UTC.
+ format: date-time
+ nullable: true
+ type: string
+ routes:
+ description: Routes reports routes known to the Calico BGP daemon
+ on the node.
+ properties:
+ routesV4:
+ description: RoutesV4 represents IPv4 routes on the node.
+ items:
+ description: CalicoNodeRoute contains the status of BGP routes
+ on the node.
+ properties:
+ destination:
+ description: Destination of the route.
+ type: string
+ gateway:
+ description: Gateway for the destination.
+ type: string
+ interface:
+ description: Interface for the destination
+ type: string
+ learnedFrom:
+ description: LearnedFrom contains information regarding
+ where this route originated.
+ properties:
+ peerIP:
+ description: If sourceType is NodeMesh or BGPPeer, IP
+ address of the router that sent us this route.
+ type: string
+ sourceType:
+ description: Type of the source where a route is learned
+ from.
+ type: string
+ type: object
+ type:
+ description: Type indicates if the route is being used for
+ forwarding or not.
+ type: string
+ type: object
+ type: array
+ routesV6:
+ description: RoutesV6 represents IPv6 routes on the node.
+ items:
+ description: CalicoNodeRoute contains the status of BGP routes
+ on the node.
+ properties:
+ destination:
+ description: Destination of the route.
+ type: string
+ gateway:
+ description: Gateway for the destination.
+ type: string
+ interface:
+ description: Interface for the destination
+ type: string
+ learnedFrom:
+ description: LearnedFrom contains information regarding
+ where this route originated.
+ properties:
+ peerIP:
+ description: If sourceType is NodeMesh or BGPPeer, IP
+ address of the router that sent us this route.
+ type: string
+ sourceType:
+ description: Type of the source where a route is learned
+ from.
+ type: string
+ type: object
+ type:
+ description: Type indicates if the route is being used for
+ forwarding or not.
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusterinformations.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: ClusterInformation
+ listKind: ClusterInformationList
+ plural: clusterinformations
+ singular: clusterinformation
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: ClusterInformation contains the cluster specific information.
+ 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: ClusterInformationSpec contains the values of describing
+ the cluster.
+ properties:
+ calicoVersion:
+ description: CalicoVersion is the version of Calico that the cluster
+ is running
+ type: string
+ clusterGUID:
+ description: ClusterGUID is the GUID of the cluster
+ type: string
+ clusterType:
+ description: ClusterType describes the type of the cluster
+ type: string
+ datastoreReady:
+ description: DatastoreReady is used during significant datastore migrations
+ to signal to components such as Felix that it should wait before
+ accessing the datastore.
+ type: boolean
+ variant:
+ description: Variant declares which variant of Calico should be active.
+ type: string
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: felixconfigurations.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: FelixConfiguration
+ listKind: FelixConfigurationList
+ plural: felixconfigurations
+ singular: felixconfiguration
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: Felix Configuration contains the configuration for Felix.
+ 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: FelixConfigurationSpec contains the values of the Felix configuration.
+ properties:
+ allowIPIPPacketsFromWorkloads:
+ description: 'AllowIPIPPacketsFromWorkloads controls whether Felix
+ will add a rule to drop IPIP encapsulated traffic from workloads
+ [Default: false]'
+ type: boolean
+ allowVXLANPacketsFromWorkloads:
+ description: 'AllowVXLANPacketsFromWorkloads controls whether Felix
+ will add a rule to drop VXLAN encapsulated traffic from workloads
+ [Default: false]'
+ type: boolean
+ awsSrcDstCheck:
+ description: 'Set source-destination-check on AWS EC2 instances. Accepted
+ value must be one of "DoNothing", "Enable" or "Disable". [Default:
+ DoNothing]'
+ enum:
+ - DoNothing
+ - Enable
+ - Disable
+ type: string
+ bpfCTLBLogFilter:
+ description: 'BPFCTLBLogFilter specifies, what is logged by connect
+ time load balancer when BPFLogLevel is debug. Currently has to be
+ specified as ''all'' when BPFLogFilters is set to see CTLB logs.
+ [Default: unset - means logs are emitted when BPFLogLevel id debug
+ and BPFLogFilters not set.]'
+ type: string
+ bpfConnectTimeLoadBalancing:
+ description: 'BPFConnectTimeLoadBalancing when in BPF mode, controls
+ whether Felix installs the connect-time load balancer. The connect-time
+ load balancer is required for the host to be able to reach Kubernetes
+ services and it improves the performance of pod-to-service connections.When
+ set to TCP, connect time load balancing is available only for services
+ with TCP ports. [Default: TCP]'
+ enum:
+ - TCP
+ - Enabled
+ - Disabled
+ type: string
+ bpfConnectTimeLoadBalancingEnabled:
+ description: 'BPFConnectTimeLoadBalancingEnabled when in BPF mode,
+ controls whether Felix installs the connection-time load balancer. The
+ connect-time load balancer is required for the host to be able to
+ reach Kubernetes services and it improves the performance of pod-to-service
+ connections. The only reason to disable it is for debugging purposes.
+ This will be deprecated. Use BPFConnectTimeLoadBalancing [Default:
+ true]'
+ type: boolean
+ bpfDSROptoutCIDRs:
+ description: BPFDSROptoutCIDRs is a list of CIDRs which are excluded
+ from DSR. That is, clients in those CIDRs will accesses nodeports
+ as if BPFExternalServiceMode was set to Tunnel.
+ items:
+ type: string
+ type: array
+ bpfDataIfacePattern:
+ description: BPFDataIfacePattern is a regular expression that controls
+ which interfaces Felix should attach BPF programs to in order to
+ catch traffic to/from the network. This needs to match the interfaces
+ that Calico workload traffic flows over as well as any interfaces
+ that handle incoming traffic to nodeports and services from outside
+ the cluster. It should not match the workload interfaces (usually
+ named cali...).
+ type: string
+ bpfDisableGROForIfaces:
+ description: BPFDisableGROForIfaces is a regular expression that controls
+ which interfaces Felix should disable the Generic Receive Offload
+ [GRO] option. It should not match the workload interfaces (usually
+ named cali...).
+ type: string
+ bpfDisableUnprivileged:
+ description: 'BPFDisableUnprivileged, if enabled, Felix sets the kernel.unprivileged_bpf_disabled
+ sysctl to disable unprivileged use of BPF. This ensures that unprivileged
+ users cannot access Calico''s BPF maps and cannot insert their own
+ BPF programs to interfere with Calico''s. [Default: true]'
+ type: boolean
+ bpfEnabled:
+ description: 'BPFEnabled, if enabled Felix will use the BPF dataplane.
+ [Default: false]'
+ type: boolean
+ bpfEnforceRPF:
+ description: 'BPFEnforceRPF enforce strict RPF on all host interfaces
+ with BPF programs regardless of what is the per-interfaces or global
+ setting. Possible values are Disabled, Strict or Loose. [Default:
+ Loose]'
+ pattern: ^(?i)(Disabled|Strict|Loose)?$
+ type: string
+ bpfExcludeCIDRsFromNAT:
+ description: BPFExcludeCIDRsFromNAT is a list of CIDRs that are to
+ be excluded from NAT resolution so that host can handle them. A
+ typical usecase is node local DNS cache.
+ items:
+ type: string
+ type: array
+ bpfExtToServiceConnmark:
+ description: 'BPFExtToServiceConnmark in BPF mode, control a 32bit
+ mark that is set on connections from an external client to a local
+ service. This mark allows us to control how packets of that connection
+ are routed within the host and how is routing interpreted by RPF
+ check. [Default: 0]'
+ type: integer
+ bpfExternalServiceMode:
+ description: 'BPFExternalServiceMode in BPF mode, controls how connections
+ from outside the cluster to services (node ports and cluster IPs)
+ are forwarded to remote workloads. If set to "Tunnel" then both
+ request and response traffic is tunneled to the remote node. If
+ set to "DSR", the request traffic is tunneled but the response traffic
+ is sent directly from the remote node. In "DSR" mode, the remote
+ node appears to use the IP of the ingress node; this requires a
+ permissive L2 network. [Default: Tunnel]'
+ pattern: ^(?i)(Tunnel|DSR)?$
+ type: string
+ bpfForceTrackPacketsFromIfaces:
+ description: 'BPFForceTrackPacketsFromIfaces in BPF mode, forces traffic
+ from these interfaces to skip Calico''s iptables NOTRACK rule, allowing
+ traffic from those interfaces to be tracked by Linux conntrack. Should
+ only be used for interfaces that are not used for the Calico fabric. For
+ example, a docker bridge device for non-Calico-networked containers.
+ [Default: docker+]'
+ items:
+ type: string
+ type: array
+ bpfHostConntrackBypass:
+ description: 'BPFHostConntrackBypass Controls whether to bypass Linux
+ conntrack in BPF mode for workloads and services. [Default: true
+ - bypass Linux conntrack]'
+ type: boolean
+ bpfHostNetworkedNATWithoutCTLB:
+ description: 'BPFHostNetworkedNATWithoutCTLB when in BPF mode, controls
+ whether Felix does a NAT without CTLB. This along with BPFConnectTimeLoadBalancing
+ determines the CTLB behavior. [Default: Enabled]'
+ enum:
+ - Enabled
+ - Disabled
+ type: string
+ bpfKubeProxyEndpointSlicesEnabled:
+ description: BPFKubeProxyEndpointSlicesEnabled is deprecated and has
+ no effect. BPF kube-proxy always accepts endpoint slices. This option
+ will be removed in the next release.
+ type: boolean
+ bpfKubeProxyIptablesCleanupEnabled:
+ description: 'BPFKubeProxyIptablesCleanupEnabled, if enabled in BPF
+ mode, Felix will proactively clean up the upstream Kubernetes kube-proxy''s
+ iptables chains. Should only be enabled if kube-proxy is not running. [Default:
+ true]'
+ type: boolean
+ bpfKubeProxyMinSyncPeriod:
+ description: 'BPFKubeProxyMinSyncPeriod, in BPF mode, controls the
+ minimum time between updates to the dataplane for Felix''s embedded
+ kube-proxy. Lower values give reduced set-up latency. Higher values
+ reduce Felix CPU usage by batching up more work. [Default: 1s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ bpfL3IfacePattern:
+ description: BPFL3IfacePattern is a regular expression that allows
+ to list tunnel devices like wireguard or vxlan (i.e., L3 devices)
+ in addition to BPFDataIfacePattern. That is, tunnel interfaces not
+ created by Calico, that Calico workload traffic flows over as well
+ as any interfaces that handle incoming traffic to nodeports and
+ services from outside the cluster.
+ type: string
+ bpfLogFilters:
+ additionalProperties:
+ type: string
+ description: "BPFLogFilters is a map of key=values where the value
+ is a pcap filter expression and the key is an interface name with
+ 'all' denoting all interfaces, 'weps' all workload endpoints and
+ 'heps' all host endpoints. \n When specified as an env var, it accepts
+ a comma-separated list of key=values. [Default: unset - means all
+ debug logs are emitted]"
+ type: object
+ bpfLogLevel:
+ description: 'BPFLogLevel controls the log level of the BPF programs
+ when in BPF dataplane mode. One of "Off", "Info", or "Debug". The
+ logs are emitted to the BPF trace pipe, accessible with the command
+ `tc exec bpf debug`. [Default: Off].'
+ pattern: ^(?i)(Off|Info|Debug)?$
+ type: string
+ bpfMapSizeConntrack:
+ description: 'BPFMapSizeConntrack sets the size for the conntrack
+ map. This map must be large enough to hold an entry for each active
+ connection. Warning: changing the size of the conntrack map can
+ cause disruption.'
+ type: integer
+ bpfMapSizeIPSets:
+ description: BPFMapSizeIPSets sets the size for ipsets map. The IP
+ sets map must be large enough to hold an entry for each endpoint
+ matched by every selector in the source/destination matches in network
+ policy. Selectors such as "all()" can result in large numbers of
+ entries (one entry per endpoint in that case).
+ type: integer
+ bpfMapSizeIfState:
+ description: BPFMapSizeIfState sets the size for ifstate map. The
+ ifstate map must be large enough to hold an entry for each device
+ (host + workloads) on a host.
+ type: integer
+ bpfMapSizeNATAffinity:
+ type: integer
+ bpfMapSizeNATBackend:
+ description: BPFMapSizeNATBackend sets the size for nat back end map.
+ This is the total number of endpoints. This is mostly more than
+ the size of the number of services.
+ type: integer
+ bpfMapSizeNATFrontend:
+ description: BPFMapSizeNATFrontend sets the size for nat front end
+ map. FrontendMap should be large enough to hold an entry for each
+ nodeport, external IP and each port in each service.
+ type: integer
+ bpfMapSizeRoute:
+ description: BPFMapSizeRoute sets the size for the routes map. The
+ routes map should be large enough to hold one entry per workload
+ and a handful of entries per host (enough to cover its own IPs and
+ tunnel IPs).
+ type: integer
+ bpfPSNATPorts:
+ anyOf:
+ - type: integer
+ - type: string
+ description: 'BPFPSNATPorts sets the range from which we randomly
+ pick a port if there is a source port collision. This should be
+ within the ephemeral range as defined by RFC 6056 (1024–65535) and
+ preferably outside the ephemeral ranges used by common operating
+ systems. Linux uses 32768–60999, while others mostly use the IANA
+ defined range 49152–65535. It is not necessarily a problem if this
+ range overlaps with the operating systems. Both ends of the range
+ are inclusive. [Default: 20000:29999]'
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ bpfPolicyDebugEnabled:
+ description: BPFPolicyDebugEnabled when true, Felix records detailed
+ information about the BPF policy programs, which can be examined
+ with the calico-bpf command-line tool.
+ type: boolean
+ chainInsertMode:
+ description: 'ChainInsertMode controls whether Felix hooks the kernel''s
+ top-level iptables chains by inserting a rule at the top of the
+ chain or by appending a rule at the bottom. insert is the safe default
+ since it prevents Calico''s rules from being bypassed. If you switch
+ to append mode, be sure that the other rules in the chains signal
+ acceptance by falling through to the Calico rules, otherwise the
+ Calico policy will be bypassed. [Default: insert]'
+ pattern: ^(?i)(insert|append)?$
+ type: string
+ dataplaneDriver:
+ description: DataplaneDriver filename of the external dataplane driver
+ to use. Only used if UseInternalDataplaneDriver is set to false.
+ type: string
+ dataplaneWatchdogTimeout:
+ description: "DataplaneWatchdogTimeout is the readiness/liveness timeout
+ used for Felix's (internal) dataplane driver. Increase this value
+ if you experience spurious non-ready or non-live events when Felix
+ is under heavy load. Decrease the value to get felix to report non-live
+ or non-ready more quickly. [Default: 90s] \n Deprecated: replaced
+ by the generic HealthTimeoutOverrides."
+ type: string
+ debugDisableLogDropping:
+ type: boolean
+ debugHost:
+ description: DebugHost is the host IP or hostname to bind the debug
+ port to. Only used if DebugPort is set. [Default:localhost]
+ type: string
+ debugMemoryProfilePath:
+ type: string
+ debugPort:
+ description: DebugPort if set, enables Felix's debug HTTP port, which
+ allows memory and CPU profiles to be retrieved. The debug port
+ is not secure, it should not be exposed to the internet.
+ type: integer
+ debugSimulateCalcGraphHangAfter:
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ debugSimulateDataplaneApplyDelay:
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ debugSimulateDataplaneHangAfter:
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ defaultEndpointToHostAction:
+ description: 'DefaultEndpointToHostAction controls what happens to
+ traffic that goes from a workload endpoint to the host itself (after
+ the traffic hits the endpoint egress policy). By default Calico
+ blocks traffic from workload endpoints to the host itself with an
+ iptables "DROP" action. If you want to allow some or all traffic
+ from endpoint to host, set this parameter to RETURN or ACCEPT. Use
+ RETURN if you have your own rules in the iptables "INPUT" chain;
+ Calico will insert its rules at the top of that chain, then "RETURN"
+ packets to the "INPUT" chain once it has completed processing workload
+ endpoint egress policy. Use ACCEPT to unconditionally accept packets
+ from workloads after processing workload endpoint egress policy.
+ [Default: Drop]'
+ pattern: ^(?i)(Drop|Accept|Return)?$
+ type: string
+ deviceRouteProtocol:
+ description: This defines the route protocol added to programmed device
+ routes, by default this will be RTPROT_BOOT when left blank.
+ type: integer
+ deviceRouteSourceAddress:
+ description: This is the IPv4 source address to use on programmed
+ device routes. By default the source address is left blank, leaving
+ the kernel to choose the source address used.
+ type: string
+ deviceRouteSourceAddressIPv6:
+ description: This is the IPv6 source address to use on programmed
+ device routes. By default the source address is left blank, leaving
+ the kernel to choose the source address used.
+ type: string
+ disableConntrackInvalidCheck:
+ type: boolean
+ endpointReportingDelay:
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ endpointReportingEnabled:
+ type: boolean
+ endpointStatusPathPrefix:
+ description: "EndpointStatusPathPrefix is the path to the directory
+ where endpoint status will be written. Endpoint status file reporting
+ is disabled if field is left empty. \n Chosen directory should match
+ the directory used by the CNI for PodStartupDelay. [Default: \"\"]"
+ type: string
+ externalNodesList:
+ description: ExternalNodesCIDRList is a list of CIDR's of external-non-calico-nodes
+ which may source tunnel traffic and have the tunneled traffic be
+ accepted at calico nodes.
+ items:
+ type: string
+ type: array
+ failsafeInboundHostPorts:
+ description: 'FailsafeInboundHostPorts is a list of UDP/TCP ports
+ and CIDRs that Felix will allow incoming traffic to host endpoints
+ on irrespective of the security policy. This is useful to avoid
+ accidentally cutting off a host with incorrect configuration. For
+ back-compatibility, if the protocol is not specified, it defaults
+ to "tcp". If a CIDR is not specified, it will allow traffic from
+ all addresses. To disable all inbound host ports, use the value
+ none. The default value allows ssh access and DHCP. [Default: tcp:22,
+ udp:68, tcp:179, tcp:2379, tcp:2380, tcp:6443, tcp:6666, tcp:6667]'
+ items:
+ description: ProtoPort is combination of protocol, port, and CIDR.
+ Protocol and port must be specified.
+ properties:
+ net:
+ type: string
+ port:
+ type: integer
+ protocol:
+ type: string
+ required:
+ - port
+ - protocol
+ type: object
+ type: array
+ failsafeOutboundHostPorts:
+ description: 'FailsafeOutboundHostPorts is a list of UDP/TCP ports
+ and CIDRs that Felix will allow outgoing traffic from host endpoints
+ to irrespective of the security policy. This is useful to avoid
+ accidentally cutting off a host with incorrect configuration. For
+ back-compatibility, if the protocol is not specified, it defaults
+ to "tcp". If a CIDR is not specified, it will allow traffic from
+ all addresses. To disable all outbound host ports, use the value
+ none. The default value opens etcd''s standard ports to ensure that
+ Felix does not get cut off from etcd as well as allowing DHCP and
+ DNS. [Default: tcp:179, tcp:2379, tcp:2380, tcp:6443, tcp:6666,
+ tcp:6667, udp:53, udp:67]'
+ items:
+ description: ProtoPort is combination of protocol, port, and CIDR.
+ Protocol and port must be specified.
+ properties:
+ net:
+ type: string
+ port:
+ type: integer
+ protocol:
+ type: string
+ required:
+ - port
+ - protocol
+ type: object
+ type: array
+ featureDetectOverride:
+ description: FeatureDetectOverride is used to override feature detection
+ based on auto-detected platform capabilities. Values are specified
+ in a comma separated list with no spaces, example; "SNATFullyRandom=true,MASQFullyRandom=false,RestoreSupportsLock=". "true"
+ or "false" will force the feature, empty or omitted values are auto-detected.
+ pattern: ^([a-zA-Z0-9-_]+=(true|false|),)*([a-zA-Z0-9-_]+=(true|false|))?$
+ type: string
+ featureGates:
+ description: FeatureGates is used to enable or disable tech-preview
+ Calico features. Values are specified in a comma separated list
+ with no spaces, example; "BPFConnectTimeLoadBalancingWorkaround=enabled,XyZ=false".
+ This is used to enable features that are not fully production ready.
+ pattern: ^([a-zA-Z0-9-_]+=([^=]+),)*([a-zA-Z0-9-_]+=([^=]+))?$
+ type: string
+ floatingIPs:
+ description: FloatingIPs configures whether or not Felix will program
+ non-OpenStack floating IP addresses. (OpenStack-derived floating
+ IPs are always programmed, regardless of this setting.)
+ enum:
+ - Enabled
+ - Disabled
+ type: string
+ genericXDPEnabled:
+ description: 'GenericXDPEnabled enables Generic XDP so network cards
+ that don''t support XDP offload or driver modes can use XDP. This
+ is not recommended since it doesn''t provide better performance
+ than iptables. [Default: false]'
+ type: boolean
+ healthEnabled:
+ type: boolean
+ healthHost:
+ type: string
+ healthPort:
+ type: integer
+ healthTimeoutOverrides:
+ description: HealthTimeoutOverrides allows the internal watchdog timeouts
+ of individual subcomponents to be overridden. This is useful for
+ working around "false positive" liveness timeouts that can occur
+ in particularly stressful workloads or if CPU is constrained. For
+ a list of active subcomponents, see Felix's logs.
+ items:
+ properties:
+ name:
+ type: string
+ timeout:
+ type: string
+ required:
+ - name
+ - timeout
+ type: object
+ type: array
+ interfaceExclude:
+ description: 'InterfaceExclude is a comma-separated list of interfaces
+ that Felix should exclude when monitoring for host endpoints. The
+ default value ensures that Felix ignores Kubernetes'' IPVS dummy
+ interface, which is used internally by kube-proxy. If you want to
+ exclude multiple interface names using a single value, the list
+ supports regular expressions. For regular expressions you must wrap
+ the value with ''/''. For example having values ''/^kube/,veth1''
+ will exclude all interfaces that begin with ''kube'' and also the
+ interface ''veth1''. [Default: kube-ipvs0]'
+ type: string
+ interfacePrefix:
+ description: 'InterfacePrefix is the interface name prefix that identifies
+ workload endpoints and so distinguishes them from host endpoint
+ interfaces. Note: in environments other than bare metal, the orchestrators
+ configure this appropriately. For example our Kubernetes and Docker
+ integrations set the ''cali'' value, and our OpenStack integration
+ sets the ''tap'' value. [Default: cali]'
+ type: string
+ interfaceRefreshInterval:
+ description: InterfaceRefreshInterval is the period at which Felix
+ rescans local interfaces to verify their state. The rescan can be
+ disabled by setting the interval to 0.
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ ipipEnabled:
+ description: 'IPIPEnabled overrides whether Felix should configure
+ an IPIP interface on the host. Optional as Felix determines this
+ based on the existing IP pools. [Default: nil (unset)]'
+ type: boolean
+ ipipMTU:
+ description: 'IPIPMTU is the MTU to set on the tunnel device. See
+ Configuring MTU [Default: 1440]'
+ type: integer
+ ipsetsRefreshInterval:
+ description: 'IpsetsRefreshInterval is the period at which Felix re-checks
+ all iptables state to ensure that no other process has accidentally
+ broken Calico''s rules. Set to 0 to disable iptables refresh. [Default:
+ 90s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ iptablesBackend:
+ description: IptablesBackend specifies which backend of iptables will
+ be used. The default is Auto.
+ pattern: ^(?i)(Auto|FelixConfiguration|FelixConfigurationList|Legacy|NFT)?$
+ type: string
+ iptablesFilterAllowAction:
+ pattern: ^(?i)(Accept|Return)?$
+ type: string
+ iptablesFilterDenyAction:
+ description: IptablesFilterDenyAction controls what happens to traffic
+ that is denied by network policy. By default Calico blocks traffic
+ with an iptables "DROP" action. If you want to use "REJECT" action
+ instead you can configure it in here.
+ pattern: ^(?i)(Drop|Reject)?$
+ type: string
+ iptablesLockFilePath:
+ description: 'IptablesLockFilePath is the location of the iptables
+ lock file. You may need to change this if the lock file is not in
+ its standard location (for example if you have mapped it into Felix''s
+ container at a different path). [Default: /run/xtables.lock]'
+ type: string
+ iptablesLockProbeInterval:
+ description: 'IptablesLockProbeInterval is the time that Felix will
+ wait between attempts to acquire the iptables lock if it is not
+ available. Lower values make Felix more responsive when the lock
+ is contended, but use more CPU. [Default: 50ms]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ iptablesLockTimeout:
+ description: 'IptablesLockTimeout is the time that Felix will wait
+ for the iptables lock, or 0, to disable. To use this feature, Felix
+ must share the iptables lock file with all other processes that
+ also take the lock. When running Felix inside a container, this
+ requires the /run directory of the host to be mounted into the calico/node
+ or calico/felix container. [Default: 0s disabled]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ iptablesMangleAllowAction:
+ pattern: ^(?i)(Accept|Return)?$
+ type: string
+ iptablesMarkMask:
+ description: 'IptablesMarkMask is the mask that Felix selects its
+ IPTables Mark bits from. Should be a 32 bit hexadecimal number with
+ at least 8 bits set, none of which clash with any other mark bits
+ in use on the system. [Default: 0xff000000]'
+ format: int32
+ type: integer
+ iptablesNATOutgoingInterfaceFilter:
+ type: string
+ iptablesPostWriteCheckInterval:
+ description: 'IptablesPostWriteCheckInterval is the period after Felix
+ has done a write to the dataplane that it schedules an extra read
+ back in order to check the write was not clobbered by another process.
+ This should only occur if another application on the system doesn''t
+ respect the iptables lock. [Default: 1s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ iptablesRefreshInterval:
+ description: 'IptablesRefreshInterval is the period at which Felix
+ re-checks the IP sets in the dataplane to ensure that no other process
+ has accidentally broken Calico''s rules. Set to 0 to disable IP
+ sets refresh. Note: the default for this value is lower than the
+ other refresh intervals as a workaround for a Linux kernel bug that
+ was fixed in kernel version 4.11. If you are using v4.11 or greater
+ you may want to set this to, a higher value to reduce Felix CPU
+ usage. [Default: 10s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ ipv6Support:
+ description: IPv6Support controls whether Felix enables support for
+ IPv6 (if supported by the in-use dataplane).
+ type: boolean
+ kubeNodePortRanges:
+ description: 'KubeNodePortRanges holds list of port ranges used for
+ service node ports. Only used if felix detects kube-proxy running
+ in ipvs mode. Felix uses these ranges to separate host and workload
+ traffic. [Default: 30000:32767].'
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ logDebugFilenameRegex:
+ description: LogDebugFilenameRegex controls which source code files
+ have their Debug log output included in the logs. Only logs from
+ files with names that match the given regular expression are included. The
+ filter only applies to Debug level logs.
+ type: string
+ logFilePath:
+ description: 'LogFilePath is the full path to the Felix log. Set to
+ none to disable file logging. [Default: /var/log/calico/felix.log]'
+ type: string
+ logPrefix:
+ description: 'LogPrefix is the log prefix that Felix uses when rendering
+ LOG rules. [Default: calico-packet]'
+ type: string
+ logSeverityFile:
+ description: 'LogSeverityFile is the log severity above which logs
+ are sent to the log file. [Default: Info]'
+ pattern: ^(?i)(Debug|Info|Warning|Error|Fatal)?$
+ type: string
+ logSeverityScreen:
+ description: 'LogSeverityScreen is the log severity above which logs
+ are sent to the stdout. [Default: Info]'
+ pattern: ^(?i)(Debug|Info|Warning|Error|Fatal)?$
+ type: string
+ logSeveritySys:
+ description: 'LogSeveritySys is the log severity above which logs
+ are sent to the syslog. Set to None for no logging to syslog. [Default:
+ Info]'
+ pattern: ^(?i)(Debug|Info|Warning|Error|Fatal)?$
+ type: string
+ maxIpsetSize:
+ type: integer
+ metadataAddr:
+ description: 'MetadataAddr is the IP address or domain name of the
+ server that can answer VM queries for cloud-init metadata. In OpenStack,
+ this corresponds to the machine running nova-api (or in Ubuntu,
+ nova-api-metadata). A value of none (case-insensitive) means that
+ Felix should not set up any NAT rule for the metadata path. [Default:
+ 127.0.0.1]'
+ type: string
+ metadataPort:
+ description: 'MetadataPort is the port of the metadata server. This,
+ combined with global.MetadataAddr (if not ''None''), is used to
+ set up a NAT rule, from 169.254.169.254:80 to MetadataAddr:MetadataPort.
+ In most cases this should not need to be changed [Default: 8775].'
+ type: integer
+ mtuIfacePattern:
+ description: MTUIfacePattern is a regular expression that controls
+ which interfaces Felix should scan in order to calculate the host's
+ MTU. This should not match workload interfaces (usually named cali...).
+ type: string
+ natOutgoingAddress:
+ description: NATOutgoingAddress specifies an address to use when performing
+ source NAT for traffic in a natOutgoing pool that is leaving the
+ network. By default the address used is an address on the interface
+ the traffic is leaving on (ie it uses the iptables MASQUERADE target)
+ type: string
+ natPortRange:
+ anyOf:
+ - type: integer
+ - type: string
+ description: NATPortRange specifies the range of ports that is used
+ for port mapping when doing outgoing NAT. When unset the default
+ behavior of the network stack is used.
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ netlinkTimeout:
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ openstackRegion:
+ description: 'OpenstackRegion is the name of the region that a particular
+ Felix belongs to. In a multi-region Calico/OpenStack deployment,
+ this must be configured somehow for each Felix (here in the datamodel,
+ or in felix.cfg or the environment on each compute node), and must
+ match the [calico] openstack_region value configured in neutron.conf
+ on each node. [Default: Empty]'
+ type: string
+ policySyncPathPrefix:
+ description: 'PolicySyncPathPrefix is used to by Felix to communicate
+ policy changes to external services, like Application layer policy.
+ [Default: Empty]'
+ type: string
+ prometheusGoMetricsEnabled:
+ description: 'PrometheusGoMetricsEnabled disables Go runtime metrics
+ collection, which the Prometheus client does by default, when set
+ to false. This reduces the number of metrics reported, reducing
+ Prometheus load. [Default: true]'
+ type: boolean
+ prometheusMetricsEnabled:
+ description: 'PrometheusMetricsEnabled enables the Prometheus metrics
+ server in Felix if set to true. [Default: false]'
+ type: boolean
+ prometheusMetricsHost:
+ description: 'PrometheusMetricsHost is the host that the Prometheus
+ metrics server should bind to. [Default: empty]'
+ type: string
+ prometheusMetricsPort:
+ description: 'PrometheusMetricsPort is the TCP port that the Prometheus
+ metrics server should bind to. [Default: 9091]'
+ type: integer
+ prometheusProcessMetricsEnabled:
+ description: 'PrometheusProcessMetricsEnabled disables process metrics
+ collection, which the Prometheus client does by default, when set
+ to false. This reduces the number of metrics reported, reducing
+ Prometheus load. [Default: true]'
+ type: boolean
+ prometheusWireGuardMetricsEnabled:
+ description: 'PrometheusWireGuardMetricsEnabled disables wireguard
+ metrics collection, which the Prometheus client does by default,
+ when set to false. This reduces the number of metrics reported,
+ reducing Prometheus load. [Default: true]'
+ type: boolean
+ removeExternalRoutes:
+ description: Whether or not to remove device routes that have not
+ been programmed by Felix. Disabling this will allow external applications
+ to also add device routes. This is enabled by default which means
+ we will remove externally added routes.
+ type: boolean
+ reportingInterval:
+ description: 'ReportingInterval is the interval at which Felix reports
+ its status into the datastore or 0 to disable. Must be non-zero
+ in OpenStack deployments. [Default: 30s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ reportingTTL:
+ description: 'ReportingTTL is the time-to-live setting for process-wide
+ status reports. [Default: 90s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ routeRefreshInterval:
+ description: 'RouteRefreshInterval is the period at which Felix re-checks
+ the routes in the dataplane to ensure that no other process has
+ accidentally broken Calico''s rules. Set to 0 to disable route refresh.
+ [Default: 90s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ routeSource:
+ description: 'RouteSource configures where Felix gets its routing
+ information. - WorkloadIPs: use workload endpoints to construct
+ routes. - CalicoIPAM: the default - use IPAM data to construct routes.'
+ pattern: ^(?i)(WorkloadIPs|CalicoIPAM)?$
+ type: string
+ routeSyncDisabled:
+ description: RouteSyncDisabled will disable all operations performed
+ on the route table. Set to true to run in network-policy mode only.
+ type: boolean
+ routeTableRange:
+ description: Deprecated in favor of RouteTableRanges. Calico programs
+ additional Linux route tables for various purposes. RouteTableRange
+ specifies the indices of the route tables that Calico should use.
+ properties:
+ max:
+ type: integer
+ min:
+ type: integer
+ required:
+ - max
+ - min
+ type: object
+ routeTableRanges:
+ description: Calico programs additional Linux route tables for various
+ purposes. RouteTableRanges specifies a set of table index ranges
+ that Calico should use. Deprecates`RouteTableRange`, overrides `RouteTableRange`.
+ items:
+ properties:
+ max:
+ type: integer
+ min:
+ type: integer
+ required:
+ - max
+ - min
+ type: object
+ type: array
+ serviceLoopPrevention:
+ description: 'When service IP advertisement is enabled, prevent routing
+ loops to service IPs that are not in use, by dropping or rejecting
+ packets that do not get DNAT''d by kube-proxy. Unless set to "Disabled",
+ in which case such routing loops continue to be allowed. [Default:
+ Drop]'
+ pattern: ^(?i)(Drop|Reject|Disabled)?$
+ type: string
+ sidecarAccelerationEnabled:
+ description: 'SidecarAccelerationEnabled enables experimental sidecar
+ acceleration [Default: false]'
+ type: boolean
+ usageReportingEnabled:
+ description: 'UsageReportingEnabled reports anonymous Calico version
+ number and cluster size to projectcalico.org. Logs warnings returned
+ by the usage server. For example, if a significant security vulnerability
+ has been discovered in the version of Calico being used. [Default:
+ true]'
+ type: boolean
+ usageReportingInitialDelay:
+ description: 'UsageReportingInitialDelay controls the minimum delay
+ before Felix makes a report. [Default: 300s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ usageReportingInterval:
+ description: 'UsageReportingInterval controls the interval at which
+ Felix makes reports. [Default: 86400s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ useInternalDataplaneDriver:
+ description: UseInternalDataplaneDriver, if true, Felix will use its
+ internal dataplane programming logic. If false, it will launch
+ an external dataplane driver and communicate with it over protobuf.
+ type: boolean
+ vxlanEnabled:
+ description: 'VXLANEnabled overrides whether Felix should create the
+ VXLAN tunnel device for IPv4 VXLAN networking. Optional as Felix
+ determines this based on the existing IP pools. [Default: nil (unset)]'
+ type: boolean
+ vxlanMTU:
+ description: 'VXLANMTU is the MTU to set on the IPv4 VXLAN tunnel
+ device. See Configuring MTU [Default: 1410]'
+ type: integer
+ vxlanMTUV6:
+ description: 'VXLANMTUV6 is the MTU to set on the IPv6 VXLAN tunnel
+ device. See Configuring MTU [Default: 1390]'
+ type: integer
+ vxlanPort:
+ type: integer
+ vxlanVNI:
+ type: integer
+ windowsManageFirewallRules:
+ description: 'WindowsManageFirewallRules configures whether or not
+ Felix will program Windows Firewall rules. (to allow inbound access
+ to its own metrics ports) [Default: Disabled]'
+ enum:
+ - Enabled
+ - Disabled
+ type: string
+ wireguardEnabled:
+ description: 'WireguardEnabled controls whether Wireguard is enabled
+ for IPv4 (encapsulating IPv4 traffic over an IPv4 underlay network).
+ [Default: false]'
+ type: boolean
+ wireguardEnabledV6:
+ description: 'WireguardEnabledV6 controls whether Wireguard is enabled
+ for IPv6 (encapsulating IPv6 traffic over an IPv6 underlay network).
+ [Default: false]'
+ type: boolean
+ wireguardHostEncryptionEnabled:
+ description: 'WireguardHostEncryptionEnabled controls whether Wireguard
+ host-to-host encryption is enabled. [Default: false]'
+ type: boolean
+ wireguardInterfaceName:
+ description: 'WireguardInterfaceName specifies the name to use for
+ the IPv4 Wireguard interface. [Default: wireguard.cali]'
+ type: string
+ wireguardInterfaceNameV6:
+ description: 'WireguardInterfaceNameV6 specifies the name to use for
+ the IPv6 Wireguard interface. [Default: wg-v6.cali]'
+ type: string
+ wireguardKeepAlive:
+ description: 'WireguardKeepAlive controls Wireguard PersistentKeepalive
+ option. Set 0 to disable. [Default: 0]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ wireguardListeningPort:
+ description: 'WireguardListeningPort controls the listening port used
+ by IPv4 Wireguard. [Default: 51820]'
+ type: integer
+ wireguardListeningPortV6:
+ description: 'WireguardListeningPortV6 controls the listening port
+ used by IPv6 Wireguard. [Default: 51821]'
+ type: integer
+ wireguardMTU:
+ description: 'WireguardMTU controls the MTU on the IPv4 Wireguard
+ interface. See Configuring MTU [Default: 1440]'
+ type: integer
+ wireguardMTUV6:
+ description: 'WireguardMTUV6 controls the MTU on the IPv6 Wireguard
+ interface. See Configuring MTU [Default: 1420]'
+ type: integer
+ wireguardRoutingRulePriority:
+ description: 'WireguardRoutingRulePriority controls the priority value
+ to use for the Wireguard routing rule. [Default: 99]'
+ type: integer
+ wireguardThreadingEnabled:
+ description: 'WireguardThreadingEnabled controls whether Wireguard
+ has NAPI threading enabled. [Default: false]'
+ type: boolean
+ workloadSourceSpoofing:
+ description: WorkloadSourceSpoofing controls whether pods can use
+ the allowedSourcePrefixes annotation to send traffic with a source
+ IP address that is not theirs. This is disabled by default. When
+ set to "Any", pods can request any prefix.
+ pattern: ^(?i)(Disabled|Any)?$
+ type: string
+ xdpEnabled:
+ description: 'XDPEnabled enables XDP acceleration for suitable untracked
+ incoming deny rules. [Default: true]'
+ type: boolean
+ xdpRefreshInterval:
+ description: 'XDPRefreshInterval is the period at which Felix re-checks
+ all XDP state to ensure that no other process has accidentally broken
+ Calico''s BPF maps or attached programs. Set to 0 to disable XDP
+ refresh. [Default: 90s]'
+ pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
+ type: string
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: globalnetworkpolicies.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: GlobalNetworkPolicy
+ listKind: GlobalNetworkPolicyList
+ plural: globalnetworkpolicies
+ singular: globalnetworkpolicy
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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:
+ properties:
+ applyOnForward:
+ description: ApplyOnForward indicates to apply the rules in this policy
+ on forward traffic.
+ type: boolean
+ doNotTrack:
+ description: DoNotTrack indicates whether packets matched by the rules
+ in this policy should go through the data plane's connection tracking,
+ such as Linux conntrack. If True, the rules in this policy are
+ applied before any data plane connection tracking, and packets allowed
+ by this policy are marked as not to be tracked.
+ type: boolean
+ egress:
+ description: The ordered set of egress rules. Each rule contains
+ a set of packet match criteria and a corresponding action to apply.
+ items:
+ description: "A Rule encapsulates a set of match criteria and an
+ action. Both selector-based security Policy and security Profiles
+ reference rules - separated out as a list of rules for both ingress
+ and egress packet matching. \n Each positive match criteria has
+ a negated version, prefixed with \"Not\". All the match criteria
+ within a rule must be satisfied for a packet to match. A single
+ rule can contain the positive and negative version of a match
+ and both must be satisfied for the rule to match."
+ properties:
+ action:
+ type: string
+ destination:
+ description: Destination contains the match criteria that apply
+ to destination entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ http:
+ description: HTTP contains match criteria that apply to HTTP
+ requests.
+ properties:
+ methods:
+ description: Methods is an optional field that restricts
+ the rule to apply only to HTTP requests that use one of
+ the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
+ methods are OR'd together.
+ items:
+ type: string
+ type: array
+ paths:
+ description: 'Paths is an optional field that restricts
+ the rule to apply to HTTP requests that use one of the
+ listed HTTP Paths. Multiple paths are OR''d together.
+ e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
+ ONLY specify either a `exact` or a `prefix` match. The
+ validator will check for it.'
+ items:
+ description: 'HTTPPath specifies an HTTP path to match.
+ It may be either of the form: exact: <path>: which matches
+ the path exactly or prefix: <path-prefix>: which matches
+ the path prefix'
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ type: object
+ type: array
+ type: object
+ icmp:
+ description: ICMP is an optional field that restricts the rule
+ to apply to a specific type and code of ICMP traffic. This
+ should only be specified if the Protocol field is set to "ICMP"
+ or "ICMPv6".
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ ipVersion:
+ description: IPVersion is an optional field that restricts the
+ rule to only match a specific IP version.
+ type: integer
+ metadata:
+ description: Metadata contains additional information for this
+ rule
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: Annotations is a set of key value pairs that
+ give extra information about the rule
+ type: object
+ type: object
+ notICMP:
+ description: NotICMP is the negated version of the ICMP field.
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ notProtocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: NotProtocol is the negated version of the Protocol
+ field.
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ protocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: "Protocol is an optional field that restricts the
+ rule to only apply to traffic of a specific IP protocol. Required
+ if any of the EntityRules contain Ports (because ports only
+ apply to certain protocols). \n Must be one of these string
+ values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
+ \"UDPLite\" or an integer in the range 1-255."
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ source:
+ description: Source contains the match criteria that apply to
+ source entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ required:
+ - action
+ type: object
+ type: array
+ ingress:
+ description: The ordered set of ingress rules. Each rule contains
+ a set of packet match criteria and a corresponding action to apply.
+ items:
+ description: "A Rule encapsulates a set of match criteria and an
+ action. Both selector-based security Policy and security Profiles
+ reference rules - separated out as a list of rules for both ingress
+ and egress packet matching. \n Each positive match criteria has
+ a negated version, prefixed with \"Not\". All the match criteria
+ within a rule must be satisfied for a packet to match. A single
+ rule can contain the positive and negative version of a match
+ and both must be satisfied for the rule to match."
+ properties:
+ action:
+ type: string
+ destination:
+ description: Destination contains the match criteria that apply
+ to destination entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ http:
+ description: HTTP contains match criteria that apply to HTTP
+ requests.
+ properties:
+ methods:
+ description: Methods is an optional field that restricts
+ the rule to apply only to HTTP requests that use one of
+ the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
+ methods are OR'd together.
+ items:
+ type: string
+ type: array
+ paths:
+ description: 'Paths is an optional field that restricts
+ the rule to apply to HTTP requests that use one of the
+ listed HTTP Paths. Multiple paths are OR''d together.
+ e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
+ ONLY specify either a `exact` or a `prefix` match. The
+ validator will check for it.'
+ items:
+ description: 'HTTPPath specifies an HTTP path to match.
+ It may be either of the form: exact: <path>: which matches
+ the path exactly or prefix: <path-prefix>: which matches
+ the path prefix'
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ type: object
+ type: array
+ type: object
+ icmp:
+ description: ICMP is an optional field that restricts the rule
+ to apply to a specific type and code of ICMP traffic. This
+ should only be specified if the Protocol field is set to "ICMP"
+ or "ICMPv6".
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ ipVersion:
+ description: IPVersion is an optional field that restricts the
+ rule to only match a specific IP version.
+ type: integer
+ metadata:
+ description: Metadata contains additional information for this
+ rule
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: Annotations is a set of key value pairs that
+ give extra information about the rule
+ type: object
+ type: object
+ notICMP:
+ description: NotICMP is the negated version of the ICMP field.
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ notProtocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: NotProtocol is the negated version of the Protocol
+ field.
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ protocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: "Protocol is an optional field that restricts the
+ rule to only apply to traffic of a specific IP protocol. Required
+ if any of the EntityRules contain Ports (because ports only
+ apply to certain protocols). \n Must be one of these string
+ values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
+ \"UDPLite\" or an integer in the range 1-255."
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ source:
+ description: Source contains the match criteria that apply to
+ source entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ required:
+ - action
+ type: object
+ type: array
+ namespaceSelector:
+ description: NamespaceSelector is an optional field for an expression
+ used to select a pod based on namespaces.
+ type: string
+ order:
+ description: Order is an optional field that specifies the order in
+ which the policy is applied. Policies with higher "order" are applied
+ after those with lower order. If the order is omitted, it may be
+ considered to be "infinite" - i.e. the policy will be applied last. Policies
+ with identical order will be applied in alphanumerical order based
+ on the Policy "Name".
+ type: number
+ performanceHints:
+ description: "PerformanceHints contains a list of hints to Calico's
+ policy engine to help process the policy more efficiently. Hints
+ never change the enforcement behaviour of the policy. \n Currently,
+ the only available hint is \"AssumeNeededOnEveryNode\". When that
+ hint is set on a policy, Felix will act as if the policy matches
+ a local endpoint even if it does not. This is useful for \"preloading\"
+ any large static policies that are known to be used on every node.
+ If the policy is _not_ used on a particular node then the work done
+ to preload the policy (and to maintain it) is wasted."
+ items:
+ type: string
+ type: array
+ preDNAT:
+ description: PreDNAT indicates to apply the rules in this policy before
+ any DNAT.
+ type: boolean
+ selector:
+ description: "The selector is an expression used to pick out the endpoints
+ that the policy should be applied to. \n Selector expressions follow
+ this syntax: \n \tlabel == \"string_literal\" -> comparison, e.g.
+ my_label == \"foo bar\" \tlabel != \"string_literal\" -> not
+ equal; also matches if label is not present \tlabel in { \"a\",
+ \"b\", \"c\", ... } -> true if the value of label X is one of
+ \"a\", \"b\", \"c\" \tlabel not in { \"a\", \"b\", \"c\", ... }
+ \ -> true if the value of label X is not one of \"a\", \"b\", \"c\"
+ \thas(label_name) -> True if that label is present \t! expr ->
+ negation of expr \texpr && expr -> Short-circuit and \texpr ||
+ expr -> Short-circuit or \t( expr ) -> parens for grouping \tall()
+ or the empty selector -> matches all endpoints. \n Label names are
+ allowed to contain alphanumerics, -, _ and /. String literals are
+ more permissive but they do not support escape characters. \n Examples
+ (with made-up labels): \n \ttype == \"webserver\" && deployment
+ == \"prod\" \ttype in {\"frontend\", \"backend\"} \tdeployment !=
+ \"dev\" \t! has(label_name)"
+ type: string
+ serviceAccountSelector:
+ description: ServiceAccountSelector is an optional field for an expression
+ used to select a pod based on service accounts.
+ type: string
+ types:
+ description: "Types indicates whether this policy applies to ingress,
+ or to egress, or to both. When not explicitly specified (and so
+ the value on creation is empty or nil), Calico defaults Types according
+ to what Ingress and Egress rules are present in the policy. The
+ default is: \n - [ PolicyTypeIngress ], if there are no Egress rules
+ (including the case where there are also no Ingress rules) \n
+ - [ PolicyTypeEgress ], if there are Egress rules but no Ingress
+ rules \n - [ PolicyTypeIngress, PolicyTypeEgress ], if there are
+ both Ingress and Egress rules. \n When the policy is read back again,
+ Types will always be one of these values, never empty or nil."
+ items:
+ description: PolicyType enumerates the possible values of the PolicySpec
+ Types field.
+ type: string
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: globalnetworksets.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: GlobalNetworkSet
+ listKind: GlobalNetworkSetList
+ plural: globalnetworksets
+ singular: globalnetworkset
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: GlobalNetworkSet contains a set of arbitrary IP sub-networks/CIDRs
+ that share labels to allow rules to refer to them via selectors. The labels
+ of GlobalNetworkSet are not namespaced.
+ 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: GlobalNetworkSetSpec contains the specification for a NetworkSet
+ resource.
+ properties:
+ nets:
+ description: The list of IP networks that belong to this set.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: hostendpoints.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: HostEndpoint
+ listKind: HostEndpointList
+ plural: hostendpoints
+ singular: hostendpoint
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: HostEndpointSpec contains the specification for a HostEndpoint
+ resource.
+ properties:
+ expectedIPs:
+ description: "The expected IP addresses (IPv4 and IPv6) of the endpoint.
+ If \"InterfaceName\" is not present, Calico will look for an interface
+ matching any of the IPs in the list and apply policy to that. Note:
+ \tWhen using the selector match criteria in an ingress or egress
+ security Policy \tor Profile, Calico converts the selector into
+ a set of IP addresses. For host \tendpoints, the ExpectedIPs field
+ is used for that purpose. (If only the interface \tname is specified,
+ Calico does not learn the IPs of the interface for use in match
+ \tcriteria.)"
+ items:
+ type: string
+ type: array
+ interfaceName:
+ description: "Either \"*\", or the name of a specific Linux interface
+ to apply policy to; or empty. \"*\" indicates that this HostEndpoint
+ governs all traffic to, from or through the default network namespace
+ of the host named by the \"Node\" field; entering and leaving that
+ namespace via any interface, including those from/to non-host-networked
+ local workloads. \n If InterfaceName is not \"*\", this HostEndpoint
+ only governs traffic that enters or leaves the host through the
+ specific interface named by InterfaceName, or - when InterfaceName
+ is empty - through the specific interface that has one of the IPs
+ in ExpectedIPs. Therefore, when InterfaceName is empty, at least
+ one expected IP must be specified. Only external interfaces (such
+ as \"eth0\") are supported here; it isn't possible for a HostEndpoint
+ to protect traffic through a specific local workload interface.
+ \n Note: Only some kinds of policy are implemented for \"*\" HostEndpoints;
+ initially just pre-DNAT policy. Please check Calico documentation
+ for the latest position."
+ type: string
+ node:
+ description: The node name identifying the Calico node instance.
+ type: string
+ ports:
+ description: Ports contains the endpoint's named ports, which may
+ be referenced in security policy rules.
+ items:
+ properties:
+ name:
+ type: string
+ port:
+ type: integer
+ protocol:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ required:
+ - name
+ - port
+ - protocol
+ type: object
+ type: array
+ profiles:
+ description: A list of identifiers of security Profile objects that
+ apply to this endpoint. Each profile is applied in the order that
+ they appear in this list. Profile rules are applied after the selector-based
+ security policy.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ipamblocks.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: IPAMBlock
+ listKind: IPAMBlockList
+ plural: ipamblocks
+ singular: ipamblock
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: IPAMBlockSpec contains the specification for an IPAMBlock
+ resource.
+ properties:
+ affinity:
+ description: Affinity of the block, if this block has one. If set,
+ it will be of the form "host:<hostname>". If not set, this block
+ is not affine to a host.
+ type: string
+ allocations:
+ description: Array of allocations in-use within this block. nil entries
+ mean the allocation is free. For non-nil entries at index i, the
+ index is the ordinal of the allocation within this block and the
+ value is the index of the associated attributes in the Attributes
+ array.
+ items:
+ type: integer
+ # TODO: This nullable is manually added in. We should update controller-gen
+ # to handle []*int properly itself.
+ nullable: true
+ type: array
+ attributes:
+ description: Attributes is an array of arbitrary metadata associated
+ with allocations in the block. To find attributes for a given allocation,
+ use the value of the allocation's entry in the Allocations array
+ as the index of the element in this array.
+ items:
+ properties:
+ handle_id:
+ type: string
+ secondary:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ type: array
+ cidr:
+ description: The block's CIDR.
+ type: string
+ deleted:
+ description: Deleted is an internal boolean used to workaround a limitation
+ in the Kubernetes API whereby deletion will not return a conflict
+ error if the block has been updated. It should not be set manually.
+ type: boolean
+ sequenceNumber:
+ default: 0
+ description: We store a sequence number that is updated each time
+ the block is written. Each allocation will also store the sequence
+ number of the block at the time of its creation. When releasing
+ an IP, passing the sequence number associated with the allocation
+ allows us to protect against a race condition and ensure the IP
+ hasn't been released and re-allocated since the release request.
+ format: int64
+ type: integer
+ sequenceNumberForAllocation:
+ additionalProperties:
+ format: int64
+ type: integer
+ description: Map of allocated ordinal within the block to sequence
+ number of the block at the time of allocation. Kubernetes does not
+ allow numerical keys for maps, so the key is cast to a string.
+ type: object
+ strictAffinity:
+ description: StrictAffinity on the IPAMBlock is deprecated and no
+ longer used by the code. Use IPAMConfig StrictAffinity instead.
+ type: boolean
+ unallocated:
+ description: Unallocated is an ordered list of allocations which are
+ free in the block.
+ items:
+ type: integer
+ type: array
+ required:
+ - allocations
+ - attributes
+ - cidr
+ - strictAffinity
+ - unallocated
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ipamconfigs.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: IPAMConfig
+ listKind: IPAMConfigList
+ plural: ipamconfigs
+ singular: ipamconfig
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: IPAMConfigSpec contains the specification for an IPAMConfig
+ resource.
+ properties:
+ autoAllocateBlocks:
+ type: boolean
+ maxBlocksPerHost:
+ description: MaxBlocksPerHost, if non-zero, is the max number of blocks
+ that can be affine to each host.
+ maximum: 2147483647
+ minimum: 0
+ type: integer
+ strictAffinity:
+ type: boolean
+ required:
+ - autoAllocateBlocks
+ - strictAffinity
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ipamhandles.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: IPAMHandle
+ listKind: IPAMHandleList
+ plural: ipamhandles
+ singular: ipamhandle
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: IPAMHandleSpec contains the specification for an IPAMHandle
+ resource.
+ properties:
+ block:
+ additionalProperties:
+ type: integer
+ type: object
+ deleted:
+ type: boolean
+ handleID:
+ type: string
+ required:
+ - block
+ - handleID
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: IPPool
+ listKind: IPPoolList
+ plural: ippools
+ singular: ippool
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: IPPoolSpec contains the specification for an IPPool resource.
+ properties:
+ allowedUses:
+ description: AllowedUse controls what the IP pool will be used for. If
+ not specified or empty, defaults to ["Tunnel", "Workload"] for back-compatibility
+ items:
+ type: string
+ type: array
+ blockSize:
+ description: The block size to use for IP address assignments from
+ this pool. Defaults to 26 for IPv4 and 122 for IPv6.
+ type: integer
+ cidr:
+ description: The pool CIDR.
+ type: string
+ disableBGPExport:
+ description: 'Disable exporting routes from this IP Pool''s CIDR over
+ BGP. [Default: false]'
+ type: boolean
+ disabled:
+ description: When disabled is true, Calico IPAM will not assign addresses
+ from this pool.
+ type: boolean
+ ipip:
+ description: 'Deprecated: this field is only used for APIv1 backwards
+ compatibility. Setting this field is not allowed, this field is
+ for internal use only.'
+ properties:
+ enabled:
+ description: When enabled is true, ipip tunneling will be used
+ to deliver packets to destinations within this pool.
+ type: boolean
+ mode:
+ description: The IPIP mode. This can be one of "always" or "cross-subnet". A
+ mode of "always" will also use IPIP tunneling for routing to
+ destination IP addresses within this pool. A mode of "cross-subnet"
+ will only use IPIP tunneling when the destination node is on
+ a different subnet to the originating node. The default value
+ (if not specified) is "always".
+ type: string
+ type: object
+ ipipMode:
+ description: Contains configuration for IPIP tunneling for this pool.
+ If not specified, then this is defaulted to "Never" (i.e. IPIP tunneling
+ is disabled).
+ type: string
+ nat-outgoing:
+ description: 'Deprecated: this field is only used for APIv1 backwards
+ compatibility. Setting this field is not allowed, this field is
+ for internal use only.'
+ type: boolean
+ natOutgoing:
+ description: When natOutgoing is true, packets sent from Calico networked
+ containers in this pool to destinations outside of this pool will
+ be masqueraded.
+ type: boolean
+ nodeSelector:
+ description: Allows IPPool to allocate for a specific node by label
+ selector.
+ type: string
+ vxlanMode:
+ description: Contains configuration for VXLAN tunneling for this pool.
+ If not specified, then this is defaulted to "Never" (i.e. VXLAN
+ tunneling is disabled).
+ type: string
+ required:
+ - cidr
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: (devel)
+ creationTimestamp: null
+ name: ipreservations.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: IPReservation
+ listKind: IPReservationList
+ plural: ipreservations
+ singular: ipreservation
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: IPReservationSpec contains the specification for an IPReservation
+ resource.
+ properties:
+ reservedCIDRs:
+ description: ReservedCIDRs is a list of CIDRs and/or IP addresses
+ that Calico IPAM will exclude from new allocations.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: kubecontrollersconfigurations.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: KubeControllersConfiguration
+ listKind: KubeControllersConfigurationList
+ plural: kubecontrollersconfigurations
+ singular: kubecontrollersconfiguration
+ preserveUnknownFields: false
+ scope: Cluster
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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: KubeControllersConfigurationSpec contains the values of the
+ Kubernetes controllers configuration.
+ properties:
+ controllers:
+ description: Controllers enables and configures individual Kubernetes
+ controllers
+ properties:
+ namespace:
+ description: Namespace enables and configures the namespace controller.
+ Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform reconciliation
+ with the Calico datastore. [Default: 5m]'
+ type: string
+ type: object
+ node:
+ description: Node enables and configures the node controller.
+ Enabled by default, set to nil to disable.
+ properties:
+ hostEndpoint:
+ description: HostEndpoint controls syncing nodes to host endpoints.
+ Disabled by default, set to nil to disable.
+ properties:
+ autoCreate:
+ description: 'AutoCreate enables automatic creation of
+ host endpoints for every node. [Default: Disabled]'
+ type: string
+ type: object
+ leakGracePeriod:
+ description: 'LeakGracePeriod is the period used by the controller
+ to determine if an IP address has been leaked. Set to 0
+ to disable IP garbage collection. [Default: 15m]'
+ type: string
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform reconciliation
+ with the Calico datastore. [Default: 5m]'
+ type: string
+ syncLabels:
+ description: 'SyncLabels controls whether to copy Kubernetes
+ node labels to Calico nodes. [Default: Enabled]'
+ type: string
+ type: object
+ policy:
+ description: Policy enables and configures the policy controller.
+ Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform reconciliation
+ with the Calico datastore. [Default: 5m]'
+ type: string
+ type: object
+ serviceAccount:
+ description: ServiceAccount enables and configures the service
+ account controller. Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform reconciliation
+ with the Calico datastore. [Default: 5m]'
+ type: string
+ type: object
+ workloadEndpoint:
+ description: WorkloadEndpoint enables and configures the workload
+ endpoint controller. Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform reconciliation
+ with the Calico datastore. [Default: 5m]'
+ type: string
+ type: object
+ type: object
+ debugProfilePort:
+ description: DebugProfilePort configures the port to serve memory
+ and cpu profiles on. If not specified, profiling is disabled.
+ format: int32
+ type: integer
+ etcdV3CompactionPeriod:
+ description: 'EtcdV3CompactionPeriod is the period between etcdv3
+ compaction requests. Set to 0 to disable. [Default: 10m]'
+ type: string
+ healthChecks:
+ description: 'HealthChecks enables or disables support for health
+ checks [Default: Enabled]'
+ type: string
+ logSeverityScreen:
+ description: 'LogSeverityScreen is the log severity above which logs
+ are sent to the stdout. [Default: Info]'
+ type: string
+ prometheusMetricsPort:
+ description: 'PrometheusMetricsPort is the TCP port that the Prometheus
+ metrics server should bind to. Set to 0 to disable. [Default: 9094]'
+ type: integer
+ required:
+ - controllers
+ type: object
+ status:
+ description: KubeControllersConfigurationStatus represents the status
+ of the configuration. It's useful for admins to be able to see the actual
+ config that was applied, which can be modified by environment variables
+ on the kube-controllers process.
+ properties:
+ environmentVars:
+ additionalProperties:
+ type: string
+ description: EnvironmentVars contains the environment variables on
+ the kube-controllers that influenced the RunningConfig.
+ type: object
+ runningConfig:
+ description: RunningConfig contains the effective config that is running
+ in the kube-controllers pod, after merging the API resource with
+ any environment variables.
+ properties:
+ controllers:
+ description: Controllers enables and configures individual Kubernetes
+ controllers
+ properties:
+ namespace:
+ description: Namespace enables and configures the namespace
+ controller. Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform
+ reconciliation with the Calico datastore. [Default:
+ 5m]'
+ type: string
+ type: object
+ node:
+ description: Node enables and configures the node controller.
+ Enabled by default, set to nil to disable.
+ properties:
+ hostEndpoint:
+ description: HostEndpoint controls syncing nodes to host
+ endpoints. Disabled by default, set to nil to disable.
+ properties:
+ autoCreate:
+ description: 'AutoCreate enables automatic creation
+ of host endpoints for every node. [Default: Disabled]'
+ type: string
+ type: object
+ leakGracePeriod:
+ description: 'LeakGracePeriod is the period used by the
+ controller to determine if an IP address has been leaked.
+ Set to 0 to disable IP garbage collection. [Default:
+ 15m]'
+ type: string
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform
+ reconciliation with the Calico datastore. [Default:
+ 5m]'
+ type: string
+ syncLabels:
+ description: 'SyncLabels controls whether to copy Kubernetes
+ node labels to Calico nodes. [Default: Enabled]'
+ type: string
+ type: object
+ policy:
+ description: Policy enables and configures the policy controller.
+ Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform
+ reconciliation with the Calico datastore. [Default:
+ 5m]'
+ type: string
+ type: object
+ serviceAccount:
+ description: ServiceAccount enables and configures the service
+ account controller. Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform
+ reconciliation with the Calico datastore. [Default:
+ 5m]'
+ type: string
+ type: object
+ workloadEndpoint:
+ description: WorkloadEndpoint enables and configures the workload
+ endpoint controller. Enabled by default, set to nil to disable.
+ properties:
+ reconcilerPeriod:
+ description: 'ReconcilerPeriod is the period to perform
+ reconciliation with the Calico datastore. [Default:
+ 5m]'
+ type: string
+ type: object
+ type: object
+ debugProfilePort:
+ description: DebugProfilePort configures the port to serve memory
+ and cpu profiles on. If not specified, profiling is disabled.
+ format: int32
+ type: integer
+ etcdV3CompactionPeriod:
+ description: 'EtcdV3CompactionPeriod is the period between etcdv3
+ compaction requests. Set to 0 to disable. [Default: 10m]'
+ type: string
+ healthChecks:
+ description: 'HealthChecks enables or disables support for health
+ checks [Default: Enabled]'
+ type: string
+ logSeverityScreen:
+ description: 'LogSeverityScreen is the log severity above which
+ logs are sent to the stdout. [Default: Info]'
+ type: string
+ prometheusMetricsPort:
+ description: 'PrometheusMetricsPort is the TCP port that the Prometheus
+ metrics server should bind to. Set to 0 to disable. [Default:
+ 9094]'
+ type: integer
+ required:
+ - controllers
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: NetworkPolicy
+ listKind: NetworkPolicyList
+ plural: networkpolicies
+ singular: networkpolicy
+ preserveUnknownFields: false
+ scope: Namespaced
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ 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:
+ properties:
+ egress:
+ description: The ordered set of egress rules. Each rule contains
+ a set of packet match criteria and a corresponding action to apply.
+ items:
+ description: "A Rule encapsulates a set of match criteria and an
+ action. Both selector-based security Policy and security Profiles
+ reference rules - separated out as a list of rules for both ingress
+ and egress packet matching. \n Each positive match criteria has
+ a negated version, prefixed with \"Not\". All the match criteria
+ within a rule must be satisfied for a packet to match. A single
+ rule can contain the positive and negative version of a match
+ and both must be satisfied for the rule to match."
+ properties:
+ action:
+ type: string
+ destination:
+ description: Destination contains the match criteria that apply
+ to destination entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ http:
+ description: HTTP contains match criteria that apply to HTTP
+ requests.
+ properties:
+ methods:
+ description: Methods is an optional field that restricts
+ the rule to apply only to HTTP requests that use one of
+ the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
+ methods are OR'd together.
+ items:
+ type: string
+ type: array
+ paths:
+ description: 'Paths is an optional field that restricts
+ the rule to apply to HTTP requests that use one of the
+ listed HTTP Paths. Multiple paths are OR''d together.
+ e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
+ ONLY specify either a `exact` or a `prefix` match. The
+ validator will check for it.'
+ items:
+ description: 'HTTPPath specifies an HTTP path to match.
+ It may be either of the form: exact: <path>: which matches
+ the path exactly or prefix: <path-prefix>: which matches
+ the path prefix'
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ type: object
+ type: array
+ type: object
+ icmp:
+ description: ICMP is an optional field that restricts the rule
+ to apply to a specific type and code of ICMP traffic. This
+ should only be specified if the Protocol field is set to "ICMP"
+ or "ICMPv6".
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ ipVersion:
+ description: IPVersion is an optional field that restricts the
+ rule to only match a specific IP version.
+ type: integer
+ metadata:
+ description: Metadata contains additional information for this
+ rule
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: Annotations is a set of key value pairs that
+ give extra information about the rule
+ type: object
+ type: object
+ notICMP:
+ description: NotICMP is the negated version of the ICMP field.
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ notProtocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: NotProtocol is the negated version of the Protocol
+ field.
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ protocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: "Protocol is an optional field that restricts the
+ rule to only apply to traffic of a specific IP protocol. Required
+ if any of the EntityRules contain Ports (because ports only
+ apply to certain protocols). \n Must be one of these string
+ values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
+ \"UDPLite\" or an integer in the range 1-255."
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ source:
+ description: Source contains the match criteria that apply to
+ source entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ required:
+ - action
+ type: object
+ type: array
+ ingress:
+ description: The ordered set of ingress rules. Each rule contains
+ a set of packet match criteria and a corresponding action to apply.
+ items:
+ description: "A Rule encapsulates a set of match criteria and an
+ action. Both selector-based security Policy and security Profiles
+ reference rules - separated out as a list of rules for both ingress
+ and egress packet matching. \n Each positive match criteria has
+ a negated version, prefixed with \"Not\". All the match criteria
+ within a rule must be satisfied for a packet to match. A single
+ rule can contain the positive and negative version of a match
+ and both must be satisfied for the rule to match."
+ properties:
+ action:
+ type: string
+ destination:
+ description: Destination contains the match criteria that apply
+ to destination entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ http:
+ description: HTTP contains match criteria that apply to HTTP
+ requests.
+ properties:
+ methods:
+ description: Methods is an optional field that restricts
+ the rule to apply only to HTTP requests that use one of
+ the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
+ methods are OR'd together.
+ items:
+ type: string
+ type: array
+ paths:
+ description: 'Paths is an optional field that restricts
+ the rule to apply to HTTP requests that use one of the
+ listed HTTP Paths. Multiple paths are OR''d together.
+ e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
+ ONLY specify either a `exact` or a `prefix` match. The
+ validator will check for it.'
+ items:
+ description: 'HTTPPath specifies an HTTP path to match.
+ It may be either of the form: exact: <path>: which matches
+ the path exactly or prefix: <path-prefix>: which matches
+ the path prefix'
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ type: object
+ type: array
+ type: object
+ icmp:
+ description: ICMP is an optional field that restricts the rule
+ to apply to a specific type and code of ICMP traffic. This
+ should only be specified if the Protocol field is set to "ICMP"
+ or "ICMPv6".
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ ipVersion:
+ description: IPVersion is an optional field that restricts the
+ rule to only match a specific IP version.
+ type: integer
+ metadata:
+ description: Metadata contains additional information for this
+ rule
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: Annotations is a set of key value pairs that
+ give extra information about the rule
+ type: object
+ type: object
+ notICMP:
+ description: NotICMP is the negated version of the ICMP field.
+ properties:
+ code:
+ description: Match on a specific ICMP code. If specified,
+ the Type value must also be specified. This is a technical
+ limitation imposed by the kernel's iptables firewall,
+ which Calico uses to enforce the rule.
+ type: integer
+ type:
+ description: Match on a specific ICMP type. For example
+ a value of 8 refers to ICMP Echo Request (i.e. pings).
+ type: integer
+ type: object
+ notProtocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: NotProtocol is the negated version of the Protocol
+ field.
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ protocol:
+ anyOf:
+ - type: integer
+ - type: string
+ description: "Protocol is an optional field that restricts the
+ rule to only apply to traffic of a specific IP protocol. Required
+ if any of the EntityRules contain Ports (because ports only
+ apply to certain protocols). \n Must be one of these string
+ values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
+ \"UDPLite\" or an integer in the range 1-255."
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ source:
+ description: Source contains the match criteria that apply to
+ source entity.
+ properties:
+ namespaceSelector:
+ description: "NamespaceSelector is an optional field that
+ contains a selector expression. Only traffic that originates
+ from (or terminates at) endpoints within the selected
+ namespaces will be matched. When both NamespaceSelector
+ and another selector are defined on the same rule, then
+ only workload endpoints that are matched by both selectors
+ will be selected by the rule. \n For NetworkPolicy, an
+ empty NamespaceSelector implies that the Selector is limited
+ to selecting only workload endpoints in the same namespace
+ as the NetworkPolicy. \n For NetworkPolicy, `global()`
+ NamespaceSelector implies that the Selector is limited
+ to selecting only GlobalNetworkSet or HostEndpoint. \n
+ For GlobalNetworkPolicy, an empty NamespaceSelector implies
+ the Selector applies to workload endpoints across all
+ namespaces."
+ type: string
+ nets:
+ description: Nets is an optional field that restricts the
+ rule to only apply to traffic that originates from (or
+ terminates at) IP addresses in any of the given subnets.
+ items:
+ type: string
+ type: array
+ notNets:
+ description: NotNets is the negated version of the Nets
+ field.
+ items:
+ type: string
+ type: array
+ notPorts:
+ description: NotPorts is the negated version of the Ports
+ field. Since only some protocols have ports, if any ports
+ are specified it requires the Protocol match in the Rule
+ to be set to "TCP" or "UDP".
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ notSelector:
+ description: NotSelector is the negated version of the Selector
+ field. See Selector field for subtleties with negated
+ selectors.
+ type: string
+ ports:
+ description: "Ports is an optional field that restricts
+ the rule to only apply to traffic that has a source (destination)
+ port that matches one of these ranges/values. This value
+ is a list of integers or strings that represent ranges
+ of ports. \n Since only some protocols have ports, if
+ any ports are specified it requires the Protocol match
+ in the Rule to be set to \"TCP\" or \"UDP\"."
+ items:
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^.*
+ x-kubernetes-int-or-string: true
+ type: array
+ selector:
+ description: "Selector is an optional field that contains
+ a selector expression (see Policy for sample syntax).
+ \ Only traffic that originates from (terminates at) endpoints
+ matching the selector will be matched. \n Note that: in
+ addition to the negated version of the Selector (see NotSelector
+ below), the selector expression syntax itself supports
+ negation. The two types of negation are subtly different.
+ One negates the set of matched endpoints, the other negates
+ the whole match: \n \tSelector = \"!has(my_label)\" matches
+ packets that are from other Calico-controlled \tendpoints
+ that do not have the label \"my_label\". \n \tNotSelector
+ = \"has(my_label)\" matches packets that are not from
+ Calico-controlled \tendpoints that do have the label \"my_label\".
+ \n The effect is that the latter will accept packets from
+ non-Calico sources whereas the former is limited to packets
+ from Calico-controlled endpoints."
+ type: string
+ serviceAccounts:
+ description: ServiceAccounts is an optional field that restricts
+ the rule to only apply to traffic that originates from
+ (or terminates at) a pod running as a matching service
+ account.
+ properties:
+ names:
+ description: Names is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account whose name is in the list.
+ items:
+ type: string
+ type: array
+ selector:
+ description: Selector is an optional field that restricts
+ the rule to only apply to traffic that originates
+ from (or terminates at) a pod running as a service
+ account that matches the given label selector. If
+ both Names and Selector are specified then they are
+ AND'ed.
+ type: string
+ type: object
+ services:
+ description: "Services is an optional field that contains
+ options for matching Kubernetes Services. If specified,
+ only traffic that originates from or terminates at endpoints
+ within the selected service(s) will be matched, and only
+ to/from each endpoint's port. \n Services cannot be specified
+ on the same rule as Selector, NotSelector, NamespaceSelector,
+ Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
+ can only be specified with Services on ingress rules."
+ properties:
+ name:
+ description: Name specifies the name of a Kubernetes
+ Service to match.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace of the
+ given Service. If left empty, the rule will match
+ within this policy's namespace.
+ type: string
+ type: object
+ type: object
+ required:
+ - action
+ type: object
+ type: array
+ order:
+ description: Order is an optional field that specifies the order in
+ which the policy is applied. Policies with higher "order" are applied
+ after those with lower order. If the order is omitted, it may be
+ considered to be "infinite" - i.e. the policy will be applied last. Policies
+ with identical order will be applied in alphanumerical order based
+ on the Policy "Name".
+ type: number
+ performanceHints:
+ description: "PerformanceHints contains a list of hints to Calico's
+ policy engine to help process the policy more efficiently. Hints
+ never change the enforcement behaviour of the policy. \n Currently,
+ the only available hint is \"AssumeNeededOnEveryNode\". When that
+ hint is set on a policy, Felix will act as if the policy matches
+ a local endpoint even if it does not. This is useful for \"preloading\"
+ any large static policies that are known to be used on every node.
+ If the policy is _not_ used on a particular node then the work done
+ to preload the policy (and to maintain it) is wasted."
+ items:
+ type: string
+ type: array
+ selector:
+ description: "The selector is an expression used to pick out the endpoints
+ that the policy should be applied to. \n Selector expressions follow
+ this syntax: \n \tlabel == \"string_literal\" -> comparison, e.g.
+ my_label == \"foo bar\" \tlabel != \"string_literal\" -> not
+ equal; also matches if label is not present \tlabel in { \"a\",
+ \"b\", \"c\", ... } -> true if the value of label X is one of
+ \"a\", \"b\", \"c\" \tlabel not in { \"a\", \"b\", \"c\", ... }
+ \ -> true if the value of label X is not one of \"a\", \"b\", \"c\"
+ \thas(label_name) -> True if that label is present \t! expr ->
+ negation of expr \texpr && expr -> Short-circuit and \texpr ||
+ expr -> Short-circuit or \t( expr ) -> parens for grouping \tall()
+ or the empty selector -> matches all endpoints. \n Label names are
+ allowed to contain alphanumerics, -, _ and /. String literals are
+ more permissive but they do not support escape characters. \n Examples
+ (with made-up labels): \n \ttype == \"webserver\" && deployment
+ == \"prod\" \ttype in {\"frontend\", \"backend\"} \tdeployment !=
+ \"dev\" \t! has(label_name)"
+ type: string
+ serviceAccountSelector:
+ description: ServiceAccountSelector is an optional field for an expression
+ used to select a pod based on service accounts.
+ type: string
+ types:
+ description: "Types indicates whether this policy applies to ingress,
+ or to egress, or to both. When not explicitly specified (and so
+ the value on creation is empty or nil), Calico defaults Types according
+ to what Ingress and Egress are present in the policy. The default
+ is: \n - [ PolicyTypeIngress ], if there are no Egress rules (including
+ the case where there are also no Ingress rules) \n - [ PolicyTypeEgress
+ ], if there are Egress rules but no Ingress rules \n - [ PolicyTypeIngress,
+ PolicyTypeEgress ], if there are both Ingress and Egress rules.
+ \n When the policy is read back again, Types will always be one
+ of these values, never empty or nil."
+ items:
+ description: PolicyType enumerates the possible values of the PolicySpec
+ Types field.
+ type: string
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/kdd-crds.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networksets.crd.projectcalico.org
+spec:
+ group: crd.projectcalico.org
+ names:
+ kind: NetworkSet
+ listKind: NetworkSetList
+ plural: networksets
+ singular: networkset
+ preserveUnknownFields: false
+ scope: Namespaced
+ versions:
+ - name: v1
+ schema:
+ openAPIV3Schema:
+ description: NetworkSet is the Namespaced-equivalent of the GlobalNetworkSet.
+ 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: NetworkSetSpec contains the specification for a NetworkSet
+ resource.
+ properties:
+ nets:
+ description: The list of IP networks that belong to this set.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
+---
+# Source: calico/templates/calico-kube-controllers-rbac.yaml
+# Include a clusterrole for the kube-controllers component,
+# and bind it to the calico-kube-controllers serviceaccount.
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: calico-kube-controllers
+rules:
+ # Nodes are watched to monitor for deletions.
+ - apiGroups: [""]
+ resources:
+ - nodes
+ verbs:
+ - watch
+ - list
+ - get
+ # Pods are watched to check for existence as part of IPAM controller.
+ - apiGroups: [""]
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ # IPAM resources are manipulated in response to node and block updates, as well as periodic triggers.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - ipreservations
+ verbs:
+ - list
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - blockaffinities
+ - ipamblocks
+ - ipamhandles
+ verbs:
+ - get
+ - list
+ - create
+ - update
+ - delete
+ - watch
+ # Pools are watched to maintain a mapping of blocks to IP pools.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - ippools
+ verbs:
+ - list
+ - watch
+ # kube-controllers manages hostendpoints.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - hostendpoints
+ verbs:
+ - get
+ - list
+ - create
+ - update
+ - delete
+ # Needs access to update clusterinformations.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - clusterinformations
+ verbs:
+ - get
+ - list
+ - create
+ - update
+ - watch
+ # KubeControllersConfiguration is where it gets its config
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - kubecontrollersconfigurations
+ verbs:
+ # read its own config
+ - get
+ - list
+ # create a default if none exists
+ - create
+ # update status
+ - update
+ # watch for changes
+ - watch
+---
+# Source: calico/templates/calico-node-rbac.yaml
+# Include a clusterrole for the calico-node DaemonSet,
+# and bind it to the calico-node serviceaccount.
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: calico-node
+rules:
+ # Used for creating service account tokens to be used by the CNI plugin
+ - apiGroups: [""]
+ resources:
+ - serviceaccounts/token
+ resourceNames:
+ - calico-cni-plugin
+ verbs:
+ - create
+ # The CNI plugin needs to get pods, nodes, and namespaces.
+ - apiGroups: [""]
+ resources:
+ - pods
+ - nodes
+ - namespaces
+ verbs:
+ - get
+ # EndpointSlices are used for Service-based network policy rule
+ # enforcement.
+ - apiGroups: ["discovery.k8s.io"]
+ resources:
+ - endpointslices
+ verbs:
+ - watch
+ - list
+ - apiGroups: [""]
+ resources:
+ - endpoints
+ - services
+ verbs:
+ # Used to discover service IPs for advertisement.
+ - watch
+ - list
+ # Used to discover Typhas.
+ - get
+ # Pod CIDR auto-detection on kubeadm needs access to config maps.
+ - apiGroups: [""]
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - apiGroups: [""]
+ resources:
+ - nodes/status
+ verbs:
+ # Needed for clearing NodeNetworkUnavailable flag.
+ - patch
+ # Calico stores some configuration information in node annotations.
+ - update
+ # Watch for changes to Kubernetes NetworkPolicies.
+ - apiGroups: ["networking.k8s.io"]
+ resources:
+ - networkpolicies
+ verbs:
+ - watch
+ - list
+ # Used by Calico for policy information.
+ - apiGroups: [""]
+ resources:
+ - pods
+ - namespaces
+ - serviceaccounts
+ verbs:
+ - list
+ - watch
+ # The CNI plugin patches pods/status.
+ - apiGroups: [""]
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ # Calico monitors various CRDs for config.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - globalfelixconfigs
+ - felixconfigurations
+ - bgppeers
+ - bgpfilters
+ - globalbgpconfigs
+ - bgpconfigurations
+ - ippools
+ - ipreservations
+ - ipamblocks
+ - globalnetworkpolicies
+ - globalnetworksets
+ - networkpolicies
+ - networksets
+ - clusterinformations
+ - hostendpoints
+ - blockaffinities
+ - caliconodestatuses
+ verbs:
+ - get
+ - list
+ - watch
+ # Calico must create and update some CRDs on startup.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - ippools
+ - felixconfigurations
+ - clusterinformations
+ verbs:
+ - create
+ - update
+ # Calico must update some CRDs.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - caliconodestatuses
+ verbs:
+ - update
+ # Calico stores some configuration information on the node.
+ - apiGroups: [""]
+ resources:
+ - nodes
+ verbs:
+ - get
+ - list
+ - watch
+ # These permissions are only required for upgrade from v2.6, and can
+ # be removed after upgrade or on fresh installations.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - bgpconfigurations
+ - bgppeers
+ verbs:
+ - create
+ - update
+ # These permissions are required for Calico CNI to perform IPAM allocations.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - blockaffinities
+ - ipamblocks
+ - ipamhandles
+ verbs:
+ - get
+ - list
+ - create
+ - update
+ - delete
+ # The CNI plugin and calico/node need to be able to create a default
+ # IPAMConfiguration
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - ipamconfigs
+ verbs:
+ - get
+ - create
+ # Block affinities must also be watchable by confd for route aggregation.
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - blockaffinities
+ verbs:
+ - watch
+ # The Calico IPAM migration needs to get daemonsets. These permissions can be
+ # removed if not upgrading from an installation using host-local IPAM.
+ - apiGroups: ["apps"]
+ resources:
+ - daemonsets
+ verbs:
+ - get
+---
+# Source: calico/templates/calico-node-rbac.yaml
+# CNI cluster role
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: calico-cni-plugin
+rules:
+ - apiGroups: [""]
+ resources:
+ - pods
+ - nodes
+ - namespaces
+ verbs:
+ - get
+ - apiGroups: [""]
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ - apiGroups: ["crd.projectcalico.org"]
+ resources:
+ - blockaffinities
+ - ipamblocks
+ - ipamhandles
+ - clusterinformations
+ - ippools
+ - ipreservations
+ - ipamconfigs
+ verbs:
+ - get
+ - list
+ - create
+ - update
+ - delete
+---
+# Source: calico/templates/calico-kube-controllers-rbac.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: calico-kube-controllers
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: calico-kube-controllers
+subjects:
+- kind: ServiceAccount
+ name: calico-kube-controllers
+ namespace: kube-system
+---
+# Source: calico/templates/calico-node-rbac.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: calico-node
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: calico-node
+subjects:
+- kind: ServiceAccount
+ name: calico-node
+ namespace: kube-system
+---
+# Source: calico/templates/calico-node-rbac.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: calico-cni-plugin
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: calico-cni-plugin
+subjects:
+- kind: ServiceAccount
+ name: calico-cni-plugin
+ namespace: kube-system
+---
+# Source: calico/templates/calico-node.yaml
+# This manifest installs the calico-node container, as well
+# as the CNI plugins and network config on
+# each master and worker node in a Kubernetes cluster.
+kind: DaemonSet
+apiVersion: apps/v1
+metadata:
+ name: calico-node
+ namespace: kube-system
+ labels:
+ k8s-app: calico-node
+spec:
+ selector:
+ matchLabels:
+ k8s-app: calico-node
+ updateStrategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxUnavailable: 1
+ template:
+ metadata:
+ labels:
+ k8s-app: calico-node
+ spec:
+ nodeSelector:
+ kubernetes.io/os: linux
+ hostNetwork: true
+ tolerations:
+ # Make sure calico-node gets scheduled on all nodes.
+ - effect: NoSchedule
+ operator: Exists
+ # Mark the pod as a critical add-on for rescheduling.
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ serviceAccountName: calico-node
+ # Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force
+ # deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods.
+ terminationGracePeriodSeconds: 0
+ priorityClassName: system-node-critical
+ initContainers:
+ # This container performs upgrade from host-local IPAM to calico-ipam.
+ # It can be deleted if this is a fresh installation, or if you have already
+ # upgraded to use calico-ipam.
+ - name: upgrade-ipam
+ image: docker.io/calico/cni:v3.28.3
+ imagePullPolicy: IfNotPresent
+ command: ["/opt/cni/bin/calico-ipam", "-upgrade"]
+ envFrom:
+ - configMapRef:
+ # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
+ name: kubernetes-services-endpoint
+ optional: true
+ env:
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: CALICO_NETWORKING_BACKEND
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: calico_backend
+ volumeMounts:
+ - mountPath: /var/lib/cni/networks
+ name: host-local-net-dir
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ securityContext:
+ privileged: true
+ # This container installs the CNI binaries
+ # and CNI network config file on each node.
+ - name: install-cni
+ image: docker.io/calico/cni:v3.28.3
+ imagePullPolicy: IfNotPresent
+ command: ["/opt/cni/bin/install"]
+ envFrom:
+ - configMapRef:
+ # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
+ name: kubernetes-services-endpoint
+ optional: true
+ env:
+ # Name of the CNI config file to create.
+ - name: CNI_CONF_NAME
+ value: "10-calico.conflist"
+ # The CNI network config to install on each node.
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: cni_network_config
+ # Set the hostname based on the k8s node name.
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # CNI MTU Config variable
+ - name: CNI_MTU
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: veth_mtu
+ # Prevents the container from sleeping forever.
+ - name: SLEEP
+ value: "false"
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ securityContext:
+ privileged: true
+ # This init container mounts the necessary filesystems needed by the BPF data plane
+ # i.e. bpf at /sys/fs/bpf and cgroup2 at /run/calico/cgroup. Calico-node initialisation is executed
+ # in best effort fashion, i.e. no failure for errors, to not disrupt pod creation in iptable mode.
+ - name: "mount-bpffs"
+ image: docker.io/calico/node:v3.28.3
+ imagePullPolicy: IfNotPresent
+ command: ["calico-node", "-init", "-best-effort"]
+ volumeMounts:
+ - mountPath: /sys/fs
+ name: sys-fs
+ # Bidirectional is required to ensure that the new mount we make at /sys/fs/bpf propagates to the host
+ # so that it outlives the init container.
+ mountPropagation: Bidirectional
+ - mountPath: /var/run/calico
+ name: var-run-calico
+ # Bidirectional is required to ensure that the new mount we make at /run/calico/cgroup propagates to the host
+ # so that it outlives the init container.
+ mountPropagation: Bidirectional
+ # Mount /proc/ from host which usually is an init program at /nodeproc. It's needed by mountns binary,
+ # executed by calico-node, to mount root cgroup2 fs at /run/calico/cgroup to attach CTLB programs correctly.
+ - mountPath: /nodeproc
+ name: nodeproc
+ readOnly: true
+ securityContext:
+ privileged: true
+ containers:
+ # Runs calico-node container on each Kubernetes node. This
+ # container programs network policy and routes on each
+ # host.
+ - name: calico-node
+ image: docker.io/calico/node:v3.28.3
+ imagePullPolicy: IfNotPresent
+ envFrom:
+ - configMapRef:
+ # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
+ name: kubernetes-services-endpoint
+ optional: true
+ env:
+ # Use Kubernetes API as the backing datastore.
+ - name: DATASTORE_TYPE
+ value: "kubernetes"
+ # Wait for the datastore.
+ - name: WAIT_FOR_DATASTORE
+ value: "true"
+ # Set based on the k8s node name.
+ - name: NODENAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Choose the backend to use.
+ - name: CALICO_NETWORKING_BACKEND
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: calico_backend
+ # Cluster type to identify the deployment type
+ - name: CLUSTER_TYPE
+ value: "k8s,bgp"
+ # Auto-detect the BGP IP address.
+ - name: IP
+ value: "autodetect"
+ # Enable IPIP
+ - name: CALICO_IPV4POOL_IPIP
+ value: "Always"
+ # Enable or Disable VXLAN on the default IP pool.
+ - name: CALICO_IPV4POOL_VXLAN
+ value: "Never"
+ # Enable or Disable VXLAN on the default IPv6 IP pool.
+ - name: CALICO_IPV6POOL_VXLAN
+ value: "Never"
+ # Set MTU for tunnel device used if ipip is enabled
+ - name: FELIX_IPINIPMTU
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: veth_mtu
+ # Set MTU for the VXLAN tunnel device.
+ - name: FELIX_VXLANMTU
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: veth_mtu
+ # Set MTU for the Wireguard tunnel device.
+ - name: FELIX_WIREGUARDMTU
+ valueFrom:
+ configMapKeyRef:
+ name: calico-config
+ key: veth_mtu
+ # The default IPv4 pool to create on startup if none exists. Pod IPs will be
+ # chosen from this range. Changing this value after installation will have
+ # no effect. This should fall within `--cluster-cidr`.
+ # - name: CALICO_IPV4POOL_CIDR
+ # value: "192.168.0.0/16"
+ # Disable file logging so `kubectl logs` works.
+ - name: CALICO_DISABLE_FILE_LOGGING
+ value: "true"
+ # Set Felix endpoint to host default action to ACCEPT.
+ - name: FELIX_DEFAULTENDPOINTTOHOSTACTION
+ value: "ACCEPT"
+ # Disable IPv6 on Kubernetes.
+ - name: FELIX_IPV6SUPPORT
+ value: "false"
+ - name: FELIX_HEALTHENABLED
+ value: "true"
+ securityContext:
+ privileged: true
+ resources:
+ requests:
+ cpu: 250m
+ lifecycle:
+ preStop:
+ exec:
+ command:
+ - /bin/calico-node
+ - -shutdown
+ livenessProbe:
+ exec:
+ command:
+ - /bin/calico-node
+ - -felix-live
+ - -bird-live
+ periodSeconds: 10
+ initialDelaySeconds: 10
+ failureThreshold: 6
+ timeoutSeconds: 10
+ readinessProbe:
+ exec:
+ command:
+ - /bin/calico-node
+ - -felix-ready
+ - -bird-ready
+ periodSeconds: 10
+ timeoutSeconds: 10
+ volumeMounts:
+ # For maintaining CNI plugin API credentials.
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: false
+ - mountPath: /lib/modules
+ name: lib-modules
+ readOnly: true
+ - mountPath: /run/xtables.lock
+ name: xtables-lock
+ readOnly: false
+ - mountPath: /var/run/calico
+ name: var-run-calico
+ readOnly: false
+ - mountPath: /var/lib/calico
+ name: var-lib-calico
+ readOnly: false
+ - name: policysync
+ mountPath: /var/run/nodeagent
+ # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the
+ # parent directory.
+ - name: bpffs
+ mountPath: /sys/fs/bpf
+ - name: cni-log-dir
+ mountPath: /var/log/calico/cni
+ readOnly: true
+ volumes:
+ # Used by calico-node.
+ - name: lib-modules
+ hostPath:
+ path: /lib/modules
+ - name: var-run-calico
+ hostPath:
+ path: /var/run/calico
+ type: DirectoryOrCreate
+ - name: var-lib-calico
+ hostPath:
+ path: /var/lib/calico
+ type: DirectoryOrCreate
+ - name: xtables-lock
+ hostPath:
+ path: /run/xtables.lock
+ type: FileOrCreate
+ - name: sys-fs
+ hostPath:
+ path: /sys/fs/
+ type: DirectoryOrCreate
+ - name: bpffs
+ hostPath:
+ path: /sys/fs/bpf
+ type: Directory
+ # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs.
+ - name: nodeproc
+ hostPath:
+ path: /proc
+ # Used to install CNI.
+ - name: cni-bin-dir
+ hostPath:
+ path: /opt/cni/bin
+ type: DirectoryOrCreate
+ - name: cni-net-dir
+ hostPath:
+ path: /etc/cni/net.d
+ # Used to access CNI logs.
+ - name: cni-log-dir
+ hostPath:
+ path: /var/log/calico/cni
+ # Mount in the directory for host-local IPAM allocations. This is
+ # used when upgrading from host-local to calico-ipam, and can be removed
+ # if not using the upgrade-ipam init container.
+ - name: host-local-net-dir
+ hostPath:
+ path: /var/lib/cni/networks
+ # Used to create per-pod Unix Domain Sockets
+ - name: policysync
+ hostPath:
+ type: DirectoryOrCreate
+ path: /var/run/nodeagent
+---
+# Source: calico/templates/calico-kube-controllers.yaml
+# See https://github.com/projectcalico/kube-controllers
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: calico-kube-controllers
+ namespace: kube-system
+ labels:
+ k8s-app: calico-kube-controllers
+spec:
+ # The controllers can only have a single active instance.
+ replicas: 1
+ selector:
+ matchLabels:
+ k8s-app: calico-kube-controllers
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ name: calico-kube-controllers
+ namespace: kube-system
+ labels:
+ k8s-app: calico-kube-controllers
+ spec:
+ nodeSelector:
+ kubernetes.io/os: linux
+ tolerations:
+ # Mark the pod as a critical add-on for rescheduling.
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - key: node-role.kubernetes.io/master
+ effect: NoSchedule
+ - key: node-role.kubernetes.io/control-plane
+ effect: NoSchedule
+ serviceAccountName: calico-kube-controllers
+ priorityClassName: system-cluster-critical
+ containers:
+ - name: calico-kube-controllers
+ image: docker.io/calico/kube-controllers:v3.28.3
+ imagePullPolicy: IfNotPresent
+ env:
+ # Choose which controllers to run.
+ - name: ENABLED_CONTROLLERS
+ value: node
+ - name: DATASTORE_TYPE
+ value: kubernetes
+ livenessProbe:
+ exec:
+ command:
+ - /usr/bin/check-status
+ - -l
+ periodSeconds: 10
+ initialDelaySeconds: 10
+ failureThreshold: 6
+ timeoutSeconds: 10
+ readinessProbe:
+ exec:
+ command:
+ - /usr/bin/check-status
+ - -r
+ periodSeconds: 10
--- /dev/null
+apiVersion: v1
+items:
+- apiVersion: rbac.authorization.k8s.io/v1
+ kind: ClusterRoleBinding
+ metadata:
+ name: system:cloud-node-controller
+ roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: system:cloud-node-controller
+ subjects:
+ - kind: ServiceAccount
+ name: cloud-node-controller
+ namespace: kube-system
+- apiVersion: rbac.authorization.k8s.io/v1
+ kind: ClusterRoleBinding
+ metadata:
+ name: system:cloud-controller-manager
+ roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: system:cloud-controller-manager
+ subjects:
+ - kind: ServiceAccount
+ name: cloud-controller-manager
+ namespace: kube-system
+kind: List
+metadata: {}
\ No newline at end of file
--- /dev/null
+apiVersion: v1
+items:
+- apiVersion: rbac.authorization.k8s.io/v1
+ kind: ClusterRole
+ metadata:
+ name: system:cloud-controller-manager
+ rules:
+ - apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - get
+ - create
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - '*'
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - services
+ verbs:
+ - list
+ - patch
+ - update
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - services/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - serviceaccounts
+ verbs:
+ - create
+ - get
+ - apiGroups:
+ - ""
+ resources:
+ - serviceaccounts/token
+ verbs:
+ - create
+ - apiGroups:
+ - ""
+ resources:
+ - persistentvolumes
+ verbs:
+ - '*'
+ - apiGroups:
+ - ""
+ resources:
+ - endpoints
+ verbs:
+ - create
+ - get
+ - list
+ - watch
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - list
+ - get
+ - watch
+- apiVersion: rbac.authorization.k8s.io/v1
+ kind: ClusterRole
+ metadata:
+ name: system:cloud-node-controller
+ rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - '*'
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+ - update
+kind: List
+metadata: {}
--- /dev/null
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: cloud-controller-manager
+ namespace: kube-system
+---
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: openstack-cloud-controller-manager
+ namespace: kube-system
+ labels:
+ k8s-app: openstack-cloud-controller-manager
+spec:
+ selector:
+ matchLabels:
+ k8s-app: openstack-cloud-controller-manager
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ labels:
+ k8s-app: openstack-cloud-controller-manager
+ spec:
+ nodeSelector:
+ node-role.kubernetes.io/control-plane: ""
+ securityContext:
+ runAsUser: 1001
+ tolerations:
+ - key: node.cloudprovider.kubernetes.io/uninitialized
+ value: "true"
+ effect: NoSchedule
+ - key: node-role.kubernetes.io/master
+ effect: NoSchedule
+ - key: node-role.kubernetes.io/control-plane
+ effect: NoSchedule
+ serviceAccountName: cloud-controller-manager
+ containers:
+ - name: openstack-cloud-controller-manager
+ image: registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.2
+ args:
+ - /bin/openstack-cloud-controller-manager
+ - --v=1
+ - --cluster-name=$(CLUSTER_NAME)
+ - --cloud-config=$(CLOUD_CONFIG)
+ - --cloud-provider=openstack
+ - --use-service-account-credentials=false
+ - --bind-address=127.0.0.1
+ volumeMounts:
+ - mountPath: /etc/kubernetes/pki
+ name: k8s-certs
+ readOnly: true
+ - mountPath: /etc/ssl/certs
+ name: ca-certs
+ readOnly: true
+ - mountPath: /etc/config
+ name: cloud-config-volume
+ readOnly: true
+ resources:
+ requests:
+ cpu: 200m
+ env:
+ - name: CLOUD_CONFIG
+ value: /etc/config/cloud.conf
+ - name: CLUSTER_NAME
+ value: kubernetes
+ dnsPolicy: ClusterFirst
+ hostNetwork: true
+ volumes:
+ - hostPath:
+ path: /etc/kubernetes/pki
+ type: DirectoryOrCreate
+ name: k8s-certs
+ - hostPath:
+ path: /etc/ssl/certs
+ type: DirectoryOrCreate
+ name: ca-certs
+ - name: cloud-config-volume
+ secret:
+ secretName: cloud-config
--- /dev/null
+apiVersion: v1
+kind: Namespace
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: controller-manager
+ name: capi-system
+---
+apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-selfsigned-issuer
+ namespace: capi-system
+spec:
+ selfSigned: {}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-serving-cert
+ namespace: capi-system
+spec:
+ dnsNames:
+ - capi-webhook-service.capi-system.svc
+ - capi-webhook-service.capi-system.svc.cluster.local
+ issuerRef:
+ kind: Issuer
+ name: capi-selfsigned-issuer
+ secretName: capi-webhook-service-cert
+ subject:
+ organizations:
+ - k8s-sig-cluster-lifecycle
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: clusterclasses.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: ClusterClass
+ listKind: ClusterClassList
+ plural: clusterclasses
+ shortNames:
+ - cc
+ singular: clusterclass
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ClusterClass
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ ClusterClass is a template which can be used to create managed topologies.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: ClusterClassSpec describes the desired state of the ClusterClass.
+ properties:
+ controlPlane:
+ description: |-
+ controlPlane is a reference to a local struct that holds the details
+ for provisioning the Control Plane for the Cluster.
+ properties:
+ machineInfrastructure:
+ description: |-
+ MachineTemplate defines the metadata and infrastructure information
+ for control plane machines.
+
+ This field is supported if and only if the control plane provider template
+ referenced above is Machine based and supports setting replicas.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the machines of the ControlPlane.
+ At runtime this metadata is merged with the corresponding metadata from the topology.
+
+ This field is supported if and only if the control plane provider template
+ referenced is Machine based.
+ 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
+ type: object
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ infrastructure:
+ description: |-
+ infrastructure is a reference to a provider-specific template that holds
+ the details for provisioning infrastructure specific cluster
+ for the underlying provider.
+ The underlying provider is responsible for the implementation
+ of the template to an infrastructure cluster.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ workers:
+ description: |-
+ workers describes the worker nodes for the cluster.
+ It is a collection of node types which can be used to create
+ the worker nodes of the cluster.
+ properties:
+ machineDeployments:
+ description: |-
+ machineDeployments is a list of machine deployment classes that can be used to create
+ a set of worker nodes.
+ items:
+ description: |-
+ MachineDeploymentClass serves as a template to define a set of worker nodes of the cluster
+ provisioned using the `ClusterClass`.
+ properties:
+ class:
+ description: |-
+ class denotes a type of worker node present in the cluster,
+ this name MUST be unique within a ClusterClass and can be referenced
+ in the Cluster to create a managed MachineDeployment.
+ type: string
+ template:
+ description: |-
+ template is a local struct containing a collection of templates for creation of
+ MachineDeployment objects representing a set of worker nodes.
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap contains the bootstrap template reference to be used
+ for the creation of worker Machines.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ infrastructure:
+ description: |-
+ infrastructure contains the infrastructure template reference to be used
+ for the creation of worker Machines.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the machines of the MachineDeployment.
+ At runtime this metadata is merged with the corresponding metadata from the topology.
+ 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
+ type: object
+ required:
+ - bootstrap
+ - infrastructure
+ type: object
+ required:
+ - class
+ - template
+ type: object
+ type: array
+ type: object
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ClusterClass
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: ClusterClass is a template which can be used to create managed
+ topologies.
+ 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: ClusterClassSpec describes the desired state of the ClusterClass.
+ properties:
+ controlPlane:
+ description: |-
+ controlPlane is a reference to a local struct that holds the details
+ for provisioning the Control Plane for the Cluster.
+ properties:
+ machineHealthCheck:
+ description: |-
+ machineHealthCheck defines a MachineHealthCheck for this ControlPlaneClass.
+ This field is supported if and only if the ControlPlane provider template
+ referenced above is Machine based and supports setting replicas.
+ properties:
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
+ to consider a Machine unhealthy if a corresponding Node isn't associated
+ through a `Spec.ProviderID` field.
+
+ The duration set in this field is compared to the greatest of:
+ - Cluster's infrastructure ready condition timestamp (if and when available)
+ - Control Plane's initialized condition timestamp (if and when available)
+ - Machine's infrastructure ready condition timestamp (if and when available)
+ - Machine's metadata creation timestamp
+
+ Defaults to 10 minutes.
+ If you wish to disable this feature, set the value explicitly to 0.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ type: array
+ unhealthyRange:
+ description: |-
+ Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
+ is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
+ Eg. "[3-5]" - This means that remediation will be allowed only when:
+ (a) there are at least 3 unhealthy machines (and)
+ (b) there are at most 5 unhealthy machines
+ pattern: ^\[[0-9]+-[0-9]+\]$
+ type: string
+ type: object
+ machineInfrastructure:
+ description: |-
+ machineInfrastructure defines the metadata and infrastructure information
+ for control plane machines.
+
+ This field is supported if and only if the control plane provider template
+ referenced above is Machine based and supports setting replicas.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the ControlPlane and the Machines of the ControlPlane
+ if the ControlPlaneTemplate referenced is machine based. If not, it is applied only to the
+ ControlPlane.
+ At runtime this metadata is merged with the corresponding metadata from the topology.
+
+ This field is supported if and only if the control plane provider template
+ referenced is Machine based.
+ 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
+ type: object
+ namingStrategy:
+ description: namingStrategy allows changing the naming pattern
+ used when creating the control plane provider object.
+ properties:
+ template:
+ description: |-
+ template defines the template to use for generating the name of the ControlPlane object.
+ If not defined, it will fallback to `{{ .cluster.name }}-{{ .random }}`.
+ If the templated string exceeds 63 characters, it will be trimmed to 58 characters and will
+ get concatenated with a random suffix of length 5.
+ The templating mechanism provides the following arguments:
+ * `.cluster.name`: The name of the cluster object.
+ * `.random`: A random alphanumeric string, without vowels, of length 5.
+ type: string
+ type: object
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ NOTE: This value can be overridden while defining a Cluster.Topology.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ NOTE: This value can be overridden while defining a Cluster.Topology.
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ NOTE: This value can be overridden while defining a Cluster.Topology.
+ type: string
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ infrastructure:
+ description: |-
+ infrastructure is a reference to a provider-specific template that holds
+ the details for provisioning infrastructure specific cluster
+ for the underlying provider.
+ The underlying provider is responsible for the implementation
+ of the template to an infrastructure cluster.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ patches:
+ description: |-
+ patches defines the patches which are applied to customize
+ referenced templates of a ClusterClass.
+ Note: Patches will be applied in the order of the array.
+ items:
+ description: ClusterClassPatch defines a patch which is applied
+ to customize the referenced templates.
+ properties:
+ definitions:
+ description: |-
+ definitions define inline patches.
+ Note: Patches will be applied in the order of the array.
+ Note: Exactly one of Definitions or External must be set.
+ items:
+ description: PatchDefinition defines a patch which is applied
+ to customize the referenced templates.
+ properties:
+ jsonPatches:
+ description: |-
+ jsonPatches defines the patches which should be applied on the templates
+ matching the selector.
+ Note: Patches will be applied in the order of the array.
+ items:
+ description: JSONPatch defines a JSON patch.
+ properties:
+ op:
+ description: |-
+ op defines the operation of the patch.
+ Note: Only `add`, `replace` and `remove` are supported.
+ type: string
+ path:
+ description: |-
+ path defines the path of the patch.
+ Note: Only the spec of a template can be patched, thus the path has to start with /spec/.
+ Note: For now the only allowed array modifications are `append` and `prepend`, i.e.:
+ * for op: `add`: only index 0 (prepend) and - (append) are allowed
+ * for op: `replace` or `remove`: no indexes are allowed
+ type: string
+ value:
+ description: |-
+ value defines the value of the patch.
+ Note: Either Value or ValueFrom is required for add and replace
+ operations. Only one of them is allowed to be set at the same time.
+ Note: We have to use apiextensionsv1.JSON instead of our JSON type,
+ because controller-tools has a hard-coded schema for apiextensionsv1.JSON
+ which cannot be produced by another type (unset type field).
+ Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
+ x-kubernetes-preserve-unknown-fields: true
+ valueFrom:
+ description: |-
+ valueFrom defines the value of the patch.
+ Note: Either Value or ValueFrom is required for add and replace
+ operations. Only one of them is allowed to be set at the same time.
+ properties:
+ template:
+ description: |-
+ template is the Go template to be used to calculate the value.
+ A template can reference variables defined in .spec.variables and builtin variables.
+ Note: The template must evaluate to a valid YAML or JSON value.
+ type: string
+ variable:
+ description: |-
+ variable is the variable to be used as value.
+ Variable can be one of the variables defined in .spec.variables or a builtin variable.
+ type: string
+ type: object
+ required:
+ - op
+ - path
+ type: object
+ type: array
+ selector:
+ description: selector defines on which templates the patch
+ should be applied.
+ properties:
+ apiVersion:
+ description: apiVersion filters templates by apiVersion.
+ type: string
+ kind:
+ description: kind filters templates by kind.
+ type: string
+ matchResources:
+ description: matchResources selects templates based
+ on where they are referenced.
+ properties:
+ controlPlane:
+ description: |-
+ controlPlane selects templates referenced in .spec.ControlPlane.
+ Note: this will match the controlPlane and also the controlPlane
+ machineInfrastructure (depending on the kind and apiVersion).
+ type: boolean
+ infrastructureCluster:
+ description: infrastructureCluster selects templates
+ referenced in .spec.infrastructure.
+ type: boolean
+ machineDeploymentClass:
+ description: |-
+ machineDeploymentClass selects templates referenced in specific MachineDeploymentClasses in
+ .spec.workers.machineDeployments.
+ properties:
+ names:
+ description: names selects templates by class
+ names.
+ items:
+ type: string
+ type: array
+ type: object
+ machinePoolClass:
+ description: |-
+ machinePoolClass selects templates referenced in specific MachinePoolClasses in
+ .spec.workers.machinePools.
+ properties:
+ names:
+ description: names selects templates by class
+ names.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ required:
+ - apiVersion
+ - kind
+ - matchResources
+ type: object
+ required:
+ - jsonPatches
+ - selector
+ type: object
+ type: array
+ description:
+ description: description is a human-readable description of
+ this patch.
+ type: string
+ enabledIf:
+ description: |-
+ enabledIf is a Go template to be used to calculate if a patch should be enabled.
+ It can reference variables defined in .spec.variables and builtin variables.
+ The patch will be enabled if the template evaluates to `true`, otherwise it will
+ be disabled.
+ If EnabledIf is not set, the patch will be enabled per default.
+ type: string
+ external:
+ description: |-
+ external defines an external patch.
+ Note: Exactly one of Definitions or External must be set.
+ properties:
+ discoverVariablesExtension:
+ description: discoverVariablesExtension references an extension
+ which is called to discover variables.
+ type: string
+ generateExtension:
+ description: generateExtension references an extension which
+ is called to generate patches.
+ type: string
+ settings:
+ additionalProperties:
+ type: string
+ description: |-
+ settings defines key value pairs to be passed to the extensions.
+ Values defined here take precedence over the values defined in the
+ corresponding ExtensionConfig.
+ type: object
+ validateExtension:
+ description: validateExtension references an extension which
+ is called to validate the topology.
+ type: string
+ type: object
+ name:
+ description: name of the patch.
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ variables:
+ description: |-
+ variables defines the variables which can be configured
+ in the Cluster topology and are then used in patches.
+ items:
+ description: |-
+ ClusterClassVariable defines a variable which can
+ be configured in the Cluster topology and used in patches.
+ properties:
+ metadata:
+ description: |-
+ metadata is the metadata of a variable.
+ It can be used to add additional data for higher level tools to
+ a ClusterClassVariable.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please use XMetadata in JSONSchemaProps instead.
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ annotations is an unstructured key value map that can be used to store and
+ retrieve arbitrary metadata.
+ They are not queryable.
+ type: object
+ labels:
+ additionalProperties:
+ type: string
+ description: |-
+ Map of string keys and values that can be used to organize and categorize
+ (scope and select) variables.
+ type: object
+ type: object
+ name:
+ description: name of the variable.
+ type: string
+ required:
+ description: |-
+ required specifies if the variable is required.
+ Note: this applies to the variable as a whole and thus the
+ top-level object defined in the schema. If nested fields are
+ required, this will be specified inside the schema.
+ type: boolean
+ schema:
+ description: schema defines the schema of the variable.
+ properties:
+ openAPIV3Schema:
+ description: |-
+ openAPIV3Schema defines the schema of a variable via OpenAPI v3
+ schema. The schema is a subset of the schema used in
+ Kubernetes CRDs.
+ properties:
+ additionalProperties:
+ description: |-
+ additionalProperties specifies the schema of values in a map (keys are always strings).
+ NOTE: Can only be set if type is object.
+ NOTE: AdditionalProperties is mutually exclusive with Properties.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ allOf:
+ description: |-
+ allOf specifies that the variable must validate against all of the subschemas in the array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ anyOf:
+ description: |-
+ anyOf specifies that the variable must validate against one or more of the subschemas in the array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ default:
+ description: |-
+ default is the default value of the variable.
+ NOTE: Can be set for all types.
+ x-kubernetes-preserve-unknown-fields: true
+ description:
+ description: description is a human-readable description
+ of this variable.
+ type: string
+ enum:
+ description: |-
+ enum is the list of valid values of the variable.
+ NOTE: Can be set for all types.
+ items:
+ x-kubernetes-preserve-unknown-fields: true
+ type: array
+ example:
+ description: example is an example for this variable.
+ x-kubernetes-preserve-unknown-fields: true
+ exclusiveMaximum:
+ description: |-
+ exclusiveMaximum specifies if the Maximum is exclusive.
+ NOTE: Can only be set if type is integer or number.
+ type: boolean
+ exclusiveMinimum:
+ description: |-
+ exclusiveMinimum specifies if the Minimum is exclusive.
+ NOTE: Can only be set if type is integer or number.
+ type: boolean
+ format:
+ description: |-
+ format is an OpenAPI v3 format string. Unknown formats are ignored.
+ For a list of supported formats please see: (of the k8s.io/apiextensions-apiserver version we're currently using)
+ https://github.com/kubernetes/apiextensions-apiserver/blob/master/pkg/apiserver/validation/formats.go
+ NOTE: Can only be set if type is string.
+ type: string
+ items:
+ description: |-
+ items specifies fields of an array.
+ NOTE: Can only be set if type is array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ maxItems:
+ description: |-
+ maxItems is the max length of an array variable.
+ NOTE: Can only be set if type is array.
+ format: int64
+ type: integer
+ maxLength:
+ description: |-
+ maxLength is the max length of a string variable.
+ NOTE: Can only be set if type is string.
+ format: int64
+ type: integer
+ maxProperties:
+ description: |-
+ maxProperties is the maximum amount of entries in a map or properties in an object.
+ NOTE: Can only be set if type is object.
+ format: int64
+ type: integer
+ maximum:
+ description: |-
+ maximum is the maximum of an integer or number variable.
+ If ExclusiveMaximum is false, the variable is valid if it is lower than, or equal to, the value of Maximum.
+ If ExclusiveMaximum is true, the variable is valid if it is strictly lower than the value of Maximum.
+ NOTE: Can only be set if type is integer or number.
+ format: int64
+ type: integer
+ minItems:
+ description: |-
+ minItems is the min length of an array variable.
+ NOTE: Can only be set if type is array.
+ format: int64
+ type: integer
+ minLength:
+ description: |-
+ minLength is the min length of a string variable.
+ NOTE: Can only be set if type is string.
+ format: int64
+ type: integer
+ minProperties:
+ description: |-
+ minProperties is the minimum amount of entries in a map or properties in an object.
+ NOTE: Can only be set if type is object.
+ format: int64
+ type: integer
+ minimum:
+ description: |-
+ minimum is the minimum of an integer or number variable.
+ If ExclusiveMinimum is false, the variable is valid if it is greater than, or equal to, the value of Minimum.
+ If ExclusiveMinimum is true, the variable is valid if it is strictly greater than the value of Minimum.
+ NOTE: Can only be set if type is integer or number.
+ format: int64
+ type: integer
+ not:
+ description: |-
+ not specifies that the variable must not validate against the subschema.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ oneOf:
+ description: |-
+ oneOf specifies that the variable must validate against exactly one of the subschemas in the array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ pattern:
+ description: |-
+ pattern is the regex which a string variable must match.
+ NOTE: Can only be set if type is string.
+ type: string
+ properties:
+ description: |-
+ properties specifies fields of an object.
+ NOTE: Can only be set if type is object.
+ NOTE: Properties is mutually exclusive with AdditionalProperties.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ description: |-
+ required specifies which fields of an object are required.
+ NOTE: Can only be set if type is object.
+ items:
+ type: string
+ type: array
+ type:
+ description: |-
+ type is the type of the variable.
+ Valid values are: object, array, string, integer, number or boolean.
+ type: string
+ uniqueItems:
+ description: |-
+ uniqueItems specifies if items in an array must be unique.
+ NOTE: Can only be set if type is array.
+ type: boolean
+ x-kubernetes-int-or-string:
+ description: |-
+ x-kubernetes-int-or-string specifies that this value is
+ either an integer or a string. If this is true, an empty
+ type is allowed and type as child of anyOf is permitted
+ if following one of the following patterns:
+
+ 1) anyOf:
+ - type: integer
+ - type: string
+ 2) allOf:
+ - anyOf:
+ - type: integer
+ - type: string
+ - ... zero or more
+ type: boolean
+ x-kubernetes-preserve-unknown-fields:
+ description: |-
+ x-kubernetes-preserve-unknown-fields allows setting fields in a variable object
+ which are not defined in the variable schema. This affects fields recursively,
+ except if nested properties or additionalProperties are specified in the schema.
+ type: boolean
+ x-kubernetes-validations:
+ description: x-kubernetes-validations describes a list
+ of validation rules written in the CEL expression
+ language.
+ items:
+ description: ValidationRule describes a validation
+ rule written in the CEL expression language.
+ properties:
+ fieldPath:
+ description: |-
+ fieldPath represents the field path returned when the validation fails.
+ It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
+ e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`
+ If the validation checks two lists must have unique attributes, the fieldPath could be set to either of the list: e.g. `.testList`
+ It does not support list numeric index.
+ It supports child operation to refer to an existing field currently. Refer to [JSONPath support in Kubernetes](https://kubernetes.io/docs/reference/kubectl/jsonpath/) for more info.
+ Numeric index of array is not supported.
+ For field name which contains special characters, use `['specialName']` to refer the field name.
+ e.g. for attribute `foo.34$` appears in a list `testList`, the fieldPath could be set to `.testList['foo.34$']`
+ type: string
+ message:
+ description: |-
+ message represents the message displayed when validation fails. The message is required if the Rule contains
+ line breaks. The message must not contain line breaks.
+ If unset, the message is "failed rule: {Rule}".
+ e.g. "must be a URL with the host matching spec.host"
+ type: string
+ messageExpression:
+ description: |-
+ messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails.
+ Since messageExpression is used as a failure message, it must evaluate to a string.
+ If both message and messageExpression are present on a rule, then messageExpression will be used if validation
+ fails. If messageExpression results in a runtime error, the validation failure message is produced
+ as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string
+ that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset.
+ messageExpression has access to all the same variables as the rule; the only difference is the return type.
+ Example:
+ "x must be less than max ("+string(self.max)+")"
+ type: string
+ reason:
+ default: FieldValueInvalid
+ description: |-
+ reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule.
+ The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
+ If not set, default to use "FieldValueInvalid".
+ All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
+ enum:
+ - FieldValueInvalid
+ - FieldValueForbidden
+ - FieldValueRequired
+ - FieldValueDuplicate
+ type: string
+ rule:
+ description: "rule represents the expression which
+ will be evaluated by CEL.\nref: https://github.com/google/cel-spec\nThe
+ Rule is scoped to the location of the x-kubernetes-validations
+ extension in the schema.\nThe `self` variable
+ in the CEL expression is bound to the scoped
+ value.\nIf the Rule is scoped to an object with
+ properties, the accessible properties of the
+ object are field selectable\nvia `self.field`
+ and field presence can be checked via `has(self.field)`.\nIf
+ the Rule is scoped to an object with additionalProperties
+ (i.e. a map) the value of the map\nare accessible
+ via `self[mapKey]`, map containment can be checked
+ via `mapKey in self` and all entries of the
+ map\nare accessible via CEL macros and functions
+ such as `self.all(...)`.\nIf the Rule is scoped
+ to an array, the elements of the array are accessible
+ via `self[i]` and also by macros and\nfunctions.\nIf
+ the Rule is scoped to a scalar, `self` is bound
+ to the scalar value.\nExamples:\n- Rule scoped
+ to a map of objects: {\"rule\": \"self.components['Widget'].priority
+ < 10\"}\n- Rule scoped to a list of integers:
+ {\"rule\": \"self.values.all(value, value >=
+ 0 && value < 100)\"}\n- Rule scoped to a string
+ value: {\"rule\": \"self.startsWith('kube')\"}\n\nUnknown
+ data preserved in custom resources via x-kubernetes-preserve-unknown-fields
+ is not accessible in CEL\nexpressions. This
+ includes:\n- Unknown field values that are preserved
+ by object schemas with x-kubernetes-preserve-unknown-fields.\n-
+ Object properties where the property schema
+ is of an \"unknown type\". An \"unknown type\"
+ is recursively defined as:\n - A schema with
+ no type and x-kubernetes-preserve-unknown-fields
+ set to true\n - An array where the items schema
+ is of an \"unknown type\"\n - An object where
+ the additionalProperties schema is of an \"unknown
+ type\"\n\nOnly property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*`
+ are accessible.\nAccessible property names are
+ escaped according to the following rules when
+ accessed in the expression:\n- '__' escapes
+ to '__underscores__'\n- '.' escapes to '__dot__'\n-
+ '-' escapes to '__dash__'\n- '/' escapes to
+ '__slash__'\n- Property names that exactly match
+ a CEL RESERVED keyword escape to '__{keyword}__'.
+ The keywords are:\n\t \"true\", \"false\",
+ \"null\", \"in\", \"as\", \"break\", \"const\",
+ \"continue\", \"else\", \"for\", \"function\",
+ \"if\",\n\t \"import\", \"let\", \"loop\",
+ \"package\", \"namespace\", \"return\".\nExamples:\n
+ \ - Rule accessing a property named \"namespace\":
+ {\"rule\": \"self.__namespace__ > 0\"}\n -
+ Rule accessing a property named \"x-prop\":
+ {\"rule\": \"self.x__dash__prop > 0\"}\n -
+ Rule accessing a property named \"redact__d\":
+ {\"rule\": \"self.redact__underscores__d > 0\"}\n\nIf
+ `rule` makes use of the `oldSelf` variable it
+ is implicitly a\n`transition rule`.\n\nBy default,
+ the `oldSelf` variable is the same type as `self`.\n\nTransition
+ rules by default are applied only on UPDATE
+ requests and are\nskipped if an old value could
+ not be found."
+ type: string
+ required:
+ - rule
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - rule
+ x-kubernetes-list-type: map
+ x-metadata:
+ description: |-
+ x-metadata is the metadata of a variable or a nested field within a variable.
+ It can be used to add additional data for higher level tools.
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ annotations is an unstructured key value map that can be used to store and
+ retrieve arbitrary metadata.
+ They are not queryable.
+ type: object
+ labels:
+ additionalProperties:
+ type: string
+ description: |-
+ Map of string keys and values that can be used to organize and categorize
+ (scope and select) variables.
+ type: object
+ type: object
+ type: object
+ required:
+ - openAPIV3Schema
+ type: object
+ required:
+ - name
+ - required
+ - schema
+ type: object
+ type: array
+ workers:
+ description: |-
+ workers describes the worker nodes for the cluster.
+ It is a collection of node types which can be used to create
+ the worker nodes of the cluster.
+ properties:
+ machineDeployments:
+ description: |-
+ machineDeployments is a list of machine deployment classes that can be used to create
+ a set of worker nodes.
+ items:
+ description: |-
+ MachineDeploymentClass serves as a template to define a set of worker nodes of the cluster
+ provisioned using the `ClusterClass`.
+ properties:
+ class:
+ description: |-
+ class denotes a type of worker node present in the cluster,
+ this name MUST be unique within a ClusterClass and can be referenced
+ in the Cluster to create a managed MachineDeployment.
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machines will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
+ type: string
+ machineHealthCheck:
+ description: machineHealthCheck defines a MachineHealthCheck
+ for this MachineDeploymentClass.
+ properties:
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
+ to consider a Machine unhealthy if a corresponding Node isn't associated
+ through a `Spec.ProviderID` field.
+
+ The duration set in this field is compared to the greatest of:
+ - Cluster's infrastructure ready condition timestamp (if and when available)
+ - Control Plane's initialized condition timestamp (if and when available)
+ - Machine's infrastructure ready condition timestamp (if and when available)
+ - Machine's metadata creation timestamp
+
+ Defaults to 10 minutes.
+ If you wish to disable this feature, set the value explicitly to 0.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ type: array
+ unhealthyRange:
+ description: |-
+ Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
+ is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
+ Eg. "[3-5]" - This means that remediation will be allowed only when:
+ (a) there are at least 3 unhealthy machines (and)
+ (b) there are at most 5 unhealthy machines
+ pattern: ^\[[0-9]+-[0-9]+\]$
+ type: string
+ type: object
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine should
+ be ready.
+ Defaults to 0 (machine will be considered available as soon as it
+ is ready)
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
+ format: int32
+ type: integer
+ namingStrategy:
+ description: namingStrategy allows changing the naming pattern
+ used when creating the MachineDeployment.
+ properties:
+ template:
+ description: |-
+ template defines the template to use for generating the name of the MachineDeployment object.
+ If not defined, it will fallback to `{{ .cluster.name }}-{{ .machineDeployment.topologyName }}-{{ .random }}`.
+ If the templated string exceeds 63 characters, it will be trimmed to 58 characters and will
+ get concatenated with a random suffix of length 5.
+ The templating mechanism provides the following arguments:
+ * `.cluster.name`: The name of the cluster object.
+ * `.random`: A random alphanumeric string, without vowels, of length 5.
+ * `.machineDeployment.topologyName`: The name of the MachineDeployment topology (Cluster.spec.topology.workers.machineDeployments[].name).
+ type: string
+ type: object
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
+ type: string
+ strategy:
+ description: |-
+ The deployment strategy to use to replace existing machines with
+ new ones.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
+ properties:
+ remediation:
+ description: |-
+ remediation controls the strategy of remediating unhealthy machines
+ and how remediating operations should occur during the lifecycle of the dependant MachineSets.
+ properties:
+ maxInFlight:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ maxInFlight determines how many in flight remediations should happen at the same time.
+
+ Remediation only happens on the MachineSet with the most current revision, while
+ older MachineSets (usually present during rollout operations) aren't allowed to remediate.
+
+ Note: In general (independent of remediations), unhealthy machines are always
+ prioritized during scale down operations over healthy ones.
+
+ MaxInFlight can be set to a fixed number or a percentage.
+ Example: when this is set to 20%, the MachineSet controller deletes at most 20% of
+ the desired replicas.
+
+ If not set, remediation is limited to all machines (bounded by replicas)
+ under the active MachineSet's management.
+ x-kubernetes-int-or-string: true
+ type: object
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ MachineDeploymentStrategyType = RollingUpdate.
+ properties:
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
+ Valid values are "Random, "Newest", "Oldest"
+ When no value is supplied, the default DeletePolicy of MachineSet is used
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be scheduled above the
+ desired number of machines.
+ Value can be an absolute number (ex: 5) or a percentage of
+ desired machines (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to 1.
+ Example: when this is set to 30%, the new MachineSet can be scaled
+ up immediately when the rolling update starts, such that the total
+ number of old and new machines do not exceed 130% of desired
+ machines. Once old machines have been killed, new MachineSet can
+ be scaled up further, ensuring that total number of machines running
+ at any time during the update is at most 130% of desired machines.
+ x-kubernetes-int-or-string: true
+ maxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired
+ machines (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to 0.
+ Example: when this is set to 30%, the old MachineSet can be scaled
+ down to 70% of desired machines immediately when the rolling update
+ starts. Once new machines are ready, old MachineSet can be scaled
+ down further, followed by scaling up the new MachineSet, ensuring
+ that the total number of machines available at all times
+ during the update is at least 70% of desired machines.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of deployment. Allowed values are RollingUpdate and OnDelete.
+ The default is RollingUpdate.
+ enum:
+ - RollingUpdate
+ - OnDelete
+ type: string
+ type: object
+ template:
+ description: |-
+ template is a local struct containing a collection of templates for creation of
+ MachineDeployment objects representing a set of worker nodes.
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap contains the bootstrap template reference to be used
+ for the creation of worker Machines.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ infrastructure:
+ description: |-
+ infrastructure contains the infrastructure template reference to be used
+ for the creation of worker Machines.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the MachineDeployment and the machines of the MachineDeployment.
+ At runtime this metadata is merged with the corresponding metadata from the topology.
+ 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
+ type: object
+ required:
+ - bootstrap
+ - infrastructure
+ type: object
+ required:
+ - class
+ - template
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - class
+ x-kubernetes-list-type: map
+ machinePools:
+ description: |-
+ machinePools is a list of machine pool classes that can be used to create
+ a set of worker nodes.
+ items:
+ description: |-
+ MachinePoolClass serves as a template to define a pool of worker nodes of the cluster
+ provisioned using `ClusterClass`.
+ properties:
+ class:
+ description: |-
+ class denotes a type of machine pool present in the cluster,
+ this name MUST be unique within a ClusterClass and can be referenced
+ in the Cluster to create a managed MachinePool.
+ type: string
+ failureDomains:
+ description: |-
+ failureDomains is the list of failure domains the MachinePool should be attached to.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
+ items:
+ type: string
+ type: array
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine pool should
+ be ready.
+ Defaults to 0 (machine will be considered available as soon as it
+ is ready)
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
+ format: int32
+ type: integer
+ namingStrategy:
+ description: namingStrategy allows changing the naming pattern
+ used when creating the MachinePool.
+ properties:
+ template:
+ description: |-
+ template defines the template to use for generating the name of the MachinePool object.
+ If not defined, it will fallback to `{{ .cluster.name }}-{{ .machinePool.topologyName }}-{{ .random }}`.
+ If the templated string exceeds 63 characters, it will be trimmed to 58 characters and will
+ get concatenated with a random suffix of length 5.
+ The templating mechanism provides the following arguments:
+ * `.cluster.name`: The name of the cluster object.
+ * `.random`: A random alphanumeric string, without vowels, of length 5.
+ * `.machinePool.topologyName`: The name of the MachinePool topology (Cluster.spec.topology.workers.machinePools[].name).
+ type: string
+ type: object
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine Pool is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
+ type: string
+ template:
+ description: |-
+ template is a local struct containing a collection of templates for creation of
+ MachinePools objects representing a pool of worker nodes.
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap contains the bootstrap template reference to be used
+ for the creation of the Machines in the MachinePool.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ infrastructure:
+ description: |-
+ infrastructure contains the infrastructure template reference to be used
+ for the creation of the MachinePool.
+ properties:
+ ref:
+ description: |-
+ ref is a required reference to a custom resource
+ offered by a provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - ref
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the MachinePool.
+ At runtime this metadata is merged with the corresponding metadata from the topology.
+ 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
+ type: object
+ required:
+ - bootstrap
+ - infrastructure
+ type: object
+ required:
+ - class
+ - template
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - class
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ status:
+ description: ClusterClassStatus defines the observed state of the ClusterClass.
+ properties:
+ conditions:
+ description: conditions defines current observed state of the ClusterClass.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in ClusterClass's status with the V1Beta2 version.
+ properties:
+ conditions:
+ description: |-
+ conditions represents the observations of a ClusterClass's current state.
+ Known condition types are VariablesReady, RefVersionsUpToDate, Paused.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ variables:
+ description: variables is a list of ClusterClassStatusVariable that
+ are defined for the ClusterClass.
+ items:
+ description: ClusterClassStatusVariable defines a variable which
+ appears in the status of a ClusterClass.
+ properties:
+ definitions:
+ description: definitions is a list of definitions for a variable.
+ items:
+ description: ClusterClassStatusVariableDefinition defines
+ a variable which appears in the status of a ClusterClass.
+ properties:
+ from:
+ description: |-
+ from specifies the origin of the variable definition.
+ This will be `inline` for variables defined in the ClusterClass or the name of a patch defined in the ClusterClass
+ for variables discovered from a DiscoverVariables runtime extensions.
+ type: string
+ metadata:
+ description: |-
+ metadata is the metadata of a variable.
+ It can be used to add additional data for higher level tools to
+ a ClusterClassVariable.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion.
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ annotations is an unstructured key value map that can be used to store and
+ retrieve arbitrary metadata.
+ They are not queryable.
+ type: object
+ labels:
+ additionalProperties:
+ type: string
+ description: |-
+ Map of string keys and values that can be used to organize and categorize
+ (scope and select) variables.
+ type: object
+ type: object
+ required:
+ description: |-
+ required specifies if the variable is required.
+ Note: this applies to the variable as a whole and thus the
+ top-level object defined in the schema. If nested fields are
+ required, this will be specified inside the schema.
+ type: boolean
+ schema:
+ description: schema defines the schema of the variable.
+ properties:
+ openAPIV3Schema:
+ description: |-
+ openAPIV3Schema defines the schema of a variable via OpenAPI v3
+ schema. The schema is a subset of the schema used in
+ Kubernetes CRDs.
+ properties:
+ additionalProperties:
+ description: |-
+ additionalProperties specifies the schema of values in a map (keys are always strings).
+ NOTE: Can only be set if type is object.
+ NOTE: AdditionalProperties is mutually exclusive with Properties.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ allOf:
+ description: |-
+ allOf specifies that the variable must validate against all of the subschemas in the array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ anyOf:
+ description: |-
+ anyOf specifies that the variable must validate against one or more of the subschemas in the array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ default:
+ description: |-
+ default is the default value of the variable.
+ NOTE: Can be set for all types.
+ x-kubernetes-preserve-unknown-fields: true
+ description:
+ description: description is a human-readable description
+ of this variable.
+ type: string
+ enum:
+ description: |-
+ enum is the list of valid values of the variable.
+ NOTE: Can be set for all types.
+ items:
+ x-kubernetes-preserve-unknown-fields: true
+ type: array
+ example:
+ description: example is an example for this variable.
+ x-kubernetes-preserve-unknown-fields: true
+ exclusiveMaximum:
+ description: |-
+ exclusiveMaximum specifies if the Maximum is exclusive.
+ NOTE: Can only be set if type is integer or number.
+ type: boolean
+ exclusiveMinimum:
+ description: |-
+ exclusiveMinimum specifies if the Minimum is exclusive.
+ NOTE: Can only be set if type is integer or number.
+ type: boolean
+ format:
+ description: |-
+ format is an OpenAPI v3 format string. Unknown formats are ignored.
+ For a list of supported formats please see: (of the k8s.io/apiextensions-apiserver version we're currently using)
+ https://github.com/kubernetes/apiextensions-apiserver/blob/master/pkg/apiserver/validation/formats.go
+ NOTE: Can only be set if type is string.
+ type: string
+ items:
+ description: |-
+ items specifies fields of an array.
+ NOTE: Can only be set if type is array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ maxItems:
+ description: |-
+ maxItems is the max length of an array variable.
+ NOTE: Can only be set if type is array.
+ format: int64
+ type: integer
+ maxLength:
+ description: |-
+ maxLength is the max length of a string variable.
+ NOTE: Can only be set if type is string.
+ format: int64
+ type: integer
+ maxProperties:
+ description: |-
+ maxProperties is the maximum amount of entries in a map or properties in an object.
+ NOTE: Can only be set if type is object.
+ format: int64
+ type: integer
+ maximum:
+ description: |-
+ maximum is the maximum of an integer or number variable.
+ If ExclusiveMaximum is false, the variable is valid if it is lower than, or equal to, the value of Maximum.
+ If ExclusiveMaximum is true, the variable is valid if it is strictly lower than the value of Maximum.
+ NOTE: Can only be set if type is integer or number.
+ format: int64
+ type: integer
+ minItems:
+ description: |-
+ minItems is the min length of an array variable.
+ NOTE: Can only be set if type is array.
+ format: int64
+ type: integer
+ minLength:
+ description: |-
+ minLength is the min length of a string variable.
+ NOTE: Can only be set if type is string.
+ format: int64
+ type: integer
+ minProperties:
+ description: |-
+ minProperties is the minimum amount of entries in a map or properties in an object.
+ NOTE: Can only be set if type is object.
+ format: int64
+ type: integer
+ minimum:
+ description: |-
+ minimum is the minimum of an integer or number variable.
+ If ExclusiveMinimum is false, the variable is valid if it is greater than, or equal to, the value of Minimum.
+ If ExclusiveMinimum is true, the variable is valid if it is strictly greater than the value of Minimum.
+ NOTE: Can only be set if type is integer or number.
+ format: int64
+ type: integer
+ not:
+ description: |-
+ not specifies that the variable must not validate against the subschema.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ oneOf:
+ description: |-
+ oneOf specifies that the variable must validate against exactly one of the subschemas in the array.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ pattern:
+ description: |-
+ pattern is the regex which a string variable must match.
+ NOTE: Can only be set if type is string.
+ type: string
+ properties:
+ description: |-
+ properties specifies fields of an object.
+ NOTE: Can only be set if type is object.
+ NOTE: Properties is mutually exclusive with AdditionalProperties.
+ NOTE: This field uses PreserveUnknownFields and Schemaless,
+ because recursive validation is not possible.
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ description: |-
+ required specifies which fields of an object are required.
+ NOTE: Can only be set if type is object.
+ items:
+ type: string
+ type: array
+ type:
+ description: |-
+ type is the type of the variable.
+ Valid values are: object, array, string, integer, number or boolean.
+ type: string
+ uniqueItems:
+ description: |-
+ uniqueItems specifies if items in an array must be unique.
+ NOTE: Can only be set if type is array.
+ type: boolean
+ x-kubernetes-int-or-string:
+ description: |-
+ x-kubernetes-int-or-string specifies that this value is
+ either an integer or a string. If this is true, an empty
+ type is allowed and type as child of anyOf is permitted
+ if following one of the following patterns:
+
+ 1) anyOf:
+ - type: integer
+ - type: string
+ 2) allOf:
+ - anyOf:
+ - type: integer
+ - type: string
+ - ... zero or more
+ type: boolean
+ x-kubernetes-preserve-unknown-fields:
+ description: |-
+ x-kubernetes-preserve-unknown-fields allows setting fields in a variable object
+ which are not defined in the variable schema. This affects fields recursively,
+ except if nested properties or additionalProperties are specified in the schema.
+ type: boolean
+ x-kubernetes-validations:
+ description: x-kubernetes-validations describes
+ a list of validation rules written in the CEL
+ expression language.
+ items:
+ description: ValidationRule describes a validation
+ rule written in the CEL expression language.
+ properties:
+ fieldPath:
+ description: |-
+ fieldPath represents the field path returned when the validation fails.
+ It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
+ e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`
+ If the validation checks two lists must have unique attributes, the fieldPath could be set to either of the list: e.g. `.testList`
+ It does not support list numeric index.
+ It supports child operation to refer to an existing field currently. Refer to [JSONPath support in Kubernetes](https://kubernetes.io/docs/reference/kubectl/jsonpath/) for more info.
+ Numeric index of array is not supported.
+ For field name which contains special characters, use `['specialName']` to refer the field name.
+ e.g. for attribute `foo.34$` appears in a list `testList`, the fieldPath could be set to `.testList['foo.34$']`
+ type: string
+ message:
+ description: |-
+ message represents the message displayed when validation fails. The message is required if the Rule contains
+ line breaks. The message must not contain line breaks.
+ If unset, the message is "failed rule: {Rule}".
+ e.g. "must be a URL with the host matching spec.host"
+ type: string
+ messageExpression:
+ description: |-
+ messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails.
+ Since messageExpression is used as a failure message, it must evaluate to a string.
+ If both message and messageExpression are present on a rule, then messageExpression will be used if validation
+ fails. If messageExpression results in a runtime error, the validation failure message is produced
+ as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string
+ that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset.
+ messageExpression has access to all the same variables as the rule; the only difference is the return type.
+ Example:
+ "x must be less than max ("+string(self.max)+")"
+ type: string
+ reason:
+ default: FieldValueInvalid
+ description: |-
+ reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule.
+ The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
+ If not set, default to use "FieldValueInvalid".
+ All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
+ enum:
+ - FieldValueInvalid
+ - FieldValueForbidden
+ - FieldValueRequired
+ - FieldValueDuplicate
+ type: string
+ rule:
+ description: "rule represents the expression
+ which will be evaluated by CEL.\nref:
+ https://github.com/google/cel-spec\nThe
+ Rule is scoped to the location of the
+ x-kubernetes-validations extension in
+ the schema.\nThe `self` variable in the
+ CEL expression is bound to the scoped
+ value.\nIf the Rule is scoped to an object
+ with properties, the accessible properties
+ of the object are field selectable\nvia
+ `self.field` and field presence can be
+ checked via `has(self.field)`.\nIf the
+ Rule is scoped to an object with additionalProperties
+ (i.e. a map) the value of the map\nare
+ accessible via `self[mapKey]`, map containment
+ can be checked via `mapKey in self` and
+ all entries of the map\nare accessible
+ via CEL macros and functions such as `self.all(...)`.\nIf
+ the Rule is scoped to an array, the elements
+ of the array are accessible via `self[i]`
+ and also by macros and\nfunctions.\nIf
+ the Rule is scoped to a scalar, `self`
+ is bound to the scalar value.\nExamples:\n-
+ Rule scoped to a map of objects: {\"rule\":
+ \"self.components['Widget'].priority <
+ 10\"}\n- Rule scoped to a list of integers:
+ {\"rule\": \"self.values.all(value, value
+ >= 0 && value < 100)\"}\n- Rule scoped
+ to a string value: {\"rule\": \"self.startsWith('kube')\"}\n\nUnknown
+ data preserved in custom resources via
+ x-kubernetes-preserve-unknown-fields is
+ not accessible in CEL\nexpressions. This
+ includes:\n- Unknown field values that
+ are preserved by object schemas with x-kubernetes-preserve-unknown-fields.\n-
+ Object properties where the property schema
+ is of an \"unknown type\". An \"unknown
+ type\" is recursively defined as:\n -
+ A schema with no type and x-kubernetes-preserve-unknown-fields
+ set to true\n - An array where the items
+ schema is of an \"unknown type\"\n -
+ An object where the additionalProperties
+ schema is of an \"unknown type\"\n\nOnly
+ property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*`
+ are accessible.\nAccessible property names
+ are escaped according to the following
+ rules when accessed in the expression:\n-
+ '__' escapes to '__underscores__'\n- '.'
+ escapes to '__dot__'\n- '-' escapes to
+ '__dash__'\n- '/' escapes to '__slash__'\n-
+ Property names that exactly match a CEL
+ RESERVED keyword escape to '__{keyword}__'.
+ The keywords are:\n\t \"true\", \"false\",
+ \"null\", \"in\", \"as\", \"break\", \"const\",
+ \"continue\", \"else\", \"for\", \"function\",
+ \"if\",\n\t \"import\", \"let\", \"loop\",
+ \"package\", \"namespace\", \"return\".\nExamples:\n
+ \ - Rule accessing a property named \"namespace\":
+ {\"rule\": \"self.__namespace__ > 0\"}\n
+ \ - Rule accessing a property named \"x-prop\":
+ {\"rule\": \"self.x__dash__prop > 0\"}\n
+ \ - Rule accessing a property named \"redact__d\":
+ {\"rule\": \"self.redact__underscores__d
+ > 0\"}\n\nIf `rule` makes use of the `oldSelf`
+ variable it is implicitly a\n`transition
+ rule`.\n\nBy default, the `oldSelf` variable
+ is the same type as `self`.\n\nTransition
+ rules by default are applied only on UPDATE
+ requests and are\nskipped if an old value
+ could not be found."
+ type: string
+ required:
+ - rule
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - rule
+ x-kubernetes-list-type: map
+ x-metadata:
+ description: |-
+ x-metadata is the metadata of a variable or a nested field within a variable.
+ It can be used to add additional data for higher level tools.
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ annotations is an unstructured key value map that can be used to store and
+ retrieve arbitrary metadata.
+ They are not queryable.
+ type: object
+ labels:
+ additionalProperties:
+ type: string
+ description: |-
+ Map of string keys and values that can be used to organize and categorize
+ (scope and select) variables.
+ type: object
+ type: object
+ type: object
+ required:
+ - openAPIV3Schema
+ type: object
+ required:
+ - from
+ - required
+ - schema
+ type: object
+ type: array
+ definitionsConflict:
+ description: definitionsConflict specifies whether or not there
+ are conflicting definitions for a single variable name.
+ type: boolean
+ name:
+ description: name is the name of the variable.
+ type: string
+ required:
+ - definitions
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: clusterresourcesetbindings.addons.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: addons.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: ClusterResourceSetBinding
+ listKind: ClusterResourceSetBindingList
+ plural: clusterresourcesetbindings
+ singular: clusterresourcesetbinding
+ scope: Namespaced
+ versions:
+ - deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ ClusterResourceSetBinding lists all matching ClusterResourceSets with the cluster it belongs to.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: ClusterResourceSetBindingSpec defines the desired state of
+ ClusterResourceSetBinding.
+ properties:
+ bindings:
+ description: bindings is a list of ClusterResourceSets and their resources.
+ items:
+ description: ResourceSetBinding keeps info on all of the resources
+ in a ClusterResourceSet.
+ properties:
+ clusterResourceSetName:
+ description: clusterResourceSetName is the name of the ClusterResourceSet
+ that is applied to the owner cluster of the binding.
+ type: string
+ resources:
+ description: resources is a list of resources that the ClusterResourceSet
+ has.
+ items:
+ description: ResourceBinding shows the status of a resource
+ that belongs to a ClusterResourceSet matched by the owner
+ cluster of the ClusterResourceSetBinding object.
+ properties:
+ applied:
+ description: applied is to track if a resource is applied
+ to the cluster or not.
+ type: boolean
+ hash:
+ description: |-
+ hash is the hash of a resource's data. This can be used to decide if a resource is changed.
+ For "ApplyOnce" ClusterResourceSet.spec.strategy, this is no-op as that strategy does not act on change.
+ type: string
+ kind:
+ description: 'kind of the resource. Supported kinds are:
+ Secrets and ConfigMaps.'
+ enum:
+ - Secret
+ - ConfigMap
+ type: string
+ lastAppliedTime:
+ description: lastAppliedTime identifies when this resource
+ was last applied to the cluster.
+ format: date-time
+ type: string
+ name:
+ description: name of the resource that is in the same
+ namespace with ClusterResourceSet object.
+ minLength: 1
+ type: string
+ required:
+ - applied
+ - kind
+ - name
+ type: object
+ type: array
+ required:
+ - clusterResourceSetName
+ type: object
+ type: array
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ClusterResourceSetBinding
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ ClusterResourceSetBinding lists all matching ClusterResourceSets with the cluster it belongs to.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: ClusterResourceSetBindingSpec defines the desired state of
+ ClusterResourceSetBinding.
+ properties:
+ bindings:
+ description: bindings is a list of ClusterResourceSets and their resources.
+ items:
+ description: ResourceSetBinding keeps info on all of the resources
+ in a ClusterResourceSet.
+ properties:
+ clusterResourceSetName:
+ description: clusterResourceSetName is the name of the ClusterResourceSet
+ that is applied to the owner cluster of the binding.
+ type: string
+ resources:
+ description: resources is a list of resources that the ClusterResourceSet
+ has.
+ items:
+ description: ResourceBinding shows the status of a resource
+ that belongs to a ClusterResourceSet matched by the owner
+ cluster of the ClusterResourceSetBinding object.
+ properties:
+ applied:
+ description: applied is to track if a resource is applied
+ to the cluster or not.
+ type: boolean
+ hash:
+ description: |-
+ hash is the hash of a resource's data. This can be used to decide if a resource is changed.
+ For "ApplyOnce" ClusterResourceSet.spec.strategy, this is no-op as that strategy does not act on change.
+ type: string
+ kind:
+ description: 'kind of the resource. Supported kinds are:
+ Secrets and ConfigMaps.'
+ enum:
+ - Secret
+ - ConfigMap
+ type: string
+ lastAppliedTime:
+ description: lastAppliedTime identifies when this resource
+ was last applied to the cluster.
+ format: date-time
+ type: string
+ name:
+ description: name of the resource that is in the same
+ namespace with ClusterResourceSet object.
+ minLength: 1
+ type: string
+ required:
+ - applied
+ - kind
+ - name
+ type: object
+ type: array
+ required:
+ - clusterResourceSetName
+ type: object
+ type: array
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ClusterResourceSetBinding
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: ClusterResourceSetBinding lists all matching ClusterResourceSets
+ with the cluster it belongs to.
+ 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: ClusterResourceSetBindingSpec defines the desired state of
+ ClusterResourceSetBinding.
+ properties:
+ bindings:
+ description: bindings is a list of ClusterResourceSets and their resources.
+ items:
+ description: ResourceSetBinding keeps info on all of the resources
+ in a ClusterResourceSet.
+ properties:
+ clusterResourceSetName:
+ description: clusterResourceSetName is the name of the ClusterResourceSet
+ that is applied to the owner cluster of the binding.
+ type: string
+ resources:
+ description: resources is a list of resources that the ClusterResourceSet
+ has.
+ items:
+ description: ResourceBinding shows the status of a resource
+ that belongs to a ClusterResourceSet matched by the owner
+ cluster of the ClusterResourceSetBinding object.
+ properties:
+ applied:
+ description: applied is to track if a resource is applied
+ to the cluster or not.
+ type: boolean
+ hash:
+ description: |-
+ hash is the hash of a resource's data. This can be used to decide if a resource is changed.
+ For "ApplyOnce" ClusterResourceSet.spec.strategy, this is no-op as that strategy does not act on change.
+ type: string
+ kind:
+ description: 'kind of the resource. Supported kinds are:
+ Secrets and ConfigMaps.'
+ enum:
+ - Secret
+ - ConfigMap
+ type: string
+ lastAppliedTime:
+ description: lastAppliedTime identifies when this resource
+ was last applied to the cluster.
+ format: date-time
+ type: string
+ name:
+ description: name of the resource that is in the same
+ namespace with ClusterResourceSet object.
+ minLength: 1
+ type: string
+ required:
+ - applied
+ - kind
+ - name
+ type: object
+ type: array
+ required:
+ - clusterResourceSetName
+ type: object
+ type: array
+ clusterName:
+ description: |-
+ clusterName is the name of the Cluster this binding applies to.
+ Note: this field mandatory in v1beta2.
+ type: string
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: clusterresourcesets.addons.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: addons.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: ClusterResourceSet
+ listKind: ClusterResourceSetList
+ plural: clusterresourcesets
+ singular: clusterresourceset
+ scope: Namespaced
+ versions:
+ - deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ ClusterResourceSet is the Schema for the clusterresourcesets API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: ClusterResourceSetSpec defines the desired state of ClusterResourceSet.
+ properties:
+ clusterSelector:
+ description: |-
+ Label selector for Clusters. The Clusters that are
+ selected by this will be the ones affected by this ClusterResourceSet.
+ It must match the Cluster labels. This field is immutable.
+ 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
+ resources:
+ description: resources is a list of Secrets/ConfigMaps where each
+ contains 1 or more resources to be applied to remote clusters.
+ items:
+ description: ResourceRef specifies a resource.
+ properties:
+ kind:
+ description: 'kind of the resource. Supported kinds are: Secrets
+ and ConfigMaps.'
+ enum:
+ - Secret
+ - ConfigMap
+ type: string
+ name:
+ description: name of the resource that is in the same namespace
+ with ClusterResourceSet object.
+ minLength: 1
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ type: array
+ strategy:
+ description: strategy is the strategy to be used during applying resources.
+ Defaults to ApplyOnce. This field is immutable.
+ enum:
+ - ApplyOnce
+ type: string
+ required:
+ - clusterSelector
+ type: object
+ status:
+ description: ClusterResourceSetStatus defines the observed state of ClusterResourceSet.
+ properties:
+ conditions:
+ description: conditions defines current state of the ClusterResourceSet.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ observedGeneration:
+ description: observedGeneration reflects the generation of the most
+ recently observed ClusterResourceSet.
+ format: int64
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ClusterResourceSet
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ ClusterResourceSet is the Schema for the clusterresourcesets API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: ClusterResourceSetSpec defines the desired state of ClusterResourceSet.
+ properties:
+ clusterSelector:
+ description: |-
+ Label selector for Clusters. The Clusters that are
+ selected by this will be the ones affected by this ClusterResourceSet.
+ It must match the Cluster labels. This field is immutable.
+ Label selector cannot be empty.
+ 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
+ resources:
+ description: resources is a list of Secrets/ConfigMaps where each
+ contains 1 or more resources to be applied to remote clusters.
+ items:
+ description: ResourceRef specifies a resource.
+ properties:
+ kind:
+ description: 'kind of the resource. Supported kinds are: Secrets
+ and ConfigMaps.'
+ enum:
+ - Secret
+ - ConfigMap
+ type: string
+ name:
+ description: name of the resource that is in the same namespace
+ with ClusterResourceSet object.
+ minLength: 1
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ type: array
+ strategy:
+ description: strategy is the strategy to be used during applying resources.
+ Defaults to ApplyOnce. This field is immutable.
+ enum:
+ - ApplyOnce
+ type: string
+ required:
+ - clusterSelector
+ type: object
+ status:
+ description: ClusterResourceSetStatus defines the observed state of ClusterResourceSet.
+ properties:
+ conditions:
+ description: conditions defines current state of the ClusterResourceSet.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ observedGeneration:
+ description: observedGeneration reflects the generation of the most
+ recently observed ClusterResourceSet.
+ format: int64
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ClusterResourceSet
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: ClusterResourceSet is the Schema for the clusterresourcesets
+ 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: ClusterResourceSetSpec defines the desired state of ClusterResourceSet.
+ properties:
+ clusterSelector:
+ description: |-
+ Label selector for Clusters. The Clusters that are
+ selected by this will be the ones affected by this ClusterResourceSet.
+ It must match the Cluster labels. This field is immutable.
+ Label selector cannot be empty.
+ 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
+ resources:
+ description: resources is a list of Secrets/ConfigMaps where each
+ contains 1 or more resources to be applied to remote clusters.
+ items:
+ description: ResourceRef specifies a resource.
+ properties:
+ kind:
+ description: 'kind of the resource. Supported kinds are: Secrets
+ and ConfigMaps.'
+ enum:
+ - Secret
+ - ConfigMap
+ type: string
+ name:
+ description: name of the resource that is in the same namespace
+ with ClusterResourceSet object.
+ minLength: 1
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ type: array
+ strategy:
+ description: strategy is the strategy to be used during applying resources.
+ Defaults to ApplyOnce. This field is immutable.
+ enum:
+ - ApplyOnce
+ - Reconcile
+ type: string
+ required:
+ - clusterSelector
+ type: object
+ status:
+ description: ClusterResourceSetStatus defines the observed state of ClusterResourceSet.
+ properties:
+ conditions:
+ description: conditions defines current state of the ClusterResourceSet.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ observedGeneration:
+ description: observedGeneration reflects the generation of the most
+ recently observed ClusterResourceSet.
+ format: int64
+ type: integer
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in ClusterResourceSet's status with the V1Beta2 version.
+ properties:
+ conditions:
+ description: |-
+ conditions represents the observations of a ClusterResourceSet's current state.
+ Known condition types are ResourceSetApplied, Deleting.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: clusters.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: Cluster
+ listKind: ClusterList
+ plural: clusters
+ shortNames:
+ - cl
+ singular: cluster
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: Cluster is the Schema for the clusters 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: ClusterSpec defines the desired state of Cluster.
+ properties:
+ clusterNetwork:
+ description: Cluster network configuration.
+ properties:
+ apiServerPort:
+ description: |-
+ apiServerPort specifies the port the API Server should bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ pods:
+ description: The network ranges from which Pod networks are allocated.
+ properties:
+ cidrBlocks:
+ items:
+ type: string
+ type: array
+ required:
+ - cidrBlocks
+ type: object
+ serviceDomain:
+ description: Domain name for services.
+ type: string
+ services:
+ description: The network ranges from which service VIPs are allocated.
+ properties:
+ cidrBlocks:
+ items:
+ type: string
+ type: array
+ required:
+ - cidrBlocks
+ type: object
+ type: object
+ controlPlaneEndpoint:
+ description: controlPlaneEndpoint represents the endpoint used to
+ communicate with the control plane.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneRef:
+ description: |-
+ controlPlaneRef is an optional reference to a provider-specific resource that holds
+ the details for provisioning the Control Plane for a Cluster.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a reference to a provider-specific resource that holds the details
+ for provisioning infrastructure for a cluster in said provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ paused:
+ description: paused can be used to prevent controllers from processing
+ the Cluster and all its associated objects.
+ type: boolean
+ type: object
+ status:
+ description: ClusterStatus defines the observed state of Cluster.
+ properties:
+ conditions:
+ description: conditions defines current service state of the cluster.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ controlPlaneInitialized:
+ description: controlPlaneInitialized defines if the control plane
+ has been initialized.
+ type: boolean
+ controlPlaneReady:
+ description: controlPlaneReady defines if the control plane is ready.
+ type: boolean
+ failureDomains:
+ additionalProperties:
+ description: |-
+ FailureDomainSpec is the Schema for Cluster API failure domains.
+ It allows controllers to understand how many failure domains a cluster can optionally span across.
+ properties:
+ attributes:
+ additionalProperties:
+ type: string
+ description: attributes is a free form map of attributes an
+ infrastructure provider might use or require.
+ type: object
+ controlPlane:
+ description: controlPlane determines if this failure domain
+ is suitable for use by control plane machines.
+ type: boolean
+ type: object
+ description: failureDomains is a slice of failure domain objects synced
+ from the infrastructure provider.
+ type: object
+ failureMessage:
+ description: |-
+ failureMessage indicates that there is a fatal problem reconciling the
+ state, and will be set to a descriptive error message.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a fatal problem reconciling the
+ state, and will be set to a token value suitable for
+ programmatic interpretation.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of cluster actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of Cluster
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ Cluster is the Schema for the clusters API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: ClusterSpec defines the desired state of Cluster.
+ properties:
+ clusterNetwork:
+ description: Cluster network configuration.
+ properties:
+ apiServerPort:
+ description: |-
+ apiServerPort specifies the port the API Server should bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ pods:
+ description: The network ranges from which Pod networks are allocated.
+ properties:
+ cidrBlocks:
+ items:
+ type: string
+ type: array
+ required:
+ - cidrBlocks
+ type: object
+ serviceDomain:
+ description: Domain name for services.
+ type: string
+ services:
+ description: The network ranges from which service VIPs are allocated.
+ properties:
+ cidrBlocks:
+ items:
+ type: string
+ type: array
+ required:
+ - cidrBlocks
+ type: object
+ type: object
+ controlPlaneEndpoint:
+ description: controlPlaneEndpoint represents the endpoint used to
+ communicate with the control plane.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneRef:
+ description: |-
+ controlPlaneRef is an optional reference to a provider-specific resource that holds
+ the details for provisioning the Control Plane for a Cluster.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a reference to a provider-specific resource that holds the details
+ for provisioning infrastructure for a cluster in said provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ paused:
+ description: paused can be used to prevent controllers from processing
+ the Cluster and all its associated objects.
+ type: boolean
+ topology:
+ description: |-
+ This encapsulates the topology for the cluster.
+ NOTE: It is required to enable the ClusterTopology
+ feature gate flag to activate managed topologies support;
+ this feature is highly experimental, and parts of it might still be not implemented.
+ properties:
+ class:
+ description: The name of the ClusterClass object to create the
+ topology.
+ type: string
+ controlPlane:
+ description: controlPlane describes the cluster control plane.
+ properties:
+ metadata:
+ description: |-
+ metadata is the metadata applied to the machines of the ControlPlane.
+ At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
+
+ This field is supported if and only if the control plane provider template
+ referenced in the ClusterClass is Machine based.
+ 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
+ type: object
+ replicas:
+ description: |-
+ replicas is the number of control plane nodes.
+ If the value is nil, the ControlPlane object is created without the number of Replicas
+ and it's assumed that the control plane controller does not implement support for this field.
+ When specified against a control plane provider that lacks support for this field, this value will be ignored.
+ format: int32
+ type: integer
+ type: object
+ rolloutAfter:
+ description: |-
+ rolloutAfter performs a rollout of the entire cluster one component at a time,
+ control plane first and then machine deployments.
+ format: date-time
+ type: string
+ version:
+ description: The Kubernetes version of the cluster.
+ type: string
+ workers:
+ description: |-
+ workers encapsulates the different constructs that form the worker nodes
+ for the cluster.
+ properties:
+ machineDeployments:
+ description: machineDeployments is a list of machine deployments
+ in the cluster.
+ items:
+ description: |-
+ MachineDeploymentTopology specifies the different parameters for a set of worker nodes in the topology.
+ This set of nodes is managed by a MachineDeployment object whose lifecycle is managed by the Cluster controller.
+ properties:
+ class:
+ description: |-
+ class is the name of the MachineDeploymentClass used to create the set of worker nodes.
+ This should match one of the deployment classes defined in the ClusterClass object
+ mentioned in the `Cluster.Spec.Class` field.
+ type: string
+ metadata:
+ description: |-
+ metadata is the metadata applied to the machines of the MachineDeployment.
+ At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
+ 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
+ type: object
+ name:
+ description: |-
+ name is the unique identifier for this MachineDeploymentTopology.
+ The value is used with other unique identifiers to create a MachineDeployment's Name
+ (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length,
+ the values are hashed together.
+ type: string
+ replicas:
+ description: |-
+ replicas is the number of worker nodes belonging to this set.
+ If the value is nil, the MachineDeployment is created without the number of Replicas (defaulting to zero)
+ and it's assumed that an external entity (like cluster autoscaler) is responsible for the management
+ of this value.
+ format: int32
+ type: integer
+ required:
+ - class
+ - name
+ type: object
+ type: array
+ type: object
+ required:
+ - class
+ - version
+ type: object
+ type: object
+ status:
+ description: ClusterStatus defines the observed state of Cluster.
+ properties:
+ conditions:
+ description: conditions defines current service state of the cluster.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ controlPlaneReady:
+ description: controlPlaneReady defines if the control plane is ready.
+ type: boolean
+ failureDomains:
+ additionalProperties:
+ description: |-
+ FailureDomainSpec is the Schema for Cluster API failure domains.
+ It allows controllers to understand how many failure domains a cluster can optionally span across.
+ properties:
+ attributes:
+ additionalProperties:
+ type: string
+ description: attributes is a free form map of attributes an
+ infrastructure provider might use or require.
+ type: object
+ controlPlane:
+ description: controlPlane determines if this failure domain
+ is suitable for use by control plane machines.
+ type: boolean
+ type: object
+ description: failureDomains is a slice of failure domain objects synced
+ from the infrastructure provider.
+ type: object
+ failureMessage:
+ description: |-
+ failureMessage indicates that there is a fatal problem reconciling the
+ state, and will be set to a descriptive error message.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a fatal problem reconciling the
+ state, and will be set to a token value suitable for
+ programmatic interpretation.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of cluster actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: ClusterClass of this Cluster, empty if the Cluster is not using
+ a ClusterClass
+ jsonPath: .spec.topology.class
+ name: ClusterClass
+ type: string
+ - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Time duration since creation of Cluster
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Kubernetes version associated with this Cluster
+ jsonPath: .spec.topology.version
+ name: Version
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: Cluster is the Schema for the clusters 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: ClusterSpec defines the desired state of Cluster.
+ properties:
+ availabilityGates:
+ description: |-
+ availabilityGates specifies additional conditions to include when evaluating Cluster Available condition.
+
+ NOTE: this field is considered only for computing v1beta2 conditions.
+ items:
+ description: ClusterAvailabilityGate contains the type of a Cluster
+ condition to be used as availability gate.
+ properties:
+ conditionType:
+ description: |-
+ conditionType refers to a positive polarity condition (status true means good) with matching type in the Cluster's condition list.
+ If the conditions doesn't exist, it will be treated as unknown.
+ Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as availability gates.
+ maxLength: 316
+ minLength: 1
+ 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:
+ - conditionType
+ type: object
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - conditionType
+ x-kubernetes-list-type: map
+ clusterNetwork:
+ description: Cluster network configuration.
+ properties:
+ apiServerPort:
+ description: |-
+ apiServerPort specifies the port the API Server should bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ pods:
+ description: The network ranges from which Pod networks are allocated.
+ properties:
+ cidrBlocks:
+ items:
+ type: string
+ type: array
+ required:
+ - cidrBlocks
+ type: object
+ serviceDomain:
+ description: Domain name for services.
+ type: string
+ services:
+ description: The network ranges from which service VIPs are allocated.
+ properties:
+ cidrBlocks:
+ items:
+ type: string
+ type: array
+ required:
+ - cidrBlocks
+ type: object
+ type: object
+ controlPlaneEndpoint:
+ description: controlPlaneEndpoint represents the endpoint used to
+ communicate with the control plane.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneRef:
+ description: |-
+ controlPlaneRef is an optional reference to a provider-specific resource that holds
+ the details for provisioning the Control Plane for a Cluster.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a reference to a provider-specific resource that holds the details
+ for provisioning infrastructure for a cluster in said provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ paused:
+ description: paused can be used to prevent controllers from processing
+ the Cluster and all its associated objects.
+ type: boolean
+ topology:
+ description: |-
+ This encapsulates the topology for the cluster.
+ NOTE: It is required to enable the ClusterTopology
+ feature gate flag to activate managed topologies support;
+ this feature is highly experimental, and parts of it might still be not implemented.
+ properties:
+ class:
+ description: The name of the ClusterClass object to create the
+ topology.
+ type: string
+ classNamespace:
+ description: |-
+ classNamespace is the namespace of the ClusterClass object to create the topology.
+ If the namespace is empty or not set, it is defaulted to the namespace of the cluster object.
+ Value must follow the DNS1123Subdomain syntax.
+ maxLength: 253
+ minLength: 1
+ pattern: ^[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9](?:[-a-z0-9]*[a-z0-9])?)*$
+ type: string
+ controlPlane:
+ description: controlPlane describes the cluster control plane.
+ properties:
+ machineHealthCheck:
+ description: |-
+ machineHealthCheck allows to enable, disable and override
+ the MachineHealthCheck configuration in the ClusterClass for this control plane.
+ properties:
+ enable:
+ description: |-
+ enable controls if a MachineHealthCheck should be created for the target machines.
+
+ If false: No MachineHealthCheck will be created.
+
+ If not set(default): A MachineHealthCheck will be created if it is defined here or
+ in the associated ClusterClass. If no MachineHealthCheck is defined then none will be created.
+
+ If true: A MachineHealthCheck is guaranteed to be created. Cluster validation will
+ block if `enable` is true and no MachineHealthCheck definition is available.
+ type: boolean
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
+ to consider a Machine unhealthy if a corresponding Node isn't associated
+ through a `Spec.ProviderID` field.
+
+ The duration set in this field is compared to the greatest of:
+ - Cluster's infrastructure ready condition timestamp (if and when available)
+ - Control Plane's initialized condition timestamp (if and when available)
+ - Machine's infrastructure ready condition timestamp (if and when available)
+ - Machine's metadata creation timestamp
+
+ Defaults to 10 minutes.
+ If you wish to disable this feature, set the value explicitly to 0.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ type: array
+ unhealthyRange:
+ description: |-
+ Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
+ is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
+ Eg. "[3-5]" - This means that remediation will be allowed only when:
+ (a) there are at least 3 unhealthy machines (and)
+ (b) there are at most 5 unhealthy machines
+ pattern: ^\[[0-9]+-[0-9]+\]$
+ type: string
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the ControlPlane and the Machines of the ControlPlane
+ if the ControlPlaneTemplate referenced by the ClusterClass is machine based. If not, it
+ is applied only to the ControlPlane.
+ At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
+ 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
+ type: object
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ replicas:
+ description: |-
+ replicas is the number of control plane nodes.
+ If the value is nil, the ControlPlane object is created without the number of Replicas
+ and it's assumed that the control plane controller does not implement support for this field.
+ When specified against a control plane provider that lacks support for this field, this value will be ignored.
+ format: int32
+ type: integer
+ variables:
+ description: variables can be used to customize the ControlPlane
+ through patches.
+ properties:
+ overrides:
+ description: overrides can be used to override Cluster
+ level variables.
+ items:
+ description: |-
+ ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
+ Variable definition in the ClusterClass `status` variables.
+ properties:
+ definitionFrom:
+ description: |-
+ definitionFrom specifies where the definition of this Variable is from.
+
+ Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
+ type: string
+ name:
+ description: name of the variable.
+ type: string
+ value:
+ description: |-
+ value of the variable.
+ Note: the value will be validated against the schema of the corresponding ClusterClassVariable
+ from the ClusterClass.
+ Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
+ hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
+ i.e. it is not possible to have no type field.
+ Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ rolloutAfter:
+ description: |-
+ rolloutAfter performs a rollout of the entire cluster one component at a time,
+ control plane first and then machine deployments.
+
+ Deprecated: This field has no function and is going to be removed in the next apiVersion.
+ format: date-time
+ type: string
+ variables:
+ description: |-
+ variables can be used to customize the Cluster through
+ patches. They must comply to the corresponding
+ VariableClasses defined in the ClusterClass.
+ items:
+ description: |-
+ ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
+ Variable definition in the ClusterClass `status` variables.
+ properties:
+ definitionFrom:
+ description: |-
+ definitionFrom specifies where the definition of this Variable is from.
+
+ Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
+ type: string
+ name:
+ description: name of the variable.
+ type: string
+ value:
+ description: |-
+ value of the variable.
+ Note: the value will be validated against the schema of the corresponding ClusterClassVariable
+ from the ClusterClass.
+ Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
+ hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
+ i.e. it is not possible to have no type field.
+ Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ version:
+ description: The Kubernetes version of the cluster.
+ type: string
+ workers:
+ description: |-
+ workers encapsulates the different constructs that form the worker nodes
+ for the cluster.
+ properties:
+ machineDeployments:
+ description: machineDeployments is a list of machine deployments
+ in the cluster.
+ items:
+ description: |-
+ MachineDeploymentTopology specifies the different parameters for a set of worker nodes in the topology.
+ This set of nodes is managed by a MachineDeployment object whose lifecycle is managed by the Cluster controller.
+ properties:
+ class:
+ description: |-
+ class is the name of the MachineDeploymentClass used to create the set of worker nodes.
+ This should match one of the deployment classes defined in the ClusterClass object
+ mentioned in the `Cluster.Spec.Class` field.
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machines will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ machineHealthCheck:
+ description: |-
+ machineHealthCheck allows to enable, disable and override
+ the MachineHealthCheck configuration in the ClusterClass for this MachineDeployment.
+ properties:
+ enable:
+ description: |-
+ enable controls if a MachineHealthCheck should be created for the target machines.
+
+ If false: No MachineHealthCheck will be created.
+
+ If not set(default): A MachineHealthCheck will be created if it is defined here or
+ in the associated ClusterClass. If no MachineHealthCheck is defined then none will be created.
+
+ If true: A MachineHealthCheck is guaranteed to be created. Cluster validation will
+ block if `enable` is true and no MachineHealthCheck definition is available.
+ type: boolean
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
+ to consider a Machine unhealthy if a corresponding Node isn't associated
+ through a `Spec.ProviderID` field.
+
+ The duration set in this field is compared to the greatest of:
+ - Cluster's infrastructure ready condition timestamp (if and when available)
+ - Control Plane's initialized condition timestamp (if and when available)
+ - Machine's infrastructure ready condition timestamp (if and when available)
+ - Machine's metadata creation timestamp
+
+ Defaults to 10 minutes.
+ If you wish to disable this feature, set the value explicitly to 0.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ type: array
+ unhealthyRange:
+ description: |-
+ Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
+ is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
+ Eg. "[3-5]" - This means that remediation will be allowed only when:
+ (a) there are at least 3 unhealthy machines (and)
+ (b) there are at most 5 unhealthy machines
+ pattern: ^\[[0-9]+-[0-9]+\]$
+ type: string
+ type: object
+ metadata:
+ description: |-
+ metadata is the metadata applied to the MachineDeployment and the machines of the MachineDeployment.
+ At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
+ 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
+ type: object
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine should
+ be ready.
+ Defaults to 0 (machine will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ name:
+ description: |-
+ name is the unique identifier for this MachineDeploymentTopology.
+ The value is used with other unique identifiers to create a MachineDeployment's Name
+ (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length,
+ the values are hashed together.
+ type: string
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ replicas:
+ description: |-
+ replicas is the number of worker nodes belonging to this set.
+ If the value is nil, the MachineDeployment is created without the number of Replicas (defaulting to 1)
+ and it's assumed that an external entity (like cluster autoscaler) is responsible for the management
+ of this value.
+ format: int32
+ type: integer
+ strategy:
+ description: |-
+ The deployment strategy to use to replace existing machines with
+ new ones.
+ properties:
+ remediation:
+ description: |-
+ remediation controls the strategy of remediating unhealthy machines
+ and how remediating operations should occur during the lifecycle of the dependant MachineSets.
+ properties:
+ maxInFlight:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ maxInFlight determines how many in flight remediations should happen at the same time.
+
+ Remediation only happens on the MachineSet with the most current revision, while
+ older MachineSets (usually present during rollout operations) aren't allowed to remediate.
+
+ Note: In general (independent of remediations), unhealthy machines are always
+ prioritized during scale down operations over healthy ones.
+
+ MaxInFlight can be set to a fixed number or a percentage.
+ Example: when this is set to 20%, the MachineSet controller deletes at most 20% of
+ the desired replicas.
+
+ If not set, remediation is limited to all machines (bounded by replicas)
+ under the active MachineSet's management.
+ x-kubernetes-int-or-string: true
+ type: object
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ MachineDeploymentStrategyType = RollingUpdate.
+ properties:
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
+ Valid values are "Random, "Newest", "Oldest"
+ When no value is supplied, the default DeletePolicy of MachineSet is used
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be scheduled above the
+ desired number of machines.
+ Value can be an absolute number (ex: 5) or a percentage of
+ desired machines (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to 1.
+ Example: when this is set to 30%, the new MachineSet can be scaled
+ up immediately when the rolling update starts, such that the total
+ number of old and new machines do not exceed 130% of desired
+ machines. Once old machines have been killed, new MachineSet can
+ be scaled up further, ensuring that total number of machines running
+ at any time during the update is at most 130% of desired machines.
+ x-kubernetes-int-or-string: true
+ maxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired
+ machines (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to 0.
+ Example: when this is set to 30%, the old MachineSet can be scaled
+ down to 70% of desired machines immediately when the rolling update
+ starts. Once new machines are ready, old MachineSet can be scaled
+ down further, followed by scaling up the new MachineSet, ensuring
+ that the total number of machines available at all times
+ during the update is at least 70% of desired machines.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of deployment. Allowed values are RollingUpdate and OnDelete.
+ The default is RollingUpdate.
+ enum:
+ - RollingUpdate
+ - OnDelete
+ type: string
+ type: object
+ variables:
+ description: variables can be used to customize the
+ MachineDeployment through patches.
+ properties:
+ overrides:
+ description: overrides can be used to override Cluster
+ level variables.
+ items:
+ description: |-
+ ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
+ Variable definition in the ClusterClass `status` variables.
+ properties:
+ definitionFrom:
+ description: |-
+ definitionFrom specifies where the definition of this Variable is from.
+
+ Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
+ type: string
+ name:
+ description: name of the variable.
+ type: string
+ value:
+ description: |-
+ value of the variable.
+ Note: the value will be validated against the schema of the corresponding ClusterClassVariable
+ from the ClusterClass.
+ Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
+ hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
+ i.e. it is not possible to have no type field.
+ Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ required:
+ - class
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ machinePools:
+ description: machinePools is a list of machine pools in the
+ cluster.
+ items:
+ description: |-
+ MachinePoolTopology specifies the different parameters for a pool of worker nodes in the topology.
+ This pool of nodes is managed by a MachinePool object whose lifecycle is managed by the Cluster controller.
+ properties:
+ class:
+ description: |-
+ class is the name of the MachinePoolClass used to create the pool of worker nodes.
+ This should match one of the deployment classes defined in the ClusterClass object
+ mentioned in the `Cluster.Spec.Class` field.
+ type: string
+ failureDomains:
+ description: |-
+ failureDomains is the list of failure domains the machine pool will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ items:
+ type: string
+ type: array
+ metadata:
+ description: |-
+ metadata is the metadata applied to the MachinePool.
+ At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
+ 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
+ type: object
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine pool should
+ be ready.
+ Defaults to 0 (machine will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ name:
+ description: |-
+ name is the unique identifier for this MachinePoolTopology.
+ The value is used with other unique identifiers to create a MachinePool's Name
+ (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length,
+ the values are hashed together.
+ type: string
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the MachinePool
+ hosts after the MachinePool is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ replicas:
+ description: |-
+ replicas is the number of nodes belonging to this pool.
+ If the value is nil, the MachinePool is created without the number of Replicas (defaulting to 1)
+ and it's assumed that an external entity (like cluster autoscaler) is responsible for the management
+ of this value.
+ format: int32
+ type: integer
+ variables:
+ description: variables can be used to customize the
+ MachinePool through patches.
+ properties:
+ overrides:
+ description: overrides can be used to override Cluster
+ level variables.
+ items:
+ description: |-
+ ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
+ Variable definition in the ClusterClass `status` variables.
+ properties:
+ definitionFrom:
+ description: |-
+ definitionFrom specifies where the definition of this Variable is from.
+
+ Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
+ type: string
+ name:
+ description: name of the variable.
+ type: string
+ value:
+ description: |-
+ value of the variable.
+ Note: the value will be validated against the schema of the corresponding ClusterClassVariable
+ from the ClusterClass.
+ Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
+ hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
+ i.e. it is not possible to have no type field.
+ Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ required:
+ - class
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ required:
+ - class
+ - version
+ type: object
+ type: object
+ status:
+ description: ClusterStatus defines the observed state of Cluster.
+ properties:
+ conditions:
+ description: conditions defines current service state of the cluster.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ controlPlaneReady:
+ description: |-
+ controlPlaneReady denotes if the control plane became ready during initial provisioning
+ to receive requests.
+ NOTE: this field is part of the Cluster API contract and it is used to orchestrate provisioning.
+ The value of this field is never updated after provisioning is completed. Please use conditions
+ to check the operational state of the control plane.
+ type: boolean
+ failureDomains:
+ additionalProperties:
+ description: |-
+ FailureDomainSpec is the Schema for Cluster API failure domains.
+ It allows controllers to understand how many failure domains a cluster can optionally span across.
+ properties:
+ attributes:
+ additionalProperties:
+ type: string
+ description: attributes is a free form map of attributes an
+ infrastructure provider might use or require.
+ type: object
+ controlPlane:
+ description: controlPlane determines if this failure domain
+ is suitable for use by control plane machines.
+ type: boolean
+ type: object
+ description: failureDomains is a slice of failure domain objects synced
+ from the infrastructure provider.
+ type: object
+ failureMessage:
+ description: |-
+ failureMessage indicates that there is a fatal problem reconciling the
+ state, and will be set to a descriptive error message.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a fatal problem reconciling the
+ state, and will be set to a token value suitable for
+ programmatic interpretation.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of cluster actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in Cluster's status with the V1Beta2 version.
+ properties:
+ conditions:
+ description: |-
+ conditions represents the observations of a Cluster's current state.
+ Known condition types are Available, InfrastructureReady, ControlPlaneInitialized, ControlPlaneAvailable, WorkersAvailable, MachinesReady
+ MachinesUpToDate, RemoteConnectionProbe, ScalingUp, ScalingDown, Remediating, Deleting, Paused.
+ Additionally, a TopologyReconciled condition will be added in case the Cluster is referencing a ClusterClass / defining a managed Topology.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ controlPlane:
+ description: controlPlane groups all the observations about Cluster's
+ ControlPlane current state.
+ properties:
+ availableReplicas:
+ description: availableReplicas is the total number of available
+ control plane machines in this cluster. A machine is considered
+ available when Machine's Available condition is true.
+ format: int32
+ type: integer
+ desiredReplicas:
+ description: desiredReplicas is the total number of desired
+ control plane machines in this cluster.
+ format: int32
+ type: integer
+ readyReplicas:
+ description: readyReplicas is the total number of ready control
+ plane machines in this cluster. A machine is considered
+ ready when Machine's Ready condition is true.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ replicas is the total number of control plane machines in this cluster.
+ NOTE: replicas also includes machines still being provisioned or being deleted.
+ format: int32
+ type: integer
+ upToDateReplicas:
+ description: upToDateReplicas is the number of up-to-date
+ control plane machines in this cluster. A machine is considered
+ up-to-date when Machine's UpToDate condition is true.
+ format: int32
+ type: integer
+ type: object
+ workers:
+ description: workers groups all the observations about Cluster's
+ Workers current state.
+ properties:
+ availableReplicas:
+ description: availableReplicas is the total number of available
+ worker machines in this cluster. A machine is considered
+ available when Machine's Available condition is true.
+ format: int32
+ type: integer
+ desiredReplicas:
+ description: desiredReplicas is the total number of desired
+ worker machines in this cluster.
+ format: int32
+ type: integer
+ readyReplicas:
+ description: readyReplicas is the total number of ready worker
+ machines in this cluster. A machine is considered ready
+ when Machine's Ready condition is true.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ replicas is the total number of worker machines in this cluster.
+ NOTE: replicas also includes machines still being provisioned or being deleted.
+ format: int32
+ type: integer
+ upToDateReplicas:
+ description: upToDateReplicas is the number of up-to-date
+ worker machines in this cluster. A machine is considered
+ up-to-date when Machine's UpToDate condition is true.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: extensionconfigs.runtime.cluster.x-k8s.io
+spec:
+ group: runtime.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: ExtensionConfig
+ listKind: ExtensionConfigList
+ plural: extensionconfigs
+ shortNames:
+ - ext
+ singular: extensionconfig
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - description: Time duration since creation of ExtensionConfig
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: ExtensionConfig is the Schema for the ExtensionConfig 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: ExtensionConfigSpec is the desired state of the ExtensionConfig
+ properties:
+ clientConfig:
+ description: clientConfig defines how to communicate with the Extension
+ server.
+ properties:
+ caBundle:
+ description: caBundle is a PEM encoded CA bundle which will be
+ used to validate the Extension server's server certificate.
+ format: byte
+ type: string
+ service:
+ description: |-
+ service is a reference to the Kubernetes service for the Extension server.
+ Note: Exactly one of `url` or `service` must be specified.
+
+ If the Extension server is running within a cluster, then you should use `service`.
+ properties:
+ name:
+ description: name is the name of the service.
+ type: string
+ namespace:
+ description: namespace is the namespace of the service.
+ type: string
+ path:
+ description: |-
+ path is an optional URL path and if present may be any string permissible in
+ a URL. If a path is set it will be used as prefix to the hook-specific path.
+ type: string
+ port:
+ description: |-
+ port is the port on the service that's hosting the Extension server.
+ Defaults to 443.
+ Port should be a valid port number (1-65535, inclusive).
+ format: int32
+ type: integer
+ required:
+ - name
+ - namespace
+ type: object
+ url:
+ description: |-
+ url gives the location of the Extension server, in standard URL form
+ (`scheme://host:port/path`).
+ Note: Exactly one of `url` or `service` must be specified.
+
+ The scheme must be "https".
+
+ The `host` should not refer to a service running in the cluster; use
+ the `service` field instead.
+
+ A path is optional, and if present may be any string permissible in
+ a URL. If a path is set it will be used as prefix to the hook-specific path.
+
+ Attempting to use a user or basic auth e.g. "user:password@" is not
+ allowed. Fragments ("#...") and query parameters ("?...") are not
+ allowed either.
+ type: string
+ type: object
+ namespaceSelector:
+ description: |-
+ namespaceSelector decides whether to call the hook for an object based
+ on whether the namespace for that object matches the selector.
+ Defaults to the empty LabelSelector, which matches all objects.
+ 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
+ settings:
+ additionalProperties:
+ type: string
+ description: |-
+ settings defines key value pairs to be passed to all calls
+ to all supported RuntimeExtensions.
+ Note: Settings can be overridden on the ClusterClass.
+ type: object
+ required:
+ - clientConfig
+ type: object
+ status:
+ description: ExtensionConfigStatus is the current state of the ExtensionConfig
+ properties:
+ conditions:
+ description: conditions define the current service state of the ExtensionConfig.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ handlers:
+ description: handlers defines the current ExtensionHandlers supported
+ by an Extension.
+ items:
+ description: ExtensionHandler specifies the details of a handler
+ for a particular runtime hook registered by an Extension server.
+ properties:
+ failurePolicy:
+ description: |-
+ failurePolicy defines how failures in calls to the ExtensionHandler should be handled by a client.
+ Defaults to Fail if not set.
+ type: string
+ name:
+ description: name is the unique name of the ExtensionHandler.
+ type: string
+ requestHook:
+ description: requestHook defines the versioned runtime hook
+ which this ExtensionHandler serves.
+ properties:
+ apiVersion:
+ description: apiVersion is the group and version of the
+ Hook.
+ type: string
+ hook:
+ description: hook is the name of the hook.
+ type: string
+ required:
+ - apiVersion
+ - hook
+ type: object
+ timeoutSeconds:
+ description: |-
+ timeoutSeconds defines the timeout duration for client calls to the ExtensionHandler.
+ Defaults to 10 is not set.
+ format: int32
+ type: integer
+ required:
+ - name
+ - requestHook
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: ipaddressclaims.ipam.cluster.x-k8s.io
+spec:
+ group: ipam.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: IPAddressClaim
+ listKind: IPAddressClaimList
+ plural: ipaddressclaims
+ singular: ipaddressclaim
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Name of the pool to allocate an address from
+ jsonPath: .spec.poolRef.name
+ name: Pool Name
+ type: string
+ - description: Kind of the pool to allocate an address from
+ jsonPath: .spec.poolRef.kind
+ name: Pool Kind
+ type: string
+ - description: Time duration since creation of IPAdressClaim
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: IPAddressClaim is the Schema for the ipaddressclaim 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: IPAddressClaimSpec is the desired state of an IPAddressClaim.
+ properties:
+ poolRef:
+ description: poolRef is a reference to the pool from which an IP address
+ should be created.
+ 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
+ required:
+ - poolRef
+ type: object
+ status:
+ description: IPAddressClaimStatus is the observed status of a IPAddressClaim.
+ properties:
+ addressRef:
+ description: addressRef is a reference to the address that was created
+ for this claim.
+ properties:
+ 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
+ type: object
+ x-kubernetes-map-type: atomic
+ conditions:
+ description: conditions summarises the current state of the IPAddressClaim
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Name of the pool to allocate an address from
+ jsonPath: .spec.poolRef.name
+ name: Pool Name
+ type: string
+ - description: Kind of the pool to allocate an address from
+ jsonPath: .spec.poolRef.kind
+ name: Pool Kind
+ type: string
+ - description: Time duration since creation of IPAdressClaim
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: IPAddressClaim is the Schema for the ipaddressclaim 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: IPAddressClaimSpec is the desired state of an IPAddressClaim.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ type: string
+ poolRef:
+ description: poolRef is a reference to the pool from which an IP address
+ should be created.
+ 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
+ required:
+ - poolRef
+ type: object
+ status:
+ description: IPAddressClaimStatus is the observed status of a IPAddressClaim.
+ properties:
+ addressRef:
+ description: addressRef is a reference to the address that was created
+ for this claim.
+ properties:
+ 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
+ type: object
+ x-kubernetes-map-type: atomic
+ conditions:
+ description: conditions summarises the current state of the IPAddressClaim
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: ipaddresses.ipam.cluster.x-k8s.io
+spec:
+ group: ipam.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: IPAddress
+ listKind: IPAddressList
+ plural: ipaddresses
+ singular: ipaddress
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Address
+ jsonPath: .spec.address
+ name: Address
+ type: string
+ - description: Name of the pool the address is from
+ jsonPath: .spec.poolRef.name
+ name: Pool Name
+ type: string
+ - description: Kind of the pool the address is from
+ jsonPath: .spec.poolRef.kind
+ name: Pool Kind
+ type: string
+ - description: Time duration since creation of IPAdress
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: IPAddress is the Schema for the ipaddress 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: IPAddressSpec is the desired state of an IPAddress.
+ properties:
+ address:
+ description: address is the IP address.
+ type: string
+ claimRef:
+ description: claimRef is a reference to the claim this IPAddress was
+ created for.
+ properties:
+ 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
+ type: object
+ x-kubernetes-map-type: atomic
+ gateway:
+ description: gateway is the network gateway of the network the address
+ is from.
+ type: string
+ poolRef:
+ description: poolRef is a reference to the pool that this IPAddress
+ was created from.
+ 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
+ prefix:
+ description: prefix is the prefix of the address.
+ type: integer
+ required:
+ - address
+ - claimRef
+ - poolRef
+ - prefix
+ type: object
+ type: object
+ served: true
+ storage: false
+ subresources: {}
+ - additionalPrinterColumns:
+ - description: Address
+ jsonPath: .spec.address
+ name: Address
+ type: string
+ - description: Name of the pool the address is from
+ jsonPath: .spec.poolRef.name
+ name: Pool Name
+ type: string
+ - description: Kind of the pool the address is from
+ jsonPath: .spec.poolRef.kind
+ name: Pool Kind
+ type: string
+ - description: Time duration since creation of IPAdress
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: IPAddress is the Schema for the ipaddress 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: IPAddressSpec is the desired state of an IPAddress.
+ properties:
+ address:
+ description: address is the IP address.
+ type: string
+ claimRef:
+ description: claimRef is a reference to the claim this IPAddress was
+ created for.
+ properties:
+ 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
+ type: object
+ x-kubernetes-map-type: atomic
+ gateway:
+ description: gateway is the network gateway of the network the address
+ is from.
+ type: string
+ poolRef:
+ description: poolRef is a reference to the pool that this IPAddress
+ was created from.
+ 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
+ prefix:
+ description: prefix is the prefix of the address.
+ type: integer
+ required:
+ - address
+ - claimRef
+ - poolRef
+ - prefix
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: machinedeployments.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: MachineDeployment
+ listKind: MachineDeploymentList
+ plural: machinedeployments
+ shortNames:
+ - md
+ singular: machinedeployment
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Total number of non-terminated machines targeted by this MachineDeployment
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of ready machines targeted by this MachineDeployment
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of non-terminated machines targeted by this deployment
+ that have the desired template spec
+ jsonPath: .status.updatedReplicas
+ name: Updated
+ type: integer
+ - description: Total number of unavailable machines targeted by this MachineDeployment
+ jsonPath: .status.unavailableReplicas
+ name: Unavailable
+ type: integer
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachineDeployment is the Schema for the machinedeployments API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachineDeploymentSpec defines the desired state of MachineDeployment.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine should
+ be ready.
+ Defaults to 0 (machine will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ paused:
+ description: Indicates that the deployment is paused.
+ type: boolean
+ progressDeadlineSeconds:
+ description: |-
+ The maximum time in seconds for a deployment to make progress before it
+ is considered to be failed. The deployment controller will continue to
+ process failed deployments and a condition with a ProgressDeadlineExceeded
+ reason will be surfaced in the deployment status. Note that progress will
+ not be estimated during the time a deployment is paused. Defaults to 600s.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1.
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ revisionHistoryLimit:
+ description: |-
+ The number of old MachineSets to retain to allow rollback.
+ This is a pointer to distinguish between explicit zero and not specified.
+ Defaults to 1.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ Label selector for machines. Existing MachineSets whose machines are
+ selected by this will be the ones affected by this deployment.
+ It must match the machine template's labels.
+ 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
+ strategy:
+ description: |-
+ The deployment strategy to use to replace existing machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ MachineDeploymentStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be scheduled above the
+ desired number of machines.
+ Value can be an absolute number (ex: 5) or a percentage of
+ desired machines (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to 1.
+ Example: when this is set to 30%, the new MachineSet can be scaled
+ up immediately when the rolling update starts, such that the total
+ number of old and new machines do not exceed 130% of desired
+ machines. Once old machines have been killed, new MachineSet can
+ be scaled up further, ensuring that total number of machines running
+ at any time during the update is at most 130% of desired machines.
+ x-kubernetes-int-or-string: true
+ maxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired
+ machines (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to 0.
+ Example: when this is set to 30%, the old MachineSet can be scaled
+ down to 70% of desired machines immediately when the rolling update
+ starts. Once new machines are ready, old MachineSet can be scaled
+ down further, followed by scaling up the new MachineSet, ensuring
+ that the total number of machines available at all times
+ during the update is at least 70% of desired machines.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of deployment. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ template:
+ description: template describes the machines that will be created.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ generateName:
+ description: |-
+ generateName is an optional prefix, used by the server, to generate a unique
+ name ONLY IF the Name field has not been provided.
+ If this field is used, the name returned to the client will be different
+ than the name passed. This value will also be combined with a unique suffix.
+ The provided value has the same validation rules as the Name field,
+ and may be truncated by the length of the suffix required to make the value
+ unique on the server.
+
+ If this field is specified and the generated name exists, the server will
+ NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
+ ServerTimeout indicating a unique name could not be found in the time allotted, and the client
+ should retry (optionally after the time indicated in the Retry-After header).
+
+ Applied only if Name is not specified.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ 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
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ namespace:
+ description: |-
+ namespace defines the space within each name must be unique. An empty namespace is
+ equivalent to the "default" namespace, but "default" is the canonical representation.
+ Not all objects are required to be scoped to a namespace - the value of this field for
+ those objects will be empty.
+
+ Must be a DNS_LABEL.
+ Cannot be updated.
+ More info: http://kubernetes.io/docs/user-guide/namespaces
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ ownerReferences:
+ description: |-
+ List of objects depended by this object. If ALL objects in the list have
+ been deleted, this object will be garbage collected. If this object is managed by a controller,
+ then an entry in this list will point to this controller, with the controller field set to true.
+ There cannot be more than one managing controller.
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ items:
+ description: |-
+ OwnerReference contains enough information to let you identify an owning
+ object. An owning object must be in the same namespace as the dependent, or
+ be cluster-scoped, so there is no namespace field.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ blockOwnerDeletion:
+ description: |-
+ If true, AND if the owner has the "foregroundDeletion" finalizer, then
+ the owner cannot be deleted from the key-value store until this
+ reference is removed.
+ See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
+ for how the garbage collector interacts with this field and enforces the foreground deletion.
+ Defaults to false.
+ To set this field, a user needs "delete" permission of the owner,
+ otherwise 422 (Unprocessable Entity) will be returned.
+ type: boolean
+ controller:
+ description: If true, this reference points to the managing
+ controller.
+ type: boolean
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
+ type: string
+ required:
+ - apiVersion
+ - kind
+ - name
+ - uid
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.Data without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ data:
+ description: |-
+ data contains the bootstrap data, such as cloud-init details scripts.
+ If nil, the Machine should remain in the Pending state.
+
+ Deprecated: Switch to DataSecretName.
+ type: string
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - selector
+ - template
+ type: object
+ status:
+ description: MachineDeploymentStatus defines the observed state of MachineDeployment.
+ properties:
+ availableReplicas:
+ description: |-
+ Total number of available machines (ready for at least minReadySeconds)
+ targeted by this deployment.
+ format: int32
+ type: integer
+ observedGeneration:
+ description: The generation observed by the deployment controller.
+ format: int64
+ type: integer
+ phase:
+ description: phase represents the current phase of a MachineDeployment
+ (ScalingUp, ScalingDown, Running, Failed, or Unknown).
+ type: string
+ readyReplicas:
+ description: Total number of ready machines targeted by this deployment.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Total number of non-terminated machines targeted by this deployment
+ (their labels match the selector).
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the same as the label selector but in the string format to avoid introspection
+ by clients. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machines targeted by this deployment.
+ This is the total number of machines that are still required for
+ the deployment to have 100% available capacity. They may either
+ be machines that are running but not yet available or machines
+ that still have not been created.
+ format: int32
+ type: integer
+ updatedReplicas:
+ description: |-
+ Total number of non-terminated machines targeted by this deployment
+ that have the desired template spec.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Time duration since creation of MachineDeployment
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Total number of non-terminated machines targeted by this MachineDeployment
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of ready machines targeted by this MachineDeployment
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of non-terminated machines targeted by this deployment
+ that have the desired template spec
+ jsonPath: .status.updatedReplicas
+ name: Updated
+ type: integer
+ - description: Total number of unavailable machines targeted by this MachineDeployment
+ jsonPath: .status.unavailableReplicas
+ name: Unavailable
+ type: integer
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachineDeployment is the Schema for the machinedeployments API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachineDeploymentSpec defines the desired state of MachineDeployment.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine should
+ be ready.
+ Defaults to 0 (machine will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ paused:
+ description: Indicates that the deployment is paused.
+ type: boolean
+ progressDeadlineSeconds:
+ description: |-
+ The maximum time in seconds for a deployment to make progress before it
+ is considered to be failed. The deployment controller will continue to
+ process failed deployments and a condition with a ProgressDeadlineExceeded
+ reason will be surfaced in the deployment status. Note that progress will
+ not be estimated during the time a deployment is paused. Defaults to 600s.
+ format: int32
+ type: integer
+ replicas:
+ default: 1
+ description: |-
+ Number of desired machines. Defaults to 1.
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ revisionHistoryLimit:
+ description: |-
+ The number of old MachineSets to retain to allow rollback.
+ This is a pointer to distinguish between explicit zero and not specified.
+ Defaults to 1.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ Label selector for machines. Existing MachineSets whose machines are
+ selected by this will be the ones affected by this deployment.
+ It must match the machine template's labels.
+ 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
+ strategy:
+ description: |-
+ The deployment strategy to use to replace existing machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ MachineDeploymentStrategyType = RollingUpdate.
+ properties:
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
+ Valid values are "Random, "Newest", "Oldest"
+ When no value is supplied, the default DeletePolicy of MachineSet is used
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be scheduled above the
+ desired number of machines.
+ Value can be an absolute number (ex: 5) or a percentage of
+ desired machines (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to 1.
+ Example: when this is set to 30%, the new MachineSet can be scaled
+ up immediately when the rolling update starts, such that the total
+ number of old and new machines do not exceed 130% of desired
+ machines. Once old machines have been killed, new MachineSet can
+ be scaled up further, ensuring that total number of machines running
+ at any time during the update is at most 130% of desired machines.
+ x-kubernetes-int-or-string: true
+ maxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired
+ machines (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to 0.
+ Example: when this is set to 30%, the old MachineSet can be scaled
+ down to 70% of desired machines immediately when the rolling update
+ starts. Once new machines are ready, old MachineSet can be scaled
+ down further, followed by scaling up the new MachineSet, ensuring
+ that the total number of machines available at all times
+ during the update is at least 70% of desired machines.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of deployment.
+ Default is RollingUpdate.
+ enum:
+ - RollingUpdate
+ - OnDelete
+ type: string
+ type: object
+ template:
+ description: template describes the machines that will be created.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - selector
+ - template
+ type: object
+ status:
+ description: MachineDeploymentStatus defines the observed state of MachineDeployment.
+ properties:
+ availableReplicas:
+ description: |-
+ Total number of available machines (ready for at least minReadySeconds)
+ targeted by this deployment.
+ format: int32
+ type: integer
+ conditions:
+ description: conditions defines current service state of the MachineDeployment.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ observedGeneration:
+ description: The generation observed by the deployment controller.
+ format: int64
+ type: integer
+ phase:
+ description: phase represents the current phase of a MachineDeployment
+ (ScalingUp, ScalingDown, Running, Failed, or Unknown).
+ type: string
+ readyReplicas:
+ description: Total number of ready machines targeted by this deployment.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Total number of non-terminated machines targeted by this deployment
+ (their labels match the selector).
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the same as the label selector but in the string format to avoid introspection
+ by clients. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machines targeted by this deployment.
+ This is the total number of machines that are still required for
+ the deployment to have 100% available capacity. They may either
+ be machines that are running but not yet available or machines
+ that still have not been created.
+ format: int32
+ type: integer
+ updatedReplicas:
+ description: |-
+ Total number of non-terminated machines targeted by this deployment
+ that have the desired template spec.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Total number of machines desired by this MachineDeployment
+ jsonPath: .spec.replicas
+ name: Desired
+ priority: 10
+ type: integer
+ - description: Total number of non-terminated machines targeted by this MachineDeployment
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of ready machines targeted by this MachineDeployment
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of non-terminated machines targeted by this deployment
+ that have the desired template spec
+ jsonPath: .status.updatedReplicas
+ name: Updated
+ type: integer
+ - description: Total number of unavailable machines targeted by this MachineDeployment
+ jsonPath: .status.unavailableReplicas
+ name: Unavailable
+ type: integer
+ - description: MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Time duration since creation of MachineDeployment
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Kubernetes version associated with this MachineDeployment
+ jsonPath: .spec.template.spec.version
+ name: Version
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: MachineDeployment is the Schema for the machinedeployments 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: MachineDeploymentSpec defines the desired state of MachineDeployment.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ minReadySeconds:
+ description: |-
+ minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
+ Defaults to 0 (machine will be considered available as soon as the Node is ready)
+ format: int32
+ type: integer
+ paused:
+ description: Indicates that the deployment is paused.
+ type: boolean
+ progressDeadlineSeconds:
+ description: |-
+ The maximum time in seconds for a deployment to make progress before it
+ is considered to be failed. The deployment controller will continue to
+ process failed deployments and a condition with a ProgressDeadlineExceeded
+ reason will be surfaced in the deployment status. Note that progress will
+ not be estimated during the time a deployment is paused. Defaults to 600s.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/11470 for more details.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Number of desired machines.
+ This is a pointer to distinguish between explicit zero and not specified.
+
+ Defaults to:
+ * if the Kubernetes autoscaler min size and max size annotations are set:
+ - if it's a new MachineDeployment, use min size
+ - if the replicas field of the old MachineDeployment is < min size, use min size
+ - if the replicas field of the old MachineDeployment is > max size, use max size
+ - if the replicas field of the old MachineDeployment is in the (min size, max size) range, keep the value from the oldMD
+ * otherwise use 1
+ Note: Defaulting will be run whenever the replicas field is not set:
+ * A new MachineDeployment is created with replicas not set.
+ * On an existing MachineDeployment the replicas field was first set and is now unset.
+ Those cases are especially relevant for the following Kubernetes autoscaler use cases:
+ * A new MachineDeployment is created and replicas should be managed by the autoscaler
+ * An existing MachineDeployment which initially wasn't controlled by the autoscaler
+ should be later controlled by the autoscaler
+ format: int32
+ type: integer
+ revisionHistoryLimit:
+ description: |-
+ The number of old MachineSets to retain to allow rollback.
+ This is a pointer to distinguish between explicit zero and not specified.
+ Defaults to 1.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/10479 for more details.
+ format: int32
+ type: integer
+ rolloutAfter:
+ description: |-
+ rolloutAfter is a field to indicate a rollout should be performed
+ after the specified time even if no changes have been made to the
+ MachineDeployment.
+ Example: In the YAML the time can be specified in the RFC3339 format.
+ To specify the rolloutAfter target as March 9, 2023, at 9 am UTC
+ use "2023-03-09T09:00:00Z".
+ format: date-time
+ type: string
+ selector:
+ description: |-
+ Label selector for machines. Existing MachineSets whose machines are
+ selected by this will be the ones affected by this deployment.
+ It must match the machine template's labels.
+ 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
+ strategy:
+ description: |-
+ The deployment strategy to use to replace existing machines with
+ new ones.
+ properties:
+ remediation:
+ description: |-
+ remediation controls the strategy of remediating unhealthy machines
+ and how remediating operations should occur during the lifecycle of the dependant MachineSets.
+ properties:
+ maxInFlight:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ maxInFlight determines how many in flight remediations should happen at the same time.
+
+ Remediation only happens on the MachineSet with the most current revision, while
+ older MachineSets (usually present during rollout operations) aren't allowed to remediate.
+
+ Note: In general (independent of remediations), unhealthy machines are always
+ prioritized during scale down operations over healthy ones.
+
+ MaxInFlight can be set to a fixed number or a percentage.
+ Example: when this is set to 20%, the MachineSet controller deletes at most 20% of
+ the desired replicas.
+
+ If not set, remediation is limited to all machines (bounded by replicas)
+ under the active MachineSet's management.
+ x-kubernetes-int-or-string: true
+ type: object
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ MachineDeploymentStrategyType = RollingUpdate.
+ properties:
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
+ Valid values are "Random, "Newest", "Oldest"
+ When no value is supplied, the default DeletePolicy of MachineSet is used
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be scheduled above the
+ desired number of machines.
+ Value can be an absolute number (ex: 5) or a percentage of
+ desired machines (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to 1.
+ Example: when this is set to 30%, the new MachineSet can be scaled
+ up immediately when the rolling update starts, such that the total
+ number of old and new machines do not exceed 130% of desired
+ machines. Once old machines have been killed, new MachineSet can
+ be scaled up further, ensuring that total number of machines running
+ at any time during the update is at most 130% of desired machines.
+ x-kubernetes-int-or-string: true
+ maxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired
+ machines (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to 0.
+ Example: when this is set to 30%, the old MachineSet can be scaled
+ down to 70% of desired machines immediately when the rolling update
+ starts. Once new machines are ready, old MachineSet can be scaled
+ down further, followed by scaling up the new MachineSet, ensuring
+ that the total number of machines available at all times
+ during the update is at least 70% of desired machines.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of deployment. Allowed values are RollingUpdate and OnDelete.
+ The default is RollingUpdate.
+ enum:
+ - RollingUpdate
+ - OnDelete
+ type: string
+ type: object
+ template:
+ description: template describes the machines that will be created.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ readinessGates:
+ description: |-
+ readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
+
+ This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
+ Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
+ for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
+
+ Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
+ they can include the status of those components with a new condition and add this condition to ReadinessGates.
+
+ NOTE: This field is considered only for computing v1beta2 conditions.
+ NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
+ readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
+ readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
+ This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
+ items:
+ description: MachineReadinessGate contains the type of a
+ Machine condition to be used as a readiness gate.
+ properties:
+ conditionType:
+ description: |-
+ conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
+ If the conditions doesn't exist, it will be treated as unknown.
+ Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
+ maxLength: 316
+ minLength: 1
+ 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:
+ - conditionType
+ type: object
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - conditionType
+ x-kubernetes-list-type: map
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - selector
+ - template
+ type: object
+ status:
+ description: MachineDeploymentStatus defines the observed state of MachineDeployment.
+ properties:
+ availableReplicas:
+ description: |-
+ Total number of available machines (ready for at least minReadySeconds)
+ targeted by this deployment.
+ format: int32
+ type: integer
+ conditions:
+ description: conditions defines current service state of the MachineDeployment.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ observedGeneration:
+ description: The generation observed by the deployment controller.
+ format: int64
+ type: integer
+ phase:
+ description: phase represents the current phase of a MachineDeployment
+ (ScalingUp, ScalingDown, Running, Failed, or Unknown).
+ type: string
+ readyReplicas:
+ description: Total number of ready machines targeted by this deployment.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Total number of non-terminated machines targeted by this deployment
+ (their labels match the selector).
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the same as the label selector but in the string format to avoid introspection
+ by clients. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machines targeted by this deployment.
+ This is the total number of machines that are still required for
+ the deployment to have 100% available capacity. They may either
+ be machines that are running but not yet available or machines
+ that still have not been created.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ format: int32
+ type: integer
+ updatedReplicas:
+ description: |-
+ Total number of non-terminated machines targeted by this deployment
+ that have the desired template spec.
+ format: int32
+ type: integer
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in MachineDeployment's status with the V1Beta2 version.
+ properties:
+ availableReplicas:
+ description: availableReplicas is the number of available replicas
+ for this MachineDeployment. A machine is considered available
+ when Machine's Available condition is true.
+ format: int32
+ type: integer
+ conditions:
+ description: |-
+ conditions represents the observations of a MachineDeployment's current state.
+ Known condition types are Available, MachinesReady, MachinesUpToDate, ScalingUp, ScalingDown, Remediating, Deleting, Paused.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ readyReplicas:
+ description: readyReplicas is the number of ready replicas for
+ this MachineDeployment. A machine is considered ready when Machine's
+ Ready condition is true.
+ format: int32
+ type: integer
+ upToDateReplicas:
+ description: upToDateReplicas is the number of up-to-date replicas
+ targeted by this deployment. A machine is considered up-to-date
+ when Machine's UpToDate condition is true.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: machinedrainrules.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: MachineDrainRule
+ listKind: MachineDrainRuleList
+ plural: machinedrainrules
+ singular: machinedrainrule
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Drain behavior
+ jsonPath: .spec.drain.behavior
+ name: Behavior
+ type: string
+ - description: Drain order
+ jsonPath: .spec.drain.order
+ name: Order
+ type: string
+ - description: Time duration since creation of the MachineDrainRule
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: MachineDrainRule is the Schema for the MachineDrainRule 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: spec defines the spec of a MachineDrainRule.
+ properties:
+ drain:
+ description: drain configures if and how Pods are drained.
+ properties:
+ behavior:
+ description: |-
+ behavior defines the drain behavior.
+ Can be either "Drain", "Skip", or "WaitCompleted".
+ "Drain" means that the Pods to which this MachineDrainRule applies will be drained.
+ If behavior is set to "Drain" the order in which Pods are drained can be configured
+ with the order field. When draining Pods of a Node the Pods will be grouped by order
+ and one group after another will be drained (by increasing order). Cluster API will
+ wait until all Pods of a group are terminated / removed from the Node before starting
+ with the next group.
+ "Skip" means that the Pods to which this MachineDrainRule applies will be skipped during drain.
+ "WaitCompleted" means that the pods to which this MachineDrainRule applies will never be evicted
+ and we wait for them to be completed, it is enforced that pods marked with this behavior always have Order=0.
+ enum:
+ - Drain
+ - Skip
+ - WaitCompleted
+ type: string
+ order:
+ description: |-
+ order defines the order in which Pods are drained.
+ Pods with higher order are drained after Pods with lower order.
+ order can only be set if behavior is set to "Drain".
+ If order is not set, 0 will be used.
+ Valid values for order are from -2147483648 to 2147483647 (inclusive).
+ format: int32
+ type: integer
+ required:
+ - behavior
+ type: object
+ machines:
+ description: |-
+ machines defines to which Machines this MachineDrainRule should be applied.
+
+ If machines is not set, the MachineDrainRule applies to all Machines in the Namespace.
+ If machines contains multiple selectors, the results are ORed.
+ Within a single Machine selector the results of selector and clusterSelector are ANDed.
+ Machines will be selected from all Clusters in the Namespace unless otherwise
+ restricted with the clusterSelector.
+
+ Example: Selects control plane Machines in all Clusters or
+ Machines with label "os" == "linux" in Clusters with label
+ "stage" == "production".
+
+ - selector:
+ matchExpressions:
+ - key: cluster.x-k8s.io/control-plane
+ operator: Exists
+ - selector:
+ matchLabels:
+ os: linux
+ clusterSelector:
+ matchExpressions:
+ - key: stage
+ operator: In
+ values:
+ - production
+ items:
+ description: MachineDrainRuleMachineSelector defines to which Machines
+ this MachineDrainRule should be applied.
+ minProperties: 1
+ properties:
+ clusterSelector:
+ description: |-
+ clusterSelector is a label selector which selects Machines by the labels of
+ their Clusters.
+ This field follows standard label selector semantics; if not present or
+ empty, it selects Machines of all Clusters.
+
+ If selector is also set, then the selector as a whole selects
+ Machines matching selector belonging to Clusters selected by clusterSelector.
+ If selector is not set, it selects all Machines belonging to Clusters
+ selected by clusterSelector.
+ 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
+ selector:
+ description: |-
+ selector is a label selector which selects Machines by their labels.
+ This field follows standard label selector semantics; if not present or
+ empty, it selects all Machines.
+
+ If clusterSelector is also set, then the selector as a whole selects
+ Machines matching selector belonging to Clusters selected by clusterSelector.
+ If clusterSelector is not set, it selects all Machines matching selector in
+ all Clusters.
+ 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
+ type: object
+ maxItems: 32
+ minItems: 1
+ type: array
+ x-kubernetes-list-type: atomic
+ pods:
+ description: |-
+ pods defines to which Pods this MachineDrainRule should be applied.
+
+ If pods is not set, the MachineDrainRule applies to all Pods in all Namespaces.
+ If pods contains multiple selectors, the results are ORed.
+ Within a single Pod selector the results of selector and namespaceSelector are ANDed.
+ Pods will be selected from all Namespaces unless otherwise
+ restricted with the namespaceSelector.
+
+ Example: Selects Pods with label "app" == "logging" in all Namespaces or
+ Pods with label "app" == "prometheus" in the "monitoring"
+ Namespace.
+
+ - selector:
+ matchExpressions:
+ - key: app
+ operator: In
+ values:
+ - logging
+ - selector:
+ matchLabels:
+ app: prometheus
+ namespaceSelector:
+ matchLabels:
+ kubernetes.io/metadata.name: monitoring
+ items:
+ description: MachineDrainRulePodSelector defines to which Pods this
+ MachineDrainRule should be applied.
+ minProperties: 1
+ properties:
+ namespaceSelector:
+ description: |-
+ namespaceSelector is a label selector which selects Pods by the labels of
+ their Namespaces.
+ This field follows standard label selector semantics; if not present or
+ empty, it selects Pods of all Namespaces.
+
+ If selector is also set, then the selector as a whole selects
+ Pods matching selector in Namespaces selected by namespaceSelector.
+ If selector is not set, it selects all Pods in Namespaces selected by
+ namespaceSelector.
+ 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
+ selector:
+ description: |-
+ selector is a label selector which selects Pods by their labels.
+ This field follows standard label selector semantics; if not present or
+ empty, it selects all Pods.
+
+ If namespaceSelector is also set, then the selector as a whole selects
+ Pods matching selector in Namespaces selected by namespaceSelector.
+ If namespaceSelector is not set, it selects all Pods matching selector in
+ all Namespaces.
+ 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
+ type: object
+ maxItems: 32
+ minItems: 1
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - drain
+ type: object
+ required:
+ - metadata
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: machinehealthchecks.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: MachineHealthCheck
+ listKind: MachineHealthCheckList
+ plural: machinehealthchecks
+ shortNames:
+ - mhc
+ - mhcs
+ singular: machinehealthcheck
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Maximum number of unhealthy machines allowed
+ jsonPath: .spec.maxUnhealthy
+ name: MaxUnhealthy
+ type: string
+ - description: Number of machines currently monitored
+ jsonPath: .status.expectedMachines
+ name: ExpectedMachines
+ type: integer
+ - description: Current observed healthy machines
+ jsonPath: .status.currentHealthy
+ name: CurrentHealthy
+ type: integer
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachineHealthCheck is the Schema for the machinehealthchecks API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: Specification of machine health check policy
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ Machines older than this duration without a node will be considered to have
+ failed and will be remediated.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ selector:
+ description: Label selector to match machines whose health will be
+ exercised
+ 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
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - clusterName
+ - selector
+ - unhealthyConditions
+ type: object
+ status:
+ description: Most recently observed status of MachineHealthCheck resource
+ properties:
+ conditions:
+ description: conditions defines current service state of the MachineHealthCheck.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ currentHealthy:
+ description: total number of healthy machines counted by this machine
+ health check
+ format: int32
+ minimum: 0
+ type: integer
+ expectedMachines:
+ description: total number of machines counted by this machine health
+ check
+ format: int32
+ minimum: 0
+ type: integer
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ remediationsAllowed:
+ description: |-
+ remediationsAllowed is the number of further remediations allowed by this machine health check before
+ maxUnhealthy short circuiting will be applied
+ format: int32
+ minimum: 0
+ type: integer
+ targets:
+ description: targets shows the current list of machines the machine
+ health check is watching
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Time duration since creation of MachineHealthCheck
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Maximum number of unhealthy machines allowed
+ jsonPath: .spec.maxUnhealthy
+ name: MaxUnhealthy
+ type: string
+ - description: Number of machines currently monitored
+ jsonPath: .status.expectedMachines
+ name: ExpectedMachines
+ type: integer
+ - description: Current observed healthy machines
+ jsonPath: .status.currentHealthy
+ name: CurrentHealthy
+ type: integer
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachineHealthCheck is the Schema for the machinehealthchecks API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: Specification of machine health check policy
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ Machines older than this duration without a node will be considered to have
+ failed and will be remediated.
+ If not set, this value is defaulted to 10 minutes.
+ If you wish to disable this feature, set the value explicitly to 0.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ selector:
+ description: Label selector to match machines whose health will be
+ exercised
+ 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
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ minItems: 1
+ type: array
+ unhealthyRange:
+ description: |-
+ Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
+ is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
+ Eg. "[3-5]" - This means that remediation will be allowed only when:
+ (a) there are at least 3 unhealthy machines (and)
+ (b) there are at most 5 unhealthy machines
+ pattern: ^\[[0-9]+-[0-9]+\]$
+ type: string
+ required:
+ - clusterName
+ - selector
+ - unhealthyConditions
+ type: object
+ status:
+ description: Most recently observed status of MachineHealthCheck resource
+ properties:
+ conditions:
+ description: conditions defines current service state of the MachineHealthCheck.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ currentHealthy:
+ description: total number of healthy machines counted by this machine
+ health check
+ format: int32
+ minimum: 0
+ type: integer
+ expectedMachines:
+ description: total number of machines counted by this machine health
+ check
+ format: int32
+ minimum: 0
+ type: integer
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ remediationsAllowed:
+ description: |-
+ remediationsAllowed is the number of further remediations allowed by this machine health check before
+ maxUnhealthy short circuiting will be applied
+ format: int32
+ minimum: 0
+ type: integer
+ targets:
+ description: targets shows the current list of machines the machine
+ health check is watching
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Number of machines currently monitored
+ jsonPath: .status.expectedMachines
+ name: ExpectedMachines
+ type: integer
+ - description: Maximum number of unhealthy machines allowed
+ jsonPath: .spec.maxUnhealthy
+ name: MaxUnhealthy
+ type: string
+ - description: Current observed healthy machines
+ jsonPath: .status.currentHealthy
+ name: CurrentHealthy
+ type: integer
+ - description: Time duration since creation of MachineHealthCheck
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: MachineHealthCheck is the Schema for the machinehealthchecks
+ 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: Specification of machine health check policy
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ maxUnhealthy:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
+ "selector" are not healthy.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/10722 for more details.
+ x-kubernetes-int-or-string: true
+ nodeStartupTimeout:
+ description: |-
+ nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
+ to consider a Machine unhealthy if a corresponding Node isn't associated
+ through a `Spec.ProviderID` field.
+
+ The duration set in this field is compared to the greatest of:
+ - Cluster's infrastructure ready condition timestamp (if and when available)
+ - Control Plane's initialized condition timestamp (if and when available)
+ - Machine's infrastructure ready condition timestamp (if and when available)
+ - Machine's metadata creation timestamp
+
+ Defaults to 10 minutes.
+ If you wish to disable this feature, set the value explicitly to 0.
+ type: string
+ remediationTemplate:
+ description: |-
+ remediationTemplate is a reference to a remediation template
+ provided by an infrastructure provider.
+
+ This field is completely optional, when filled, the MachineHealthCheck controller
+ creates a new object from the template referenced and hands off remediation of the machine to
+ a controller that lives outside of Cluster API.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ selector:
+ description: Label selector to match machines whose health will be
+ exercised
+ 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
+ unhealthyConditions:
+ description: |-
+ unhealthyConditions contains a list of the conditions that determine
+ whether a node is considered unhealthy. The conditions are combined in a
+ logical OR, i.e. if any of the conditions is met, the node is unhealthy.
+ items:
+ description: |-
+ UnhealthyCondition represents a Node condition type and value with a timeout
+ specified as a duration. When the named condition has been in the given
+ status for at least the timeout value, a node is considered unhealthy.
+ properties:
+ status:
+ minLength: 1
+ type: string
+ timeout:
+ type: string
+ type:
+ minLength: 1
+ type: string
+ required:
+ - status
+ - timeout
+ - type
+ type: object
+ type: array
+ unhealthyRange:
+ description: |-
+ Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
+ is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
+ Eg. "[3-5]" - This means that remediation will be allowed only when:
+ (a) there are at least 3 unhealthy machines (and)
+ (b) there are at most 5 unhealthy machines
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/10722 for more details.
+ pattern: ^\[[0-9]+-[0-9]+\]$
+ type: string
+ required:
+ - clusterName
+ - selector
+ type: object
+ status:
+ description: Most recently observed status of MachineHealthCheck resource
+ properties:
+ conditions:
+ description: conditions defines current service state of the MachineHealthCheck.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ currentHealthy:
+ description: total number of healthy machines counted by this machine
+ health check
+ format: int32
+ minimum: 0
+ type: integer
+ expectedMachines:
+ description: total number of machines counted by this machine health
+ check
+ format: int32
+ minimum: 0
+ type: integer
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ remediationsAllowed:
+ description: |-
+ remediationsAllowed is the number of further remediations allowed by this machine health check before
+ maxUnhealthy short circuiting will be applied
+ format: int32
+ minimum: 0
+ type: integer
+ targets:
+ description: targets shows the current list of machines the machine
+ health check is watching
+ items:
+ type: string
+ type: array
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in MachineHealthCheck's status with the V1Beta2 version.
+ properties:
+ conditions:
+ description: |-
+ conditions represents the observations of a MachineHealthCheck's current state.
+ Known condition types are RemediationAllowed, Paused.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: machinepools.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: MachinePool
+ listKind: MachinePoolList
+ plural: machinepools
+ shortNames:
+ - mp
+ singular: machinepool
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: MachinePool replicas count
+ jsonPath: .status.replicas
+ name: Replicas
+ type: string
+ - description: MachinePool status such as Terminating/Pending/Provisioning/Running/Failed
+ etc
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Kubernetes version associated with this MachinePool
+ jsonPath: .spec.template.spec.version
+ name: Version
+ type: string
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachinePool is the Schema for the machinepools API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachinePoolSpec defines the desired state of MachinePool.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ failureDomains:
+ description: failureDomains is the list of failure domains this MachinePool
+ should be attached to.
+ items:
+ type: string
+ type: array
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine instances should
+ be ready.
+ Defaults to 0 (machine instance will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ providerIDList:
+ description: |-
+ providerIDList are the identification IDs of machine instances provided by the provider.
+ This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
+ items:
+ type: string
+ type: array
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1.
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ strategy:
+ description: |-
+ The deployment strategy to use to replace existing machine instances with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ MachineDeploymentStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be scheduled above the
+ desired number of machines.
+ Value can be an absolute number (ex: 5) or a percentage of
+ desired machines (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to 1.
+ Example: when this is set to 30%, the new MachineSet can be scaled
+ up immediately when the rolling update starts, such that the total
+ number of old and new machines do not exceed 130% of desired
+ machines. Once old machines have been killed, new MachineSet can
+ be scaled up further, ensuring that total number of machines running
+ at any time during the update is at most 130% of desired machines.
+ x-kubernetes-int-or-string: true
+ maxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of machines that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired
+ machines (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to 0.
+ Example: when this is set to 30%, the old MachineSet can be scaled
+ down to 70% of desired machines immediately when the rolling update
+ starts. Once new machines are ready, old MachineSet can be scaled
+ down further, followed by scaling up the new MachineSet, ensuring
+ that the total number of machines available at all times
+ during the update is at least 70% of desired machines.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of deployment. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ template:
+ description: template describes the machines that will be created.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ generateName:
+ description: |-
+ generateName is an optional prefix, used by the server, to generate a unique
+ name ONLY IF the Name field has not been provided.
+ If this field is used, the name returned to the client will be different
+ than the name passed. This value will also be combined with a unique suffix.
+ The provided value has the same validation rules as the Name field,
+ and may be truncated by the length of the suffix required to make the value
+ unique on the server.
+
+ If this field is specified and the generated name exists, the server will
+ NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
+ ServerTimeout indicating a unique name could not be found in the time allotted, and the client
+ should retry (optionally after the time indicated in the Retry-After header).
+
+ Applied only if Name is not specified.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ 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
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ namespace:
+ description: |-
+ namespace defines the space within each name must be unique. An empty namespace is
+ equivalent to the "default" namespace, but "default" is the canonical representation.
+ Not all objects are required to be scoped to a namespace - the value of this field for
+ those objects will be empty.
+
+ Must be a DNS_LABEL.
+ Cannot be updated.
+ More info: http://kubernetes.io/docs/user-guide/namespaces
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ ownerReferences:
+ description: |-
+ List of objects depended by this object. If ALL objects in the list have
+ been deleted, this object will be garbage collected. If this object is managed by a controller,
+ then an entry in this list will point to this controller, with the controller field set to true.
+ There cannot be more than one managing controller.
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ items:
+ description: |-
+ OwnerReference contains enough information to let you identify an owning
+ object. An owning object must be in the same namespace as the dependent, or
+ be cluster-scoped, so there is no namespace field.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ blockOwnerDeletion:
+ description: |-
+ If true, AND if the owner has the "foregroundDeletion" finalizer, then
+ the owner cannot be deleted from the key-value store until this
+ reference is removed.
+ See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
+ for how the garbage collector interacts with this field and enforces the foreground deletion.
+ Defaults to false.
+ To set this field, a user needs "delete" permission of the owner,
+ otherwise 422 (Unprocessable Entity) will be returned.
+ type: boolean
+ controller:
+ description: If true, this reference points to the managing
+ controller.
+ type: boolean
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
+ type: string
+ required:
+ - apiVersion
+ - kind
+ - name
+ - uid
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.Data without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ data:
+ description: |-
+ data contains the bootstrap data, such as cloud-init details scripts.
+ If nil, the Machine should remain in the Pending state.
+
+ Deprecated: Switch to DataSecretName.
+ type: string
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - template
+ type: object
+ status:
+ description: MachinePoolStatus defines the observed state of MachinePool.
+ properties:
+ availableReplicas:
+ description: The number of available replicas (ready for at least
+ minReadySeconds) for this MachinePool.
+ format: int32
+ type: integer
+ bootstrapReady:
+ description: bootstrapReady is the state of the bootstrap provider.
+ type: boolean
+ conditions:
+ description: conditions define the current service state of the MachinePool.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ failureMessage indicates that there is a problem reconciling the state,
+ and will be set to a descriptive error message.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a problem reconciling the state, and
+ will be set to a token value suitable for programmatic interpretation.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ nodeRefs:
+ description: nodeRefs will point to the corresponding Nodes if it
+ they exist.
+ items:
+ description: ObjectReference contains enough information to let
+ you inspect or modify the referred object.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of cluster actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ readyReplicas:
+ description: The number of ready replicas for this MachinePool. A
+ machine is considered ready when the node has been created and is
+ "Ready".
+ format: int32
+ type: integer
+ replicas:
+ description: replicas is the most recently observed number of replicas.
+ format: int32
+ type: integer
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machine instances targeted by this machine pool.
+ This is the total number of machine instances that are still required for
+ the machine pool to have 100% available capacity. They may either
+ be machine instances that are running but not yet available or machine instances
+ that still have not been created.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of MachinePool
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: MachinePool replicas count
+ jsonPath: .status.replicas
+ name: Replicas
+ type: string
+ - description: MachinePool status such as Terminating/Pending/Provisioning/Running/Failed
+ etc
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Kubernetes version associated with this MachinePool
+ jsonPath: .spec.template.spec.version
+ name: Version
+ type: string
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachinePool is the Schema for the machinepools API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachinePoolSpec defines the desired state of MachinePool.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ failureDomains:
+ description: failureDomains is the list of failure domains this MachinePool
+ should be attached to.
+ items:
+ type: string
+ type: array
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine instances should
+ be ready.
+ Defaults to 0 (machine instance will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ providerIDList:
+ description: |-
+ providerIDList are the identification IDs of machine instances provided by the provider.
+ This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
+ items:
+ type: string
+ type: array
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1.
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ template:
+ description: template describes the machines that will be created.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - template
+ type: object
+ status:
+ description: MachinePoolStatus defines the observed state of MachinePool.
+ properties:
+ availableReplicas:
+ description: The number of available replicas (ready for at least
+ minReadySeconds) for this MachinePool.
+ format: int32
+ type: integer
+ bootstrapReady:
+ description: bootstrapReady is the state of the bootstrap provider.
+ type: boolean
+ conditions:
+ description: conditions define the current service state of the MachinePool.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ failureMessage indicates that there is a problem reconciling the state,
+ and will be set to a descriptive error message.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a problem reconciling the state, and
+ will be set to a token value suitable for programmatic interpretation.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ nodeRefs:
+ description: nodeRefs will point to the corresponding Nodes if it
+ they exist.
+ items:
+ description: ObjectReference contains enough information to let
+ you inspect or modify the referred object.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of cluster actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ readyReplicas:
+ description: The number of ready replicas for this MachinePool. A
+ machine is considered ready when the node has been created and is
+ "Ready".
+ format: int32
+ type: integer
+ replicas:
+ description: replicas is the most recently observed number of replicas.
+ format: int32
+ type: integer
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machine instances targeted by this machine pool.
+ This is the total number of machine instances that are still required for
+ the machine pool to have 100% available capacity. They may either
+ be machine instances that are running but not yet available or machine instances
+ that still have not been created.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Total number of machines desired by this MachinePool
+ jsonPath: .spec.replicas
+ name: Desired
+ priority: 10
+ type: integer
+ - description: MachinePool replicas count
+ jsonPath: .status.replicas
+ name: Replicas
+ type: string
+ - description: MachinePool status such as Terminating/Pending/Provisioning/Running/Failed
+ etc
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Time duration since creation of MachinePool
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Kubernetes version associated with this MachinePool
+ jsonPath: .spec.template.spec.version
+ name: Version
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: MachinePool is the Schema for the machinepools 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: MachinePoolSpec defines the desired state of MachinePool.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ failureDomains:
+ description: failureDomains is the list of failure domains this MachinePool
+ should be attached to.
+ items:
+ type: string
+ type: array
+ minReadySeconds:
+ description: |-
+ Minimum number of seconds for which a newly created machine instances should
+ be ready.
+ Defaults to 0 (machine instance will be considered available as soon as it
+ is ready)
+ format: int32
+ type: integer
+ providerIDList:
+ description: |-
+ providerIDList are the identification IDs of machine instances provided by the provider.
+ This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
+ items:
+ type: string
+ type: array
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1.
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ template:
+ description: template describes the machines that will be created.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ readinessGates:
+ description: |-
+ readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
+
+ This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
+ Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
+ for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
+
+ Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
+ they can include the status of those components with a new condition and add this condition to ReadinessGates.
+
+ NOTE: This field is considered only for computing v1beta2 conditions.
+ NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
+ readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
+ readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
+ This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
+ items:
+ description: MachineReadinessGate contains the type of a
+ Machine condition to be used as a readiness gate.
+ properties:
+ conditionType:
+ description: |-
+ conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
+ If the conditions doesn't exist, it will be treated as unknown.
+ Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
+ maxLength: 316
+ minLength: 1
+ 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:
+ - conditionType
+ type: object
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - conditionType
+ x-kubernetes-list-type: map
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - template
+ type: object
+ status:
+ description: MachinePoolStatus defines the observed state of MachinePool.
+ properties:
+ availableReplicas:
+ description: The number of available replicas (ready for at least
+ minReadySeconds) for this MachinePool.
+ format: int32
+ type: integer
+ bootstrapReady:
+ description: bootstrapReady is the state of the bootstrap provider.
+ type: boolean
+ conditions:
+ description: conditions define the current service state of the MachinePool.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ failureMessage indicates that there is a problem reconciling the state,
+ and will be set to a descriptive error message.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a problem reconciling the state, and
+ will be set to a token value suitable for programmatic interpretation.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ nodeRefs:
+ description: nodeRefs will point to the corresponding Nodes if it
+ they exist.
+ items:
+ description: ObjectReference contains enough information to let
+ you inspect or modify the referred object.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of cluster actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ readyReplicas:
+ description: The number of ready replicas for this MachinePool. A
+ machine is considered ready when the node has been created and is
+ "Ready".
+ format: int32
+ type: integer
+ replicas:
+ description: replicas is the most recently observed number of replicas.
+ format: int32
+ type: integer
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machine instances targeted by this machine pool.
+ This is the total number of machine instances that are still required for
+ the machine pool to have 100% available capacity. They may either
+ be machine instances that are running but not yet available or machine instances
+ that still have not been created.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ format: int32
+ type: integer
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in MachinePool's status with the V1Beta2 version.
+ properties:
+ availableReplicas:
+ description: availableReplicas is the number of available replicas
+ for this MachinePool. A machine is considered available when
+ Machine's Available condition is true.
+ format: int32
+ type: integer
+ conditions:
+ description: |-
+ conditions represents the observations of a MachinePool's current state.
+ Known condition types are Available, BootstrapConfigReady, InfrastructureReady, MachinesReady, MachinesUpToDate,
+ ScalingUp, ScalingDown, Remediating, Deleting, Paused.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ readyReplicas:
+ description: readyReplicas is the number of ready replicas for
+ this MachinePool. A machine is considered ready when Machine's
+ Ready condition is true.
+ format: int32
+ type: integer
+ upToDateReplicas:
+ description: upToDateReplicas is the number of up-to-date replicas
+ targeted by this MachinePool. A machine is considered up-to-date
+ when Machine's UpToDate condition is true.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ scale:
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: machines.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: Machine
+ listKind: MachineList
+ plural: machines
+ shortNames:
+ - ma
+ singular: machine
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Provider ID
+ jsonPath: .spec.providerID
+ name: ProviderID
+ type: string
+ - description: Machine status such as Terminating/Pending/Running/Failed etc
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Kubernetes version associated with this Machine
+ jsonPath: .spec.version
+ name: Version
+ type: string
+ - description: Node name associated with this machine
+ jsonPath: .status.nodeRef.name
+ name: NodeName
+ priority: 1
+ type: string
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ Machine is the Schema for the machines API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachineSpec defines the desired state of Machine.
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.Data without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ data:
+ description: |-
+ data contains the bootstrap data, such as cloud-init details scripts.
+ If nil, the Machine should remain in the Pending state.
+
+ Deprecated: Switch to DataSecretName.
+ type: string
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ status:
+ description: MachineStatus defines the observed state of Machine.
+ properties:
+ addresses:
+ description: |-
+ addresses is a list of addresses assigned to the machine.
+ This field is copied from the infrastructure provider reference.
+ items:
+ description: MachineAddress contains information for the node's
+ address.
+ properties:
+ address:
+ description: The machine address.
+ type: string
+ type:
+ description: Machine address type, one of Hostname, ExternalIP
+ or InternalIP.
+ type: string
+ required:
+ - address
+ - type
+ type: object
+ type: array
+ bootstrapReady:
+ description: bootstrapReady is the state of the bootstrap provider.
+ type: boolean
+ conditions:
+ description: conditions defines current service state of the Machine.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ failureMessage will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+ type: string
+ failureReason:
+ description: |-
+ failureReason will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a succinct value suitable
+ for machine interpretation.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ lastUpdated:
+ description: lastUpdated identifies when the phase of the Machine
+ last transitioned.
+ format: date-time
+ type: string
+ nodeRef:
+ description: nodeRef will point to the corresponding Node if it exists.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of machine actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ version:
+ description: |-
+ version specifies the current version of Kubernetes running
+ on the corresponding Node. This is meant to be a means of bubbling
+ up status from the Node to the Machine.
+ It is entirely optional, but useful for end-user UX if it’s present.
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Time duration since creation of Machine
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Provider ID
+ jsonPath: .spec.providerID
+ name: ProviderID
+ type: string
+ - description: Machine status such as Terminating/Pending/Running/Failed etc
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Kubernetes version associated with this Machine
+ jsonPath: .spec.version
+ name: Version
+ type: string
+ - description: Node name associated with this machine
+ jsonPath: .status.nodeRef.name
+ name: NodeName
+ priority: 1
+ type: string
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ Machine is the Schema for the machines API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachineSpec defines the desired state of Machine.
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ status:
+ description: MachineStatus defines the observed state of Machine.
+ properties:
+ addresses:
+ description: |-
+ addresses is a list of addresses assigned to the machine.
+ This field is copied from the infrastructure provider reference.
+ items:
+ description: MachineAddress contains information for the node's
+ address.
+ properties:
+ address:
+ description: The machine address.
+ type: string
+ type:
+ description: Machine address type, one of Hostname, ExternalIP
+ or InternalIP.
+ type: string
+ required:
+ - address
+ - type
+ type: object
+ type: array
+ bootstrapReady:
+ description: bootstrapReady is the state of the bootstrap provider.
+ type: boolean
+ conditions:
+ description: conditions defines current service state of the Machine.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ failureMessage will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+ type: string
+ failureReason:
+ description: |-
+ failureReason will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a succinct value suitable
+ for machine interpretation.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ lastUpdated:
+ description: lastUpdated identifies when the phase of the Machine
+ last transitioned.
+ format: date-time
+ type: string
+ nodeInfo:
+ description: |-
+ nodeInfo is a set of ids/uuids to uniquely identify the node.
+ More info: https://kubernetes.io/docs/concepts/nodes/node/#info
+ properties:
+ architecture:
+ description: The Architecture reported by the node
+ type: string
+ bootID:
+ description: Boot ID reported by the node.
+ type: string
+ containerRuntimeVersion:
+ description: ContainerRuntime Version reported by the node through
+ runtime remote API (e.g. containerd://1.4.2).
+ type: string
+ kernelVersion:
+ description: Kernel Version reported by the node from 'uname -r'
+ (e.g. 3.16.0-0.bpo.4-amd64).
+ type: string
+ kubeProxyVersion:
+ description: 'Deprecated: KubeProxy Version reported by the node.'
+ type: string
+ kubeletVersion:
+ description: Kubelet Version reported by the node.
+ type: string
+ machineID:
+ description: |-
+ MachineID reported by the node. For unique machine identification
+ in the cluster this field is preferred. Learn more from man(5)
+ machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
+ type: string
+ operatingSystem:
+ description: The Operating System reported by the node
+ type: string
+ osImage:
+ description: OS Image reported by the node from /etc/os-release
+ (e.g. Debian GNU/Linux 7 (wheezy)).
+ type: string
+ systemUUID:
+ description: |-
+ SystemUUID reported by the node. For unique machine identification
+ MachineID is preferred. This field is specific to Red Hat hosts
+ https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
+ type: string
+ required:
+ - architecture
+ - bootID
+ - containerRuntimeVersion
+ - kernelVersion
+ - kubeProxyVersion
+ - kubeletVersion
+ - machineID
+ - operatingSystem
+ - osImage
+ - systemUUID
+ type: object
+ nodeRef:
+ description: nodeRef will point to the corresponding Node if it exists.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of machine actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ version:
+ description: |-
+ version specifies the current version of Kubernetes running
+ on the corresponding Node. This is meant to be a means of bubbling
+ up status from the Node to the Machine.
+ It is entirely optional, but useful for end-user UX if it’s present.
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Node name associated with this machine
+ jsonPath: .status.nodeRef.name
+ name: NodeName
+ type: string
+ - description: Provider ID
+ jsonPath: .spec.providerID
+ name: ProviderID
+ type: string
+ - description: Machine status such as Terminating/Pending/Running/Failed etc
+ jsonPath: .status.phase
+ name: Phase
+ type: string
+ - description: Time duration since creation of Machine
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Kubernetes version associated with this Machine
+ jsonPath: .spec.version
+ name: Version
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: Machine is the Schema for the machines 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: MachineSpec defines the desired state of Machine.
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ readinessGates:
+ description: |-
+ readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
+
+ This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
+ Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
+ for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
+
+ Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
+ they can include the status of those components with a new condition and add this condition to ReadinessGates.
+
+ NOTE: This field is considered only for computing v1beta2 conditions.
+ NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
+ readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
+ readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
+ This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
+ items:
+ description: MachineReadinessGate contains the type of a Machine
+ condition to be used as a readiness gate.
+ properties:
+ conditionType:
+ description: |-
+ conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
+ If the conditions doesn't exist, it will be treated as unknown.
+ Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
+ maxLength: 316
+ minLength: 1
+ 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:
+ - conditionType
+ type: object
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - conditionType
+ x-kubernetes-list-type: map
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ status:
+ description: MachineStatus defines the observed state of Machine.
+ properties:
+ addresses:
+ description: |-
+ addresses is a list of addresses assigned to the machine.
+ This field is copied from the infrastructure provider reference.
+ items:
+ description: MachineAddress contains information for the node's
+ address.
+ properties:
+ address:
+ description: The machine address.
+ type: string
+ type:
+ description: Machine address type, one of Hostname, ExternalIP,
+ InternalIP, ExternalDNS or InternalDNS.
+ type: string
+ required:
+ - address
+ - type
+ type: object
+ type: array
+ bootstrapReady:
+ description: bootstrapReady is the state of the bootstrap provider.
+ type: boolean
+ certificatesExpiryDate:
+ description: |-
+ certificatesExpiryDate is the expiry date of the machine certificates.
+ This value is only set for control plane machines.
+ format: date-time
+ type: string
+ conditions:
+ description: conditions defines current service state of the Machine.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ deletion:
+ description: |-
+ deletion contains information relating to removal of the Machine.
+ Only present when the Machine has a deletionTimestamp and drain or wait for volume detach started.
+ properties:
+ nodeDrainStartTime:
+ description: |-
+ nodeDrainStartTime is the time when the drain of the node started and is used to determine
+ if the NodeDrainTimeout is exceeded.
+ Only present when the Machine has a deletionTimestamp and draining the node had been started.
+ format: date-time
+ type: string
+ waitForNodeVolumeDetachStartTime:
+ description: |-
+ waitForNodeVolumeDetachStartTime is the time when waiting for volume detachment started
+ and is used to determine if the NodeVolumeDetachTimeout is exceeded.
+ Detaching volumes from nodes is usually done by CSI implementations and the current state
+ is observed from the node's `.Status.VolumesAttached` field.
+ Only present when the Machine has a deletionTimestamp and waiting for volume detachments had been started.
+ format: date-time
+ type: string
+ type: object
+ failureMessage:
+ description: |-
+ failureMessage will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ failureReason:
+ description: |-
+ failureReason will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a succinct value suitable
+ for machine interpretation.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ infrastructureReady:
+ description: infrastructureReady is the state of the infrastructure
+ provider.
+ type: boolean
+ lastUpdated:
+ description: lastUpdated identifies when the phase of the Machine
+ last transitioned.
+ format: date-time
+ type: string
+ nodeInfo:
+ description: |-
+ nodeInfo is a set of ids/uuids to uniquely identify the node.
+ More info: https://kubernetes.io/docs/concepts/nodes/node/#info
+ properties:
+ architecture:
+ description: The Architecture reported by the node
+ type: string
+ bootID:
+ description: Boot ID reported by the node.
+ type: string
+ containerRuntimeVersion:
+ description: ContainerRuntime Version reported by the node through
+ runtime remote API (e.g. containerd://1.4.2).
+ type: string
+ kernelVersion:
+ description: Kernel Version reported by the node from 'uname -r'
+ (e.g. 3.16.0-0.bpo.4-amd64).
+ type: string
+ kubeProxyVersion:
+ description: 'Deprecated: KubeProxy Version reported by the node.'
+ type: string
+ kubeletVersion:
+ description: Kubelet Version reported by the node.
+ type: string
+ machineID:
+ description: |-
+ MachineID reported by the node. For unique machine identification
+ in the cluster this field is preferred. Learn more from man(5)
+ machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
+ type: string
+ operatingSystem:
+ description: The Operating System reported by the node
+ type: string
+ osImage:
+ description: OS Image reported by the node from /etc/os-release
+ (e.g. Debian GNU/Linux 7 (wheezy)).
+ type: string
+ systemUUID:
+ description: |-
+ SystemUUID reported by the node. For unique machine identification
+ MachineID is preferred. This field is specific to Red Hat hosts
+ https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
+ type: string
+ required:
+ - architecture
+ - bootID
+ - containerRuntimeVersion
+ - kernelVersion
+ - kubeProxyVersion
+ - kubeletVersion
+ - machineID
+ - operatingSystem
+ - osImage
+ - systemUUID
+ type: object
+ nodeRef:
+ description: nodeRef will point to the corresponding Node if it exists.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ phase:
+ description: |-
+ phase represents the current phase of machine actuation.
+ E.g. Pending, Running, Terminating, Failed etc.
+ type: string
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in Machine's status with the V1Beta2 version.
+ properties:
+ conditions:
+ description: |-
+ conditions represents the observations of a Machine's current state.
+ Known condition types are Available, Ready, UpToDate, BootstrapConfigReady, InfrastructureReady, NodeReady,
+ NodeHealthy, Deleting, Paused.
+ If a MachineHealthCheck is targeting this machine, also HealthCheckSucceeded, OwnerRemediated conditions are added.
+ Additionally control plane Machines controlled by KubeadmControlPlane will have following additional conditions:
+ APIServerPodHealthy, ControllerManagerPodHealthy, SchedulerPodHealthy, EtcdPodHealthy, EtcdMemberHealthy.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: machinesets.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: MachineSet
+ listKind: MachineSetList
+ plural: machinesets
+ shortNames:
+ - ms
+ singular: machineset
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Total number of non-terminated machines targeted by this machineset
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of available machines (ready for at least minReadySeconds)
+ jsonPath: .status.availableReplicas
+ name: Available
+ type: integer
+ - description: Total number of ready machines targeted by this machineset.
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachineSet is the Schema for the machinesets API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachineSetSpec defines the desired state of MachineSet.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used to identify nodes to delete when downscaling.
+ Defaults to "Random". Valid values are "Random, "Newest", "Oldest"
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ minReadySeconds:
+ description: |-
+ minReadySeconds is the minimum number of seconds for which a newly created machine should be ready.
+ Defaults to 0 (machine will be considered available as soon as it is ready)
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ replicas is the number of desired replicas.
+ This is a pointer to distinguish between explicit zero and unspecified.
+ Defaults to 1.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is a label query over machines that should match the replica count.
+ Label keys and values that must match in order to be controlled by this MachineSet.
+ It must match the machine template's labels.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
+ 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
+ template:
+ description: |-
+ template is the object that describes the machine that will be created if
+ insufficient replicas are detected.
+ Object references to custom resources are treated as templates.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ generateName:
+ description: |-
+ generateName is an optional prefix, used by the server, to generate a unique
+ name ONLY IF the Name field has not been provided.
+ If this field is used, the name returned to the client will be different
+ than the name passed. This value will also be combined with a unique suffix.
+ The provided value has the same validation rules as the Name field,
+ and may be truncated by the length of the suffix required to make the value
+ unique on the server.
+
+ If this field is specified and the generated name exists, the server will
+ NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
+ ServerTimeout indicating a unique name could not be found in the time allotted, and the client
+ should retry (optionally after the time indicated in the Retry-After header).
+
+ Applied only if Name is not specified.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ 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
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ namespace:
+ description: |-
+ namespace defines the space within each name must be unique. An empty namespace is
+ equivalent to the "default" namespace, but "default" is the canonical representation.
+ Not all objects are required to be scoped to a namespace - the value of this field for
+ those objects will be empty.
+
+ Must be a DNS_LABEL.
+ Cannot be updated.
+ More info: http://kubernetes.io/docs/user-guide/namespaces
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ type: string
+ ownerReferences:
+ description: |-
+ List of objects depended by this object. If ALL objects in the list have
+ been deleted, this object will be garbage collected. If this object is managed by a controller,
+ then an entry in this list will point to this controller, with the controller field set to true.
+ There cannot be more than one managing controller.
+
+ Deprecated: This field has no function and is going to be removed in a next release.
+ items:
+ description: |-
+ OwnerReference contains enough information to let you identify an owning
+ object. An owning object must be in the same namespace as the dependent, or
+ be cluster-scoped, so there is no namespace field.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ blockOwnerDeletion:
+ description: |-
+ If true, AND if the owner has the "foregroundDeletion" finalizer, then
+ the owner cannot be deleted from the key-value store until this
+ reference is removed.
+ See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
+ for how the garbage collector interacts with this field and enforces the foreground deletion.
+ Defaults to false.
+ To set this field, a user needs "delete" permission of the owner,
+ otherwise 422 (Unprocessable Entity) will be returned.
+ type: boolean
+ controller:
+ description: If true, this reference points to the managing
+ controller.
+ type: boolean
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
+ type: string
+ required:
+ - apiVersion
+ - kind
+ - name
+ - uid
+ type: object
+ x-kubernetes-map-type: atomic
+ type: array
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.Data without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ data:
+ description: |-
+ data contains the bootstrap data, such as cloud-init details scripts.
+ If nil, the Machine should remain in the Pending state.
+
+ Deprecated: Switch to DataSecretName.
+ type: string
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - selector
+ type: object
+ status:
+ description: MachineSetStatus defines the observed state of MachineSet.
+ properties:
+ availableReplicas:
+ description: The number of available replicas (ready for at least
+ minReadySeconds) for this MachineSet.
+ format: int32
+ type: integer
+ failureMessage:
+ type: string
+ failureReason:
+ description: |-
+ In the event that there is a terminal problem reconciling the
+ replicas, both FailureReason and FailureMessage will be set. FailureReason
+ will be populated with a succinct value suitable for machine
+ interpretation, while FailureMessage will contain a more verbose
+ string suitable for logging and human consumption.
+
+ These fields should not be set for transitive errors that a
+ controller faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the MachineTemplate's spec or the configuration of
+ the machine controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the machine controller, or the
+ responsible machine controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the MachineSet object and/or logged in the
+ controller's output.
+ type: string
+ fullyLabeledReplicas:
+ description: The number of replicas that have labels matching the
+ labels of the machine template of the MachineSet.
+ format: int32
+ type: integer
+ observedGeneration:
+ description: observedGeneration reflects the generation of the most
+ recently observed MachineSet.
+ format: int64
+ type: integer
+ readyReplicas:
+ description: The number of ready replicas for this MachineSet. A machine
+ is considered ready when the node has been created and is "Ready".
+ format: int32
+ type: integer
+ replicas:
+ description: replicas is the most recently observed number of replicas.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the same as the label selector but in the string format to avoid introspection
+ by clients. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Time duration since creation of MachineSet
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Total number of non-terminated machines targeted by this machineset
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of available machines (ready for at least minReadySeconds)
+ jsonPath: .status.availableReplicas
+ name: Available
+ type: integer
+ - description: Total number of ready machines targeted by this machineset.
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ MachineSet is the Schema for the machinesets API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: MachineSetSpec defines the desired state of MachineSet.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used to identify nodes to delete when downscaling.
+ Defaults to "Random". Valid values are "Random, "Newest", "Oldest"
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ minReadySeconds:
+ description: |-
+ minReadySeconds is the minimum number of seconds for which a newly created machine should be ready.
+ Defaults to 0 (machine will be considered available as soon as it is ready)
+ format: int32
+ type: integer
+ replicas:
+ default: 1
+ description: |-
+ replicas is the number of desired replicas.
+ This is a pointer to distinguish between explicit zero and unspecified.
+ Defaults to 1.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is a label query over machines that should match the replica count.
+ Label keys and values that must match in order to be controlled by this MachineSet.
+ It must match the machine template's labels.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
+ 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
+ template:
+ description: |-
+ template is the object that describes the machine that will be created if
+ insufficient replicas are detected.
+ Object references to custom resources are treated as templates.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - selector
+ type: object
+ status:
+ description: MachineSetStatus defines the observed state of MachineSet.
+ properties:
+ availableReplicas:
+ description: The number of available replicas (ready for at least
+ minReadySeconds) for this MachineSet.
+ format: int32
+ type: integer
+ conditions:
+ description: conditions defines current service state of the MachineSet.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ type: string
+ failureReason:
+ description: |-
+ In the event that there is a terminal problem reconciling the
+ replicas, both FailureReason and FailureMessage will be set. FailureReason
+ will be populated with a succinct value suitable for machine
+ interpretation, while FailureMessage will contain a more verbose
+ string suitable for logging and human consumption.
+
+ These fields should not be set for transitive errors that a
+ controller faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the MachineTemplate's spec or the configuration of
+ the machine controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the machine controller, or the
+ responsible machine controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the MachineSet object and/or logged in the
+ controller's output.
+ type: string
+ fullyLabeledReplicas:
+ description: The number of replicas that have labels matching the
+ labels of the machine template of the MachineSet.
+ format: int32
+ type: integer
+ observedGeneration:
+ description: observedGeneration reflects the generation of the most
+ recently observed MachineSet.
+ format: int64
+ type: integer
+ readyReplicas:
+ description: The number of ready replicas for this MachineSet. A machine
+ is considered ready when the node has been created and is "Ready".
+ format: int32
+ type: integer
+ replicas:
+ description: replicas is the most recently observed number of replicas.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the same as the label selector but in the string format to avoid introspection
+ by clients. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .spec.clusterName
+ name: Cluster
+ type: string
+ - description: Total number of machines desired by this machineset
+ jsonPath: .spec.replicas
+ name: Desired
+ priority: 10
+ type: integer
+ - description: Total number of non-terminated machines targeted by this machineset
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of ready machines targeted by this machineset.
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of available machines (ready for at least minReadySeconds)
+ jsonPath: .status.availableReplicas
+ name: Available
+ type: integer
+ - description: Time duration since creation of MachineSet
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Kubernetes version associated with this MachineSet
+ jsonPath: .spec.template.spec.version
+ name: Version
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: MachineSet is the Schema for the machinesets 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: MachineSetSpec defines the desired state of MachineSet.
+ properties:
+ clusterName:
+ description: clusterName is the name of the Cluster this object belongs
+ to.
+ minLength: 1
+ type: string
+ deletePolicy:
+ description: |-
+ deletePolicy defines the policy used to identify nodes to delete when downscaling.
+ Defaults to "Random". Valid values are "Random, "Newest", "Oldest"
+ enum:
+ - Random
+ - Newest
+ - Oldest
+ type: string
+ minReadySeconds:
+ description: |-
+ minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
+ Defaults to 0 (machine will be considered available as soon as the Node is ready)
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ replicas is the number of desired replicas.
+ This is a pointer to distinguish between explicit zero and unspecified.
+
+ Defaults to:
+ * if the Kubernetes autoscaler min size and max size annotations are set:
+ - if it's a new MachineSet, use min size
+ - if the replicas field of the old MachineSet is < min size, use min size
+ - if the replicas field of the old MachineSet is > max size, use max size
+ - if the replicas field of the old MachineSet is in the (min size, max size) range, keep the value from the oldMS
+ * otherwise use 1
+ Note: Defaulting will be run whenever the replicas field is not set:
+ * A new MachineSet is created with replicas not set.
+ * On an existing MachineSet the replicas field was first set and is now unset.
+ Those cases are especially relevant for the following Kubernetes autoscaler use cases:
+ * A new MachineSet is created and replicas should be managed by the autoscaler
+ * An existing MachineSet which initially wasn't controlled by the autoscaler
+ should be later controlled by the autoscaler
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is a label query over machines that should match the replica count.
+ Label keys and values that must match in order to be controlled by this MachineSet.
+ It must match the machine template's labels.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
+ 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
+ template:
+ description: |-
+ template is the object that describes the machine that will be created if
+ insufficient replicas are detected.
+ Object references to custom resources are treated as templates.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ Specification of the desired behavior of the machine.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ properties:
+ bootstrap:
+ description: |-
+ bootstrap is a reference to a local struct which encapsulates
+ fields to configure the Machine’s bootstrapping mechanism.
+ properties:
+ configRef:
+ description: |-
+ configRef is a reference to a bootstrap provider-specific resource
+ that holds configuration details. The reference is optional to
+ allow users/operators to specify Bootstrap.DataSecretName without
+ the need of a controller.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ dataSecretName:
+ description: |-
+ dataSecretName is the name of the secret that stores the bootstrap data script.
+ If nil, the Machine should remain in the Pending state.
+ type: string
+ type: object
+ clusterName:
+ description: clusterName is the name of the Cluster this object
+ belongs to.
+ minLength: 1
+ type: string
+ failureDomain:
+ description: |-
+ failureDomain is the failure domain the machine will be created in.
+ Must match a key in the FailureDomains map stored on the cluster object.
+ type: string
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ Defaults to 10 seconds.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ providerID:
+ description: |-
+ providerID is the identification ID of the machine provided by the provider.
+ This field must match the provider ID as seen on the node object corresponding to this machine.
+ This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
+ with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
+ machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
+ generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
+ able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
+ and then a comparison is done to find out unregistered machines and are marked for delete.
+ This field will be set by the actuators and consumed by higher level entities like autoscaler that will
+ be interfacing with cluster-api as generic provider.
+ type: string
+ readinessGates:
+ description: |-
+ readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
+
+ This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
+ Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
+ for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
+
+ Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
+ they can include the status of those components with a new condition and add this condition to ReadinessGates.
+
+ NOTE: This field is considered only for computing v1beta2 conditions.
+ NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
+ readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
+ readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
+ This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
+ items:
+ description: MachineReadinessGate contains the type of a
+ Machine condition to be used as a readiness gate.
+ properties:
+ conditionType:
+ description: |-
+ conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
+ If the conditions doesn't exist, it will be treated as unknown.
+ Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
+ maxLength: 316
+ minLength: 1
+ 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:
+ - conditionType
+ type: object
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - conditionType
+ x-kubernetes-list-type: map
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ This field is meant to be optionally used by bootstrap providers.
+ type: string
+ required:
+ - bootstrap
+ - clusterName
+ - infrastructureRef
+ type: object
+ type: object
+ required:
+ - clusterName
+ - selector
+ type: object
+ status:
+ description: MachineSetStatus defines the observed state of MachineSet.
+ properties:
+ availableReplicas:
+ description: The number of available replicas (ready for at least
+ minReadySeconds) for this MachineSet.
+ format: int32
+ type: integer
+ conditions:
+ description: conditions defines current service state of the MachineSet.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: 'Deprecated: This field is deprecated and is going to
+ be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md
+ for more details.'
+ type: string
+ failureReason:
+ description: |-
+ In the event that there is a terminal problem reconciling the
+ replicas, both FailureReason and FailureMessage will be set. FailureReason
+ will be populated with a succinct value suitable for machine
+ interpretation, while FailureMessage will contain a more verbose
+ string suitable for logging and human consumption.
+
+ These fields should not be set for transitive errors that a
+ controller faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the MachineTemplate's spec or the configuration of
+ the machine controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the machine controller, or the
+ responsible machine controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the MachineSet object and/or logged in the
+ controller's output.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ fullyLabeledReplicas:
+ description: |-
+ The number of replicas that have labels matching the labels of the machine template of the MachineSet.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ format: int32
+ type: integer
+ observedGeneration:
+ description: observedGeneration reflects the generation of the most
+ recently observed MachineSet.
+ format: int64
+ type: integer
+ readyReplicas:
+ description: The number of ready replicas for this MachineSet. A machine
+ is considered ready when the node has been created and is "Ready".
+ format: int32
+ type: integer
+ replicas:
+ description: replicas is the most recently observed number of replicas.
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the same as the label selector but in the string format to avoid introspection
+ by clients. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in MachineSet's status with the V1Beta2 version.
+ properties:
+ availableReplicas:
+ description: availableReplicas is the number of available replicas
+ for this MachineSet. A machine is considered available when
+ Machine's Available condition is true.
+ format: int32
+ type: integer
+ conditions:
+ description: |-
+ conditions represents the observations of a MachineSet's current state.
+ Known condition types are MachinesReady, MachinesUpToDate, ScalingUp, ScalingDown, Remediating, Deleting, Paused.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ readyReplicas:
+ description: readyReplicas is the number of ready replicas for
+ this MachineSet. A machine is considered ready when Machine's
+ Ready condition is true.
+ format: int32
+ type: integer
+ upToDateReplicas:
+ description: upToDateReplicas is the number of up-to-date replicas
+ for this MachineSet. A machine is considered up-to-date when
+ Machine's UpToDate condition is true.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-manager
+ namespace: capi-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-leader-election-role
+ namespace: capi-system
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+- apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+---
+aggregationRule:
+ clusterRoleSelectors:
+ - matchLabels:
+ cluster.x-k8s.io/aggregate-to-manager: "true"
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-aggregated-manager-role
+rules: []
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ cluster.x-k8s.io/aggregate-to-manager: "true"
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-manager-role
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - namespaces
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - addons.cluster.x-k8s.io
+ resources:
+ - clusterresourcesets/finalizers
+ - clusterresourcesets/status
+ verbs:
+ - get
+ - patch
+ - update
+- apiGroups:
+ - addons.cluster.x-k8s.io
+ - bootstrap.cluster.x-k8s.io
+ - controlplane.cluster.x-k8s.io
+ - infrastructure.cluster.x-k8s.io
+ resources:
+ - '*'
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+- apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - clusterclasses
+ - clusterclasses/status
+ - clusters
+ - clusters/finalizers
+ - clusters/status
+ - machinehealthchecks/finalizers
+ - machinehealthchecks/status
+ verbs:
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - machinedeployments
+ - machinedeployments/finalizers
+ - machinedeployments/status
+ - machinehealthchecks
+ - machinepools
+ - machinepools/finalizers
+ - machinepools/status
+ - machines
+ - machines/finalizers
+ - machines/status
+ - machinesets
+ - machinesets/finalizers
+ - machinesets/status
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - machinedrainrules
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ipam.cluster.x-k8s.io
+ resources:
+ - ipaddressclaims
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - runtime.cluster.x-k8s.io
+ resources:
+ - extensionconfigs
+ - extensionconfigs/status
+ verbs:
+ - get
+ - list
+ - patch
+ - update
+ - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-leader-election-rolebinding
+ namespace: capi-system
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: capi-leader-election-role
+subjects:
+- kind: ServiceAccount
+ name: capi-manager
+ namespace: capi-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-manager-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: capi-aggregated-manager-role
+subjects:
+- kind: ServiceAccount
+ name: capi-manager
+ namespace: capi-system
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-webhook-service
+ namespace: capi-system
+spec:
+ ports:
+ - port: 443
+ targetPort: webhook-server
+ selector:
+ cluster.x-k8s.io/provider: cluster-api
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: controller-manager
+ name: capi-controller-manager
+ namespace: capi-system
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ cluster.x-k8s.io/provider: cluster-api
+ control-plane: controller-manager
+ strategy: {}
+ template:
+ metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ control-plane: controller-manager
+ spec:
+ containers:
+ - args:
+ - --leader-elect
+ - --diagnostics-address=:8443
+ - --insecure-diagnostics=false
+ - --use-deprecated-infra-machine-naming=false
+ - --feature-gates=MachinePool=true,ClusterResourceSet=true,ClusterTopology=false,RuntimeSDK=false,MachineSetPreflightChecks=true,MachineWaitForVolumeDetachConsiderVolumeAttachments=true
+ command:
+ - /manager
+ env:
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
+ image: registry.k8s.io/cluster-api/cluster-api-controller:v1.9.5
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: healthz
+ name: manager
+ ports:
+ - containerPort: 9443
+ name: webhook-server
+ protocol: TCP
+ - containerPort: 9440
+ name: healthz
+ protocol: TCP
+ - containerPort: 8443
+ name: metrics
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ path: /readyz
+ port: healthz
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ privileged: false
+ runAsGroup: 65532
+ runAsUser: 65532
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /tmp/k8s-webhook-server/serving-certs
+ name: cert
+ readOnly: true
+ securityContext:
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ serviceAccountName: capi-manager
+ terminationGracePeriodSeconds: 10
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ volumes:
+ - name: cert
+ secret:
+ secretName: capi-webhook-service-cert
+status: {}
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-mutating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-cluster
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.cluster.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - clusters
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-clusterclass
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.clusterclass.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - clusterclasses
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-machine
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.machine.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machines
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-machinedeployment
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.machinedeployment.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinedeployments
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-machinehealthcheck
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.machinehealthcheck.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinehealthchecks
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-machineset
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.machineset.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinesets
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-runtime-cluster-x-k8s-io-v1alpha1-extensionconfig
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.extensionconfig.runtime.addons.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - runtime.cluster.x-k8s.io
+ apiVersions:
+ - v1alpha1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - extensionconfigs
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-cluster-x-k8s-io-v1beta1-machinepool
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.machinepool.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinepools
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /mutate-addons-cluster-x-k8s-io-v1beta1-clusterresourceset
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.clusterresourceset.addons.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - addons.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - clusterresourcesets
+ sideEffects: None
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: cluster-api
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-validating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-cluster
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.cluster.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ - DELETE
+ resources:
+ - clusters
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-clusterclass
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.clusterclass.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ - DELETE
+ resources:
+ - clusterclasses
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-machine
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.machine.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machines
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-machinedeployment
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.machinedeployment.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinedeployments
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-machinedrainrule
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.machinedrainrule.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinedrainrules
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-machinehealthcheck
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.machinehealthcheck.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinehealthchecks
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-machineset
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.machineset.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinesets
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-runtime-cluster-x-k8s-io-v1alpha1-extensionconfig
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.extensionconfig.runtime.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - runtime.cluster.x-k8s.io
+ apiVersions:
+ - v1alpha1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - extensionconfigs
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-cluster-x-k8s-io-v1beta1-machinepool
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.machinepool.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - machinepools
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-addons-cluster-x-k8s-io-v1beta1-clusterresourceset
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.clusterresourceset.addons.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - addons.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - clusterresourcesets
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-addons-cluster-x-k8s-io-v1beta1-clusterresourcesetbinding
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.clusterresourcesetbinding.addons.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - addons.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - clusterresourcesetbindings
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-ipam-cluster-x-k8s-io-v1beta1-ipaddress
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.ipaddress.ipam.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - ipam.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ - DELETE
+ resources:
+ - ipaddresses
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-webhook-service
+ namespace: capi-system
+ path: /validate-ipam-cluster-x-k8s-io-v1beta1-ipaddressclaim
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.ipaddressclaim.ipam.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - ipam.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ - DELETE
+ resources:
+ - ipaddressclaims
+ sideEffects: None
--- /dev/null
+apiVersion: v1
+kind: Namespace
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: controller-manager
+ name: capi-kubeadm-bootstrap-system
+---
+apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-selfsigned-issuer
+ namespace: capi-kubeadm-bootstrap-system
+spec:
+ selfSigned: {}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-serving-cert
+ namespace: capi-kubeadm-bootstrap-system
+spec:
+ dnsNames:
+ - capi-kubeadm-bootstrap-webhook-service.capi-kubeadm-bootstrap-system.svc
+ - capi-kubeadm-bootstrap-webhook-service.capi-kubeadm-bootstrap-system.svc.cluster.local
+ issuerRef:
+ kind: Issuer
+ name: capi-kubeadm-bootstrap-selfsigned-issuer
+ secretName: capi-kubeadm-bootstrap-webhook-service-cert
+ subject:
+ organizations:
+ - k8s-sig-cluster-lifecycle
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ cluster.x-k8s.io/v1beta1: v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: kubeadmconfigs.bootstrap.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: bootstrap.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: KubeadmConfig
+ listKind: KubeadmConfigList
+ plural: kubeadmconfigs
+ singular: kubeadmconfig
+ scope: Namespaced
+ versions:
+ - deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmConfig is the Schema for the kubeadmconfigs API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: |-
+ KubeadmConfigSpec defines the desired state of KubeadmConfig.
+ Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration are
+ the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: APIServer contains extra settings for the API server
+ control plane component
+ properties:
+ certSANs:
+ description: CertSANs sets extra Subject Alternative Names
+ for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: TimeoutForControlPlane controls the timeout that
+ we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ CertificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ ControlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: ControllerManager contains extra settings for the
+ controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: DNS defines the options for the DNS add-on installed
+ in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ ImageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type:
+ description: Type defines the DNS add-on to be used
+ type: string
+ type: object
+ etcd:
+ description: |-
+ Etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ External describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ CAFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ CertFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: Endpoints of etcd members. Required for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ KeyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ Local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ DataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ ExtraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ ImageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: PeerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: ServerCertSANs sets extra Subject Alternative
+ Names for the etcd server signing cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: FeatureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `k8s.gcr.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ KubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ Networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: DNSDomain is the dns domain used by k8s services.
+ Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ PodSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ ServiceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: Scheduler contains extra settings for the scheduler
+ control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ useHyperKubeImage:
+ description: UseHyperKubeImage controls if hyperkube should be
+ used for Kubernetes components instead of their respective separate
+ images
+ type: boolean
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation of partition
+ tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems to
+ setup.
+ items:
+ description: Filesystem defines the file systems to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to add to the
+ command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system type.
+ type: string
+ label:
+ description: label specifies the file system label to be
+ used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition to use.
+ The valid options are: "auto|any", "auto", "any", "none",
+ and <NUM>, where NUM is the actual partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions to
+ setup.
+ items:
+ description: Partition defines how to create and layout a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files in
+ cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content to
+ populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should populate
+ this file.
+ properties:
+ key:
+ description: key is the key in the secret's data map
+ for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file, e.g.
+ "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where to store
+ the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to assign
+ to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration are
+ the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ BootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap token, stored
+ as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ Description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ Expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ Groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ Token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ TTL defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ Usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ LocalAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: AdvertiseAddress sets the IP address for the
+ API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ BindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ required:
+ - advertiseAddress
+ - bindPort
+ type: object
+ nodeRegistration:
+ description: |-
+ NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: CRISocket is used to retrieve container runtime
+ info. This information will be annotated to the Node API
+ object, for later re-use
+ type: string
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied to
+ a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the taint
+ key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration for the
+ join command
+ 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
+ caCertPath:
+ description: |-
+ CACertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ ControlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: LocalAPIEndpoint represents the endpoint of the
+ API server instance to be deployed on this node.
+ properties:
+ advertiseAddress:
+ description: AdvertiseAddress sets the IP address for
+ the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ BindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ required:
+ - advertiseAddress
+ - bindPort
+ type: object
+ type: object
+ discovery:
+ description: Discovery specifies the options for the kubelet to
+ use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ BootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: APIServerEndpoint is an IP or domain name
+ to the API server from which info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ CACertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ Token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ UnsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ - unsafeSkipCAVerification
+ type: object
+ file:
+ description: |-
+ File is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: KubeConfigPath is used to specify the actual
+ file path or URL to the kubeconfig file from which to
+ load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: Timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ TLSBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: CRISocket is used to retrieve container runtime
+ info. This information will be annotated to the Node API
+ object, for later re-use
+ type: string
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied to
+ a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the taint
+ key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be setup.
+ items:
+ description: MountPoints defines input for generated mounts in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands to run after
+ kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to run before
+ kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the user
+ type: string
+ groups:
+ description: groups specifies the additional groups for the
+ user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to use for
+ the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the user as
+ inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login should
+ be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for the user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary group for the
+ user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh authorized
+ keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ status:
+ description: KubeadmConfigStatus defines the observed state of KubeadmConfig.
+ properties:
+ bootstrapData:
+ description: |-
+ bootstrapData will be a cloud-init script for now.
+
+ Deprecated: Switch to DataSecretName.
+ format: byte
+ type: string
+ conditions:
+ description: conditions defines current service state of the KubeadmConfig.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ dataSecretName:
+ description: dataSecretName is the name of the secret that stores
+ the bootstrap data script.
+ type: string
+ failureMessage:
+ description: failureMessage will be set on non-retryable errors
+ type: string
+ failureReason:
+ description: failureReason will be set on non-retryable errors
+ type: string
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ ready:
+ description: ready indicates the BootstrapData field is ready to be
+ consumed
+ type: boolean
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of KubeadmConfig
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmConfig is the Schema for the kubeadmconfigs API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: |-
+ KubeadmConfigSpec defines the desired state of KubeadmConfig.
+ Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration are
+ the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for the API server
+ control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative Names
+ for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the timeout that
+ we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings for the
+ controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on installed
+ in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject Alternative
+ Names for the etcd server signing cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used by k8s services.
+ Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for the scheduler
+ control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation of partition
+ tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems to
+ setup.
+ items:
+ description: Filesystem defines the file systems to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to add to the
+ command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system type.
+ type: string
+ label:
+ description: label specifies the file system label to be
+ used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition to use.
+ The valid options are: "auto|any", "auto", "any", "none",
+ and <NUM>, where NUM is the actual partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions to
+ setup.
+ items:
+ description: Partition defines how to create and layout a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files in
+ cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content to
+ populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should populate
+ this file.
+ properties:
+ key:
+ description: key is the key in the secret's data map
+ for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file, e.g.
+ "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where to store
+ the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to assign
+ to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration are
+ the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap token, stored
+ as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address for the
+ API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node API
+ object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of pre-flight
+ errors to be ignored when the current node is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied to
+ a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the taint
+ key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration for the
+ join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint of the
+ API server instance to be deployed on this node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address for
+ the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the kubelet to
+ use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or domain name
+ to the API server from which info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify the actual
+ file path or URL to the kubeconfig file from which to
+ load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node API
+ object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of pre-flight
+ errors to be ignored when the current node is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied to
+ a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the taint
+ key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be setup.
+ items:
+ description: MountPoints defines input for generated mounts in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands to run after
+ kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to run before
+ kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the user
+ type: string
+ groups:
+ description: groups specifies the additional groups for the
+ user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to use for
+ the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the user as
+ inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login should
+ be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for the user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary group for the
+ user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh authorized
+ keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ status:
+ description: KubeadmConfigStatus defines the observed state of KubeadmConfig.
+ properties:
+ conditions:
+ description: conditions defines current service state of the KubeadmConfig.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ dataSecretName:
+ description: dataSecretName is the name of the secret that stores
+ the bootstrap data script.
+ type: string
+ failureMessage:
+ description: failureMessage will be set on non-retryable errors
+ type: string
+ failureReason:
+ description: failureReason will be set on non-retryable errors
+ type: string
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ ready:
+ description: ready indicates the BootstrapData field is ready to be
+ consumed
+ type: boolean
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .metadata.labels['cluster\.x-k8s\.io/cluster-name']
+ name: Cluster
+ type: string
+ - description: Time duration since creation of KubeadmConfig
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: KubeadmConfig is the Schema for the kubeadmconfigs 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: |-
+ KubeadmConfigSpec defines the desired state of KubeadmConfig.
+ Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration are
+ the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for the API server
+ control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative Names
+ for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable present
+ in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's value.
+ Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap or
+ its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the pod's
+ namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the timeout that
+ we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings for the
+ controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable present
+ in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's value.
+ Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap or
+ its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the pod's
+ namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on installed
+ in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the
+ pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject Alternative
+ Names for the etcd server signing cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ * If not set, the default registry of kubeadm will be used, i.e.
+ * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
+ * k8s.gcr.io (old registry): all older versions
+ Please note that when imageRepository is not set we don't allow upgrades to
+ versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
+ a newer patch version with the new registry instead (i.e. >= v1.22.17,
+ >= v1.23.15, >= v1.24.9, >= v1.25.0).
+ * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
+ and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used by k8s services.
+ Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for the scheduler
+ control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass to
+ the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable present
+ in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's value.
+ Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap or
+ its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the pod's
+ namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod where
+ hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation of partition
+ tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems to
+ setup.
+ items:
+ description: Filesystem defines the file systems to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to add to the
+ command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system type.
+ type: string
+ label:
+ description: label specifies the file system label to be
+ used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition to use.
+ The valid options are: "auto|any", "auto", "any", "none",
+ and <NUM>, where NUM is the actual partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions to
+ setup.
+ items:
+ description: Partition defines how to create and layout a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files in
+ cloud-init.
+ properties:
+ append:
+ description: append specifies whether to append Content to existing
+ file if Path exists.
+ type: boolean
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content to
+ populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should populate
+ this file.
+ properties:
+ key:
+ description: key is the key in the secret's data map
+ for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file, e.g.
+ "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where to store
+ the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to assign
+ to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap data
+ enum:
+ - cloud-config
+ - ignition
+ type: string
+ ignition:
+ description: ignition contains Ignition specific configuration.
+ properties:
+ containerLinuxConfig:
+ description: containerLinuxConfig contains CLC specific configuration.
+ properties:
+ additionalConfig:
+ description: |-
+ additionalConfig contains additional configuration to be merged with the Ignition
+ configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
+
+ The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
+ type: string
+ strict:
+ description: strict controls if AdditionalConfig should be
+ strictly parsed. If so, warnings are treated as errors.
+ type: boolean
+ type: object
+ type: object
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration are
+ the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap token, stored
+ as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address for the
+ API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node API
+ object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of pre-flight
+ errors to be ignored when the current node is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied to
+ a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the taint
+ key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration for the
+ join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint of the
+ API server instance to be deployed on this node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address for
+ the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the kubelet to
+ use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or domain name
+ to the API server from which info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfig:
+ description: |-
+ kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
+ The file is generated at the path specified in KubeConfigPath.
+
+ Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
+ Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
+ properties:
+ cluster:
+ description: |-
+ cluster contains information about how to communicate with the kubernetes cluster.
+
+ By default the following fields are automatically populated:
+ - Server with the Cluster's ControlPlaneEndpoint.
+ - CertificateAuthorityData with the Cluster's CA certificate.
+ properties:
+ certificateAuthorityData:
+ description: |-
+ certificateAuthorityData contains PEM-encoded certificate authority certificates.
+
+ Defaults to the Cluster's CA certificate if empty.
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: insecureSkipTLSVerify skips the validity
+ check for the server's certificate. This will
+ make your HTTPS connections insecure.
+ type: boolean
+ proxyURL:
+ description: |-
+ proxyURL is the URL to the proxy to be used for all requests made by this
+ client. URLs with "http", "https", and "socks5" schemes are supported. If
+ this configuration is not provided or the empty string, the client
+ attempts to construct a proxy configuration from http_proxy and
+ https_proxy environment variables. If these environment variables are not
+ set, the client does not attempt to proxy requests.
+
+ socks5 proxying does not currently support spdy streaming endpoints (exec,
+ attach, port forward).
+ type: string
+ server:
+ description: |-
+ server is the address of the kubernetes cluster (https://hostname:port).
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
+ type: string
+ tlsServerName:
+ description: tlsServerName is used to check server
+ certificate. If TLSServerName is empty, the
+ hostname used to contact the server is used.
+ type: string
+ type: object
+ user:
+ description: |-
+ user contains information that describes identity information.
+ This is used to tell the kubernetes cluster who you are.
+ properties:
+ authProvider:
+ description: authProvider specifies a custom authentication
+ plugin for the kubernetes cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: config holds the parameters for
+ the authentication plugin.
+ type: object
+ name:
+ description: name is the name of the authentication
+ plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: exec specifies a custom exec-based
+ authentication plugin for the kubernetes cluster.
+ properties:
+ apiVersion:
+ description: |-
+ Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
+ the same encoding version as the input.
+ Defaults to client.authentication.k8s.io/v1 if not set.
+ type: string
+ args:
+ description: Arguments to pass to the command
+ when executing it.
+ items:
+ type: string
+ type: array
+ command:
+ description: command to execute.
+ type: string
+ env:
+ description: |-
+ env defines additional environment variables to expose to the process. These
+ are unioned with the host's environment, as well as variables client-go uses
+ to pass argument to the plugin.
+ items:
+ description: |-
+ KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
+ credential plugin.
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: |-
+ provideClusterInfo determines whether or not to provide cluster information,
+ which could potentially contain very large CA data, to this exec plugin as a
+ part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
+ to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
+ reading this environment variable.
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify the actual
+ file path or URL to the kubeconfig file from which to
+ load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node API
+ object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of pre-flight
+ errors to be ignored when the current node is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied to
+ a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the taint
+ key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be setup.
+ items:
+ description: MountPoints defines input for generated mounts in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands to run after
+ kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to run before
+ kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+
+ Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
+ When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the user
+ type: string
+ groups:
+ description: groups specifies the additional groups for the
+ user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to use for
+ the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the user as
+ inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login should
+ be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for the user
+ type: string
+ passwdFrom:
+ description: passwdFrom is a referenced source of passwd to
+ populate the passwd.
+ properties:
+ secret:
+ description: secret represents a secret that should populate
+ this password.
+ properties:
+ key:
+ description: key is the key in the secret's data map
+ for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ primaryGroup:
+ description: primaryGroup specifies the primary group for the
+ user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh authorized
+ keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ status:
+ description: KubeadmConfigStatus defines the observed state of KubeadmConfig.
+ properties:
+ conditions:
+ description: conditions defines current service state of the KubeadmConfig.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ dataSecretName:
+ description: dataSecretName is the name of the secret that stores
+ the bootstrap data script.
+ type: string
+ failureMessage:
+ description: |-
+ failureMessage will be set on non-retryable errors
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ failureReason:
+ description: |-
+ failureReason will be set on non-retryable errors
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ ready:
+ description: ready indicates the BootstrapData field is ready to be
+ consumed
+ type: boolean
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in KubeadmConfig's status with the V1Beta2 version.
+ properties:
+ conditions:
+ description: |-
+ conditions represents the observations of a KubeadmConfig's current state.
+ Known condition types are Ready, DataSecretAvailable, CertificatesAvailable.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ cluster.x-k8s.io/v1beta1: v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: bootstrap.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: KubeadmConfigTemplate
+ listKind: KubeadmConfigTemplateList
+ plural: kubeadmconfigtemplates
+ singular: kubeadmconfigtemplate
+ scope: Namespaced
+ versions:
+ - deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmConfigTemplate is the Schema for the kubeadmconfigtemplates API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: KubeadmConfigTemplateSpec defines the desired state of KubeadmConfigTemplate.
+ properties:
+ template:
+ description: KubeadmConfigTemplateResource defines the Template structure.
+ properties:
+ spec:
+ description: |-
+ KubeadmConfigSpec defines the desired state of KubeadmConfig.
+ Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: APIServer contains extra settings for the
+ API server control plane component
+ properties:
+ certSANs:
+ description: CertSANs sets extra Subject Alternative
+ Names for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: TimeoutForControlPlane controls the timeout
+ that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ CertificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ ControlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: ControllerManager contains extra settings
+ for the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: DNS defines the options for the DNS add-on
+ installed in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ ImageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type:
+ description: Type defines the DNS add-on to be used
+ type: string
+ type: object
+ etcd:
+ description: |-
+ Etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ External describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ CAFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ CertFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: Endpoints of etcd members. Required
+ for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ KeyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ Local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ DataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ ExtraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ ImageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: PeerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: ServerCertSANs sets extra Subject
+ Alternative Names for the etcd server signing
+ cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: FeatureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `k8s.gcr.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ KubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ Networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: DNSDomain is the dns domain used by k8s
+ services. Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ PodSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ ServiceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: Scheduler contains extra settings for the
+ scheduler control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ useHyperKubeImage:
+ description: UseHyperKubeImage controls if hyperkube should
+ be used for Kubernetes components instead of their respective
+ separate images
+ type: boolean
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation
+ of partition tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems
+ to setup.
+ items:
+ description: Filesystem defines the file systems to
+ be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to
+ add to the command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system
+ type.
+ type: string
+ label:
+ description: label specifies the file system label
+ to be used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition
+ to use. The valid options are: "auto|any", "auto",
+ "any", "none", and <NUM>, where NUM is the actual
+ partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions
+ to setup.
+ items:
+ description: Partition defines how to create and layout
+ a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content
+ to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the
+ file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file,
+ e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where
+ to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to
+ assign to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap
+ data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ BootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap
+ token, stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ Description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ Expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ Groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ Token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ TTL defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ Usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ LocalAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: AdvertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ BindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ required:
+ - advertiseAddress
+ - bindPort
+ type: object
+ nodeRegistration:
+ description: |-
+ NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: CRISocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to
+ the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration
+ for the join command
+ 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
+ caCertPath:
+ description: |-
+ CACertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ ControlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: LocalAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on this
+ node.
+ properties:
+ advertiseAddress:
+ description: AdvertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ BindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ required:
+ - advertiseAddress
+ - bindPort
+ type: object
+ type: object
+ discovery:
+ description: Discovery specifies the options for the kubelet
+ to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ BootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: APIServerEndpoint is an IP or domain
+ name to the API server from which info will
+ be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ CACertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ Token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ UnsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ - unsafeSkipCAVerification
+ type: object
+ file:
+ description: |-
+ File is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: KubeConfigPath is used to specify
+ the actual file path or URL to the kubeconfig
+ file from which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: Timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ TLSBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: CRISocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to
+ the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be
+ setup.
+ items:
+ description: MountPoints defines input for generated mounts
+ in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands
+ to run after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to
+ run before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user
+ in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the
+ user
+ type: string
+ groups:
+ description: groups specifies the additional groups
+ for the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to
+ use for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the
+ user as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login
+ should be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for
+ the user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary group
+ for the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh
+ authorized keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: false
+ storage: false
+ - additionalPrinterColumns:
+ - description: Time duration since creation of KubeadmConfigTemplate
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmConfigTemplate is the Schema for the kubeadmconfigtemplates API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: KubeadmConfigTemplateSpec defines the desired state of KubeadmConfigTemplate.
+ properties:
+ template:
+ description: KubeadmConfigTemplateResource defines the Template structure.
+ properties:
+ spec:
+ description: |-
+ KubeadmConfigSpec defines the desired state of KubeadmConfig.
+ Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for the
+ API server control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative
+ Names for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the timeout
+ that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings
+ for the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on
+ installed in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required
+ for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject
+ Alternative Names for the etcd server signing
+ cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used by k8s
+ services. Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for the
+ scheduler control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation
+ of partition tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems
+ to setup.
+ items:
+ description: Filesystem defines the file systems to
+ be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to
+ add to the command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system
+ type.
+ type: string
+ label:
+ description: label specifies the file system label
+ to be used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition
+ to use. The valid options are: "auto|any", "auto",
+ "any", "none", and <NUM>, where NUM is the actual
+ partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions
+ to setup.
+ items:
+ description: Partition defines how to create and layout
+ a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content
+ to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the
+ file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file,
+ e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where
+ to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to
+ assign to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap
+ data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap
+ token, stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice
+ of pre-flight errors to be ignored when the current
+ node is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to
+ the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration
+ for the join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on this
+ node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the kubelet
+ to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or domain
+ name to the API server from which info will
+ be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify
+ the actual file path or URL to the kubeconfig
+ file from which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice
+ of pre-flight errors to be ignored when the current
+ node is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to
+ the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be
+ setup.
+ items:
+ description: MountPoints defines input for generated mounts
+ in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands
+ to run after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to
+ run before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user
+ in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the
+ user
+ type: string
+ groups:
+ description: groups specifies the additional groups
+ for the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to
+ use for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the
+ user as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login
+ should be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for
+ the user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary group
+ for the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh
+ authorized keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of KubeadmConfigTemplate
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: KubeadmConfigTemplate is the Schema for the kubeadmconfigtemplates
+ 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: KubeadmConfigTemplateSpec defines the desired state of KubeadmConfigTemplate.
+ properties:
+ template:
+ description: KubeadmConfigTemplateResource defines the Template structure.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ KubeadmConfigSpec defines the desired state of KubeadmConfig.
+ Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for the
+ API server control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative
+ Names for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in
+ the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the timeout
+ that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings
+ for the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in
+ the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on
+ installed in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required
+ for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment
+ variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment
+ variable's value. Cannot be used if value
+ is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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
+ ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret
+ in the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject
+ Alternative Names for the etcd server signing
+ cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ * If not set, the default registry of kubeadm will be used, i.e.
+ * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
+ * k8s.gcr.io (old registry): all older versions
+ Please note that when imageRepository is not set we don't allow upgrades to
+ versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
+ a newer patch version with the new registry instead (i.e. >= v1.22.17,
+ >= v1.23.15, >= v1.24.9, >= v1.25.0).
+ * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
+ and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used by k8s
+ services. Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for the
+ scheduler control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to
+ pass to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in
+ the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the
+ pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod
+ template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation
+ of partition tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems
+ to setup.
+ items:
+ description: Filesystem defines the file systems to
+ be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to
+ add to the command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system
+ type.
+ type: string
+ label:
+ description: label specifies the file system label
+ to be used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition
+ to use. The valid options are: "auto|any", "auto",
+ "any", "none", and <NUM>, where NUM is the actual
+ partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions
+ to setup.
+ items:
+ description: Partition defines how to create and layout
+ a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ append:
+ description: append specifies whether to append Content
+ to existing file if Path exists.
+ type: boolean
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content
+ to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the
+ file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file,
+ e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where
+ to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to
+ assign to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap
+ data
+ enum:
+ - cloud-config
+ - ignition
+ type: string
+ ignition:
+ description: ignition contains Ignition specific configuration.
+ properties:
+ containerLinuxConfig:
+ description: containerLinuxConfig contains CLC specific
+ configuration.
+ properties:
+ additionalConfig:
+ description: |-
+ additionalConfig contains additional configuration to be merged with the Ignition
+ configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
+
+ The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
+ type: string
+ strict:
+ description: strict controls if AdditionalConfig should
+ be strictly parsed. If so, warnings are treated
+ as errors.
+ type: boolean
+ type: object
+ type: object
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap
+ token, stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice
+ of pre-flight errors to be ignored when the current
+ node is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to
+ the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration
+ for the join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on this
+ node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the kubelet
+ to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or domain
+ name to the API server from which info will
+ be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfig:
+ description: |-
+ kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
+ The file is generated at the path specified in KubeConfigPath.
+
+ Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
+ Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
+ properties:
+ cluster:
+ description: |-
+ cluster contains information about how to communicate with the kubernetes cluster.
+
+ By default the following fields are automatically populated:
+ - Server with the Cluster's ControlPlaneEndpoint.
+ - CertificateAuthorityData with the Cluster's CA certificate.
+ properties:
+ certificateAuthorityData:
+ description: |-
+ certificateAuthorityData contains PEM-encoded certificate authority certificates.
+
+ Defaults to the Cluster's CA certificate if empty.
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: insecureSkipTLSVerify skips
+ the validity check for the server's
+ certificate. This will make your HTTPS
+ connections insecure.
+ type: boolean
+ proxyURL:
+ description: |-
+ proxyURL is the URL to the proxy to be used for all requests made by this
+ client. URLs with "http", "https", and "socks5" schemes are supported. If
+ this configuration is not provided or the empty string, the client
+ attempts to construct a proxy configuration from http_proxy and
+ https_proxy environment variables. If these environment variables are not
+ set, the client does not attempt to proxy requests.
+
+ socks5 proxying does not currently support spdy streaming endpoints (exec,
+ attach, port forward).
+ type: string
+ server:
+ description: |-
+ server is the address of the kubernetes cluster (https://hostname:port).
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
+ type: string
+ tlsServerName:
+ description: tlsServerName is used to
+ check server certificate. If TLSServerName
+ is empty, the hostname used to contact
+ the server is used.
+ type: string
+ type: object
+ user:
+ description: |-
+ user contains information that describes identity information.
+ This is used to tell the kubernetes cluster who you are.
+ properties:
+ authProvider:
+ description: authProvider specifies a
+ custom authentication plugin for the
+ kubernetes cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: config holds the parameters
+ for the authentication plugin.
+ type: object
+ name:
+ description: name is the name of the
+ authentication plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: exec specifies a custom exec-based
+ authentication plugin for the kubernetes
+ cluster.
+ properties:
+ apiVersion:
+ description: |-
+ Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
+ the same encoding version as the input.
+ Defaults to client.authentication.k8s.io/v1 if not set.
+ type: string
+ args:
+ description: Arguments to pass to
+ the command when executing it.
+ items:
+ type: string
+ type: array
+ command:
+ description: command to execute.
+ type: string
+ env:
+ description: |-
+ env defines additional environment variables to expose to the process. These
+ are unioned with the host's environment, as well as variables client-go uses
+ to pass argument to the plugin.
+ items:
+ description: |-
+ KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
+ credential plugin.
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: |-
+ provideClusterInfo determines whether or not to provide cluster information,
+ which could potentially contain very large CA data, to this exec plugin as a
+ part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
+ to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
+ reading this environment variable.
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify
+ the actual file path or URL to the kubeconfig
+ file from which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice
+ of pre-flight errors to be ignored when the current
+ node is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to
+ the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be
+ setup.
+ items:
+ description: MountPoints defines input for generated mounts
+ in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands
+ to run after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to
+ run before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+
+ Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
+ When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user
+ in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the
+ user
+ type: string
+ groups:
+ description: groups specifies the additional groups
+ for the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to
+ use for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the
+ user as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login
+ should be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for
+ the user
+ type: string
+ passwdFrom:
+ description: passwdFrom is a referenced source of passwd
+ to populate the passwd.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this password.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ primaryGroup:
+ description: primaryGroup specifies the primary group
+ for the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh
+ authorized keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-manager
+ namespace: capi-kubeadm-bootstrap-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-leader-election-role
+ namespace: capi-kubeadm-bootstrap-system
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+- apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-manager-role
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ - secrets
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+- apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+- apiGroups:
+ - bootstrap.cluster.x-k8s.io
+ resources:
+ - kubeadmconfigs
+ - kubeadmconfigs/finalizers
+ - kubeadmconfigs/status
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - clusters
+ - clusters/status
+ - machinepools
+ - machinepools/status
+ - machines
+ - machines/status
+ - machinesets
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-leader-election-rolebinding
+ namespace: capi-kubeadm-bootstrap-system
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: capi-kubeadm-bootstrap-leader-election-role
+subjects:
+- kind: ServiceAccount
+ name: capi-kubeadm-bootstrap-manager
+ namespace: capi-kubeadm-bootstrap-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-manager-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: capi-kubeadm-bootstrap-manager-role
+subjects:
+- kind: ServiceAccount
+ name: capi-kubeadm-bootstrap-manager
+ namespace: capi-kubeadm-bootstrap-system
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+spec:
+ ports:
+ - port: 443
+ targetPort: webhook-server
+ selector:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: controller-manager
+ name: capi-kubeadm-bootstrap-controller-manager
+ namespace: capi-kubeadm-bootstrap-system
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ control-plane: controller-manager
+ strategy: {}
+ template:
+ metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ control-plane: controller-manager
+ spec:
+ containers:
+ - args:
+ - --leader-elect
+ - --diagnostics-address=:8443
+ - --insecure-diagnostics=false
+ - --feature-gates=MachinePool=true,KubeadmBootstrapFormatIgnition=false
+ - --bootstrap-token-ttl=15m
+ command:
+ - /manager
+ env:
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
+ image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.9.5
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: healthz
+ name: manager
+ ports:
+ - containerPort: 9443
+ name: webhook-server
+ protocol: TCP
+ - containerPort: 9440
+ name: healthz
+ protocol: TCP
+ - containerPort: 8443
+ name: metrics
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ path: /readyz
+ port: healthz
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ privileged: false
+ runAsGroup: 65532
+ runAsUser: 65532
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /tmp/k8s-webhook-server/serving-certs
+ name: cert
+ readOnly: true
+ securityContext:
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ serviceAccountName: capi-kubeadm-bootstrap-manager
+ terminationGracePeriodSeconds: 10
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ volumes:
+ - name: cert
+ secret:
+ secretName: capi-kubeadm-bootstrap-webhook-service-cert
+status: {}
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-mutating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+ path: /mutate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfig
+ failurePolicy: Fail
+ name: default.kubeadmconfig.bootstrap.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - bootstrap.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmconfigs
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+ path: /mutate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfigtemplate
+ failurePolicy: Fail
+ name: default.kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - bootstrap.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmconfigtemplates
+ sideEffects: None
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: bootstrap-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-bootstrap-validating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+ path: /validate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfig
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.kubeadmconfig.bootstrap.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - bootstrap.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmconfigs
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-bootstrap-webhook-service
+ namespace: capi-kubeadm-bootstrap-system
+ path: /validate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfigtemplate
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - bootstrap.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmconfigtemplates
+ sideEffects: None
--- /dev/null
+apiVersion: v1
+kind: Namespace
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: controller-manager
+ name: capi-kubeadm-control-plane-system
+---
+apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-selfsigned-issuer
+ namespace: capi-kubeadm-control-plane-system
+spec:
+ selfSigned: {}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-serving-cert
+ namespace: capi-kubeadm-control-plane-system
+spec:
+ dnsNames:
+ - capi-kubeadm-control-plane-webhook-service.capi-kubeadm-control-plane-system.svc
+ - capi-kubeadm-control-plane-webhook-service.capi-kubeadm-control-plane-system.svc.cluster.local
+ issuerRef:
+ kind: Issuer
+ name: capi-kubeadm-control-plane-selfsigned-issuer
+ secretName: capi-kubeadm-control-plane-webhook-service-cert
+ subject:
+ organizations:
+ - k8s-sig-cluster-lifecycle
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ cluster.x-k8s.io/v1beta1: v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: kubeadmcontrolplanes.controlplane.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: controlplane.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: KubeadmControlPlane
+ listKind: KubeadmControlPlaneList
+ plural: kubeadmcontrolplanes
+ shortNames:
+ - kcp
+ singular: kubeadmcontrolplane
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: This denotes whether or not the control plane has the uploaded
+ kubeadm-config configmap
+ jsonPath: .status.initialized
+ name: Initialized
+ type: boolean
+ - description: KubeadmControlPlane API Server is ready to receive requests
+ jsonPath: .status.ready
+ name: API Server Available
+ type: boolean
+ - description: Kubernetes version associated with this control plane
+ jsonPath: .spec.version
+ name: Version
+ type: string
+ - description: Total number of non-terminated machines targeted by this control
+ plane
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of fully running and ready control plane machines
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of non-terminated machines targeted by this control
+ plane that have the desired template spec
+ jsonPath: .status.updatedReplicas
+ name: Updated
+ type: integer
+ - description: Total number of unavailable machines targeted by this control plane
+ jsonPath: .status.unavailableReplicas
+ name: Unavailable
+ type: integer
+ deprecated: true
+ name: v1alpha3
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmControlPlane is the Schema for the KubeadmControlPlane API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane.
+ properties:
+ infrastructureTemplate:
+ description: |-
+ infrastructureTemplate is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ kubeadmConfigSpec:
+ description: |-
+ kubeadmConfigSpec is a KubeadmConfigSpec
+ to use for initializing and joining machines to the control plane.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: APIServer contains extra settings for the API
+ server control plane component
+ properties:
+ certSANs:
+ description: CertSANs sets extra Subject Alternative Names
+ for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: TimeoutForControlPlane controls the timeout
+ that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ CertificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ ControlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: ControllerManager contains extra settings for
+ the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: DNS defines the options for the DNS add-on installed
+ in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ ImageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type:
+ description: Type defines the DNS add-on to be used
+ type: string
+ type: object
+ etcd:
+ description: |-
+ Etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ External describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ CAFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ CertFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: Endpoints of etcd members. Required for
+ ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ KeyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ Local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ DataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ ExtraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ ImageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: PeerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: ServerCertSANs sets extra Subject Alternative
+ Names for the etcd server signing cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: FeatureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ ImageRepository sets the container registry to pull images from.
+ If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `k8s.gcr.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ KubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ Networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: DNSDomain is the dns domain used by k8s services.
+ Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ PodSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ ServiceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: Scheduler contains extra settings for the scheduler
+ control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: ExtraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraVolumes:
+ description: ExtraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ HostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: MountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: Name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: PathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: ReadOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ useHyperKubeImage:
+ description: UseHyperKubeImage controls if hyperkube should
+ be used for Kubernetes components instead of their respective
+ separate images
+ type: boolean
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation of partition
+ tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems
+ to setup.
+ items:
+ description: Filesystem defines the file systems to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to add
+ to the command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system type.
+ type: string
+ label:
+ description: label specifies the file system label to
+ be used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition to use.
+ The valid options are: "auto|any", "auto", "any",
+ "none", and <NUM>, where NUM is the actual partition
+ number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions
+ to setup.
+ items:
+ description: Partition defines how to create and layout
+ a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content
+ to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's data
+ map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the file
+ contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file,
+ e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where
+ to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to assign
+ to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap
+ data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ BootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap token,
+ stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ Description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ Expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ Groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ Token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ TTL defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ Usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ LocalAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: AdvertiseAddress sets the IP address for
+ the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ BindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ required:
+ - advertiseAddress
+ - bindPort
+ type: object
+ nodeRegistration:
+ description: |-
+ NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: CRISocket is used to retrieve container runtime
+ info. This information will be annotated to the Node
+ API object, for later re-use
+ type: string
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the
+ taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration for
+ the join command
+ 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
+ caCertPath:
+ description: |-
+ CACertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ ControlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: LocalAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on this node.
+ properties:
+ advertiseAddress:
+ description: AdvertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ BindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ required:
+ - advertiseAddress
+ - bindPort
+ type: object
+ type: object
+ discovery:
+ description: Discovery specifies the options for the kubelet
+ to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ BootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: APIServerEndpoint is an IP or domain
+ name to the API server from which info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ CACertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ Token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ UnsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ - unsafeSkipCAVerification
+ type: object
+ file:
+ description: |-
+ File is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: KubeConfigPath is used to specify the
+ actual file path or URL to the kubeconfig file from
+ which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: Timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ TLSBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: CRISocket is used to retrieve container runtime
+ info. This information will be annotated to the Node
+ API object, for later re-use
+ type: string
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the
+ taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be setup.
+ items:
+ description: MountPoints defines input for generated mounts
+ in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands to run
+ after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to run
+ before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user in
+ cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the user
+ type: string
+ groups:
+ description: groups specifies the additional groups for
+ the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to use
+ for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the user
+ as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login should
+ be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for the
+ user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary group for
+ the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh authorized
+ keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1. When stacked etcd is used only
+ odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ rolloutStrategy:
+ description: |-
+ The RolloutStrategy to use to replace control plane machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ RolloutStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of control planes that can be scheduled above or under the
+ desired number of control planes.
+ Value can be an absolute number 1 or 0.
+ Defaults to 1.
+ Example: when this is set to 1, the control plane can be scaled
+ up immediately when the rolling update starts.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of rollout. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ upgradeAfter:
+ description: |-
+ upgradeAfter is a field to indicate an upgrade should be performed
+ after the specified time even if no changes have been made to the
+ KubeadmControlPlane
+ format: date-time
+ type: string
+ version:
+ description: version defines the desired Kubernetes version.
+ type: string
+ required:
+ - infrastructureTemplate
+ - kubeadmConfigSpec
+ - version
+ type: object
+ status:
+ description: KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane.
+ properties:
+ conditions:
+ description: conditions defines current service state of the KubeadmControlPlane.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ ErrorMessage indicates that there is a terminal problem reconciling the
+ state, and will be set to a descriptive error message.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a terminal problem reconciling the
+ state, and will be set to a token value suitable for
+ programmatic interpretation.
+ type: string
+ initialized:
+ description: |-
+ initialized denotes whether or not the control plane has the
+ uploaded kubeadm-config configmap.
+ type: boolean
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ ready:
+ description: |-
+ ready denotes that the KubeadmControlPlane API Server is ready to
+ receive requests.
+ type: boolean
+ readyReplicas:
+ description: Total number of fully running and ready control plane
+ machines.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Total number of non-terminated machines targeted by this control plane
+ (their labels match the selector).
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the label selector in string format to avoid introspection
+ by clients, and is used to provide the CRD-based integration for the
+ scale subresource and additional integrations for things like kubectl
+ describe.. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machines targeted by this control plane.
+ This is the total number of machines that are still required for
+ the deployment to have 100% available capacity. They may either
+ be machines that are running but not yet ready or machines
+ that still have not been created.
+ format: int32
+ type: integer
+ updatedReplicas:
+ description: |-
+ Total number of non-terminated machines targeted by this control plane
+ that have the desired template spec.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of KubeadmControlPlane
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: This denotes whether or not the control plane has the uploaded
+ kubeadm-config configmap
+ jsonPath: .status.initialized
+ name: Initialized
+ type: boolean
+ - description: KubeadmControlPlane API Server is ready to receive requests
+ jsonPath: .status.ready
+ name: API Server Available
+ type: boolean
+ - description: Kubernetes version associated with this control plane
+ jsonPath: .spec.version
+ name: Version
+ type: string
+ - description: Total number of non-terminated machines targeted by this control
+ plane
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of fully running and ready control plane machines
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of non-terminated machines targeted by this control
+ plane that have the desired template spec
+ jsonPath: .status.updatedReplicas
+ name: Updated
+ type: integer
+ - description: Total number of unavailable machines targeted by this control plane
+ jsonPath: .status.unavailableReplicas
+ name: Unavailable
+ type: integer
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmControlPlane is the Schema for the KubeadmControlPlane API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane.
+ properties:
+ kubeadmConfigSpec:
+ description: |-
+ kubeadmConfigSpec is a KubeadmConfigSpec
+ to use for initializing and joining machines to the control plane.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for the API
+ server control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative Names
+ for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the timeout
+ that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings for
+ the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on installed
+ in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required for
+ ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject Alternative
+ Names for the etcd server signing cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used by k8s services.
+ Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for the scheduler
+ control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation of partition
+ tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems
+ to setup.
+ items:
+ description: Filesystem defines the file systems to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to add
+ to the command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system type.
+ type: string
+ label:
+ description: label specifies the file system label to
+ be used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition to use.
+ The valid options are: "auto|any", "auto", "any",
+ "none", and <NUM>, where NUM is the actual partition
+ number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions
+ to setup.
+ items:
+ description: Partition defines how to create and layout
+ a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content
+ to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's data
+ map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the file
+ contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file,
+ e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where
+ to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to assign
+ to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap
+ data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap token,
+ stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address for
+ the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node
+ API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of
+ pre-flight errors to be ignored when the current node
+ is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the
+ taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration for
+ the join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on this node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the kubelet
+ to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or domain
+ name to the API server from which info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify the
+ actual file path or URL to the kubeconfig file from
+ which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node
+ API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of
+ pre-flight errors to be ignored when the current node
+ is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the
+ taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be setup.
+ items:
+ description: MountPoints defines input for generated mounts
+ in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands to run
+ after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to run
+ before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user in
+ cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the user
+ type: string
+ groups:
+ description: groups specifies the additional groups for
+ the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to use
+ for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the user
+ as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login should
+ be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for the
+ user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary group for
+ the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh authorized
+ keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ machineTemplate:
+ description: |-
+ machineTemplate contains information about how machines
+ should be shaped when creating or updating a control plane.
+ properties:
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ required:
+ - infrastructureRef
+ type: object
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1. When stacked etcd is used only
+ odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ rolloutAfter:
+ description: |-
+ rolloutAfter is a field to indicate a rollout should be performed
+ after the specified time even if no changes have been made to the
+ KubeadmControlPlane.
+ format: date-time
+ type: string
+ rolloutStrategy:
+ default:
+ rollingUpdate:
+ maxSurge: 1
+ type: RollingUpdate
+ description: |-
+ The RolloutStrategy to use to replace control plane machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ RolloutStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of control planes that can be scheduled above or under the
+ desired number of control planes.
+ Value can be an absolute number 1 or 0.
+ Defaults to 1.
+ Example: when this is set to 1, the control plane can be scaled
+ up immediately when the rolling update starts.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of rollout. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ version:
+ description: version defines the desired Kubernetes version.
+ type: string
+ required:
+ - kubeadmConfigSpec
+ - machineTemplate
+ - version
+ type: object
+ status:
+ description: KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane.
+ properties:
+ conditions:
+ description: conditions defines current service state of the KubeadmControlPlane.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may not be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ ErrorMessage indicates that there is a terminal problem reconciling the
+ state, and will be set to a descriptive error message.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a terminal problem reconciling the
+ state, and will be set to a token value suitable for
+ programmatic interpretation.
+ type: string
+ initialized:
+ description: |-
+ initialized denotes whether or not the control plane has the
+ uploaded kubeadm-config configmap.
+ type: boolean
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ ready:
+ description: |-
+ ready denotes that the KubeadmControlPlane API Server is ready to
+ receive requests.
+ type: boolean
+ readyReplicas:
+ description: Total number of fully running and ready control plane
+ machines.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Total number of non-terminated machines targeted by this control plane
+ (their labels match the selector).
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the label selector in string format to avoid introspection
+ by clients, and is used to provide the CRD-based integration for the
+ scale subresource and additional integrations for things like kubectl
+ describe.. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machines targeted by this control plane.
+ This is the total number of machines that are still required for
+ the deployment to have 100% available capacity. They may either
+ be machines that are running but not yet ready or machines
+ that still have not been created.
+ format: int32
+ type: integer
+ updatedReplicas:
+ description: |-
+ Total number of non-terminated machines targeted by this control plane
+ that have the desired template spec.
+ format: int32
+ type: integer
+ version:
+ description: |-
+ version represents the minimum Kubernetes version for the control plane machines
+ in the cluster.
+ type: string
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster
+ jsonPath: .metadata.labels['cluster\.x-k8s\.io/cluster-name']
+ name: Cluster
+ type: string
+ - description: This denotes whether or not the control plane has the uploaded
+ kubeadm-config configmap
+ jsonPath: .status.initialized
+ name: Initialized
+ type: boolean
+ - description: KubeadmControlPlane API Server is ready to receive requests
+ jsonPath: .status.ready
+ name: API Server Available
+ type: boolean
+ - description: Total number of machines desired by this control plane
+ jsonPath: .spec.replicas
+ name: Desired
+ priority: 10
+ type: integer
+ - description: Total number of non-terminated machines targeted by this control
+ plane
+ jsonPath: .status.replicas
+ name: Replicas
+ type: integer
+ - description: Total number of fully running and ready control plane machines
+ jsonPath: .status.readyReplicas
+ name: Ready
+ type: integer
+ - description: Total number of non-terminated machines targeted by this control
+ plane that have the desired template spec
+ jsonPath: .status.updatedReplicas
+ name: Updated
+ type: integer
+ - description: Total number of unavailable machines targeted by this control plane
+ jsonPath: .status.unavailableReplicas
+ name: Unavailable
+ type: integer
+ - description: Time duration since creation of KubeadmControlPlane
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: Kubernetes version associated with this control plane
+ jsonPath: .spec.version
+ name: Version
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: KubeadmControlPlane is the Schema for the KubeadmControlPlane
+ 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: KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane.
+ properties:
+ kubeadmConfigSpec:
+ description: |-
+ kubeadmConfigSpec is a KubeadmConfigSpec
+ to use for initializing and joining machines to the control plane.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for the API
+ server control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative Names
+ for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the
+ pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the timeout
+ that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings for
+ the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the
+ pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on installed
+ in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required for
+ ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in
+ the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject Alternative
+ Names for the etcd peer signing cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject Alternative
+ Names for the etcd server signing cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ * If not set, the default registry of kubeadm will be used, i.e.
+ * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
+ * k8s.gcr.io (old registry): all older versions
+ Please note that when imageRepository is not set we don't allow upgrades to
+ versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
+ a newer patch version with the new registry instead (i.e. >= v1.22.17,
+ >= v1.23.15, >= v1.24.9, >= v1.25.0).
+ * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
+ and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used by k8s services.
+ Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for the scheduler
+ control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags to pass
+ to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment variable
+ present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable. Must
+ be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment variable's
+ value. Cannot be used if value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap
+ or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret in the
+ pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host volumes,
+ mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside the pod
+ where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access to the
+ volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation of partition
+ tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file systems
+ to setup.
+ items:
+ description: Filesystem defines the file systems to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options to add
+ to the command for creating the file system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system type.
+ type: string
+ label:
+ description: label specifies the file system label to
+ be used. If set to None, no label is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition to use.
+ The valid options are: "auto|any", "auto", "any",
+ "none", and <NUM>, where NUM is the actual partition
+ number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the partitions
+ to setup.
+ items:
+ description: Partition defines how to create and layout
+ a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed to user_data
+ upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ append:
+ description: append specifies whether to append Content
+ to existing file if Path exists.
+ type: boolean
+ content:
+ description: content is the actual content of the file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source of content
+ to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's data
+ map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of the file
+ contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the file,
+ e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk where
+ to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions to assign
+ to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the bootstrap
+ data
+ enum:
+ - cloud-config
+ - ignition
+ type: string
+ ignition:
+ description: ignition contains Ignition specific configuration.
+ properties:
+ containerLinuxConfig:
+ description: containerLinuxConfig contains CLC specific configuration.
+ properties:
+ additionalConfig:
+ description: |-
+ additionalConfig contains additional configuration to be merged with the Ignition
+ configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
+
+ The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
+ type: string
+ strict:
+ description: strict controls if AdditionalConfig should
+ be strictly parsed. If so, warnings are treated as errors.
+ type: boolean
+ type: object
+ type: object
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap token,
+ stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address for
+ the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node
+ API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of
+ pre-flight errors to be ignored when the current node
+ is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the
+ taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration for
+ the join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on this node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the kubelet
+ to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or domain
+ name to the API server from which info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfig:
+ description: |-
+ kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
+ The file is generated at the path specified in KubeConfigPath.
+
+ Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
+ Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
+ properties:
+ cluster:
+ description: |-
+ cluster contains information about how to communicate with the kubernetes cluster.
+
+ By default the following fields are automatically populated:
+ - Server with the Cluster's ControlPlaneEndpoint.
+ - CertificateAuthorityData with the Cluster's CA certificate.
+ properties:
+ certificateAuthorityData:
+ description: |-
+ certificateAuthorityData contains PEM-encoded certificate authority certificates.
+
+ Defaults to the Cluster's CA certificate if empty.
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: insecureSkipTLSVerify skips the
+ validity check for the server's certificate.
+ This will make your HTTPS connections insecure.
+ type: boolean
+ proxyURL:
+ description: |-
+ proxyURL is the URL to the proxy to be used for all requests made by this
+ client. URLs with "http", "https", and "socks5" schemes are supported. If
+ this configuration is not provided or the empty string, the client
+ attempts to construct a proxy configuration from http_proxy and
+ https_proxy environment variables. If these environment variables are not
+ set, the client does not attempt to proxy requests.
+
+ socks5 proxying does not currently support spdy streaming endpoints (exec,
+ attach, port forward).
+ type: string
+ server:
+ description: |-
+ server is the address of the kubernetes cluster (https://hostname:port).
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
+ type: string
+ tlsServerName:
+ description: tlsServerName is used to check
+ server certificate. If TLSServerName is
+ empty, the hostname used to contact the
+ server is used.
+ type: string
+ type: object
+ user:
+ description: |-
+ user contains information that describes identity information.
+ This is used to tell the kubernetes cluster who you are.
+ properties:
+ authProvider:
+ description: authProvider specifies a custom
+ authentication plugin for the kubernetes
+ cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: config holds the parameters
+ for the authentication plugin.
+ type: object
+ name:
+ description: name is the name of the authentication
+ plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: exec specifies a custom exec-based
+ authentication plugin for the kubernetes
+ cluster.
+ properties:
+ apiVersion:
+ description: |-
+ Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
+ the same encoding version as the input.
+ Defaults to client.authentication.k8s.io/v1 if not set.
+ type: string
+ args:
+ description: Arguments to pass to the
+ command when executing it.
+ items:
+ type: string
+ type: array
+ command:
+ description: command to execute.
+ type: string
+ env:
+ description: |-
+ env defines additional environment variables to expose to the process. These
+ are unioned with the host's environment, as well as variables client-go uses
+ to pass argument to the plugin.
+ items:
+ description: |-
+ KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
+ credential plugin.
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: |-
+ provideClusterInfo determines whether or not to provide cluster information,
+ which could potentially contain very large CA data, to this exec plugin as a
+ part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
+ to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
+ reading this environment variable.
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify the
+ actual file path or URL to the kubeconfig file from
+ which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container runtime
+ info. This information will be annotated to the Node
+ API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a slice of
+ pre-flight errors to be ignored when the current node
+ is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to be applied
+ to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding to the
+ taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to be setup.
+ items:
+ description: MountPoints defines input for generated mounts
+ in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands to run
+ after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands to run
+ before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+
+ Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
+ When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated user in
+ cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for the user
+ type: string
+ groups:
+ description: groups specifies the additional groups for
+ the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory to use
+ for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark the user
+ as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password login should
+ be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password for the
+ user
+ type: string
+ passwdFrom:
+ description: passwdFrom is a referenced source of passwd
+ to populate the passwd.
+ properties:
+ secret:
+ description: secret represents a secret that should
+ populate this password.
+ properties:
+ key:
+ description: key is the key in the secret's data
+ map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ primaryGroup:
+ description: primaryGroup specifies the primary group for
+ the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list of ssh authorized
+ keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ machineNamingStrategy:
+ description: |-
+ MachineNamingStrategy allows changing the naming pattern used when creating Machines.
+ InfraMachines & KubeadmConfigs will use the same name as the corresponding Machines.
+ properties:
+ template:
+ description: |-
+ Template defines the template to use for generating the names of the Machine objects.
+ If not defined, it will fallback to `{{ .kubeadmControlPlane.name }}-{{ .random }}`.
+ If the generated name string exceeds 63 characters, it will be trimmed to 58 characters and will
+ get concatenated with a random suffix of length 5.
+ Length of the template string must not exceed 256 characters.
+ The template allows the following variables `.cluster.name`, `.kubeadmControlPlane.name` and `.random`.
+ The variable `.cluster.name` retrieves the name of the cluster object that owns the Machines being created.
+ The variable `.kubeadmControlPlane.name` retrieves the name of the KubeadmControlPlane object that owns the Machines being created.
+ The variable `.random` is substituted with random alphanumeric string, without vowels, of length 5.
+ maxLength: 256
+ type: string
+ type: object
+ machineTemplate:
+ description: |-
+ machineTemplate contains information about how machines
+ should be shaped when creating or updating a control plane.
+ properties:
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the machine controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ If no value is provided, the default value for this property of the Machine resource will be used.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ required:
+ - infrastructureRef
+ type: object
+ remediationStrategy:
+ description: The RemediationStrategy that controls how control plane
+ machine remediation happens.
+ properties:
+ maxRetry:
+ description: "maxRetry is the Max number of retries while attempting
+ to remediate an unhealthy machine.\nA retry happens when a machine
+ that was created as a replacement for an unhealthy machine also
+ fails.\nFor example, given a control plane with three machines
+ M1, M2, M3:\n\n\tM1 become unhealthy; remediation happens, and
+ M1-1 is created as a replacement.\n\tIf M1-1 (replacement of
+ M1) has problems while bootstrapping it will become unhealthy,
+ and then be\n\tremediated; such operation is considered a retry,
+ remediation-retry #1.\n\tIf M1-2 (replacement of M1-1) becomes
+ unhealthy, remediation-retry #2 will happen, etc.\n\nA retry
+ could happen only after RetryPeriod from the previous retry.\nIf
+ a machine is marked as unhealthy after MinHealthyPeriod from
+ the previous remediation expired,\nthis is not considered a
+ retry anymore because the new issue is assumed unrelated from
+ the previous one.\n\nIf not set, the remedation will be retried
+ infinitely."
+ format: int32
+ type: integer
+ minHealthyPeriod:
+ description: "minHealthyPeriod defines the duration after which
+ KCP will consider any failure to a machine unrelated\nfrom the
+ previous one. In this case the remediation is not considered
+ a retry anymore, and thus the retry\ncounter restarts from 0.
+ For example, assuming MinHealthyPeriod is set to 1h (default)\n\n\tM1
+ become unhealthy; remediation happens, and M1-1 is created as
+ a replacement.\n\tIf M1-1 (replacement of M1) has problems within
+ the 1hr after the creation, also\n\tthis machine will be remediated
+ and this operation is considered a retry - a problem related\n\tto
+ the original issue happened to M1 -.\n\n\tIf instead the problem
+ on M1-1 is happening after MinHealthyPeriod expired, e.g. four
+ days after\n\tm1-1 has been created as a remediation of M1,
+ the problem on M1-1 is considered unrelated to\n\tthe original
+ issue happened to M1.\n\nIf not set, this value is defaulted
+ to 1h."
+ type: string
+ retryPeriod:
+ description: |-
+ retryPeriod is the duration that KCP should wait before remediating a machine being created as a replacement
+ for an unhealthy machine (a retry).
+
+ If not set, a retry will happen immediately.
+ type: string
+ type: object
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1. When stacked etcd is used only
+ odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ rolloutAfter:
+ description: |-
+ rolloutAfter is a field to indicate a rollout should be performed
+ after the specified time even if no changes have been made to the
+ KubeadmControlPlane.
+ Example: In the YAML the time can be specified in the RFC3339 format.
+ To specify the rolloutAfter target as March 9, 2023, at 9 am UTC
+ use "2023-03-09T09:00:00Z".
+ format: date-time
+ type: string
+ rolloutBefore:
+ description: |-
+ rolloutBefore is a field to indicate a rollout should be performed
+ if the specified criteria is met.
+ properties:
+ certificatesExpiryDays:
+ description: |-
+ certificatesExpiryDays indicates a rollout needs to be performed if the
+ certificates of the machine will expire within the specified days.
+ format: int32
+ type: integer
+ type: object
+ rolloutStrategy:
+ default:
+ rollingUpdate:
+ maxSurge: 1
+ type: RollingUpdate
+ description: |-
+ The RolloutStrategy to use to replace control plane machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ RolloutStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of control planes that can be scheduled above or under the
+ desired number of control planes.
+ Value can be an absolute number 1 or 0.
+ Defaults to 1.
+ Example: when this is set to 1, the control plane can be scaled
+ up immediately when the rolling update starts.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of rollout. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ version:
+ description: |-
+ version defines the desired Kubernetes version.
+ Please note that if kubeadmConfigSpec.ClusterConfiguration.imageRepository is not set
+ we don't allow upgrades to versions >= v1.22.0 for which kubeadm uses the old registry (k8s.gcr.io).
+ Please use a newer patch version with the new registry instead. The default registries of kubeadm are:
+ * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
+ * k8s.gcr.io (old registry): all older versions
+ type: string
+ required:
+ - kubeadmConfigSpec
+ - machineTemplate
+ - version
+ type: object
+ status:
+ description: KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane.
+ properties:
+ conditions:
+ description: conditions defines current service state of the KubeadmControlPlane.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ ErrorMessage indicates that there is a terminal problem reconciling the
+ state, and will be set to a descriptive error message.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ failureReason:
+ description: |-
+ failureReason indicates that there is a terminal problem reconciling the
+ state, and will be set to a token value suitable for
+ programmatic interpretation.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ type: string
+ initialized:
+ description: |-
+ initialized denotes that the KubeadmControlPlane API Server is initialized and thus
+ it can accept requests.
+ NOTE: this field is part of the Cluster API contract and it is used to orchestrate provisioning.
+ The value of this field is never updated after provisioning is completed. Please use conditions
+ to check the operational state of the control plane.
+ type: boolean
+ lastRemediation:
+ description: lastRemediation stores info about last remediation performed.
+ properties:
+ machine:
+ description: machine is the machine name of the latest machine
+ being remediated.
+ type: string
+ retryCount:
+ description: |-
+ retryCount used to keep track of remediation retry for the last remediated machine.
+ A retry happens when a machine that was created as a replacement for an unhealthy machine also fails.
+ format: int32
+ type: integer
+ timestamp:
+ description: timestamp is when last remediation happened. It is
+ represented in RFC3339 form and is in UTC.
+ format: date-time
+ type: string
+ required:
+ - machine
+ - retryCount
+ - timestamp
+ type: object
+ observedGeneration:
+ description: observedGeneration is the latest generation observed
+ by the controller.
+ format: int64
+ type: integer
+ ready:
+ description: |-
+ ready denotes that the KubeadmControlPlane API Server became ready during initial provisioning
+ to receive requests.
+ NOTE: this field is part of the Cluster API contract and it is used to orchestrate provisioning.
+ The value of this field is never updated after provisioning is completed. Please use conditions
+ to check the operational state of the control plane.
+ type: boolean
+ readyReplicas:
+ description: Total number of fully running and ready control plane
+ machines.
+ format: int32
+ type: integer
+ replicas:
+ description: |-
+ Total number of non-terminated machines targeted by this control plane
+ (their labels match the selector).
+ format: int32
+ type: integer
+ selector:
+ description: |-
+ selector is the label selector in string format to avoid introspection
+ by clients, and is used to provide the CRD-based integration for the
+ scale subresource and additional integrations for things like kubectl
+ describe.. The string will be in the same format as the query-param syntax.
+ More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
+ type: string
+ unavailableReplicas:
+ description: |-
+ Total number of unavailable machines targeted by this control plane.
+ This is the total number of machines that are still required for
+ the deployment to have 100% available capacity. They may either
+ be machines that are running but not yet ready or machines
+ that still have not been created.
+
+ Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
+ format: int32
+ type: integer
+ updatedReplicas:
+ description: |-
+ Total number of non-terminated machines targeted by this control plane
+ that have the desired template spec.
+ format: int32
+ type: integer
+ v1beta2:
+ description: v1beta2 groups all the fields that will be added or modified
+ in KubeadmControlPlane's status with the V1Beta2 version.
+ properties:
+ availableReplicas:
+ description: availableReplicas is the number of available replicas
+ targeted by this KubeadmControlPlane. A machine is considered
+ available when Machine's Available condition is true.
+ format: int32
+ type: integer
+ conditions:
+ description: |-
+ conditions represents the observations of a KubeadmControlPlane's current state.
+ Known condition types are Available, CertificatesAvailable, EtcdClusterAvailable, MachinesReady, MachinesUpToDate,
+ ScalingUp, ScalingDown, Remediating, Deleting, Paused.
+ 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
+ maxItems: 32
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ readyReplicas:
+ description: readyReplicas is the number of ready replicas for
+ this KubeadmControlPlane. A machine is considered ready when
+ Machine's Ready condition is true.
+ format: int32
+ type: integer
+ upToDateReplicas:
+ description: upToDateReplicas is the number of up-to-date replicas
+ targeted by this KubeadmControlPlane. A machine is considered
+ up-to-date when Machine's UpToDate condition is true.
+ format: int32
+ type: integer
+ type: object
+ version:
+ description: |-
+ version represents the minimum Kubernetes version for the control plane machines
+ in the cluster.
+ type: string
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ scale:
+ labelSelectorPath: .status.selector
+ specReplicasPath: .spec.replicas
+ statusReplicasPath: .status.replicas
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.1
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ cluster.x-k8s.io/v1beta1: v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: controlplane.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: KubeadmControlPlaneTemplate
+ listKind: KubeadmControlPlaneTemplateList
+ plural: kubeadmcontrolplanetemplates
+ singular: kubeadmcontrolplanetemplate
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Time duration since creation of KubeadmControlPlaneTemplate
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ name: v1alpha4
+ schema:
+ openAPIV3Schema:
+ description: |-
+ KubeadmControlPlaneTemplate is the Schema for the kubeadmcontrolplanetemplates API.
+
+ Deprecated: This type will be removed in one of the next releases.
+ 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: KubeadmControlPlaneTemplateSpec defines the desired state
+ of KubeadmControlPlaneTemplate.
+ properties:
+ template:
+ description: KubeadmControlPlaneTemplateResource describes the data
+ needed to create a KubeadmControlPlane from a template.
+ properties:
+ spec:
+ description: KubeadmControlPlaneSpec defines the desired state
+ of KubeadmControlPlane.
+ properties:
+ kubeadmConfigSpec:
+ description: |-
+ kubeadmConfigSpec is a KubeadmConfigSpec
+ to use for initializing and joining machines to the control plane.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for
+ the API server control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative
+ Names for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags
+ to pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside
+ the pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the
+ pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the
+ HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the
+ timeout that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings
+ for the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags
+ to pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside
+ the pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the
+ pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the
+ HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on
+ installed in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required
+ for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject
+ Alternative Names for the etcd peer signing
+ cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject
+ Alternative Names for the etcd server signing
+ cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
+ will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used
+ by k8s services. Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for
+ the scheduler control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags
+ to pass to the control plane component.
+ type: object
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside
+ the pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the
+ pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the
+ HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation
+ of partition tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file
+ systems to setup.
+ items:
+ description: Filesystem defines the file systems
+ to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options
+ to add to the command for creating the file
+ system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system
+ type.
+ type: string
+ label:
+ description: label specifies the file system
+ label to be used. If set to None, no label
+ is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition
+ to use. The valid options are: "auto|any",
+ "auto", "any", "none", and <NUM>, where NUM
+ is the actual partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the
+ partitions to setup.
+ items:
+ description: Partition defines how to create and
+ layout a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed
+ to user_data upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ content:
+ description: content is the actual content of the
+ file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source
+ of content to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that
+ should populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of
+ the file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the
+ file, e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk
+ where to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions
+ to assign to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the
+ bootstrap data
+ enum:
+ - cloud-config
+ type: string
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap
+ token, stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a
+ slice of pre-flight errors to be ignored when
+ the current node is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to
+ be applied to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding
+ to the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration
+ for the join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on
+ this node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP
+ address for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the
+ kubelet to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or
+ domain name to the API server from which
+ info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify
+ the actual file path or URL to the kubeconfig
+ file from which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a
+ slice of pre-flight errors to be ignored when
+ the current node is registered.
+ items:
+ type: string
+ type: array
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to
+ be applied to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding
+ to the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to
+ be setup.
+ items:
+ description: MountPoints defines input for generated
+ mounts in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should
+ be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to
+ use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands
+ to run after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands
+ to run before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated
+ user in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for
+ the user
+ type: string
+ groups:
+ description: groups specifies the additional groups
+ for the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory
+ to use for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark
+ the user as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password
+ login should be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password
+ for the user
+ type: string
+ primaryGroup:
+ description: primaryGroup specifies the primary
+ group for the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list
+ of ssh authorized keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the
+ user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ machineTemplate:
+ description: |-
+ machineTemplate contains information about how machines
+ should be shaped when creating or updating a control plane.
+ properties:
+ infrastructureRef:
+ description: |-
+ infrastructureRef is a required reference to a custom resource
+ offered by an infrastructure provider.
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ required:
+ - infrastructureRef
+ type: object
+ replicas:
+ description: |-
+ Number of desired machines. Defaults to 1. When stacked etcd is used only
+ odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
+ This is a pointer to distinguish between explicit zero and not specified.
+ format: int32
+ type: integer
+ rolloutAfter:
+ description: |-
+ rolloutAfter is a field to indicate a rollout should be performed
+ after the specified time even if no changes have been made to the
+ KubeadmControlPlane.
+ format: date-time
+ type: string
+ rolloutStrategy:
+ default:
+ rollingUpdate:
+ maxSurge: 1
+ type: RollingUpdate
+ description: |-
+ The RolloutStrategy to use to replace control plane machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ RolloutStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of control planes that can be scheduled above or under the
+ desired number of control planes.
+ Value can be an absolute number 1 or 0.
+ Defaults to 1.
+ Example: when this is set to 1, the control plane can be scaled
+ up immediately when the rolling update starts.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of rollout. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ version:
+ description: version defines the desired Kubernetes version.
+ type: string
+ required:
+ - kubeadmConfigSpec
+ - machineTemplate
+ - version
+ type: object
+ required:
+ - spec
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources: {}
+ - additionalPrinterColumns:
+ - description: Time duration since creation of KubeadmControlPlaneTemplate
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: KubeadmControlPlaneTemplate is the Schema for the kubeadmcontrolplanetemplates
+ 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: KubeadmControlPlaneTemplateSpec defines the desired state
+ of KubeadmControlPlaneTemplate.
+ properties:
+ template:
+ description: KubeadmControlPlaneTemplateResource describes the data
+ needed to create a KubeadmControlPlane from a template.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ spec:
+ description: |-
+ KubeadmControlPlaneTemplateResourceSpec defines the desired state of KubeadmControlPlane.
+ NOTE: KubeadmControlPlaneTemplateResourceSpec is similar to KubeadmControlPlaneSpec but
+ omits Replicas and Version fields. These fields do not make sense on the KubeadmControlPlaneTemplate,
+ because they are calculated by the Cluster topology reconciler during reconciliation and thus cannot
+ be configured on the KubeadmControlPlaneTemplate.
+ properties:
+ kubeadmConfigSpec:
+ description: |-
+ kubeadmConfigSpec is a KubeadmConfigSpec
+ to use for initializing and joining machines to the control plane.
+ properties:
+ clusterConfiguration:
+ description: clusterConfiguration along with InitConfiguration
+ are the configurations necessary for the init command
+ properties:
+ apiServer:
+ description: apiServer contains extra settings for
+ the API server control plane component
+ properties:
+ certSANs:
+ description: certSANs sets extra Subject Alternative
+ Names for the API Server signing cert.
+ items:
+ type: string
+ type: array
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags
+ to pass to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment
+ variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment
+ variable's value. Cannot be used if value
+ is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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
+ ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret
+ in the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside
+ the pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the
+ pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the
+ HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ timeoutForControlPlane:
+ description: timeoutForControlPlane controls the
+ timeout that we use for API server to appear
+ type: string
+ type: object
+ 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
+ certificatesDir:
+ description: |-
+ certificatesDir specifies where to store or look for all required certificates.
+ NB: if not provided, this will default to `/etc/kubernetes/pki`
+ type: string
+ clusterName:
+ description: The cluster name
+ type: string
+ controlPlaneEndpoint:
+ description: |-
+ controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
+ can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
+ In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
+ are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
+ the BindPort is used.
+ Possible usages are:
+ e.g. In a cluster with more than one control plane instances, this field should be
+ assigned the address of the external load balancer in front of the
+ control plane instances.
+ e.g. in environments with enforced node recycling, the ControlPlaneEndpoint
+ could be used for assigning a stable DNS to the control plane.
+ NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
+ type: string
+ controllerManager:
+ description: controllerManager contains extra settings
+ for the controller manager control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags
+ to pass to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment
+ variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment
+ variable's value. Cannot be used if value
+ is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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
+ ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret
+ in the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside
+ the pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the
+ pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the
+ HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ dns:
+ description: dns defines the options for the DNS add-on
+ installed in the cluster.
+ properties:
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ type: object
+ etcd:
+ description: |-
+ etcd holds configuration for etcd.
+ NB: This value defaults to a Local (stacked) etcd
+ properties:
+ external:
+ description: |-
+ external describes how to connect to an external etcd cluster
+ Local and External are mutually exclusive
+ properties:
+ caFile:
+ description: |-
+ caFile is an SSL Certificate Authority file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ certFile:
+ description: |-
+ certFile is an SSL certification file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ endpoints:
+ description: endpoints of etcd members. Required
+ for ExternalEtcd.
+ items:
+ type: string
+ type: array
+ keyFile:
+ description: |-
+ keyFile is an SSL key file used to secure etcd communication.
+ Required if using a TLS connection.
+ type: string
+ required:
+ - caFile
+ - certFile
+ - endpoints
+ - keyFile
+ type: object
+ local:
+ description: |-
+ local provides configuration knobs for configuring the local etcd instance
+ Local and External are mutually exclusive
+ properties:
+ dataDir:
+ description: |-
+ dataDir is the directory etcd will place its data.
+ Defaults to "/var/lib/etcd".
+ type: string
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ extraArgs are extra arguments provided to the etcd binary
+ when run inside a static pod.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment
+ variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment
+ variable. Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment
+ variable's value. Cannot be used if
+ value is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a
+ ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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 ConfigMap or its key must
+ be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a
+ secret in the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
+ type: string
+ imageTag:
+ description: |-
+ imageTag allows to specify a tag for the image.
+ In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
+ type: string
+ peerCertSANs:
+ description: peerCertSANs sets extra Subject
+ Alternative Names for the etcd peer signing
+ cert.
+ items:
+ type: string
+ type: array
+ serverCertSANs:
+ description: serverCertSANs sets extra Subject
+ Alternative Names for the etcd server signing
+ cert.
+ items:
+ type: string
+ type: array
+ type: object
+ type: object
+ featureGates:
+ additionalProperties:
+ type: boolean
+ description: featureGates enabled by the user.
+ type: object
+ imageRepository:
+ description: |-
+ imageRepository sets the container registry to pull images from.
+ * If not set, the default registry of kubeadm will be used, i.e.
+ * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
+ * k8s.gcr.io (old registry): all older versions
+ Please note that when imageRepository is not set we don't allow upgrades to
+ versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
+ a newer patch version with the new registry instead (i.e. >= v1.22.17,
+ >= v1.23.15, >= v1.24.9, >= v1.25.0).
+ * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
+ `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
+ and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
+ 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
+ kubernetesVersion:
+ description: |-
+ kubernetesVersion is the target version of the control plane.
+ NB: This value defaults to the Machine object spec.version
+ type: string
+ networking:
+ description: |-
+ networking holds configuration for the networking topology of the cluster.
+ NB: This value defaults to the Cluster object spec.clusterNetwork.
+ properties:
+ dnsDomain:
+ description: dnsDomain is the dns domain used
+ by k8s services. Defaults to "cluster.local".
+ type: string
+ podSubnet:
+ description: |-
+ podSubnet is the subnet used by pods.
+ If unset, the API server will not allocate CIDR ranges for every node.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
+ type: string
+ serviceSubnet:
+ description: |-
+ serviceSubnet is the subnet used by k8s services.
+ Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
+ to "10.96.0.0/12" if that's unset.
+ type: string
+ type: object
+ scheduler:
+ description: scheduler contains extra settings for
+ the scheduler control plane component
+ properties:
+ extraArgs:
+ additionalProperties:
+ type: string
+ description: extraArgs is an extra set of flags
+ to pass to the control plane component.
+ type: object
+ extraEnvs:
+ description: |-
+ extraEnvs is an extra set of environment variables to pass to the control plane component.
+ Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
+ This option takes effect only on Kubernetes >=1.31.0.
+ items:
+ description: EnvVar represents an environment
+ variable present in a Container.
+ properties:
+ name:
+ description: Name of the environment variable.
+ Must be a C_IDENTIFIER.
+ type: string
+ value:
+ description: |-
+ Variable references $(VAR_NAME) are expanded
+ using the previously defined environment variables in the container and
+ any service environment variables. If a variable cannot be resolved,
+ the reference in the input string will be unchanged. Double $ are reduced
+ to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ Escaped references will never be expanded, regardless of whether the variable
+ exists or not.
+ Defaults to "".
+ type: string
+ valueFrom:
+ description: Source for the environment
+ variable's value. Cannot be used if value
+ is not empty.
+ properties:
+ configMapKeyRef:
+ description: Selects a key of a ConfigMap.
+ properties:
+ key:
+ description: The key to select.
+ 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
+ ConfigMap or its key must be defined
+ type: boolean
+ required:
+ - key
+ type: object
+ x-kubernetes-map-type: atomic
+ fieldRef:
+ description: |-
+ Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
+ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ 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
+ resourceFieldRef:
+ description: |-
+ Selects a resource of the container: only resources limits and requests
+ (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) 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
+ secretKeyRef:
+ description: Selects a key of a secret
+ in the pod's namespace
+ 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
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ extraVolumes:
+ description: extraVolumes is an extra set of host
+ volumes, mounted to the control plane component.
+ items:
+ description: |-
+ HostPathMount contains elements describing volumes that are mounted from the
+ host.
+ properties:
+ hostPath:
+ description: |-
+ hostPath is the path in the host that will be mounted inside
+ the pod.
+ type: string
+ mountPath:
+ description: mountPath is the path inside
+ the pod where hostPath will be mounted.
+ type: string
+ name:
+ description: name of the volume inside the
+ pod template.
+ type: string
+ pathType:
+ description: pathType is the type of the
+ HostPath.
+ type: string
+ readOnly:
+ description: readOnly controls write access
+ to the volume
+ type: boolean
+ required:
+ - hostPath
+ - mountPath
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ diskSetup:
+ description: diskSetup specifies options for the creation
+ of partition tables and file systems on devices.
+ properties:
+ filesystems:
+ description: filesystems specifies the list of file
+ systems to setup.
+ items:
+ description: Filesystem defines the file systems
+ to be created.
+ properties:
+ device:
+ description: device specifies the device name
+ type: string
+ extraOpts:
+ description: extraOpts defined extra options
+ to add to the command for creating the file
+ system.
+ items:
+ type: string
+ type: array
+ filesystem:
+ description: filesystem specifies the file system
+ type.
+ type: string
+ label:
+ description: label specifies the file system
+ label to be used. If set to None, no label
+ is used.
+ type: string
+ overwrite:
+ description: |-
+ overwrite defines whether or not to overwrite any existing filesystem.
+ If true, any pre-existing file system will be destroyed. Use with Caution.
+ type: boolean
+ partition:
+ description: 'partition specifies the partition
+ to use. The valid options are: "auto|any",
+ "auto", "any", "none", and <NUM>, where NUM
+ is the actual partition number.'
+ type: string
+ replaceFS:
+ description: |-
+ replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
+ NOTE: unless you define a label, this requires the use of the 'any' partition directive.
+ type: string
+ required:
+ - device
+ - filesystem
+ - label
+ type: object
+ type: array
+ partitions:
+ description: partitions specifies the list of the
+ partitions to setup.
+ items:
+ description: Partition defines how to create and
+ layout a partition.
+ properties:
+ device:
+ description: device is the name of the device.
+ type: string
+ layout:
+ description: |-
+ layout specifies the device layout.
+ If it is true, a single partition will be created for the entire device.
+ When layout is false, it means don't partition or ignore existing partitioning.
+ type: boolean
+ overwrite:
+ description: |-
+ overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
+ Use with caution. Default is 'false'.
+ type: boolean
+ tableType:
+ description: |-
+ tableType specifies the tupe of partition table. The following are supported:
+ 'mbr': default and setups a MS-DOS partition table
+ 'gpt': setups a GPT partition table
+ type: string
+ required:
+ - device
+ - layout
+ type: object
+ type: array
+ type: object
+ files:
+ description: files specifies extra files to be passed
+ to user_data upon creation.
+ items:
+ description: File defines the input for generating write_files
+ in cloud-init.
+ properties:
+ append:
+ description: append specifies whether to append
+ Content to existing file if Path exists.
+ type: boolean
+ content:
+ description: content is the actual content of the
+ file.
+ type: string
+ contentFrom:
+ description: contentFrom is a referenced source
+ of content to populate the file.
+ properties:
+ secret:
+ description: secret represents a secret that
+ should populate this file.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ encoding:
+ description: encoding specifies the encoding of
+ the file contents.
+ enum:
+ - base64
+ - gzip
+ - gzip+base64
+ type: string
+ owner:
+ description: owner specifies the ownership of the
+ file, e.g. "root:root".
+ type: string
+ path:
+ description: path specifies the full path on disk
+ where to store the file.
+ type: string
+ permissions:
+ description: permissions specifies the permissions
+ to assign to the file, e.g. "0640".
+ type: string
+ required:
+ - path
+ type: object
+ type: array
+ format:
+ description: format specifies the output format of the
+ bootstrap data
+ enum:
+ - cloud-config
+ - ignition
+ type: string
+ ignition:
+ description: ignition contains Ignition specific configuration.
+ properties:
+ containerLinuxConfig:
+ description: containerLinuxConfig contains CLC specific
+ configuration.
+ properties:
+ additionalConfig:
+ description: |-
+ additionalConfig contains additional configuration to be merged with the Ignition
+ configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
+
+ The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
+ type: string
+ strict:
+ description: strict controls if AdditionalConfig
+ should be strictly parsed. If so, warnings are
+ treated as errors.
+ type: boolean
+ type: object
+ type: object
+ initConfiguration:
+ description: initConfiguration along with ClusterConfiguration
+ are the configurations necessary for the init command
+ 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
+ bootstrapTokens:
+ description: |-
+ bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
+ This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
+ items:
+ description: BootstrapToken describes one bootstrap
+ token, stored as a Secret in the cluster.
+ properties:
+ description:
+ description: |-
+ description sets a human-friendly message why this token exists and what it's used
+ for, so other administrators can know its purpose.
+ type: string
+ expires:
+ description: |-
+ expires specifies the timestamp when this token expires. Defaults to being set
+ dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
+ format: date-time
+ type: string
+ groups:
+ description: |-
+ groups specifies the extra groups that this token will authenticate as when/if
+ used for authentication
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is used for establishing bidirectional trust between nodes and control-planes.
+ Used for joining nodes in the cluster.
+ type: string
+ ttl:
+ description: |-
+ ttl defines the time to live for this token. Defaults to 24h.
+ Expires and TTL are mutually exclusive.
+ type: string
+ usages:
+ description: |-
+ usages describes the ways in which this token can be used. Can by default be used
+ for establishing bidirectional trust, but that can be changed here.
+ items:
+ type: string
+ type: array
+ required:
+ - token
+ type: object
+ type: array
+ 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
+ localAPIEndpoint:
+ description: |-
+ localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
+ In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
+ is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
+ configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
+ on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
+ fails you may set the desired value here.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP address
+ for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a
+ slice of pre-flight errors to be ignored when
+ the current node is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to
+ be applied to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding
+ to the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ joinConfiguration:
+ description: joinConfiguration is the kubeadm configuration
+ for the join command
+ 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
+ caCertPath:
+ description: |-
+ caCertPath is the path to the SSL certificate authority used to
+ secure comunications between node and control-plane.
+ Defaults to "/etc/kubernetes/pki/ca.crt".
+ type: string
+ controlPlane:
+ description: |-
+ controlPlane defines the additional control plane instance to be deployed on the joining node.
+ If nil, no additional control plane instance will be deployed.
+ properties:
+ localAPIEndpoint:
+ description: localAPIEndpoint represents the endpoint
+ of the API server instance to be deployed on
+ this node.
+ properties:
+ advertiseAddress:
+ description: advertiseAddress sets the IP
+ address for the API server to advertise.
+ type: string
+ bindPort:
+ description: |-
+ bindPort sets the secure port for the API Server to bind to.
+ Defaults to 6443.
+ format: int32
+ type: integer
+ type: object
+ type: object
+ discovery:
+ description: discovery specifies the options for the
+ kubelet to use during the TLS Bootstrap process
+ properties:
+ bootstrapToken:
+ description: |-
+ bootstrapToken is used to set the options for bootstrap token based discovery
+ BootstrapToken and File are mutually exclusive
+ properties:
+ apiServerEndpoint:
+ description: apiServerEndpoint is an IP or
+ domain name to the API server from which
+ info will be fetched.
+ type: string
+ caCertHashes:
+ description: |-
+ caCertHashes specifies a set of public key pins to verify
+ when token-based discovery is used. The root CA found during discovery
+ must match one of these values. Specifying an empty set disables root CA
+ pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
+ where the only currently supported type is "sha256". This is a hex-encoded
+ SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
+ ASN.1. These hashes can be calculated using, for example, OpenSSL:
+ openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
+ items:
+ type: string
+ type: array
+ token:
+ description: |-
+ token is a token used to validate cluster information
+ fetched from the control-plane.
+ type: string
+ unsafeSkipCAVerification:
+ description: |-
+ unsafeSkipCAVerification allows token-based discovery
+ without CA verification via CACertHashes. This can weaken
+ the security of kubeadm since other nodes can impersonate the control-plane.
+ type: boolean
+ required:
+ - token
+ type: object
+ file:
+ description: |-
+ file is used to specify a file or URL to a kubeconfig file from which to load cluster information
+ BootstrapToken and File are mutually exclusive
+ properties:
+ kubeConfig:
+ description: |-
+ kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
+ The file is generated at the path specified in KubeConfigPath.
+
+ Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
+ Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
+ properties:
+ cluster:
+ description: |-
+ cluster contains information about how to communicate with the kubernetes cluster.
+
+ By default the following fields are automatically populated:
+ - Server with the Cluster's ControlPlaneEndpoint.
+ - CertificateAuthorityData with the Cluster's CA certificate.
+ properties:
+ certificateAuthorityData:
+ description: |-
+ certificateAuthorityData contains PEM-encoded certificate authority certificates.
+
+ Defaults to the Cluster's CA certificate if empty.
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: insecureSkipTLSVerify
+ skips the validity check for the
+ server's certificate. This will
+ make your HTTPS connections insecure.
+ type: boolean
+ proxyURL:
+ description: |-
+ proxyURL is the URL to the proxy to be used for all requests made by this
+ client. URLs with "http", "https", and "socks5" schemes are supported. If
+ this configuration is not provided or the empty string, the client
+ attempts to construct a proxy configuration from http_proxy and
+ https_proxy environment variables. If these environment variables are not
+ set, the client does not attempt to proxy requests.
+
+ socks5 proxying does not currently support spdy streaming endpoints (exec,
+ attach, port forward).
+ type: string
+ server:
+ description: |-
+ server is the address of the kubernetes cluster (https://hostname:port).
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
+ type: string
+ tlsServerName:
+ description: tlsServerName is used
+ to check server certificate. If
+ TLSServerName is empty, the hostname
+ used to contact the server is used.
+ type: string
+ type: object
+ user:
+ description: |-
+ user contains information that describes identity information.
+ This is used to tell the kubernetes cluster who you are.
+ properties:
+ authProvider:
+ description: authProvider specifies
+ a custom authentication plugin for
+ the kubernetes cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: config holds the
+ parameters for the authentication
+ plugin.
+ type: object
+ name:
+ description: name is the name
+ of the authentication plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: exec specifies a custom
+ exec-based authentication plugin
+ for the kubernetes cluster.
+ properties:
+ apiVersion:
+ description: |-
+ Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
+ the same encoding version as the input.
+ Defaults to client.authentication.k8s.io/v1 if not set.
+ type: string
+ args:
+ description: Arguments to pass
+ to the command when executing
+ it.
+ items:
+ type: string
+ type: array
+ command:
+ description: command to execute.
+ type: string
+ env:
+ description: |-
+ env defines additional environment variables to expose to the process. These
+ are unioned with the host's environment, as well as variables client-go uses
+ to pass argument to the plugin.
+ items:
+ description: |-
+ KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
+ credential plugin.
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: |-
+ provideClusterInfo determines whether or not to provide cluster information,
+ which could potentially contain very large CA data, to this exec plugin as a
+ part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
+ to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
+ reading this environment variable.
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
+ kubeConfigPath:
+ description: kubeConfigPath is used to specify
+ the actual file path or URL to the kubeconfig
+ file from which to load cluster information
+ type: string
+ required:
+ - kubeConfigPath
+ type: object
+ timeout:
+ description: timeout modifies the discovery timeout
+ type: string
+ tlsBootstrapToken:
+ description: |-
+ tlsBootstrapToken is a token used for TLS bootstrapping.
+ If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
+ If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
+ type: string
+ type: object
+ 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
+ nodeRegistration:
+ description: |-
+ nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
+ When used in the context of control plane nodes, NodeRegistration should remain consistent
+ across both InitConfiguration and JoinConfiguration
+ properties:
+ criSocket:
+ description: criSocket is used to retrieve container
+ runtime info. This information will be annotated
+ to the Node API object, for later re-use
+ type: string
+ ignorePreflightErrors:
+ description: ignorePreflightErrors provides a
+ slice of pre-flight errors to be ignored when
+ the current node is registered.
+ items:
+ type: string
+ type: array
+ imagePullPolicy:
+ description: |-
+ imagePullPolicy specifies the policy for image pulling
+ during kubeadm "init" and "join" operations. The value of
+ this field must be one of "Always", "IfNotPresent" or
+ "Never". Defaults to "IfNotPresent". This can be used only
+ with Kubernetes version equal to 1.22 and later.
+ enum:
+ - Always
+ - IfNotPresent
+ - Never
+ type: string
+ imagePullSerial:
+ description: |-
+ imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
+ This option takes effect only on Kubernetes >=1.31.0.
+ Default: true (defaulted in kubeadm)
+ type: boolean
+ kubeletExtraArgs:
+ additionalProperties:
+ type: string
+ description: |-
+ kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
+ kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
+ Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
+ type: object
+ name:
+ description: |-
+ name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
+ This field is also used in the CommonName field of the kubelet's client certificate to the API server.
+ Defaults to the hostname of the node if not provided.
+ type: string
+ taints:
+ description: |-
+ taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
+ it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
+ empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
+ items:
+ description: |-
+ The node this Taint is attached to has the "effect" on
+ any pod that does not tolerate the Taint.
+ properties:
+ effect:
+ description: |-
+ Required. The effect of the taint on pods
+ that do not tolerate the taint.
+ Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
+ type: string
+ key:
+ description: Required. The taint key to
+ be applied to a node.
+ type: string
+ timeAdded:
+ description: |-
+ TimeAdded represents the time at which the taint was added.
+ It is only written for NoExecute taints.
+ format: date-time
+ type: string
+ value:
+ description: The taint value corresponding
+ to the taint key.
+ type: string
+ required:
+ - effect
+ - key
+ type: object
+ type: array
+ type: object
+ patches:
+ description: |-
+ patches contains options related to applying patches to components deployed by kubeadm during
+ "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
+ properties:
+ directory:
+ description: |-
+ directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
+ For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
+ "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
+ of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
+ The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
+ "suffix" is an optional string that can be used to determine which patches are applied
+ first alpha-numerically.
+ These files can be written into the target directory via KubeadmConfig.Files which
+ specifies additional files to be created on the machine, either with content inline or
+ by referencing a secret.
+ type: string
+ type: object
+ skipPhases:
+ description: |-
+ skipPhases is a list of phases to skip during command execution.
+ The list of phases can be obtained with the "kubeadm init --help" command.
+ This option takes effect only on Kubernetes >=1.22.0.
+ items:
+ type: string
+ type: array
+ type: object
+ mounts:
+ description: mounts specifies a list of mount points to
+ be setup.
+ items:
+ description: MountPoints defines input for generated
+ mounts in cloud-init.
+ items:
+ type: string
+ type: array
+ type: array
+ ntp:
+ description: ntp specifies NTP configuration
+ properties:
+ enabled:
+ description: enabled specifies whether NTP should
+ be enabled
+ type: boolean
+ servers:
+ description: servers specifies which NTP servers to
+ use
+ items:
+ type: string
+ type: array
+ type: object
+ postKubeadmCommands:
+ description: postKubeadmCommands specifies extra commands
+ to run after kubeadm runs
+ items:
+ type: string
+ type: array
+ preKubeadmCommands:
+ description: preKubeadmCommands specifies extra commands
+ to run before kubeadm runs
+ items:
+ type: string
+ type: array
+ useExperimentalRetryJoin:
+ description: |-
+ useExperimentalRetryJoin replaces a basic kubeadm command with a shell
+ script with retries for joins.
+
+ This is meant to be an experimental temporary workaround on some environments
+ where joins fail due to timing (and other issues). The long term goal is to add retries to
+ kubeadm proper and use that functionality.
+
+ This will add about 40KB to userdata
+
+ For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
+
+ Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
+ When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
+ type: boolean
+ users:
+ description: users specifies extra users to add
+ items:
+ description: User defines the input for a generated
+ user in cloud-init.
+ properties:
+ gecos:
+ description: gecos specifies the gecos to use for
+ the user
+ type: string
+ groups:
+ description: groups specifies the additional groups
+ for the user
+ type: string
+ homeDir:
+ description: homeDir specifies the home directory
+ to use for the user
+ type: string
+ inactive:
+ description: inactive specifies whether to mark
+ the user as inactive
+ type: boolean
+ lockPassword:
+ description: lockPassword specifies if password
+ login should be disabled
+ type: boolean
+ name:
+ description: name specifies the user name
+ type: string
+ passwd:
+ description: passwd specifies a hashed password
+ for the user
+ type: string
+ passwdFrom:
+ description: passwdFrom is a referenced source of
+ passwd to populate the passwd.
+ properties:
+ secret:
+ description: secret represents a secret that
+ should populate this password.
+ properties:
+ key:
+ description: key is the key in the secret's
+ data map for this value.
+ type: string
+ name:
+ description: name of the secret in the KubeadmBootstrapConfig's
+ namespace to use.
+ type: string
+ required:
+ - key
+ - name
+ type: object
+ required:
+ - secret
+ type: object
+ primaryGroup:
+ description: primaryGroup specifies the primary
+ group for the user
+ type: string
+ shell:
+ description: shell specifies the user's shell
+ type: string
+ sshAuthorizedKeys:
+ description: sshAuthorizedKeys specifies a list
+ of ssh authorized keys for the user
+ items:
+ type: string
+ type: array
+ sudo:
+ description: sudo specifies a sudo role for the
+ user
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ verbosity:
+ description: |-
+ verbosity is the number for the kubeadm log level verbosity.
+ It overrides the `--v` flag in kubeadm commands.
+ format: int32
+ type: integer
+ type: object
+ machineNamingStrategy:
+ description: |-
+ MachineNamingStrategy allows changing the naming pattern used when creating Machines.
+ InfraMachines & KubeadmConfigs will use the same name as the corresponding Machines.
+ properties:
+ template:
+ description: |-
+ Template defines the template to use for generating the names of the Machine objects.
+ If not defined, it will fallback to `{{ .kubeadmControlPlane.name }}-{{ .random }}`.
+ If the generated name string exceeds 63 characters, it will be trimmed to 58 characters and will
+ get concatenated with a random suffix of length 5.
+ Length of the template string must not exceed 256 characters.
+ The template allows the following variables `.cluster.name`, `.kubeadmControlPlane.name` and `.random`.
+ The variable `.cluster.name` retrieves the name of the cluster object that owns the Machines being created.
+ The variable `.kubeadmControlPlane.name` retrieves the name of the KubeadmControlPlane object that owns the Machines being created.
+ The variable `.random` is substituted with random alphanumeric string, without vowels, of length 5.
+ maxLength: 256
+ type: string
+ type: object
+ machineTemplate:
+ description: |-
+ machineTemplate contains information about how machines
+ should be shaped when creating or updating a control plane.
+ properties:
+ metadata:
+ description: |-
+ Standard object's metadata.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 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
+ type: object
+ nodeDeletionTimeout:
+ description: |-
+ nodeDeletionTimeout defines how long the machine controller will attempt to delete the Node that the Machine
+ hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
+ If no value is provided, the default value for this property of the Machine resource will be used.
+ type: string
+ nodeDrainTimeout:
+ description: |-
+ nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
+ The default value is 0, meaning that the node can be drained without any time limitations.
+ NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
+ type: string
+ nodeVolumeDetachTimeout:
+ description: |-
+ nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
+ to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
+ type: string
+ type: object
+ remediationStrategy:
+ description: The RemediationStrategy that controls how control
+ plane machine remediation happens.
+ properties:
+ maxRetry:
+ description: "maxRetry is the Max number of retries while
+ attempting to remediate an unhealthy machine.\nA retry
+ happens when a machine that was created as a replacement
+ for an unhealthy machine also fails.\nFor example, given
+ a control plane with three machines M1, M2, M3:\n\n\tM1
+ become unhealthy; remediation happens, and M1-1 is created
+ as a replacement.\n\tIf M1-1 (replacement of M1) has
+ problems while bootstrapping it will become unhealthy,
+ and then be\n\tremediated; such operation is considered
+ a retry, remediation-retry #1.\n\tIf M1-2 (replacement
+ of M1-1) becomes unhealthy, remediation-retry #2 will
+ happen, etc.\n\nA retry could happen only after RetryPeriod
+ from the previous retry.\nIf a machine is marked as
+ unhealthy after MinHealthyPeriod from the previous remediation
+ expired,\nthis is not considered a retry anymore because
+ the new issue is assumed unrelated from the previous
+ one.\n\nIf not set, the remedation will be retried infinitely."
+ format: int32
+ type: integer
+ minHealthyPeriod:
+ description: "minHealthyPeriod defines the duration after
+ which KCP will consider any failure to a machine unrelated\nfrom
+ the previous one. In this case the remediation is not
+ considered a retry anymore, and thus the retry\ncounter
+ restarts from 0. For example, assuming MinHealthyPeriod
+ is set to 1h (default)\n\n\tM1 become unhealthy; remediation
+ happens, and M1-1 is created as a replacement.\n\tIf
+ M1-1 (replacement of M1) has problems within the 1hr
+ after the creation, also\n\tthis machine will be remediated
+ and this operation is considered a retry - a problem
+ related\n\tto the original issue happened to M1 -.\n\n\tIf
+ instead the problem on M1-1 is happening after MinHealthyPeriod
+ expired, e.g. four days after\n\tm1-1 has been created
+ as a remediation of M1, the problem on M1-1 is considered
+ unrelated to\n\tthe original issue happened to M1.\n\nIf
+ not set, this value is defaulted to 1h."
+ type: string
+ retryPeriod:
+ description: |-
+ retryPeriod is the duration that KCP should wait before remediating a machine being created as a replacement
+ for an unhealthy machine (a retry).
+
+ If not set, a retry will happen immediately.
+ type: string
+ type: object
+ rolloutAfter:
+ description: |-
+ rolloutAfter is a field to indicate a rollout should be performed
+ after the specified time even if no changes have been made to the
+ KubeadmControlPlane.
+ format: date-time
+ type: string
+ rolloutBefore:
+ description: |-
+ rolloutBefore is a field to indicate a rollout should be performed
+ if the specified criteria is met.
+ properties:
+ certificatesExpiryDays:
+ description: |-
+ certificatesExpiryDays indicates a rollout needs to be performed if the
+ certificates of the machine will expire within the specified days.
+ format: int32
+ type: integer
+ type: object
+ rolloutStrategy:
+ default:
+ rollingUpdate:
+ maxSurge: 1
+ type: RollingUpdate
+ description: |-
+ The RolloutStrategy to use to replace control plane machines with
+ new ones.
+ properties:
+ rollingUpdate:
+ description: |-
+ Rolling update config params. Present only if
+ RolloutStrategyType = RollingUpdate.
+ properties:
+ maxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of control planes that can be scheduled above or under the
+ desired number of control planes.
+ Value can be an absolute number 1 or 0.
+ Defaults to 1.
+ Example: when this is set to 1, the control plane can be scaled
+ up immediately when the rolling update starts.
+ x-kubernetes-int-or-string: true
+ type: object
+ type:
+ description: |-
+ type of rollout. Currently the only supported strategy is
+ "RollingUpdate".
+ Default is RollingUpdate.
+ type: string
+ type: object
+ required:
+ - kubeadmConfigSpec
+ type: object
+ required:
+ - spec
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-manager
+ namespace: capi-kubeadm-control-plane-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-leader-election-role
+ namespace: capi-kubeadm-control-plane-system
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+- apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+---
+aggregationRule:
+ clusterRoleSelectors:
+ - matchLabels:
+ kubeadm.controlplane.cluster.x-k8s.io/aggregate-to-manager: "true"
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-aggregated-manager-role
+rules: []
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ kubeadm.controlplane.cluster.x-k8s.io/aggregate-to-manager: "true"
+ name: capi-kubeadm-control-plane-manager-role
+rules:
+- apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+- apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+- apiGroups:
+ - bootstrap.cluster.x-k8s.io
+ - controlplane.cluster.x-k8s.io
+ - infrastructure.cluster.x-k8s.io
+ resources:
+ - '*'
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - clusters
+ - clusters/status
+ - machinepools
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - machines
+ - machines/status
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - create
+ - get
+ - list
+ - patch
+ - update
+ - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-leader-election-rolebinding
+ namespace: capi-kubeadm-control-plane-system
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: capi-kubeadm-control-plane-leader-election-role
+subjects:
+- kind: ServiceAccount
+ name: capi-kubeadm-control-plane-manager
+ namespace: capi-kubeadm-control-plane-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-manager-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: capi-kubeadm-control-plane-aggregated-manager-role
+subjects:
+- kind: ServiceAccount
+ name: capi-kubeadm-control-plane-manager
+ namespace: capi-kubeadm-control-plane-system
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+spec:
+ ports:
+ - port: 443
+ targetPort: webhook-server
+ selector:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: controller-manager
+ name: capi-kubeadm-control-plane-controller-manager
+ namespace: capi-kubeadm-control-plane-system
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ control-plane: controller-manager
+ strategy: {}
+ template:
+ metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ control-plane: controller-manager
+ spec:
+ containers:
+ - args:
+ - --leader-elect
+ - --diagnostics-address=:8443
+ - --insecure-diagnostics=false
+ - --use-deprecated-infra-machine-naming=false
+ - --feature-gates=MachinePool=true,ClusterTopology=false,KubeadmBootstrapFormatIgnition=false
+ command:
+ - /manager
+ env:
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
+ image: registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.9.5
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: healthz
+ name: manager
+ ports:
+ - containerPort: 9443
+ name: webhook-server
+ protocol: TCP
+ - containerPort: 9440
+ name: healthz
+ protocol: TCP
+ - containerPort: 8443
+ name: metrics
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ path: /readyz
+ port: healthz
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ privileged: false
+ runAsGroup: 65532
+ runAsUser: 65532
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /tmp/k8s-webhook-server/serving-certs
+ name: cert
+ readOnly: true
+ securityContext:
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ serviceAccountName: capi-kubeadm-control-plane-manager
+ terminationGracePeriodSeconds: 10
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ volumes:
+ - name: cert
+ secret:
+ secretName: capi-kubeadm-control-plane-webhook-service-cert
+status: {}
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-mutating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /mutate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplane
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: default.kubeadmcontrolplane.controlplane.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - controlplane.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmcontrolplanes
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /mutate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplanetemplate
+ failurePolicy: Fail
+ name: default.kubeadmcontrolplanetemplate.controlplane.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - controlplane.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmcontrolplanetemplates
+ sideEffects: None
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: control-plane-kubeadm
+ clusterctl.cluster.x-k8s.io: ""
+ name: capi-kubeadm-control-plane-validating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /validate-scale-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplane
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation-scale.kubeadmcontrolplane.controlplane.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - controlplane.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - UPDATE
+ resources:
+ - kubeadmcontrolplanes/scale
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /validate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplane
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.kubeadmcontrolplane.controlplane.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - controlplane.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmcontrolplanes
+ sideEffects: None
+- admissionReviewVersions:
+ - v1
+ - v1beta1
+ clientConfig:
+ service:
+ name: capi-kubeadm-control-plane-webhook-service
+ namespace: capi-kubeadm-control-plane-system
+ path: /validate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplanetemplate
+ failurePolicy: Fail
+ name: validation.kubeadmcontrolplanetemplate.controlplane.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - controlplane.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - kubeadmcontrolplanetemplates
+ sideEffects: None
--- /dev/null
+apiVersion: v1
+kind: Namespace
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ control-plane: controller-manager
+ name: orc-system
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.4
+ name: images.openstack.k-orc.cloud
+spec:
+ group: openstack.k-orc.cloud
+ names:
+ kind: Image
+ listKind: ImageList
+ plural: images
+ singular: image
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Resource ID
+ jsonPath: .status.id
+ name: ID
+ type: string
+ - description: Availability status of resource
+ jsonPath: .status.conditions[?(@.type=='Available')].status
+ name: Available
+ type: string
+ - description: Message describing current availability status
+ jsonPath: .status.conditions[?(@.type=='Available')].message
+ name: Message
+ type: string
+ - description: Time duration since creation
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: Image is the Schema for an ORC resource.
+ 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: ImageSpec defines the desired state of an ORC object.
+ properties:
+ cloudCredentialsRef:
+ description: CloudCredentialsRef points to a secret containing OpenStack
+ credentials
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry in the
+ clouds.yaml file to use.
+ maxLength: 256
+ minLength: 1
+ type: string
+ secretName:
+ description: |-
+ SecretName is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ maxLength: 253
+ minLength: 1
+ type: string
+ required:
+ - cloudName
+ - secretName
+ type: object
+ import:
+ description: |-
+ Import refers to an existing OpenStack resource which will be imported instead of
+ creating a new one.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: |-
+ Filter contains a resource query which is expected to return a single
+ result. The controller will continue to retry if filter returns no
+ results. If filter returns multiple results the controller will set an
+ error state and will not continue to retry.
+ minProperties: 1
+ properties:
+ name:
+ description: Name specifies the name of a Glance image
+ maxLength: 1000
+ minLength: 1
+ type: string
+ type: object
+ id:
+ description: |-
+ ID contains the unique identifier of an existing OpenStack resource. Note
+ that when specifying an import by ID, the resource MUST already exist.
+ The ORC object will enter an error state if the resource does not exist.
+ format: uuid
+ type: string
+ type: object
+ managedOptions:
+ description: ManagedOptions specifies options which may be applied
+ to managed objects.
+ properties:
+ onDelete:
+ default: delete
+ description: |-
+ OnDelete specifies the behaviour of the controller when the ORC
+ object is deleted. Options are `delete` - delete the OpenStack resource;
+ `detach` - do not delete the OpenStack resource. If not specified, the
+ default is `delete`.
+ enum:
+ - delete
+ - detach
+ type: string
+ type: object
+ managementPolicy:
+ default: managed
+ description: |-
+ ManagementPolicy defines how ORC will treat the object. Valid values are
+ `managed`: ORC will create, update, and delete the resource; `unmanaged`:
+ ORC will import an existing resource, and will not apply updates to it or
+ delete it.
+ enum:
+ - managed
+ - unmanaged
+ type: string
+ x-kubernetes-validations:
+ - message: managementPolicy is immutable
+ rule: self == oldSelf
+ resource:
+ description: |-
+ Resource specifies the desired state of the resource.
+
+ Resource may not be specified if the management policy is `unmanaged`.
+
+ Resource must be specified if the management policy is `managed`.
+ properties:
+ content:
+ description: Content specifies how to obtain the image content.
+ properties:
+ containerFormat:
+ default: bare
+ description: |-
+ ContainerFormat is the format of the image container.
+ qcow2 and raw images do not usually have a container. This is specified as "bare", which is also the default.
+ Permitted values are ami, ari, aki, bare, ovf, ova, and docker.
+ enum:
+ - ami
+ - ari
+ - aki
+ - bare
+ - ovf
+ - ova
+ - docker
+ type: string
+ diskFormat:
+ description: |-
+ DiskFormat is the format of the disk image.
+ Normal values are "qcow2", or "raw". Glance may be configured to support others.
+ enum:
+ - ami
+ - ari
+ - aki
+ - vhd
+ - vhdx
+ - vmdk
+ - raw
+ - qcow2
+ - vdi
+ - ploop
+ - iso
+ type: string
+ download:
+ description: |-
+ Download describes how to obtain image data by downloading it from a URL.
+ Must be set when creating a managed image.
+ properties:
+ decompress:
+ description: |-
+ Decompress specifies that the source data must be decompressed with the
+ given compression algorithm before being stored. Specifying Decompress
+ will disable the use of Glance's web-download, as web-download cannot
+ currently deterministically decompress downloaded content.
+ enum:
+ - xz
+ - gz
+ - bz2
+ type: string
+ hash:
+ description: |-
+ Hash is a hash which will be used to verify downloaded data, i.e.
+ before any decompression. If not specified, no hash verification will be
+ performed. Specifying a Hash will disable the use of Glance's
+ web-download, as web-download cannot currently deterministically verify
+ the hash of downloaded content.
+ properties:
+ algorithm:
+ description: Algorithm is the hash algorithm used
+ to generate value.
+ enum:
+ - md5
+ - sha1
+ - sha256
+ - sha512
+ type: string
+ value:
+ description: Value is the hash of the image data using
+ Algorithm. It must be hex encoded using lowercase
+ letters.
+ maxLength: 1024
+ minLength: 1
+ pattern: ^[0-9a-f]+$
+ type: string
+ required:
+ - algorithm
+ - value
+ type: object
+ x-kubernetes-validations:
+ - message: hash is immutable
+ rule: self == oldSelf
+ url:
+ description: URL containing image data
+ format: uri
+ type: string
+ required:
+ - url
+ type: object
+ required:
+ - diskFormat
+ - download
+ type: object
+ x-kubernetes-validations:
+ - message: content is immutable
+ rule: self == oldSelf
+ name:
+ description: |-
+ Name will be the name of the created Glance image. If not specified, the
+ name of the Image object will be used.
+ maxLength: 1024
+ minLength: 1
+ type: string
+ properties:
+ description: Properties is metadata available to consumers of
+ the image
+ properties:
+ hardware:
+ description: |-
+ Hardware is a set of properties which control the virtual hardware
+ created by Nova.
+ properties:
+ cdromBus:
+ description: CDROMBus specifies the type of disk controller
+ to attach CD-ROM devices to.
+ enum:
+ - scsi
+ - virtio
+ - uml
+ - xen
+ - ide
+ - usb
+ - lxc
+ type: string
+ cpuCores:
+ description: CPUCores is the preferred number of cores
+ to expose to the guest
+ type: integer
+ cpuPolicy:
+ description: |-
+ CPUPolicy is used to pin the virtual CPUs (vCPUs) of instances to the
+ host's physical CPU cores (pCPUs). Host aggregates should be used to
+ separate these pinned instances from unpinned instances as the latter
+ will not respect the resourcing requirements of the former.
+
+ Permitted values are shared (the default), and dedicated.
+
+ shared: The guest vCPUs will be allowed to freely float across host
+ pCPUs, albeit potentially constrained by NUMA policy.
+
+ dedicated: The guest vCPUs will be strictly pinned to a set of host
+ pCPUs. In the absence of an explicit vCPU topology request, the
+ drivers typically expose all vCPUs as sockets with one core and one
+ thread. When strict CPU pinning is in effect the guest CPU topology
+ will be setup to match the topology of the CPUs to which it is
+ pinned. This option implies an overcommit ratio of 1.0. For example,
+ if a two vCPU guest is pinned to a single host core with two threads,
+ then the guest will get a topology of one socket, one core, two
+ threads.
+ enum:
+ - shared
+ - dedicated
+ type: string
+ cpuSockets:
+ description: CPUSockets is the preferred number of sockets
+ to expose to the guest
+ type: integer
+ cpuThreadPolicy:
+ description: |-
+ CPUThreadPolicy further refines a CPUPolicy of 'dedicated' by stating
+ how hardware CPU threads in a simultaneous multithreading-based (SMT)
+ architecture be used. SMT-based architectures include Intel
+ processors with Hyper-Threading technology. In these architectures,
+ processor cores share a number of components with one or more other
+ cores. Cores in such architectures are commonly referred to as
+ hardware threads, while the cores that a given core share components
+ with are known as thread siblings.
+
+ Permitted values are prefer (the default), isolate, and require.
+
+ prefer: The host may or may not have an SMT architecture. Where an
+ SMT architecture is present, thread siblings are preferred.
+
+ isolate: The host must not have an SMT architecture or must emulate a
+ non-SMT architecture. If the host does not have an SMT architecture,
+ each vCPU is placed on a different core as expected. If the host does
+ have an SMT architecture - that is, one or more cores have thread
+ siblings - then each vCPU is placed on a different physical core. No
+ vCPUs from other guests are placed on the same core. All but one
+ thread sibling on each utilized core is therefore guaranteed to be
+ unusable.
+
+ require: The host must have an SMT architecture. Each vCPU is
+ allocated on thread siblings. If the host does not have an SMT
+ architecture, then it is not used. If the host has an SMT
+ architecture, but not enough cores with free thread siblings are
+ available, then scheduling fails.
+ enum:
+ - prefer
+ - isolate
+ - require
+ type: string
+ cpuThreads:
+ description: CPUThreads is the preferred number of threads
+ to expose to the guest
+ type: integer
+ diskBus:
+ description: DiskBus specifies the type of disk controller
+ to attach disk devices to.
+ enum:
+ - scsi
+ - virtio
+ - uml
+ - xen
+ - ide
+ - usb
+ - lxc
+ type: string
+ scsiModel:
+ description: |-
+ SCSIModel enables the use of VirtIO SCSI (virtio-scsi) to provide
+ block device access for compute instances; by default, instances use
+ VirtIO Block (virtio-blk). VirtIO SCSI is a para-virtualized SCSI
+ controller device that provides improved scalability and performance,
+ and supports advanced SCSI hardware.
+
+ The only permitted value is virtio-scsi.
+ enum:
+ - virtio-scsi
+ type: string
+ vifModel:
+ description: |-
+ VIFModel specifies the model of virtual network interface device to use.
+
+ Permitted values are e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio,
+ and vmxnet3.
+ enum:
+ - e1000
+ - e1000e
+ - ne2k_pci
+ - pcnet
+ - rtl8139
+ - virtio
+ - vmxnet3
+ type: string
+ type: object
+ minDiskGB:
+ description: MinDisk is the minimum amount of disk space in
+ GB that is required to boot the image
+ minimum: 1
+ type: integer
+ minMemoryMB:
+ description: MinMemoryMB is the minimum amount of RAM in MB
+ that is required to boot the image.
+ minimum: 1
+ type: integer
+ type: object
+ protected:
+ description: |-
+ Protected specifies that the image is protected from deletion.
+ If not specified, the default is false.
+ type: boolean
+ tags:
+ description: Tags is a list of tags which will be applied to the
+ image. A tag has a maximum length of 255 characters.
+ items:
+ maxLength: 255
+ minLength: 1
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ visibility:
+ description: Visibility of the image
+ enum:
+ - public
+ - private
+ - shared
+ - community
+ type: string
+ x-kubernetes-validations:
+ - message: visibility is immutable
+ rule: self == oldSelf
+ type: object
+ x-kubernetes-validations:
+ - message: name is immutable
+ rule: 'has(self.name) ? self.name == oldSelf.name : !has(oldSelf.name)'
+ - message: name is immutable
+ rule: 'has(self.protected) ? self.protected == oldSelf.protected
+ : !has(oldSelf.protected)'
+ - message: tags is immutable
+ rule: 'has(self.tags) ? self.tags == oldSelf.tags : !has(oldSelf.tags)'
+ - message: visibility is immutable
+ rule: 'has(self.visibility) ? self.visibility == oldSelf.visibility
+ : !has(oldSelf.visibility)'
+ - message: properties is immutable
+ rule: 'has(self.properties) ? self.properties == oldSelf.properties
+ : !has(oldSelf.properties)'
+ required:
+ - cloudCredentialsRef
+ type: object
+ x-kubernetes-validations:
+ - message: resource must be specified when policy is managed
+ rule: 'self.managementPolicy == ''managed'' ? has(self.resource) : true'
+ - message: import may not be specified when policy is managed
+ rule: 'self.managementPolicy == ''managed'' ? !has(self.__import__)
+ : true'
+ - message: resource may not be specified when policy is unmanaged
+ rule: 'self.managementPolicy == ''unmanaged'' ? !has(self.resource)
+ : true'
+ - message: import must be specified when policy is unmanaged
+ rule: 'self.managementPolicy == ''unmanaged'' ? has(self.__import__)
+ : true'
+ - message: managedOptions may only be provided when policy is managed
+ rule: 'has(self.managedOptions) ? self.managementPolicy == ''managed''
+ : true'
+ - message: resource content must be specified when not importing
+ rule: '!has(self.__import__) ? has(self.resource.content) : true'
+ status:
+ description: ImageStatus defines the observed state of an ORC resource.
+ properties:
+ conditions:
+ description: |-
+ Conditions represents the observed status of the object.
+ Known .status.conditions.type are: "Available", "Progressing"
+
+ Available represents the availability of the OpenStack resource. If it is
+ true then the resource is ready for use.
+
+ Progressing indicates whether the controller is still attempting to
+ reconcile the current state of the OpenStack resource to the desired
+ state. Progressing will be False either because the desired state has
+ been achieved, or because some terminal error prevents it from ever being
+ achieved and the controller is no longer attempting to reconcile. If
+ Progressing is True, an observer waiting on the resource should continue
+ to wait.
+ 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
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ downloadAttempts:
+ description: DownloadAttempts is the number of times the controller
+ has attempted to download the image contents
+ type: integer
+ id:
+ description: ID is the unique identifier of the OpenStack resource.
+ type: string
+ resource:
+ description: Resource contains the observed state of the OpenStack
+ resource.
+ properties:
+ hash:
+ description: |-
+ Hash is the hash of the image data published by Glance. Note that this is
+ a hash of the data stored internally by Glance, which will have been
+ decompressed and potentially format converted depending on server-side
+ configuration which is not visible to clients. It is expected that this
+ hash will usually differ from the download hash.
+ properties:
+ algorithm:
+ description: Algorithm is the hash algorithm used to generate
+ value.
+ enum:
+ - md5
+ - sha1
+ - sha256
+ - sha512
+ type: string
+ value:
+ description: Value is the hash of the image data using Algorithm.
+ It must be hex encoded using lowercase letters.
+ maxLength: 1024
+ minLength: 1
+ pattern: ^[0-9a-f]+$
+ type: string
+ required:
+ - algorithm
+ - value
+ type: object
+ sizeB:
+ description: SizeB is the size of the image data, in bytes
+ format: int64
+ type: integer
+ status:
+ description: Status is the image status as reported by Glance
+ type: string
+ virtualSizeB:
+ description: VirtualSizeB is the size of the disk the image data
+ represents, in bytes
+ format: int64
+ type: integer
+ type: object
+ 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: orc
+ name: orc-controller-manager
+ namespace: orc-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ name: orc-leader-election-role
+ namespace: orc-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:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ name: orc-image-editor-role
+rules:
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images/status
+ verbs:
+ - get
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ name: orc-image-viewer-role
+rules:
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images/status
+ verbs:
+ - get
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: orc-manager-role
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images/status
+ verbs:
+ - get
+ - patch
+ - update
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: orc-metrics-auth-role
+rules:
+- apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+- apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: orc-metrics-reader
+rules:
+- nonResourceURLs:
+ - /metrics
+ verbs:
+ - get
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ name: orc-leader-election-rolebinding
+ namespace: orc-system
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: orc-leader-election-role
+subjects:
+- kind: ServiceAccount
+ name: orc-controller-manager
+ namespace: orc-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ name: orc-manager-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: orc-manager-role
+subjects:
+- kind: ServiceAccount
+ name: orc-controller-manager
+ namespace: orc-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: orc-metrics-auth-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: orc-metrics-auth-role
+subjects:
+- kind: ServiceAccount
+ name: orc-controller-manager
+ namespace: orc-system
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ control-plane: controller-manager
+ name: orc-controller-manager-metrics-service
+ namespace: orc-system
+spec:
+ ports:
+ - name: https
+ port: 8443
+ protocol: TCP
+ targetPort: 8443
+ selector:
+ control-plane: controller-manager
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/managed-by: kustomize
+ app.kubernetes.io/name: orc
+ control-plane: controller-manager
+ name: orc-controller-manager
+ namespace: orc-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:
+ - --metrics-bind-address=:8443
+ - --leader-elect
+ - --health-probe-bind-address=:8081
+ command:
+ - /manager
+ image: quay.io/orc/openstack-resource-controller:v1.0.1
+ 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
+ privileged: false
+ runAsGroup: 65532
+ runAsUser: 65532
+ terminationMessagePolicy: FallbackToLogsOnError
+ securityContext:
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ serviceAccountName: orc-controller-manager
+ terminationGracePeriodSeconds: 10
--- /dev/null
+apiVersion: v1
+kind: Namespace
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ pod-security.kubernetes.io/audit: restricted
+ pod-security.kubernetes.io/enforce: restricted
+ pod-security.kubernetes.io/warn: restricted
+ name: capo-system
+---
+apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-selfsigned-issuer
+ namespace: capo-system
+spec:
+ selfSigned: {}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-serving-cert
+ namespace: capo-system
+spec:
+ dnsNames:
+ - capo-webhook-service.capo-system.svc
+ - capo-webhook-service.capo-system.svc.cluster.local
+ issuerRef:
+ kind: Issuer
+ name: capo-selfsigned-issuer
+ secretName: capo-webhook-service-cert
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.5
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: openstackclusters.infrastructure.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: infrastructure.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: OpenStackCluster
+ listKind: OpenStackClusterList
+ plural: openstackclusters
+ shortNames:
+ - osc
+ singular: openstackcluster
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Cluster to which this OpenStackCluster belongs
+ jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
+ name: Cluster
+ type: string
+ - description: Cluster infrastructure is ready for OpenStack instances
+ jsonPath: .status.ready
+ name: Ready
+ type: string
+ - description: Network the cluster is using
+ jsonPath: .status.network.id
+ name: Network
+ type: string
+ - description: API Endpoint
+ jsonPath: .spec.controlPlaneEndpoint.host
+ name: Endpoint
+ priority: 1
+ type: string
+ - description: Bastion address for breakglass access
+ jsonPath: .status.bastion.floatingIP
+ name: Bastion IP
+ type: string
+ - description: Time duration since creation of OpenStackCluster
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ deprecationWarning: The v1alpha7 version of OpenStackCluster has been deprecated
+ and will be removed in a future release.
+ name: v1alpha7
+ schema:
+ openAPIV3Schema:
+ description: |-
+ OpenStackCluster is the Schema for the openstackclusters API.
+
+ Deprecated: v1alpha7.OpenStackCluster has been replaced by v1beta1.OpenStackCluster.
+ 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: OpenStackClusterSpec defines the desired state of OpenStackCluster.
+ properties:
+ allowAllInClusterTraffic:
+ description: |-
+ AllowAllInClusterTraffic is only used when managed security groups are in use.
+ If set to true, the rules for the managed security groups are configured so that all
+ ingress and egress between cluster nodes is permitted, allowing CNIs other than
+ Calico to be used.
+ type: boolean
+ apiServerFixedIP:
+ description: |-
+ APIServerFixedIP is the fixed IP which will be associated with the API server.
+ In the case where the API server has a floating IP but not a managed load balancer,
+ this field is not used.
+ If a managed load balancer is used and this field is not specified, a fixed IP will
+ be dynamically allocated for the load balancer.
+ If a managed load balancer is not used AND the API server floating IP is disabled,
+ this field MUST be specified and should correspond to a pre-allocated port that
+ holds the fixed IP to be used as a VIP.
+ type: string
+ apiServerFloatingIP:
+ description: |-
+ APIServerFloatingIP is the floatingIP which will be associated with the API server.
+ The floatingIP will be created if it does not already exist.
+ If not specified, a new floatingIP is allocated.
+ This field is not used if DisableAPIServerFloatingIP is set to true.
+ type: string
+ apiServerLoadBalancer:
+ description: |-
+ APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
+ It must be activated by setting `enabled: true`.
+ properties:
+ additionalPorts:
+ description: AdditionalPorts adds additional tcp ports to the
+ load balancer.
+ items:
+ type: integer
+ type: array
+ allowedCidrs:
+ description: AllowedCIDRs restrict access to all API-Server listeners
+ to the given address CIDRs.
+ items:
+ type: string
+ type: array
+ enabled:
+ description: Enabled defines whether a load balancer should be
+ created.
+ type: boolean
+ provider:
+ description: Octavia Provider Used to create load balancer
+ type: string
+ type: object
+ apiServerPort:
+ description: |-
+ APIServerPort is the port on which the listener on the APIServer
+ will be created
+ type: integer
+ bastion:
+ description: |-
+ Bastion is the OpenStack instance to login the nodes
+
+ As a rolling update is not ideal during a bastion host session, we
+ prevent changes to a running bastion configuration. Set `enabled: false` to
+ make changes.
+ properties:
+ availabilityZone:
+ type: string
+ enabled:
+ type: boolean
+ instance:
+ description: Instance for the bastion itself
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications
+ for additional block devices to attach to the server instance
+ items:
+ description: AdditionalBlockDevice is a block device to
+ attach to the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device
+ in gibibytes (GiB).
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage
+ options for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume in.
+ If omitted, the availability zone of the server will be used.
+ The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
+ to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
+ further information.
+ type: string
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ cloudName:
+ description: The name of the cloud to use from the clouds
+ secret
+ type: string
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for your
+ server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIP:
+ description: |-
+ The floatingIP which will be associated to the machine, only used for master.
+ The floatingIP should have been created and haven't been associated.
+ type: string
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a identity to be used when reconciling this cluster.
+ If not specified, the identity ref of the cluster will be used instead.
+ properties:
+ kind:
+ description: |-
+ Kind of the identity. Must be supported by the infrastructure
+ provider and may be either cluster or namespace-scoped.
+ minLength: 1
+ type: string
+ name:
+ description: |-
+ Name of the infrastructure identity to be used.
+ Must be either a cluster-scoped resource, or namespaced-scoped
+ resource the same namespace as the resource(s) being provisioned.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ image:
+ description: |-
+ The name of the image to use for your server instance.
+ If the RootVolume is specified, this will be ignored and use rootVolume directly.
+ type: string
+ imageUUID:
+ description: |-
+ The uuid of the image to use for your server instance.
+ if it's empty, Image name will be used
+ type: string
+ instanceID:
+ description: InstanceID is the OpenStack instance ID for this
+ machine.
+ type: string
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ type: boolean
+ allowedAddressPairs:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ macAddress:
+ type: string
+ type: object
+ type: array
+ description:
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: Specify pairs of subnet and/or IP address.
+ These should be subnets of the network with the given
+ NetworkID.
+ items:
+ properties:
+ ipAddress:
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ hostId:
+ description: The ID of the host where the port is allocated
+ type: string
+ macAddress:
+ type: string
+ nameSuffix:
+ description: Used to make the name of the port unique.
+ If unspecified, instead the 0-based index of the port
+ in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding details.
+ We intentionally don't expose this as a map[string]string because we only want to enable
+ the users to set the values of the keys that are known to work in OpenStack Networking API.
+ See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ properties:
+ ovsHWOffload:
+ description: OVSHWOffload enables or disables the
+ OVS hardware offload feature.
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables
+ the propagate uplink status on the port.
+ type: boolean
+ securityGroupFilters:
+ description: The names, uuids, filters or any combination
+ these of the security groups to assign to the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Enables and disables trunk at port level.
+ If not provided, openStackMachine.Spec.Trunk is inherited.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value
+ pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: The virtual network interface card (vNIC)
+ type that is bound to the neutron port.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as specified
+ by the cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ type: string
+ diskSize:
+ type: integer
+ volumeType:
+ type: string
+ type: object
+ securityGroups:
+ description: The names of the security groups to assign to
+ the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ serverGroupID:
+ description: The server group to assign the machine to
+ type: string
+ serverMetadata:
+ additionalProperties:
+ type: string
+ description: Metadata mapping. Allows you to create a map
+ of key value pairs to add to the server instance.
+ type: object
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Machine tags
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created on a trunk
+ port or not.
+ type: boolean
+ type: object
+ type: object
+ cloudName:
+ description: The name of the cloud to use from the clouds secret
+ type: string
+ controlPlaneAvailabilityZones:
+ description: ControlPlaneAvailabilityZones is the az to deploy control
+ plane to
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ controlPlaneEndpoint:
+ description: ControlPlaneEndpoint represents the endpoint used to
+ communicate with the control plane.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneOmitAvailabilityZone:
+ description: |-
+ Indicates whether to omit the az for control plane nodes, allowing the Nova scheduler
+ to make a decision on which az to use based on other scheduling constraints
+ type: boolean
+ disableAPIServerFloatingIP:
+ description: |-
+ DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
+ IP to the API server. This allows for the creation of clusters when attaching a floating
+ IP to the API server (and hence, in many cases, exposing the API server to the internet)
+ is not possible or desirable, e.g. if using a shared VLAN for communication between
+ management and workload clusters or when the management cluster is inside the
+ project network.
+ This option requires that the API server use a VIP on the cluster network so that the
+ underlying machines can change without changing ControlPlaneEndpoint.Host.
+ When using a managed load balancer, this VIP will be managed automatically.
+ If not using a managed load balancer, cluster configuration will fail without additional
+ configuration to manage the VIP on the control plane machines, which falls outside of
+ the scope of this controller.
+ type: boolean
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity disables the port security of the network created for the
+ Kubernetes cluster, which also disables SecurityGroups
+ type: boolean
+ dnsNameservers:
+ description: |-
+ DNSNameservers is the list of nameservers for OpenStack Subnet being created.
+ Set this value when you need create a new network/subnet while the access
+ through DNS is required.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ externalNetworkId:
+ description: |-
+ ExternalNetworkID is the ID of an external OpenStack Network. This is necessary
+ to get public internet to the VMs.
+ type: string
+ externalRouterIPs:
+ description: |-
+ ExternalRouterIPs is an array of externalIPs on the respective subnets.
+ This is necessary if the router needs a fixed ip in a specific subnet.
+ items:
+ properties:
+ fixedIP:
+ description: The FixedIP in the corresponding subnet
+ type: string
+ subnet:
+ description: The subnet in which the FixedIP is used for the
+ Gateway of this router
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ identityRef:
+ description: IdentityRef is a reference to a identity to be used when
+ reconciling this cluster
+ properties:
+ kind:
+ description: |-
+ Kind of the identity. Must be supported by the infrastructure
+ provider and may be either cluster or namespace-scoped.
+ minLength: 1
+ type: string
+ name:
+ description: |-
+ Name of the infrastructure identity to be used.
+ Must be either a cluster-scoped resource, or namespaced-scoped
+ resource the same namespace as the resource(s) being provisioned.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ managedSecurityGroups:
+ description: |-
+ ManagedSecurityGroups determines whether OpenStack security groups for the cluster
+ will be managed by the OpenStack provider or whether pre-existing security groups will
+ be specified as part of the configuration.
+ By default, the managed security groups have rules that allow the Kubelet, etcd, the
+ Kubernetes API server and the Calico CNI plugin to function correctly.
+ type: boolean
+ network:
+ description: If NodeCIDR cannot be set this can be used to detect
+ an existing network.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ networkMtu:
+ description: |-
+ NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
+ This value will be used only if the Cluster actuator creates the network.
+ If leaved empty, the network will have the default MTU defined in Openstack network service.
+ To use this field, the Openstack installation requires the net-mtu neutron API extension.
+ type: integer
+ nodeCidr:
+ description: |-
+ NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a
+ network, a subnet with NodeCIDR, and a router connected to this subnet.
+ If you leave this empty, no network will be created.
+ type: string
+ router:
+ description: |-
+ If NodeCIDR is set this option can be used to detect an existing router.
+ If specified, no new router will be created.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ subnet:
+ description: If NodeCIDR cannot be set this can be used to detect
+ an existing subnet.
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ tags:
+ description: Tags for all resources in cluster
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ status:
+ description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
+ properties:
+ apiServerLoadBalancer:
+ description: APIServerLoadBalancer describes the api server load balancer
+ if one exists
+ properties:
+ allowedCIDRs:
+ items:
+ type: string
+ type: array
+ id:
+ type: string
+ internalIP:
+ type: string
+ ip:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - internalIP
+ - ip
+ - name
+ type: object
+ bastion:
+ properties:
+ floatingIP:
+ type: string
+ id:
+ type: string
+ ip:
+ type: string
+ name:
+ type: string
+ sshKeyName:
+ type: string
+ state:
+ description: InstanceState describes the state of an OpenStack
+ instance.
+ type: string
+ type: object
+ bastionSecurityGroup:
+ description: |-
+ SecurityGroup represents the basic information of the associated
+ OpenStack Neutron Security Group.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ rules:
+ items:
+ description: |-
+ SecurityGroupRule represent the basic information of the associated OpenStack
+ Security Group Role.
+ properties:
+ description:
+ type: string
+ direction:
+ type: string
+ etherType:
+ type: string
+ name:
+ type: string
+ portRangeMax:
+ type: integer
+ portRangeMin:
+ type: integer
+ protocol:
+ type: string
+ remoteGroupID:
+ type: string
+ remoteIPPrefix:
+ type: string
+ securityGroupID:
+ type: string
+ required:
+ - description
+ - direction
+ - etherType
+ - name
+ - portRangeMax
+ - portRangeMin
+ - protocol
+ - remoteGroupID
+ - remoteIPPrefix
+ - securityGroupID
+ type: object
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ controlPlaneSecurityGroup:
+ description: |-
+ ControlPlaneSecurityGroups contains all the information about the OpenStack
+ Security Group that needs to be applied to control plane nodes.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ rules:
+ items:
+ description: |-
+ SecurityGroupRule represent the basic information of the associated OpenStack
+ Security Group Role.
+ properties:
+ description:
+ type: string
+ direction:
+ type: string
+ etherType:
+ type: string
+ name:
+ type: string
+ portRangeMax:
+ type: integer
+ portRangeMin:
+ type: integer
+ protocol:
+ type: string
+ remoteGroupID:
+ type: string
+ remoteIPPrefix:
+ type: string
+ securityGroupID:
+ type: string
+ required:
+ - description
+ - direction
+ - etherType
+ - name
+ - portRangeMax
+ - portRangeMin
+ - protocol
+ - remoteGroupID
+ - remoteIPPrefix
+ - securityGroupID
+ type: object
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ externalNetwork:
+ description: externalNetwork contains information about the external
+ network used for default ingress and egress traffic.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ failureDomains:
+ additionalProperties:
+ description: |-
+ FailureDomainSpec is the Schema for Cluster API failure domains.
+ It allows controllers to understand how many failure domains a cluster can optionally span across.
+ properties:
+ attributes:
+ additionalProperties:
+ type: string
+ description: attributes is a free form map of attributes an
+ infrastructure provider might use or require.
+ type: object
+ controlPlane:
+ description: controlPlane determines if this failure domain
+ is suitable for use by control plane machines.
+ type: boolean
+ type: object
+ description: FailureDomains represent OpenStack availability zones
+ type: object
+ failureMessage:
+ description: |-
+ FailureMessage will be set in the event that there is a terminal problem
+ reconciling the OpenStackCluster and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the OpenStackCluster's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of
+ OpenStackClusters can be added as events to the OpenStackCluster object
+ and/or logged in the controller's output.
+ type: string
+ failureReason:
+ description: |-
+ FailureReason will be set in the event that there is a terminal problem
+ reconciling the OpenStackCluster and will contain a succinct value suitable
+ for machine interpretation.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the OpenStackCluster's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of
+ OpenStackClusters can be added as events to the OpenStackCluster object
+ and/or logged in the controller's output.
+ type: string
+ network:
+ description: Network contains information about the created OpenStack
+ Network.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ subnets:
+ description: Subnets is a list of subnets associated with the
+ default cluster network. Machines which use the default cluster
+ network will get an address from all of these subnets.
+ items:
+ description: Subnet represents basic information about the associated
+ OpenStack Neutron Subnet.
+ properties:
+ cidr:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - cidr
+ - id
+ - name
+ type: object
+ type: array
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ ready:
+ type: boolean
+ router:
+ description: Router describes the default cluster router
+ properties:
+ id:
+ type: string
+ ips:
+ items:
+ type: string
+ type: array
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ workerSecurityGroup:
+ description: |-
+ WorkerSecurityGroup contains all the information about the OpenStack Security
+ Group that needs to be applied to worker nodes.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ rules:
+ items:
+ description: |-
+ SecurityGroupRule represent the basic information of the associated OpenStack
+ Security Group Role.
+ properties:
+ description:
+ type: string
+ direction:
+ type: string
+ etherType:
+ type: string
+ name:
+ type: string
+ portRangeMax:
+ type: integer
+ portRangeMin:
+ type: integer
+ protocol:
+ type: string
+ remoteGroupID:
+ type: string
+ remoteIPPrefix:
+ type: string
+ securityGroupID:
+ type: string
+ required:
+ - description
+ - direction
+ - etherType
+ - name
+ - portRangeMax
+ - portRangeMin
+ - protocol
+ - remoteGroupID
+ - remoteIPPrefix
+ - securityGroupID
+ type: object
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ required:
+ - ready
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster to which this OpenStackCluster belongs
+ jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
+ name: Cluster
+ type: string
+ - description: Cluster infrastructure is ready for OpenStack instances
+ jsonPath: .status.ready
+ name: Ready
+ type: string
+ - description: Network the cluster is using
+ jsonPath: .status.network.id
+ name: Network
+ type: string
+ - description: API Endpoint
+ jsonPath: .spec.controlPlaneEndpoint.host
+ name: Endpoint
+ priority: 1
+ type: string
+ - description: Bastion address for breakglass access
+ jsonPath: .status.bastion.floatingIP
+ name: Bastion IP
+ type: string
+ - description: Time duration since creation of OpenStackCluster
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: OpenStackCluster is the Schema for the openstackclusters 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: OpenStackClusterSpec defines the desired state of OpenStackCluster.
+ properties:
+ apiServerFixedIP:
+ description: |-
+ APIServerFixedIP is the fixed IP which will be associated with the API server.
+ In the case where the API server has a floating IP but not a managed load balancer,
+ this field is not used.
+ If a managed load balancer is used and this field is not specified, a fixed IP will
+ be dynamically allocated for the load balancer.
+ If a managed load balancer is not used AND the API server floating IP is disabled,
+ this field MUST be specified and should correspond to a pre-allocated port that
+ holds the fixed IP to be used as a VIP.
+ type: string
+ apiServerFloatingIP:
+ description: |-
+ APIServerFloatingIP is the floatingIP which will be associated with the API server.
+ The floatingIP will be created if it does not already exist.
+ If not specified, a new floatingIP is allocated.
+ This field is not used if DisableAPIServerFloatingIP is set to true.
+ type: string
+ apiServerLoadBalancer:
+ description: |-
+ APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
+ If not specified, no load balancer will be created for the API server.
+ properties:
+ additionalPorts:
+ description: AdditionalPorts adds additional tcp ports to the
+ load balancer.
+ items:
+ type: integer
+ type: array
+ x-kubernetes-list-type: set
+ allowedCIDRs:
+ description: AllowedCIDRs restrict access to all API-Server listeners
+ to the given address CIDRs.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ availabilityZone:
+ description: AvailabilityZone is the failure domain that will
+ be used to create the APIServerLoadBalancer Spec.
+ type: string
+ enabled:
+ default: true
+ description: |-
+ Enabled defines whether a load balancer should be created. This value
+ defaults to true if an APIServerLoadBalancer is given.
+
+ There is no reason to set this to false. To disable creation of the
+ API server loadbalancer, omit the APIServerLoadBalancer field in the
+ cluster spec instead.
+ type: boolean
+ flavor:
+ description: Flavor is the flavor name that will be used to create
+ the APIServerLoadBalancer Spec.
+ type: string
+ network:
+ description: Network defines which network should the load balancer
+ be allocated on.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID is
+ provided, the other filters cannot be provided. Must be
+ in UUID format.
+ format: uuid
+ type: string
+ type: object
+ provider:
+ description: |-
+ Provider specifies name of a specific Octavia provider to use for the
+ API load balancer. The Octavia default will be used if it is not
+ specified.
+ type: string
+ subnets:
+ description: |-
+ Subnets define which subnets should the load balancer be allocated on.
+ It is expected that subnets are located on the network specified in this resource.
+ Only the first element is taken into account.
+ kubebuilder:validation:MaxLength:=2
+ items:
+ description: SubnetParam specifies an OpenStack subnet to use.
+ It may be specified by either ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select the subnet.
+ It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will not be
+ validated.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - enabled
+ type: object
+ apiServerPort:
+ description: |-
+ APIServerPort is the port on which the listener on the APIServer
+ will be created. If specified, it must be an integer between 0 and 65535.
+ maximum: 65535
+ minimum: 0
+ type: integer
+ bastion:
+ description: |-
+ Bastion is the OpenStack instance to login the nodes
+
+ As a rolling update is not ideal during a bastion host session, we
+ prevent changes to a running bastion configuration. To make changes, it's required
+ to first set `enabled: false` which will remove the bastion and then changes can be made.
+ properties:
+ availabilityZone:
+ description: AvailabilityZone is the failure domain that will
+ be used to create the Bastion Spec.
+ type: string
+ enabled:
+ default: true
+ description: |-
+ Enabled means that bastion is enabled. The bastion is enabled by
+ default if this field is not specified. Set this field to false to disable the
+ bastion.
+
+ It is not currently possible to remove the bastion from the cluster
+ spec without first disabling it by setting this field to false and
+ waiting until the bastion has been deleted.
+ type: boolean
+ floatingIP:
+ description: |-
+ FloatingIP which will be associated to the bastion machine. It's the IP address, not UUID.
+ The floating IP should already exist and should not be associated with a port. If FIP of this address does not
+ exist, CAPO will try to create it, but by default only OpenStack administrators have privileges to do so.
+ format: ipv4
+ type: string
+ spec:
+ description: Spec for the bastion itself
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications
+ for additional block devices to attach to the server instance
+ items:
+ description: AdditionalBlockDevice is a block device to
+ attach to the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ Name cannot be 'root', which is reserved for the root volume.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device
+ in gibibytes (GiB).
+ minimum: 1
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage
+ options for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name'
+ or default
+ rule: '!has(self.from) || self.from == ''Name''
+ ? has(self.name) : !has(self.name)'
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for your
+ server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIPPoolRef:
+ description: |-
+ floatingIPPoolRef is a reference to a IPPool that will be assigned
+ to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
+ will be assigned to the OpenStackMachine.
+ 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
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a secret holding OpenStack credentials
+ to be used when reconciling this machine. If not specified, the
+ credentials specified in the cluster will be used.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry
+ in the clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ image:
+ description: |-
+ The image to use for your server instance.
+ If the rootVolume is specified, this will be used when creating the root volume.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: |-
+ Filter describes a query for an image. If specified, the combination
+ of name and tags must return a single matching image or an error will
+ be raised.
+ minProperties: 1
+ properties:
+ name:
+ description: The name of the desired image. If specified,
+ the combination of name and tags must return a single
+ matching image or an error will be raised.
+ type: string
+ tags:
+ description: The tags associated with the desired
+ image. If specified, the combination of name and
+ tags must return a single matching image or an error
+ will be raised.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the image. ID will not
+ be validated before use.
+ format: uuid
+ type: string
+ imageRef:
+ description: |-
+ ImageRef is a reference to an ORC Image in the same namespace as the
+ referring object.
+ properties:
+ name:
+ description: Name is the name of the referenced resource
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port
+ should be created in the up (true) or down (false)
+ state. The default is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description
+ for the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or
+ IP address to assign to the port. If specified, these
+ must be subnets of the port's network.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If Subnet
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to
+ select the subnet. It must match exactly
+ one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet.
+ It will not be validated.
+ format: uuid
+ type: string
+ type: object
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where
+ the port resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of
+ the port. If not specified, the MAC address will be
+ generated.
+ type: string
+ nameSuffix:
+ description: NameSuffix will be appended to the name
+ of the port if specified. If unspecified, instead
+ the 0-based index of the port in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select
+ an OpenStack network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use.
+ If ID is provided, the other filters cannot be
+ provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables
+ the propagate uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of the names,
+ uuids, filters or any combination these of the security
+ groups to assign to the instance.
+ items:
+ description: SecurityGroupParam specifies an OpenStack
+ security group. It may be specified by ID or filter,
+ but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select
+ an OpenStack security group. If provided, cannot
+ be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group
+ to use. If ID is provided, the other filters
+ cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: |-
+ Trunk specifies whether trunking is enabled at the port level. If not
+ provided the value is inherited from the machine, or false for a
+ bastion host.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value
+ pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as specified
+ by the cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name' or default
+ rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
+ : !has(self.name)'
+ sizeGiB:
+ description: SizeGiB is the size of the block device in
+ gibibytes (GiB).
+ minimum: 1
+ type: integer
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ required:
+ - sizeGiB
+ type: object
+ schedulerHintAdditionalProperties:
+ description: |-
+ SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
+ to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
+ such as specifying certain host aggregates or availability zones.
+ items:
+ description: |-
+ SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
+ It includes a Name to identify the property and a Value that can be of various types.
+ properties:
+ name:
+ description: |-
+ Name is the name of the scheduler hint property.
+ It is a unique identifier for the property.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value is the value of the scheduler hint property, which can be of various types
+ (e.g., bool, string, int). The type is indicated by the Value.Type field.
+ properties:
+ bool:
+ description: |-
+ Bool is the boolean value of the scheduler hint, used when Type is "Bool".
+ This field is required if type is 'Bool', and must not be set otherwise.
+ type: boolean
+ number:
+ description: |-
+ Number is the integer value of the scheduler hint, used when Type is "Number".
+ This field is required if type is 'Number', and must not be set otherwise.
+ type: integer
+ string:
+ description: |-
+ String is the string value of the scheduler hint, used when Type is "String".
+ This field is required if type is 'String', and must not be set otherwise.
+ maxLength: 255
+ minLength: 1
+ type: string
+ type:
+ description: |-
+ Type represents the type of the value.
+ Valid values are Bool, String, and Number.
+ enum:
+ - Bool
+ - String
+ - Number
+ type: string
+ required:
+ - type
+ type: object
+ x-kubernetes-validations:
+ - message: bool is required when type is Bool, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
+ : !has(self.bool)'
+ - message: number is required when type is Number, and
+ forbidden otherwise
+ rule: 'has(self.type) && self.type == ''Number'' ?
+ has(self.number) : !has(self.number)'
+ - message: string is required when type is String, and
+ forbidden otherwise
+ rule: 'has(self.type) && self.type == ''String'' ?
+ has(self.string) : !has(self.string)'
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ securityGroups:
+ description: The names of the security groups to assign to
+ the instance
+ items:
+ description: SecurityGroupParam specifies an OpenStack security
+ group. It may be specified by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ security group. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group to use.
+ If ID is provided, the other filters cannot be provided.
+ Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ serverGroup:
+ description: The server group to assign the machine to.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ server group. If provided, it cannot be empty.
+ minProperties: 1
+ properties:
+ name:
+ description: Name is the name of a server group to
+ look for.
+ type: string
+ type: object
+ id:
+ description: ID is the ID of the server group to use.
+ format: uuid
+ type: string
+ type: object
+ serverMetadata:
+ description: Metadata mapping. Allows you to create a map
+ of key value pairs to add to the server instance.
+ items:
+ properties:
+ key:
+ description: Key is the server metadata key
+ maxLength: 255
+ type: string
+ value:
+ description: Value is the server metadata value
+ maxLength: 255
+ type: string
+ required:
+ - key
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - key
+ x-kubernetes-list-type: map
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Tags which will be added to the machine and all dependent resources
+ which support them. These are in addition to Tags defined on the
+ cluster.
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created on a trunk
+ port or not.
+ type: boolean
+ required:
+ - image
+ type: object
+ x-kubernetes-validations:
+ - message: at least one of flavor or flavorID must be set
+ rule: (has(self.flavor) || has(self.flavorID))
+ type: object
+ x-kubernetes-validations:
+ - message: spec is required if bastion is enabled
+ rule: '!self.enabled || has(self.spec)'
+ controlPlaneAvailabilityZones:
+ description: |-
+ ControlPlaneAvailabilityZones is the set of availability zones which
+ control plane machines may be deployed to.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ controlPlaneEndpoint:
+ description: |-
+ ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.
+ It is normally populated automatically by the OpenStackCluster
+ controller during cluster provisioning. If it is set on creation the
+ control plane endpoint will use the values set here in preference to
+ values set elsewhere.
+ ControlPlaneEndpoint cannot be modified after ControlPlaneEndpoint.Host has been set.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneOmitAvailabilityZone:
+ description: |-
+ ControlPlaneOmitAvailabilityZone causes availability zone to be
+ omitted when creating control plane nodes, allowing the Nova
+ scheduler to make a decision on which availability zone to use based
+ on other scheduling constraints
+ type: boolean
+ disableAPIServerFloatingIP:
+ description: |-
+ DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
+ IP to the API server. This allows for the creation of clusters when attaching a floating
+ IP to the API server (and hence, in many cases, exposing the API server to the internet)
+ is not possible or desirable, e.g. if using a shared VLAN for communication between
+ management and workload clusters or when the management cluster is inside the
+ project network.
+ This option requires that the API server use a VIP on the cluster network so that the
+ underlying machines can change without changing ControlPlaneEndpoint.Host.
+ When using a managed load balancer, this VIP will be managed automatically.
+ If not using a managed load balancer, cluster configuration will fail without additional
+ configuration to manage the VIP on the control plane machines, which falls outside of
+ the scope of this controller.
+ type: boolean
+ disableExternalNetwork:
+ description: |-
+ DisableExternalNetwork specifies whether or not to attempt to connect the cluster
+ to an external network. This allows for the creation of clusters when connecting
+ to an external network is not possible or desirable, e.g. if using a provider network.
+ type: boolean
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity disables the port security of the network created for the
+ Kubernetes cluster, which also disables SecurityGroups
+ type: boolean
+ externalNetwork:
+ description: |-
+ ExternalNetwork is the OpenStack Network to be used to get public internet to the VMs.
+ This option is ignored if DisableExternalNetwork is set to true.
+
+ If ExternalNetwork is defined it must refer to exactly one external network.
+
+ If ExternalNetwork is not defined or is empty the controller will use any
+ existing external network as long as there is only one. It is an
+ error if ExternalNetwork is not defined and there are multiple
+ external networks unless DisableExternalNetwork is also set.
+
+ If ExternalNetwork is not defined and there are no external networks
+ the controller will proceed as though DisableExternalNetwork was set.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID is provided,
+ the other filters cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ externalRouterIPs:
+ description: |-
+ ExternalRouterIPs is an array of externalIPs on the respective subnets.
+ This is necessary if the router needs a fixed ip in a specific subnet.
+ items:
+ properties:
+ fixedIP:
+ description: The FixedIP in the corresponding subnet
+ type: string
+ subnet:
+ description: The subnet in which the FixedIP is used for the
+ Gateway of this router
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select the subnet.
+ It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will not be
+ validated.
+ format: uuid
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a secret holding OpenStack credentials
+ to be used when reconciling this cluster. It is also to reconcile
+ machines unless overridden in the machine spec.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry in the
+ clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ managedSecurityGroups:
+ description: |-
+ ManagedSecurityGroups determines whether OpenStack security groups for the cluster
+ will be managed by the OpenStack provider or whether pre-existing security groups will
+ be specified as part of the configuration.
+ By default, the managed security groups have rules that allow the Kubelet, etcd, and the
+ Kubernetes API server to function correctly.
+ It's possible to add additional rules to the managed security groups.
+ When defined to an empty struct, the managed security groups will be created with the default rules.
+ properties:
+ allNodesSecurityGroupRules:
+ description: allNodesSecurityGroupRules defines the rules that
+ should be applied to all nodes.
+ items:
+ description: |-
+ SecurityGroupRuleSpec represent the basic information of the associated OpenStack
+ Security Group Role.
+ For now this is only used for the allNodesSecurityGroupRules but when we add
+ other security groups, we'll need to add a validation because
+ Remote* fields are mutually exclusive.
+ properties:
+ description:
+ description: description of the security group rule.
+ type: string
+ direction:
+ description: |-
+ direction in which the security group rule is applied. The only values
+ allowed are "ingress" or "egress". For a compute instance, an ingress
+ security group rule is applied to incoming (ingress) traffic for that
+ instance. An egress rule is applied to traffic leaving the instance.
+ type: string
+ etherType:
+ description: |-
+ etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
+ ingress or egress rules.
+ type: string
+ name:
+ description: |-
+ name of the security group rule.
+ It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
+ type: string
+ portRangeMax:
+ description: |-
+ portRangeMax is a number in the range that is matched by the security group
+ rule. The portRangeMin attribute constrains the portRangeMax attribute.
+ type: integer
+ portRangeMin:
+ description: |-
+ portRangeMin is a number in the range that is matched by the security group
+ rule. If the protocol is TCP or UDP, this value must be less than or equal
+ to the value of the portRangeMax attribute.
+ type: integer
+ protocol:
+ description: protocol is the protocol that is matched by
+ the security group rule.
+ type: string
+ remoteGroupID:
+ description: |-
+ remoteGroupID is the remote group ID to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteIPPrefix:
+ description: |-
+ remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteManagedGroups:
+ description: |-
+ remoteManagedGroups is the remote managed groups to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ items:
+ enum:
+ - bastion
+ - controlplane
+ - worker
+ type: string
+ type: array
+ required:
+ - direction
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ allowAllInClusterTraffic:
+ default: false
+ description: AllowAllInClusterTraffic allows all ingress and egress
+ traffic between cluster nodes when set to true.
+ type: boolean
+ controlPlaneNodesSecurityGroupRules:
+ description: controlPlaneNodesSecurityGroupRules defines the rules
+ that should be applied to control plane nodes.
+ items:
+ description: |-
+ SecurityGroupRuleSpec represent the basic information of the associated OpenStack
+ Security Group Role.
+ For now this is only used for the allNodesSecurityGroupRules but when we add
+ other security groups, we'll need to add a validation because
+ Remote* fields are mutually exclusive.
+ properties:
+ description:
+ description: description of the security group rule.
+ type: string
+ direction:
+ description: |-
+ direction in which the security group rule is applied. The only values
+ allowed are "ingress" or "egress". For a compute instance, an ingress
+ security group rule is applied to incoming (ingress) traffic for that
+ instance. An egress rule is applied to traffic leaving the instance.
+ type: string
+ etherType:
+ description: |-
+ etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
+ ingress or egress rules.
+ type: string
+ name:
+ description: |-
+ name of the security group rule.
+ It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
+ type: string
+ portRangeMax:
+ description: |-
+ portRangeMax is a number in the range that is matched by the security group
+ rule. The portRangeMin attribute constrains the portRangeMax attribute.
+ type: integer
+ portRangeMin:
+ description: |-
+ portRangeMin is a number in the range that is matched by the security group
+ rule. If the protocol is TCP or UDP, this value must be less than or equal
+ to the value of the portRangeMax attribute.
+ type: integer
+ protocol:
+ description: protocol is the protocol that is matched by
+ the security group rule.
+ type: string
+ remoteGroupID:
+ description: |-
+ remoteGroupID is the remote group ID to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteIPPrefix:
+ description: |-
+ remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteManagedGroups:
+ description: |-
+ remoteManagedGroups is the remote managed groups to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ items:
+ enum:
+ - bastion
+ - controlplane
+ - worker
+ type: string
+ type: array
+ required:
+ - direction
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ workerNodesSecurityGroupRules:
+ description: workerNodesSecurityGroupRules defines the rules that
+ should be applied to worker nodes.
+ items:
+ description: |-
+ SecurityGroupRuleSpec represent the basic information of the associated OpenStack
+ Security Group Role.
+ For now this is only used for the allNodesSecurityGroupRules but when we add
+ other security groups, we'll need to add a validation because
+ Remote* fields are mutually exclusive.
+ properties:
+ description:
+ description: description of the security group rule.
+ type: string
+ direction:
+ description: |-
+ direction in which the security group rule is applied. The only values
+ allowed are "ingress" or "egress". For a compute instance, an ingress
+ security group rule is applied to incoming (ingress) traffic for that
+ instance. An egress rule is applied to traffic leaving the instance.
+ type: string
+ etherType:
+ description: |-
+ etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
+ ingress or egress rules.
+ type: string
+ name:
+ description: |-
+ name of the security group rule.
+ It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
+ type: string
+ portRangeMax:
+ description: |-
+ portRangeMax is a number in the range that is matched by the security group
+ rule. The portRangeMin attribute constrains the portRangeMax attribute.
+ type: integer
+ portRangeMin:
+ description: |-
+ portRangeMin is a number in the range that is matched by the security group
+ rule. If the protocol is TCP or UDP, this value must be less than or equal
+ to the value of the portRangeMax attribute.
+ type: integer
+ protocol:
+ description: protocol is the protocol that is matched by
+ the security group rule.
+ type: string
+ remoteGroupID:
+ description: |-
+ remoteGroupID is the remote group ID to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteIPPrefix:
+ description: |-
+ remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteManagedGroups:
+ description: |-
+ remoteManagedGroups is the remote managed groups to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ items:
+ enum:
+ - bastion
+ - controlplane
+ - worker
+ type: string
+ type: array
+ required:
+ - direction
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ required:
+ - allowAllInClusterTraffic
+ type: object
+ managedSubnets:
+ description: |-
+ ManagedSubnets describe OpenStack Subnets to be created. Cluster actuator will create a network,
+ subnets with the defined CIDR, and a router connected to these subnets. Currently only one IPv4
+ subnet is supported. If you leave this empty, no network will be created.
+ items:
+ properties:
+ allocationPools:
+ description: |-
+ AllocationPools is an array of AllocationPool objects that will be applied to OpenStack Subnet being created.
+ If set, OpenStack will only allocate these IPs for Machines. It will still be possible to create ports from
+ outside of these ranges manually.
+ items:
+ properties:
+ end:
+ description: End represents the end of the AlloctionPool,
+ that is the highest IP of the pool.
+ type: string
+ start:
+ description: Start represents the start of the AllocationPool,
+ that is the lowest IP of the pool.
+ type: string
+ required:
+ - end
+ - start
+ type: object
+ type: array
+ cidr:
+ description: |-
+ CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
+ This field is required when defining a subnet.
+ type: string
+ dnsNameservers:
+ description: |-
+ DNSNameservers holds a list of DNS server addresses that will be provided when creating
+ the subnet. These addresses need to have the same IP version as CIDR.
+ items:
+ type: string
+ type: array
+ required:
+ - cidr
+ type: object
+ maxItems: 1
+ type: array
+ x-kubernetes-list-type: atomic
+ network:
+ description: |-
+ Network specifies an existing network to use if no ManagedSubnets
+ are specified.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID is provided,
+ the other filters cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ networkMTU:
+ description: |-
+ NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
+ This value will be used only if the Cluster actuator creates the network.
+ If left empty, the network will have the default MTU defined in Openstack network service.
+ To use this field, the Openstack installation requires the net-mtu neutron API extension.
+ type: integer
+ router:
+ description: |-
+ Router specifies an existing router to be used if ManagedSubnets are
+ specified. If specified, no new router will be created.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ router. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the router to use. If ID is provided,
+ the other filters cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ subnets:
+ description: |-
+ Subnets specifies existing subnets to use if not ManagedSubnets are
+ specified. All subnets must be in the network specified by Network.
+ There can be zero, one, or two subnets. If no subnets are specified,
+ all subnets in Network will be used. If 2 subnets are specified, one
+ must be IPv4 and the other IPv6.
+ items:
+ description: SubnetParam specifies an OpenStack subnet to use. It
+ may be specified by either ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select the subnet.
+ It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will not be validated.
+ format: uuid
+ type: string
+ type: object
+ maxItems: 2
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: Tags to set on all resources in cluster which support
+ tags
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ required:
+ - identityRef
+ type: object
+ x-kubernetes-validations:
+ - message: bastion floating IP cannot be set when disableExternalNetwork
+ is true
+ rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
+ ? !has(self.bastion) || !has(self.bastion.floatingIP) : true'
+ - message: disableAPIServerFloatingIP cannot be false when disableExternalNetwork
+ is true
+ rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
+ ? has(self.disableAPIServerFloatingIP) && self.disableAPIServerFloatingIP
+ : true'
+ status:
+ description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
+ properties:
+ apiServerLoadBalancer:
+ description: APIServerLoadBalancer describes the api server load balancer
+ if one exists
+ properties:
+ allowedCIDRs:
+ items:
+ type: string
+ type: array
+ id:
+ type: string
+ internalIP:
+ type: string
+ ip:
+ type: string
+ loadBalancerNetwork:
+ description: |-
+ LoadBalancerNetwork contains information about network and/or subnets which the
+ loadbalancer is allocated on.
+ If subnets are specified within the LoadBalancerNetwork currently only the first
+ subnet in the list is taken into account.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ subnets:
+ description: Subnets is a list of subnets associated with
+ the default cluster network. Machines which use the default
+ cluster network will get an address from all of these subnets.
+ items:
+ description: Subnet represents basic information about the
+ associated OpenStack Neutron Subnet.
+ properties:
+ cidr:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - cidr
+ - id
+ - name
+ type: object
+ type: array
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - internalIP
+ - ip
+ - name
+ type: object
+ bastion:
+ description: Bastion contains the information about the deployed bastion
+ host
+ properties:
+ floatingIP:
+ type: string
+ id:
+ type: string
+ ip:
+ type: string
+ name:
+ type: string
+ resolved:
+ description: |-
+ Resolved contains parts of the bastion's machine spec with all
+ external references fully resolved.
+ properties:
+ flavorID:
+ description: FlavorID is the ID of the flavor to use.
+ type: string
+ imageID:
+ description: ImageID is the ID of the image to use for the
+ machine and is calculated based on ImageFilter.
+ type: string
+ ports:
+ description: Ports is the fully resolved list of ports to
+ create for the machine.
+ items:
+ description: ResolvedPortSpec is a PortOpts with all contained
+ references fully resolved.
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port
+ should be created in the up (true) or down (false)
+ state. The default is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description
+ for the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or
+ IP address to assign to the port. If specified, these
+ must be subnets of the port's network.
+ items:
+ description: ResolvedFixedIP is a FixedIP with the
+ Subnet resolved to an ID.
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If SubnetID
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: SubnetID is the id of a subnet to
+ create the fixed IP of a port in.
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where
+ the port resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of
+ the port. If not specified, the MAC address will be
+ generated.
+ type: string
+ name:
+ description: Name is the name of the port.
+ type: string
+ networkID:
+ description: NetworkID is the ID of the network the
+ port will be created in.
+ type: string
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables
+ the propagate uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of security group
+ IDs to assign to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: Tags applied to the port (and corresponding
+ trunk, if a trunk is configured.)
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Trunk specifies whether trunking is enabled
+ at the port level.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value
+ pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ required:
+ - description
+ - name
+ - networkID
+ type: object
+ type: array
+ serverGroupID:
+ description: ServerGroupID is the ID of the server group the
+ machine should be added to and is calculated based on ServerGroupFilter.
+ type: string
+ type: object
+ resources:
+ description: Resources contains references to OpenStack resources
+ created for the bastion.
+ properties:
+ ports:
+ description: Ports is the status of the ports created for
+ the machine.
+ items:
+ properties:
+ id:
+ description: ID is the unique identifier of the port.
+ type: string
+ required:
+ - id
+ type: object
+ type: array
+ type: object
+ sshKeyName:
+ type: string
+ state:
+ description: InstanceState describes the state of an OpenStack
+ instance.
+ type: string
+ type: object
+ bastionSecurityGroup:
+ description: |-
+ BastionSecurityGroup contains the information about the OpenStack
+ Security Group that needs to be applied to worker nodes.
+ properties:
+ id:
+ description: id of the security group
+ type: string
+ name:
+ description: name of the security group
+ type: string
+ required:
+ - id
+ - name
+ type: object
+ controlPlaneSecurityGroup:
+ description: |-
+ ControlPlaneSecurityGroup contains the information about the
+ OpenStack Security Group that needs to be applied to control plane
+ nodes.
+ properties:
+ id:
+ description: id of the security group
+ type: string
+ name:
+ description: name of the security group
+ type: string
+ required:
+ - id
+ - name
+ type: object
+ externalNetwork:
+ description: ExternalNetwork contains information about the external
+ network used for default ingress and egress traffic.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ failureDomains:
+ additionalProperties:
+ description: |-
+ FailureDomainSpec is the Schema for Cluster API failure domains.
+ It allows controllers to understand how many failure domains a cluster can optionally span across.
+ properties:
+ attributes:
+ additionalProperties:
+ type: string
+ description: attributes is a free form map of attributes an
+ infrastructure provider might use or require.
+ type: object
+ controlPlane:
+ description: controlPlane determines if this failure domain
+ is suitable for use by control plane machines.
+ type: boolean
+ type: object
+ description: FailureDomains represent OpenStack availability zones
+ type: object
+ failureMessage:
+ description: |-
+ FailureMessage will be set in the event that there is a terminal problem
+ reconciling the OpenStackCluster and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the OpenStackCluster's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of
+ OpenStackClusters can be added as events to the OpenStackCluster object
+ and/or logged in the controller's output.
+ type: string
+ failureReason:
+ description: |-
+ FailureReason will be set in the event that there is a terminal problem
+ reconciling the OpenStackCluster and will contain a succinct value suitable
+ for machine interpretation.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the OpenStackCluster's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of
+ OpenStackClusters can be added as events to the OpenStackCluster object
+ and/or logged in the controller's output.
+ type: string
+ network:
+ description: Network contains information about the created OpenStack
+ Network.
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ subnets:
+ description: Subnets is a list of subnets associated with the
+ default cluster network. Machines which use the default cluster
+ network will get an address from all of these subnets.
+ items:
+ description: Subnet represents basic information about the associated
+ OpenStack Neutron Subnet.
+ properties:
+ cidr:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - cidr
+ - id
+ - name
+ type: object
+ type: array
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ ready:
+ default: false
+ description: Ready is true when the cluster infrastructure is ready.
+ type: boolean
+ router:
+ description: Router describes the default cluster router
+ properties:
+ id:
+ type: string
+ ips:
+ items:
+ type: string
+ type: array
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ workerSecurityGroup:
+ description: |-
+ WorkerSecurityGroup contains the information about the OpenStack
+ Security Group that needs to be applied to worker nodes.
+ properties:
+ id:
+ description: id of the security group
+ type: string
+ name:
+ description: name of the security group
+ type: string
+ required:
+ - id
+ - name
+ type: object
+ required:
+ - ready
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.5
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: openstackclustertemplates.infrastructure.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: infrastructure.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: OpenStackClusterTemplate
+ listKind: OpenStackClusterTemplateList
+ plural: openstackclustertemplates
+ shortNames:
+ - osct
+ singular: openstackclustertemplate
+ scope: Namespaced
+ versions:
+ - deprecated: true
+ deprecationWarning: The v1alpha7 version of OpenStackClusterTemplate has been
+ deprecated and will be removed in a future release.
+ name: v1alpha7
+ schema:
+ openAPIV3Schema:
+ description: |-
+ OpenStackClusterTemplate is the Schema for the openstackclustertemplates API.
+
+ Deprecated: v1alpha7.OpenStackClusterTemplate has been replaced by v1beta1.OpenStackClusterTemplate.
+ 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: OpenStackClusterTemplateSpec defines the desired state of
+ OpenStackClusterTemplate.
+ properties:
+ template:
+ description: OpenStackClusterTemplateResource describes the data needed
+ to create a OpenStackCluster from a template.
+ properties:
+ spec:
+ description: OpenStackClusterSpec defines the desired state of
+ OpenStackCluster.
+ properties:
+ allowAllInClusterTraffic:
+ description: |-
+ AllowAllInClusterTraffic is only used when managed security groups are in use.
+ If set to true, the rules for the managed security groups are configured so that all
+ ingress and egress between cluster nodes is permitted, allowing CNIs other than
+ Calico to be used.
+ type: boolean
+ apiServerFixedIP:
+ description: |-
+ APIServerFixedIP is the fixed IP which will be associated with the API server.
+ In the case where the API server has a floating IP but not a managed load balancer,
+ this field is not used.
+ If a managed load balancer is used and this field is not specified, a fixed IP will
+ be dynamically allocated for the load balancer.
+ If a managed load balancer is not used AND the API server floating IP is disabled,
+ this field MUST be specified and should correspond to a pre-allocated port that
+ holds the fixed IP to be used as a VIP.
+ type: string
+ apiServerFloatingIP:
+ description: |-
+ APIServerFloatingIP is the floatingIP which will be associated with the API server.
+ The floatingIP will be created if it does not already exist.
+ If not specified, a new floatingIP is allocated.
+ This field is not used if DisableAPIServerFloatingIP is set to true.
+ type: string
+ apiServerLoadBalancer:
+ description: |-
+ APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
+ It must be activated by setting `enabled: true`.
+ properties:
+ additionalPorts:
+ description: AdditionalPorts adds additional tcp ports
+ to the load balancer.
+ items:
+ type: integer
+ type: array
+ allowedCidrs:
+ description: AllowedCIDRs restrict access to all API-Server
+ listeners to the given address CIDRs.
+ items:
+ type: string
+ type: array
+ enabled:
+ description: Enabled defines whether a load balancer should
+ be created.
+ type: boolean
+ provider:
+ description: Octavia Provider Used to create load balancer
+ type: string
+ type: object
+ apiServerPort:
+ description: |-
+ APIServerPort is the port on which the listener on the APIServer
+ will be created
+ type: integer
+ bastion:
+ description: |-
+ Bastion is the OpenStack instance to login the nodes
+
+ As a rolling update is not ideal during a bastion host session, we
+ prevent changes to a running bastion configuration. Set `enabled: false` to
+ make changes.
+ properties:
+ availabilityZone:
+ type: string
+ enabled:
+ type: boolean
+ instance:
+ description: Instance for the bastion itself
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications
+ for additional block devices to attach to the server
+ instance
+ items:
+ description: AdditionalBlockDevice is a block device
+ to attach to the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block
+ device in gibibytes (GiB).
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional
+ storage options for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume in.
+ If omitted, the availability zone of the server will be used.
+ The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
+ to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
+ further information.
+ type: string
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ cloudName:
+ description: The name of the cloud to use from the
+ clouds secret
+ type: string
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for
+ your server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIP:
+ description: |-
+ The floatingIP which will be associated to the machine, only used for master.
+ The floatingIP should have been created and haven't been associated.
+ type: string
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a identity to be used when reconciling this cluster.
+ If not specified, the identity ref of the cluster will be used instead.
+ properties:
+ kind:
+ description: |-
+ Kind of the identity. Must be supported by the infrastructure
+ provider and may be either cluster or namespace-scoped.
+ minLength: 1
+ type: string
+ name:
+ description: |-
+ Name of the infrastructure identity to be used.
+ Must be either a cluster-scoped resource, or namespaced-scoped
+ resource the same namespace as the resource(s) being provisioned.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ image:
+ description: |-
+ The name of the image to use for your server instance.
+ If the RootVolume is specified, this will be ignored and use rootVolume directly.
+ type: string
+ imageUUID:
+ description: |-
+ The uuid of the image to use for your server instance.
+ if it's empty, Image name will be used
+ type: string
+ instanceID:
+ description: InstanceID is the OpenStack instance
+ ID for this machine.
+ type: string
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ type: boolean
+ allowedAddressPairs:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ macAddress:
+ type: string
+ type: object
+ type: array
+ description:
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: Specify pairs of subnet and/or
+ IP address. These should be subnets of the
+ network with the given NetworkID.
+ items:
+ properties:
+ ipAddress:
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ hostId:
+ description: The ID of the host where the port
+ is allocated
+ type: string
+ macAddress:
+ type: string
+ nameSuffix:
+ description: Used to make the name of the port
+ unique. If unspecified, instead the 0-based
+ index of the port in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding details.
+ We intentionally don't expose this as a map[string]string because we only want to enable
+ the users to set the values of the keys that are known to work in OpenStack Networking API.
+ See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ properties:
+ ovsHWOffload:
+ description: OVSHWOffload enables or disables
+ the OVS hardware offload feature.
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables
+ the “trusted mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or
+ disables the propagate uplink status on the
+ port.
+ type: boolean
+ securityGroupFilters:
+ description: The names, uuids, filters or any
+ combination these of the security groups to
+ assign to the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Enables and disables trunk at port
+ level. If not provided, openStackMachine.Spec.Trunk
+ is inherited.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single
+ value_spec key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value
+ pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the
+ key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: The virtual network interface card
+ (vNIC) type that is bound to the neutron port.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as
+ specified by the cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ type: string
+ diskSize:
+ type: integer
+ volumeType:
+ type: string
+ type: object
+ securityGroups:
+ description: The names of the security groups to assign
+ to the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ serverGroupID:
+ description: The server group to assign the machine
+ to
+ type: string
+ serverMetadata:
+ additionalProperties:
+ type: string
+ description: Metadata mapping. Allows you to create
+ a map of key value pairs to add to the server instance.
+ type: object
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Machine tags
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created
+ on a trunk port or not.
+ type: boolean
+ type: object
+ type: object
+ cloudName:
+ description: The name of the cloud to use from the clouds
+ secret
+ type: string
+ controlPlaneAvailabilityZones:
+ description: ControlPlaneAvailabilityZones is the az to deploy
+ control plane to
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ controlPlaneEndpoint:
+ description: ControlPlaneEndpoint represents the endpoint
+ used to communicate with the control plane.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneOmitAvailabilityZone:
+ description: |-
+ Indicates whether to omit the az for control plane nodes, allowing the Nova scheduler
+ to make a decision on which az to use based on other scheduling constraints
+ type: boolean
+ disableAPIServerFloatingIP:
+ description: |-
+ DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
+ IP to the API server. This allows for the creation of clusters when attaching a floating
+ IP to the API server (and hence, in many cases, exposing the API server to the internet)
+ is not possible or desirable, e.g. if using a shared VLAN for communication between
+ management and workload clusters or when the management cluster is inside the
+ project network.
+ This option requires that the API server use a VIP on the cluster network so that the
+ underlying machines can change without changing ControlPlaneEndpoint.Host.
+ When using a managed load balancer, this VIP will be managed automatically.
+ If not using a managed load balancer, cluster configuration will fail without additional
+ configuration to manage the VIP on the control plane machines, which falls outside of
+ the scope of this controller.
+ type: boolean
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity disables the port security of the network created for the
+ Kubernetes cluster, which also disables SecurityGroups
+ type: boolean
+ dnsNameservers:
+ description: |-
+ DNSNameservers is the list of nameservers for OpenStack Subnet being created.
+ Set this value when you need create a new network/subnet while the access
+ through DNS is required.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ externalNetworkId:
+ description: |-
+ ExternalNetworkID is the ID of an external OpenStack Network. This is necessary
+ to get public internet to the VMs.
+ type: string
+ externalRouterIPs:
+ description: |-
+ ExternalRouterIPs is an array of externalIPs on the respective subnets.
+ This is necessary if the router needs a fixed ip in a specific subnet.
+ items:
+ properties:
+ fixedIP:
+ description: The FixedIP in the corresponding subnet
+ type: string
+ subnet:
+ description: The subnet in which the FixedIP is used
+ for the Gateway of this router
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ identityRef:
+ description: IdentityRef is a reference to a identity to be
+ used when reconciling this cluster
+ properties:
+ kind:
+ description: |-
+ Kind of the identity. Must be supported by the infrastructure
+ provider and may be either cluster or namespace-scoped.
+ minLength: 1
+ type: string
+ name:
+ description: |-
+ Name of the infrastructure identity to be used.
+ Must be either a cluster-scoped resource, or namespaced-scoped
+ resource the same namespace as the resource(s) being provisioned.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ managedSecurityGroups:
+ description: |-
+ ManagedSecurityGroups determines whether OpenStack security groups for the cluster
+ will be managed by the OpenStack provider or whether pre-existing security groups will
+ be specified as part of the configuration.
+ By default, the managed security groups have rules that allow the Kubelet, etcd, the
+ Kubernetes API server and the Calico CNI plugin to function correctly.
+ type: boolean
+ network:
+ description: If NodeCIDR cannot be set this can be used to
+ detect an existing network.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ networkMtu:
+ description: |-
+ NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
+ This value will be used only if the Cluster actuator creates the network.
+ If leaved empty, the network will have the default MTU defined in Openstack network service.
+ To use this field, the Openstack installation requires the net-mtu neutron API extension.
+ type: integer
+ nodeCidr:
+ description: |-
+ NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a
+ network, a subnet with NodeCIDR, and a router connected to this subnet.
+ If you leave this empty, no network will be created.
+ type: string
+ router:
+ description: |-
+ If NodeCIDR is set this option can be used to detect an existing router.
+ If specified, no new router will be created.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ subnet:
+ description: If NodeCIDR cannot be set this can be used to
+ detect an existing subnet.
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ tags:
+ description: Tags for all resources in cluster
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ required:
+ - spec
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: false
+ storage: false
+ - name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: OpenStackClusterTemplate is the Schema for the openstackclustertemplates
+ 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: OpenStackClusterTemplateSpec defines the desired state of
+ OpenStackClusterTemplate.
+ properties:
+ template:
+ description: OpenStackClusterTemplateResource describes the data needed
+ to create a OpenStackCluster from a template.
+ properties:
+ spec:
+ description: OpenStackClusterSpec defines the desired state of
+ OpenStackCluster.
+ properties:
+ apiServerFixedIP:
+ description: |-
+ APIServerFixedIP is the fixed IP which will be associated with the API server.
+ In the case where the API server has a floating IP but not a managed load balancer,
+ this field is not used.
+ If a managed load balancer is used and this field is not specified, a fixed IP will
+ be dynamically allocated for the load balancer.
+ If a managed load balancer is not used AND the API server floating IP is disabled,
+ this field MUST be specified and should correspond to a pre-allocated port that
+ holds the fixed IP to be used as a VIP.
+ type: string
+ apiServerFloatingIP:
+ description: |-
+ APIServerFloatingIP is the floatingIP which will be associated with the API server.
+ The floatingIP will be created if it does not already exist.
+ If not specified, a new floatingIP is allocated.
+ This field is not used if DisableAPIServerFloatingIP is set to true.
+ type: string
+ apiServerLoadBalancer:
+ description: |-
+ APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
+ If not specified, no load balancer will be created for the API server.
+ properties:
+ additionalPorts:
+ description: AdditionalPorts adds additional tcp ports
+ to the load balancer.
+ items:
+ type: integer
+ type: array
+ x-kubernetes-list-type: set
+ allowedCIDRs:
+ description: AllowedCIDRs restrict access to all API-Server
+ listeners to the given address CIDRs.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ availabilityZone:
+ description: AvailabilityZone is the failure domain that
+ will be used to create the APIServerLoadBalancer Spec.
+ type: string
+ enabled:
+ default: true
+ description: |-
+ Enabled defines whether a load balancer should be created. This value
+ defaults to true if an APIServerLoadBalancer is given.
+
+ There is no reason to set this to false. To disable creation of the
+ API server loadbalancer, omit the APIServerLoadBalancer field in the
+ cluster spec instead.
+ type: boolean
+ flavor:
+ description: Flavor is the flavor name that will be used
+ to create the APIServerLoadBalancer Spec.
+ type: string
+ network:
+ description: Network defines which network should the
+ load balancer be allocated on.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an
+ OpenStack network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If
+ ID is provided, the other filters cannot be provided.
+ Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ provider:
+ description: |-
+ Provider specifies name of a specific Octavia provider to use for the
+ API load balancer. The Octavia default will be used if it is not
+ specified.
+ type: string
+ subnets:
+ description: |-
+ Subnets define which subnets should the load balancer be allocated on.
+ It is expected that subnets are located on the network specified in this resource.
+ Only the first element is taken into account.
+ kubebuilder:validation:MaxLength:=2
+ items:
+ description: SubnetParam specifies an OpenStack subnet
+ to use. It may be specified by either ID or filter,
+ but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select
+ the subnet. It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will
+ not be validated.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - enabled
+ type: object
+ apiServerPort:
+ description: |-
+ APIServerPort is the port on which the listener on the APIServer
+ will be created. If specified, it must be an integer between 0 and 65535.
+ maximum: 65535
+ minimum: 0
+ type: integer
+ bastion:
+ description: |-
+ Bastion is the OpenStack instance to login the nodes
+
+ As a rolling update is not ideal during a bastion host session, we
+ prevent changes to a running bastion configuration. To make changes, it's required
+ to first set `enabled: false` which will remove the bastion and then changes can be made.
+ properties:
+ availabilityZone:
+ description: AvailabilityZone is the failure domain that
+ will be used to create the Bastion Spec.
+ type: string
+ enabled:
+ default: true
+ description: |-
+ Enabled means that bastion is enabled. The bastion is enabled by
+ default if this field is not specified. Set this field to false to disable the
+ bastion.
+
+ It is not currently possible to remove the bastion from the cluster
+ spec without first disabling it by setting this field to false and
+ waiting until the bastion has been deleted.
+ type: boolean
+ floatingIP:
+ description: |-
+ FloatingIP which will be associated to the bastion machine. It's the IP address, not UUID.
+ The floating IP should already exist and should not be associated with a port. If FIP of this address does not
+ exist, CAPO will try to create it, but by default only OpenStack administrators have privileges to do so.
+ format: ipv4
+ type: string
+ spec:
+ description: Spec for the bastion itself
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications
+ for additional block devices to attach to the server
+ instance
+ items:
+ description: AdditionalBlockDevice is a block device
+ to attach to the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ Name cannot be 'root', which is reserved for the root volume.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block
+ device in gibibytes (GiB).
+ minimum: 1
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional
+ storage options for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from
+ is 'Name' or default
+ rule: '!has(self.from) || self.from
+ == ''Name'' ? has(self.name) : !has(self.name)'
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for
+ your server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIPPoolRef:
+ description: |-
+ floatingIPPoolRef is a reference to a IPPool that will be assigned
+ to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
+ will be assigned to the OpenStackMachine.
+ 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
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a secret holding OpenStack credentials
+ to be used when reconciling this machine. If not specified, the
+ credentials specified in the cluster will be used.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the
+ entry in the clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region))
+ || self.region == oldSelf.region
+ image:
+ description: |-
+ The image to use for your server instance.
+ If the rootVolume is specified, this will be used when creating the root volume.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: |-
+ Filter describes a query for an image. If specified, the combination
+ of name and tags must return a single matching image or an error will
+ be raised.
+ minProperties: 1
+ properties:
+ name:
+ description: The name of the desired image.
+ If specified, the combination of name and
+ tags must return a single matching image
+ or an error will be raised.
+ type: string
+ tags:
+ description: The tags associated with the
+ desired image. If specified, the combination
+ of name and tags must return a single matching
+ image or an error will be raised.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the image. ID will
+ not be validated before use.
+ format: uuid
+ type: string
+ imageRef:
+ description: |-
+ ImageRef is a reference to an ORC Image in the same namespace as the
+ referring object.
+ properties:
+ name:
+ description: Name is the name of the referenced
+ resource
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether
+ the port should be created in the up (true)
+ or down (false) state. The default is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable
+ description for the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of
+ subnet and/or IP address to assign to the
+ port. If specified, these must be subnets
+ of the port's network.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If Subnet
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter
+ to select the subnet. It must match
+ exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the
+ subnet. It will not be validated.
+ format: uuid
+ type: string
+ type: object
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the
+ host where the port resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address
+ of the port. If not specified, the MAC address
+ will be generated.
+ type: string
+ nameSuffix:
+ description: NameSuffix will be appended to
+ the name of the port if specified. If unspecified,
+ instead the 0-based index of the port in the
+ list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to
+ select an OpenStack network. If provided,
+ cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network
+ to use. If ID is provided, the other filters
+ cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables
+ the “trusted mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or
+ disables the propagate uplink status on the
+ port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of the
+ names, uuids, filters or any combination these
+ of the security groups to assign to the instance.
+ items:
+ description: SecurityGroupParam specifies
+ an OpenStack security group. It may be specified
+ by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query
+ to select an OpenStack security group.
+ If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security
+ group to use. If ID is provided, the
+ other filters cannot be provided. Must
+ be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: |-
+ Trunk specifies whether trunking is enabled at the port level. If not
+ provided the value is inherited from the machine, or false for a
+ bastion host.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single
+ value_spec key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value
+ pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the
+ key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as
+ specified by the cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name'
+ or default
+ rule: '!has(self.from) || self.from == ''Name''
+ ? has(self.name) : !has(self.name)'
+ sizeGiB:
+ description: SizeGiB is the size of the block
+ device in gibibytes (GiB).
+ minimum: 1
+ type: integer
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ required:
+ - sizeGiB
+ type: object
+ schedulerHintAdditionalProperties:
+ description: |-
+ SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
+ to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
+ such as specifying certain host aggregates or availability zones.
+ items:
+ description: |-
+ SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
+ It includes a Name to identify the property and a Value that can be of various types.
+ properties:
+ name:
+ description: |-
+ Name is the name of the scheduler hint property.
+ It is a unique identifier for the property.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value is the value of the scheduler hint property, which can be of various types
+ (e.g., bool, string, int). The type is indicated by the Value.Type field.
+ properties:
+ bool:
+ description: |-
+ Bool is the boolean value of the scheduler hint, used when Type is "Bool".
+ This field is required if type is 'Bool', and must not be set otherwise.
+ type: boolean
+ number:
+ description: |-
+ Number is the integer value of the scheduler hint, used when Type is "Number".
+ This field is required if type is 'Number', and must not be set otherwise.
+ type: integer
+ string:
+ description: |-
+ String is the string value of the scheduler hint, used when Type is "String".
+ This field is required if type is 'String', and must not be set otherwise.
+ maxLength: 255
+ minLength: 1
+ type: string
+ type:
+ description: |-
+ Type represents the type of the value.
+ Valid values are Bool, String, and Number.
+ enum:
+ - Bool
+ - String
+ - Number
+ type: string
+ required:
+ - type
+ type: object
+ x-kubernetes-validations:
+ - message: bool is required when type is Bool,
+ and forbidden otherwise
+ rule: 'has(self.type) && self.type == ''Bool''
+ ? has(self.bool) : !has(self.bool)'
+ - message: number is required when type is Number,
+ and forbidden otherwise
+ rule: 'has(self.type) && self.type == ''Number''
+ ? has(self.number) : !has(self.number)'
+ - message: string is required when type is String,
+ and forbidden otherwise
+ rule: 'has(self.type) && self.type == ''String''
+ ? has(self.string) : !has(self.string)'
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ securityGroups:
+ description: The names of the security groups to assign
+ to the instance
+ items:
+ description: SecurityGroupParam specifies an OpenStack
+ security group. It may be specified by ID or filter,
+ but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select
+ an OpenStack security group. If provided,
+ cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group
+ to use. If ID is provided, the other filters
+ cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ serverGroup:
+ description: The server group to assign the machine
+ to.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select
+ an OpenStack server group. If provided, it cannot
+ be empty.
+ minProperties: 1
+ properties:
+ name:
+ description: Name is the name of a server
+ group to look for.
+ type: string
+ type: object
+ id:
+ description: ID is the ID of the server group
+ to use.
+ format: uuid
+ type: string
+ type: object
+ serverMetadata:
+ description: Metadata mapping. Allows you to create
+ a map of key value pairs to add to the server instance.
+ items:
+ properties:
+ key:
+ description: Key is the server metadata key
+ maxLength: 255
+ type: string
+ value:
+ description: Value is the server metadata value
+ maxLength: 255
+ type: string
+ required:
+ - key
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - key
+ x-kubernetes-list-type: map
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Tags which will be added to the machine and all dependent resources
+ which support them. These are in addition to Tags defined on the
+ cluster.
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created
+ on a trunk port or not.
+ type: boolean
+ required:
+ - image
+ type: object
+ x-kubernetes-validations:
+ - message: at least one of flavor or flavorID must be
+ set
+ rule: (has(self.flavor) || has(self.flavorID))
+ type: object
+ x-kubernetes-validations:
+ - message: spec is required if bastion is enabled
+ rule: '!self.enabled || has(self.spec)'
+ controlPlaneAvailabilityZones:
+ description: |-
+ ControlPlaneAvailabilityZones is the set of availability zones which
+ control plane machines may be deployed to.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ controlPlaneEndpoint:
+ description: |-
+ ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.
+ It is normally populated automatically by the OpenStackCluster
+ controller during cluster provisioning. If it is set on creation the
+ control plane endpoint will use the values set here in preference to
+ values set elsewhere.
+ ControlPlaneEndpoint cannot be modified after ControlPlaneEndpoint.Host has been set.
+ properties:
+ host:
+ description: The hostname on which the API server is serving.
+ type: string
+ port:
+ description: The port on which the API server is serving.
+ format: int32
+ type: integer
+ required:
+ - host
+ - port
+ type: object
+ controlPlaneOmitAvailabilityZone:
+ description: |-
+ ControlPlaneOmitAvailabilityZone causes availability zone to be
+ omitted when creating control plane nodes, allowing the Nova
+ scheduler to make a decision on which availability zone to use based
+ on other scheduling constraints
+ type: boolean
+ disableAPIServerFloatingIP:
+ description: |-
+ DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
+ IP to the API server. This allows for the creation of clusters when attaching a floating
+ IP to the API server (and hence, in many cases, exposing the API server to the internet)
+ is not possible or desirable, e.g. if using a shared VLAN for communication between
+ management and workload clusters or when the management cluster is inside the
+ project network.
+ This option requires that the API server use a VIP on the cluster network so that the
+ underlying machines can change without changing ControlPlaneEndpoint.Host.
+ When using a managed load balancer, this VIP will be managed automatically.
+ If not using a managed load balancer, cluster configuration will fail without additional
+ configuration to manage the VIP on the control plane machines, which falls outside of
+ the scope of this controller.
+ type: boolean
+ disableExternalNetwork:
+ description: |-
+ DisableExternalNetwork specifies whether or not to attempt to connect the cluster
+ to an external network. This allows for the creation of clusters when connecting
+ to an external network is not possible or desirable, e.g. if using a provider network.
+ type: boolean
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity disables the port security of the network created for the
+ Kubernetes cluster, which also disables SecurityGroups
+ type: boolean
+ externalNetwork:
+ description: |-
+ ExternalNetwork is the OpenStack Network to be used to get public internet to the VMs.
+ This option is ignored if DisableExternalNetwork is set to true.
+
+ If ExternalNetwork is defined it must refer to exactly one external network.
+
+ If ExternalNetwork is not defined or is empty the controller will use any
+ existing external network as long as there is only one. It is an
+ error if ExternalNetwork is not defined and there are multiple
+ external networks unless DisableExternalNetwork is also set.
+
+ If ExternalNetwork is not defined and there are no external networks
+ the controller will proceed as though DisableExternalNetwork was set.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID
+ is provided, the other filters cannot be provided. Must
+ be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ externalRouterIPs:
+ description: |-
+ ExternalRouterIPs is an array of externalIPs on the respective subnets.
+ This is necessary if the router needs a fixed ip in a specific subnet.
+ items:
+ properties:
+ fixedIP:
+ description: The FixedIP in the corresponding subnet
+ type: string
+ subnet:
+ description: The subnet in which the FixedIP is used
+ for the Gateway of this router
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select
+ the subnet. It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will
+ not be validated.
+ format: uuid
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a secret holding OpenStack credentials
+ to be used when reconciling this cluster. It is also to reconcile
+ machines unless overridden in the machine spec.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry
+ in the clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ managedSecurityGroups:
+ description: |-
+ ManagedSecurityGroups determines whether OpenStack security groups for the cluster
+ will be managed by the OpenStack provider or whether pre-existing security groups will
+ be specified as part of the configuration.
+ By default, the managed security groups have rules that allow the Kubelet, etcd, and the
+ Kubernetes API server to function correctly.
+ It's possible to add additional rules to the managed security groups.
+ When defined to an empty struct, the managed security groups will be created with the default rules.
+ properties:
+ allNodesSecurityGroupRules:
+ description: allNodesSecurityGroupRules defines the rules
+ that should be applied to all nodes.
+ items:
+ description: |-
+ SecurityGroupRuleSpec represent the basic information of the associated OpenStack
+ Security Group Role.
+ For now this is only used for the allNodesSecurityGroupRules but when we add
+ other security groups, we'll need to add a validation because
+ Remote* fields are mutually exclusive.
+ properties:
+ description:
+ description: description of the security group rule.
+ type: string
+ direction:
+ description: |-
+ direction in which the security group rule is applied. The only values
+ allowed are "ingress" or "egress". For a compute instance, an ingress
+ security group rule is applied to incoming (ingress) traffic for that
+ instance. An egress rule is applied to traffic leaving the instance.
+ type: string
+ etherType:
+ description: |-
+ etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
+ ingress or egress rules.
+ type: string
+ name:
+ description: |-
+ name of the security group rule.
+ It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
+ type: string
+ portRangeMax:
+ description: |-
+ portRangeMax is a number in the range that is matched by the security group
+ rule. The portRangeMin attribute constrains the portRangeMax attribute.
+ type: integer
+ portRangeMin:
+ description: |-
+ portRangeMin is a number in the range that is matched by the security group
+ rule. If the protocol is TCP or UDP, this value must be less than or equal
+ to the value of the portRangeMax attribute.
+ type: integer
+ protocol:
+ description: protocol is the protocol that is matched
+ by the security group rule.
+ type: string
+ remoteGroupID:
+ description: |-
+ remoteGroupID is the remote group ID to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteIPPrefix:
+ description: |-
+ remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteManagedGroups:
+ description: |-
+ remoteManagedGroups is the remote managed groups to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ items:
+ enum:
+ - bastion
+ - controlplane
+ - worker
+ type: string
+ type: array
+ required:
+ - direction
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ allowAllInClusterTraffic:
+ default: false
+ description: AllowAllInClusterTraffic allows all ingress
+ and egress traffic between cluster nodes when set to
+ true.
+ type: boolean
+ controlPlaneNodesSecurityGroupRules:
+ description: controlPlaneNodesSecurityGroupRules defines
+ the rules that should be applied to control plane nodes.
+ items:
+ description: |-
+ SecurityGroupRuleSpec represent the basic information of the associated OpenStack
+ Security Group Role.
+ For now this is only used for the allNodesSecurityGroupRules but when we add
+ other security groups, we'll need to add a validation because
+ Remote* fields are mutually exclusive.
+ properties:
+ description:
+ description: description of the security group rule.
+ type: string
+ direction:
+ description: |-
+ direction in which the security group rule is applied. The only values
+ allowed are "ingress" or "egress". For a compute instance, an ingress
+ security group rule is applied to incoming (ingress) traffic for that
+ instance. An egress rule is applied to traffic leaving the instance.
+ type: string
+ etherType:
+ description: |-
+ etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
+ ingress or egress rules.
+ type: string
+ name:
+ description: |-
+ name of the security group rule.
+ It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
+ type: string
+ portRangeMax:
+ description: |-
+ portRangeMax is a number in the range that is matched by the security group
+ rule. The portRangeMin attribute constrains the portRangeMax attribute.
+ type: integer
+ portRangeMin:
+ description: |-
+ portRangeMin is a number in the range that is matched by the security group
+ rule. If the protocol is TCP or UDP, this value must be less than or equal
+ to the value of the portRangeMax attribute.
+ type: integer
+ protocol:
+ description: protocol is the protocol that is matched
+ by the security group rule.
+ type: string
+ remoteGroupID:
+ description: |-
+ remoteGroupID is the remote group ID to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteIPPrefix:
+ description: |-
+ remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteManagedGroups:
+ description: |-
+ remoteManagedGroups is the remote managed groups to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ items:
+ enum:
+ - bastion
+ - controlplane
+ - worker
+ type: string
+ type: array
+ required:
+ - direction
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ workerNodesSecurityGroupRules:
+ description: workerNodesSecurityGroupRules defines the
+ rules that should be applied to worker nodes.
+ items:
+ description: |-
+ SecurityGroupRuleSpec represent the basic information of the associated OpenStack
+ Security Group Role.
+ For now this is only used for the allNodesSecurityGroupRules but when we add
+ other security groups, we'll need to add a validation because
+ Remote* fields are mutually exclusive.
+ properties:
+ description:
+ description: description of the security group rule.
+ type: string
+ direction:
+ description: |-
+ direction in which the security group rule is applied. The only values
+ allowed are "ingress" or "egress". For a compute instance, an ingress
+ security group rule is applied to incoming (ingress) traffic for that
+ instance. An egress rule is applied to traffic leaving the instance.
+ type: string
+ etherType:
+ description: |-
+ etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
+ ingress or egress rules.
+ type: string
+ name:
+ description: |-
+ name of the security group rule.
+ It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
+ type: string
+ portRangeMax:
+ description: |-
+ portRangeMax is a number in the range that is matched by the security group
+ rule. The portRangeMin attribute constrains the portRangeMax attribute.
+ type: integer
+ portRangeMin:
+ description: |-
+ portRangeMin is a number in the range that is matched by the security group
+ rule. If the protocol is TCP or UDP, this value must be less than or equal
+ to the value of the portRangeMax attribute.
+ type: integer
+ protocol:
+ description: protocol is the protocol that is matched
+ by the security group rule.
+ type: string
+ remoteGroupID:
+ description: |-
+ remoteGroupID is the remote group ID to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteIPPrefix:
+ description: |-
+ remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ type: string
+ remoteManagedGroups:
+ description: |-
+ remoteManagedGroups is the remote managed groups to be associated with this security group rule.
+ You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
+ items:
+ enum:
+ - bastion
+ - controlplane
+ - worker
+ type: string
+ type: array
+ required:
+ - direction
+ - name
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ required:
+ - allowAllInClusterTraffic
+ type: object
+ managedSubnets:
+ description: |-
+ ManagedSubnets describe OpenStack Subnets to be created. Cluster actuator will create a network,
+ subnets with the defined CIDR, and a router connected to these subnets. Currently only one IPv4
+ subnet is supported. If you leave this empty, no network will be created.
+ items:
+ properties:
+ allocationPools:
+ description: |-
+ AllocationPools is an array of AllocationPool objects that will be applied to OpenStack Subnet being created.
+ If set, OpenStack will only allocate these IPs for Machines. It will still be possible to create ports from
+ outside of these ranges manually.
+ items:
+ properties:
+ end:
+ description: End represents the end of the AlloctionPool,
+ that is the highest IP of the pool.
+ type: string
+ start:
+ description: Start represents the start of the
+ AllocationPool, that is the lowest IP of the
+ pool.
+ type: string
+ required:
+ - end
+ - start
+ type: object
+ type: array
+ cidr:
+ description: |-
+ CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
+ This field is required when defining a subnet.
+ type: string
+ dnsNameservers:
+ description: |-
+ DNSNameservers holds a list of DNS server addresses that will be provided when creating
+ the subnet. These addresses need to have the same IP version as CIDR.
+ items:
+ type: string
+ type: array
+ required:
+ - cidr
+ type: object
+ maxItems: 1
+ type: array
+ x-kubernetes-list-type: atomic
+ network:
+ description: |-
+ Network specifies an existing network to use if no ManagedSubnets
+ are specified.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID
+ is provided, the other filters cannot be provided. Must
+ be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ networkMTU:
+ description: |-
+ NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
+ This value will be used only if the Cluster actuator creates the network.
+ If left empty, the network will have the default MTU defined in Openstack network service.
+ To use this field, the Openstack installation requires the net-mtu neutron API extension.
+ type: integer
+ router:
+ description: |-
+ Router specifies an existing router to be used if ManagedSubnets are
+ specified. If specified, no new router will be created.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ router. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the router to use. If ID
+ is provided, the other filters cannot be provided. Must
+ be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ subnets:
+ description: |-
+ Subnets specifies existing subnets to use if not ManagedSubnets are
+ specified. All subnets must be in the network specified by Network.
+ There can be zero, one, or two subnets. If no subnets are specified,
+ all subnets in Network will be used. If 2 subnets are specified, one
+ must be IPv4 and the other IPv6.
+ items:
+ description: SubnetParam specifies an OpenStack subnet to
+ use. It may be specified by either ID or filter, but not
+ both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select the
+ subnet. It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will not
+ be validated.
+ format: uuid
+ type: string
+ type: object
+ maxItems: 2
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: Tags to set on all resources in cluster which
+ support tags
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ required:
+ - identityRef
+ type: object
+ x-kubernetes-validations:
+ - message: bastion floating IP cannot be set when disableExternalNetwork
+ is true
+ rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
+ ? !has(self.bastion) || !has(self.bastion.floatingIP) : true'
+ - message: disableAPIServerFloatingIP cannot be false when disableExternalNetwork
+ is true
+ rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
+ ? has(self.disableAPIServerFloatingIP) && self.disableAPIServerFloatingIP
+ : true'
+ required:
+ - spec
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.5
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: openstackfloatingippools.infrastructure.cluster.x-k8s.io
+spec:
+ group: infrastructure.cluster.x-k8s.io
+ names:
+ kind: OpenStackFloatingIPPool
+ listKind: OpenStackFloatingIPPoolList
+ plural: openstackfloatingippools
+ singular: openstackfloatingippool
+ scope: Namespaced
+ versions:
+ - name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: OpenStackFloatingIPPool is the Schema for the openstackfloatingippools
+ 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: OpenStackFloatingIPPoolSpec defines the desired state of
+ OpenStackFloatingIPPool.
+ properties:
+ floatingIPNetwork:
+ description: FloatingIPNetwork is the external network to use for
+ floating ips, if there's only one external network it will be used
+ by default
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID is provided,
+ the other filters cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ identityRef:
+ description: IdentityRef is a reference to a identity to be used when
+ reconciling this pool.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry in the
+ clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ maxIPs:
+ description: |-
+ MaxIPs is the maximum number of floating ips that can be allocated from this pool, if nil there is no limit.
+ If set, the pool will stop allocating floating ips when it reaches this number of ClaimedIPs.
+ type: integer
+ preAllocatedFloatingIPs:
+ description: |-
+ PreAllocatedFloatingIPs is a list of floating IPs precreated in OpenStack that should be used by this pool.
+ These are used before allocating new ones and are not deleted from OpenStack when the pool is deleted.
+ items:
+ type: string
+ type: array
+ reclaimPolicy:
+ description: The stratergy to use for reclaiming floating ips when
+ they are released from a machine
+ enum:
+ - Retain
+ - Delete
+ type: string
+ required:
+ - identityRef
+ - reclaimPolicy
+ type: object
+ status:
+ description: OpenStackFloatingIPPoolStatus defines the observed state
+ of OpenStackFloatingIPPool.
+ properties:
+ availableIPs:
+ default: []
+ items:
+ type: string
+ type: array
+ claimedIPs:
+ default: []
+ items:
+ type: string
+ type: array
+ conditions:
+ description: Conditions provide observations of the operational state
+ of a Cluster API resource.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ failedIPs:
+ description: FailedIPs contains a list of floating ips that failed
+ to be allocated
+ items:
+ type: string
+ type: array
+ floatingIPNetwork:
+ description: floatingIPNetwork contains information about the network
+ used for floating ips
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ tags:
+ items:
+ type: string
+ type: array
+ required:
+ - id
+ - name
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.5
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: openstackmachines.infrastructure.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: infrastructure.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: OpenStackMachine
+ listKind: OpenStackMachineList
+ plural: openstackmachines
+ shortNames:
+ - osm
+ singular: openstackmachine
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: Cluster to which this OpenStackMachine belongs
+ jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
+ name: Cluster
+ type: string
+ - description: OpenStack instance state
+ jsonPath: .status.instanceState
+ name: InstanceState
+ type: string
+ - description: Machine ready status
+ jsonPath: .status.ready
+ name: Ready
+ type: string
+ - description: OpenStack instance ID
+ jsonPath: .spec.providerID
+ name: ProviderID
+ type: string
+ - description: Machine object which owns with this OpenStackMachine
+ jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
+ name: Machine
+ type: string
+ - description: Time duration since creation of OpenStackMachine
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ deprecated: true
+ deprecationWarning: The v1alpha7 version of OpenStackMachine has been deprecated
+ and will be removed in a future release.
+ name: v1alpha7
+ schema:
+ openAPIV3Schema:
+ description: |-
+ OpenStackMachine is the Schema for the openstackmachines API.
+
+ Deprecated: v1alpha7.OpenStackMachine has been replaced by v1beta1.OpenStackMachine.
+ 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: OpenStackMachineSpec defines the desired state of OpenStackMachine.
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications for
+ additional block devices to attach to the server instance
+ items:
+ description: AdditionalBlockDevice is a block device to attach to
+ the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device in gibibytes
+ (GiB).
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage options
+ for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume in.
+ If omitted, the availability zone of the server will be used.
+ The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
+ to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
+ further information.
+ type: string
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ cloudName:
+ description: The name of the cloud to use from the clouds secret
+ type: string
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for your server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIP:
+ description: |-
+ The floatingIP which will be associated to the machine, only used for master.
+ The floatingIP should have been created and haven't been associated.
+ type: string
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a identity to be used when reconciling this cluster.
+ If not specified, the identity ref of the cluster will be used instead.
+ properties:
+ kind:
+ description: |-
+ Kind of the identity. Must be supported by the infrastructure
+ provider and may be either cluster or namespace-scoped.
+ minLength: 1
+ type: string
+ name:
+ description: |-
+ Name of the infrastructure identity to be used.
+ Must be either a cluster-scoped resource, or namespaced-scoped
+ resource the same namespace as the resource(s) being provisioned.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ image:
+ description: |-
+ The name of the image to use for your server instance.
+ If the RootVolume is specified, this will be ignored and use rootVolume directly.
+ type: string
+ imageUUID:
+ description: |-
+ The uuid of the image to use for your server instance.
+ if it's empty, Image name will be used
+ type: string
+ instanceID:
+ description: InstanceID is the OpenStack instance ID for this machine.
+ type: string
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ type: boolean
+ allowedAddressPairs:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ macAddress:
+ type: string
+ type: object
+ type: array
+ description:
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: Specify pairs of subnet and/or IP address. These
+ should be subnets of the network with the given NetworkID.
+ items:
+ properties:
+ ipAddress:
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ hostId:
+ description: The ID of the host where the port is allocated
+ type: string
+ macAddress:
+ type: string
+ nameSuffix:
+ description: Used to make the name of the port unique. If unspecified,
+ instead the 0-based index of the port in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding details.
+ We intentionally don't expose this as a map[string]string because we only want to enable
+ the users to set the values of the keys that are known to work in OpenStack Networking API.
+ See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ properties:
+ ovsHWOffload:
+ description: OVSHWOffload enables or disables the OVS hardware
+ offload feature.
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables the propagate
+ uplink status on the port.
+ type: boolean
+ securityGroupFilters:
+ description: The names, uuids, filters or any combination these
+ of the security groups to assign to the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Enables and disables trunk at port level. If not
+ provided, openStackMachine.Spec.Trunk is inherited.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec key-value
+ pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: The virtual network interface card (vNIC) type
+ that is bound to the neutron port.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as specified by the
+ cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ type: string
+ diskSize:
+ type: integer
+ volumeType:
+ type: string
+ type: object
+ securityGroups:
+ description: The names of the security groups to assign to the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ serverGroupID:
+ description: The server group to assign the machine to
+ type: string
+ serverMetadata:
+ additionalProperties:
+ type: string
+ description: Metadata mapping. Allows you to create a map of key value
+ pairs to add to the server instance.
+ type: object
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Machine tags
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created on a trunk port
+ or not.
+ type: boolean
+ type: object
+ status:
+ description: OpenStackMachineStatus defines the observed state of OpenStackMachine.
+ properties:
+ addresses:
+ description: Addresses contains the OpenStack instance associated
+ addresses.
+ items:
+ description: NodeAddress contains information for the node's address.
+ properties:
+ address:
+ description: The node address.
+ type: string
+ type:
+ description: Node address type, one of Hostname, ExternalIP
+ or InternalIP.
+ type: string
+ required:
+ - address
+ - type
+ type: object
+ type: array
+ conditions:
+ description: Conditions provide observations of the operational state
+ of a Cluster API resource.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ FailureMessage will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+ type: string
+ failureReason:
+ description: DeprecatedCAPIMachineStatusError defines errors states
+ for Machine objects.
+ type: string
+ instanceState:
+ description: InstanceState is the state of the OpenStack instance
+ for this machine.
+ type: string
+ ready:
+ description: Ready is true when the provider resource is ready.
+ type: boolean
+ type: object
+ type: object
+ served: false
+ storage: false
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - description: Cluster to which this OpenStackMachine belongs
+ jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
+ name: Cluster
+ type: string
+ - description: Machine ready status
+ jsonPath: .status.ready
+ name: Ready
+ type: string
+ - description: OpenStack instance ID
+ jsonPath: .spec.providerID
+ name: ProviderID
+ type: string
+ - description: Machine object which owns with this OpenStackMachine
+ jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
+ name: Machine
+ type: string
+ - description: Time duration since creation of OpenStackMachine
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: OpenStackMachine is the Schema for the openstackmachines 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: OpenStackMachineSpec defines the desired state of OpenStackMachine.
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications for
+ additional block devices to attach to the server instance
+ items:
+ description: AdditionalBlockDevice is a block device to attach to
+ the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ Name cannot be 'root', which is reserved for the root volume.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device in gibibytes
+ (GiB).
+ minimum: 1
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage options
+ for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name' or default
+ rule: '!has(self.from) || self.from == ''Name'' ?
+ has(self.name) : !has(self.name)'
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for your server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIPPoolRef:
+ description: |-
+ floatingIPPoolRef is a reference to a IPPool that will be assigned
+ to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
+ will be assigned to the OpenStackMachine.
+ 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
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a secret holding OpenStack credentials
+ to be used when reconciling this machine. If not specified, the
+ credentials specified in the cluster will be used.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry in the
+ clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ image:
+ description: |-
+ The image to use for your server instance.
+ If the rootVolume is specified, this will be used when creating the root volume.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: |-
+ Filter describes a query for an image. If specified, the combination
+ of name and tags must return a single matching image or an error will
+ be raised.
+ minProperties: 1
+ properties:
+ name:
+ description: The name of the desired image. If specified,
+ the combination of name and tags must return a single matching
+ image or an error will be raised.
+ type: string
+ tags:
+ description: The tags associated with the desired image. If
+ specified, the combination of name and tags must return
+ a single matching image or an error will be raised.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the image. ID will not be validated
+ before use.
+ format: uuid
+ type: string
+ imageRef:
+ description: |-
+ ImageRef is a reference to an ORC Image in the same namespace as the
+ referring object.
+ properties:
+ name:
+ description: Name is the name of the referenced resource
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port should
+ be created in the up (true) or down (false) state. The default
+ is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description for
+ the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or IP
+ address to assign to the port. If specified, these must be
+ subnets of the port's network.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If Subnet
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select the
+ subnet. It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will
+ not be validated.
+ format: uuid
+ type: string
+ type: object
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where the port
+ resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of the port.
+ If not specified, the MAC address will be generated.
+ type: string
+ nameSuffix:
+ description: NameSuffix will be appended to the name of the
+ port if specified. If unspecified, instead the 0-based index
+ of the port in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID is
+ provided, the other filters cannot be provided. Must be
+ in UUID format.
+ format: uuid
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables the propagate
+ uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of the names, uuids, filters
+ or any combination these of the security groups to assign
+ to the instance.
+ items:
+ description: SecurityGroupParam specifies an OpenStack security
+ group. It may be specified by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ security group. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group to use.
+ If ID is provided, the other filters cannot be provided.
+ Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: |-
+ Trunk specifies whether trunking is enabled at the port level. If not
+ provided the value is inherited from the machine, or false for a
+ bastion host.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec key-value
+ pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as specified by the
+ cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name' or default
+ rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
+ : !has(self.name)'
+ sizeGiB:
+ description: SizeGiB is the size of the block device in gibibytes
+ (GiB).
+ minimum: 1
+ type: integer
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ required:
+ - sizeGiB
+ type: object
+ schedulerHintAdditionalProperties:
+ description: |-
+ SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
+ to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
+ such as specifying certain host aggregates or availability zones.
+ items:
+ description: |-
+ SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
+ It includes a Name to identify the property and a Value that can be of various types.
+ properties:
+ name:
+ description: |-
+ Name is the name of the scheduler hint property.
+ It is a unique identifier for the property.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value is the value of the scheduler hint property, which can be of various types
+ (e.g., bool, string, int). The type is indicated by the Value.Type field.
+ properties:
+ bool:
+ description: |-
+ Bool is the boolean value of the scheduler hint, used when Type is "Bool".
+ This field is required if type is 'Bool', and must not be set otherwise.
+ type: boolean
+ number:
+ description: |-
+ Number is the integer value of the scheduler hint, used when Type is "Number".
+ This field is required if type is 'Number', and must not be set otherwise.
+ type: integer
+ string:
+ description: |-
+ String is the string value of the scheduler hint, used when Type is "String".
+ This field is required if type is 'String', and must not be set otherwise.
+ maxLength: 255
+ minLength: 1
+ type: string
+ type:
+ description: |-
+ Type represents the type of the value.
+ Valid values are Bool, String, and Number.
+ enum:
+ - Bool
+ - String
+ - Number
+ type: string
+ required:
+ - type
+ type: object
+ x-kubernetes-validations:
+ - message: bool is required when type is Bool, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
+ : !has(self.bool)'
+ - message: number is required when type is Number, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''Number'' ? has(self.number)
+ : !has(self.number)'
+ - message: string is required when type is String, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''String'' ? has(self.string)
+ : !has(self.string)'
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ securityGroups:
+ description: The names of the security groups to assign to the instance
+ items:
+ description: SecurityGroupParam specifies an OpenStack security
+ group. It may be specified by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ security group. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group to use. If ID
+ is provided, the other filters cannot be provided. Must be
+ in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ serverGroup:
+ description: The server group to assign the machine to.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack server
+ group. If provided, it cannot be empty.
+ minProperties: 1
+ properties:
+ name:
+ description: Name is the name of a server group to look for.
+ type: string
+ type: object
+ id:
+ description: ID is the ID of the server group to use.
+ format: uuid
+ type: string
+ type: object
+ serverMetadata:
+ description: Metadata mapping. Allows you to create a map of key value
+ pairs to add to the server instance.
+ items:
+ properties:
+ key:
+ description: Key is the server metadata key
+ maxLength: 255
+ type: string
+ value:
+ description: Value is the server metadata value
+ maxLength: 255
+ type: string
+ required:
+ - key
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - key
+ x-kubernetes-list-type: map
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Tags which will be added to the machine and all dependent resources
+ which support them. These are in addition to Tags defined on the
+ cluster.
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created on a trunk port
+ or not.
+ type: boolean
+ required:
+ - image
+ type: object
+ x-kubernetes-validations:
+ - message: at least one of flavor or flavorID must be set
+ rule: (has(self.flavor) || has(self.flavorID))
+ status:
+ description: OpenStackMachineStatus defines the observed state of OpenStackMachine.
+ properties:
+ addresses:
+ description: Addresses contains the OpenStack instance associated
+ addresses.
+ items:
+ description: NodeAddress contains information for the node's address.
+ properties:
+ address:
+ description: The node address.
+ type: string
+ type:
+ description: Node address type, one of Hostname, ExternalIP
+ or InternalIP.
+ type: string
+ required:
+ - address
+ - type
+ type: object
+ type: array
+ conditions:
+ description: Conditions provide observations of the operational state
+ of a Cluster API resource.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ failureMessage:
+ description: |-
+ FailureMessage will be set in the event that there is a terminal problem
+ reconciling the Machine and will contain a more verbose string suitable
+ for logging and human consumption.
+
+ This field should not be set for transitive errors that a controller
+ faces that are expected to be fixed automatically over
+ time (like service outages), but instead indicate that something is
+ fundamentally wrong with the Machine's spec or the configuration of
+ the controller, and that manual intervention is required. Examples
+ of terminal errors would be invalid combinations of settings in the
+ spec, values that are unsupported by the controller, or the
+ responsible controller itself being critically misconfigured.
+
+ Any transient errors that occur during the reconciliation of Machines
+ can be added as events to the Machine object and/or logged in the
+ controller's output.
+ type: string
+ failureReason:
+ description: DeprecatedCAPIMachineStatusError defines errors states
+ for Machine objects.
+ type: string
+ instanceID:
+ description: InstanceID is the OpenStack instance ID for this machine.
+ type: string
+ instanceState:
+ description: |-
+ InstanceState is the state of the OpenStack instance for this machine.
+ This field is not set anymore by the OpenStackMachine controller.
+ Instead, it's set by the OpenStackServer controller.
+ type: string
+ ready:
+ description: Ready is true when the provider resource is ready.
+ type: boolean
+ resolved:
+ description: |-
+ Resolved contains parts of the machine spec with all external
+ references fully resolved.
+ properties:
+ flavorID:
+ description: FlavorID is the ID of the flavor to use.
+ type: string
+ imageID:
+ description: ImageID is the ID of the image to use for the machine
+ and is calculated based on ImageFilter.
+ type: string
+ ports:
+ description: Ports is the fully resolved list of ports to create
+ for the machine.
+ items:
+ description: ResolvedPortSpec is a PortOpts with all contained
+ references fully resolved.
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port should
+ be created in the up (true) or down (false) state. The
+ default is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description
+ for the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or
+ IP address to assign to the port. If specified, these
+ must be subnets of the port's network.
+ items:
+ description: ResolvedFixedIP is a FixedIP with the Subnet
+ resolved to an ID.
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If SubnetID
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: SubnetID is the id of a subnet to create
+ the fixed IP of a port in.
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where the
+ port resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of the
+ port. If not specified, the MAC address will be generated.
+ type: string
+ name:
+ description: Name is the name of the port.
+ type: string
+ networkID:
+ description: NetworkID is the ID of the network the port
+ will be created in.
+ type: string
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables the
+ propagate uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of security group
+ IDs to assign to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: Tags applied to the port (and corresponding
+ trunk, if a trunk is configured.)
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Trunk specifies whether trunking is enabled
+ at the port level.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ required:
+ - description
+ - name
+ - networkID
+ type: object
+ type: array
+ serverGroupID:
+ description: ServerGroupID is the ID of the server group the machine
+ should be added to and is calculated based on ServerGroupFilter.
+ type: string
+ type: object
+ resources:
+ description: Resources contains references to OpenStack resources
+ created for the machine.
+ properties:
+ ports:
+ description: Ports is the status of the ports created for the
+ machine.
+ items:
+ properties:
+ id:
+ description: ID is the unique identifier of the port.
+ type: string
+ required:
+ - id
+ type: object
+ type: array
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.5
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: openstackmachinetemplates.infrastructure.cluster.x-k8s.io
+spec:
+ conversion:
+ strategy: Webhook
+ webhook:
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /convert
+ conversionReviewVersions:
+ - v1
+ - v1beta1
+ group: infrastructure.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: OpenStackMachineTemplate
+ listKind: OpenStackMachineTemplateList
+ plural: openstackmachinetemplates
+ shortNames:
+ - osmt
+ singular: openstackmachinetemplate
+ scope: Namespaced
+ versions:
+ - deprecated: true
+ deprecationWarning: The v1alpha7 version of OpenStackMachineTemplate has been
+ deprecated and will be removed in a future release.
+ name: v1alpha7
+ schema:
+ openAPIV3Schema:
+ description: |-
+ OpenStackMachineTemplate is the Schema for the openstackmachinetemplates API.
+
+ Deprecated: v1alpha7.OpenStackMachineTemplate has been replaced by v1beta1.OpenStackMachineTemplate.
+ 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: OpenStackMachineTemplateSpec defines the desired state of
+ OpenStackMachineTemplate.
+ properties:
+ template:
+ description: OpenStackMachineTemplateResource describes the data needed
+ to create a OpenStackMachine from a template.
+ properties:
+ spec:
+ description: Spec is the specification of the desired behavior
+ of the machine.
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications
+ for additional block devices to attach to the server instance
+ items:
+ description: AdditionalBlockDevice is a block device to
+ attach to the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device
+ in gibibytes (GiB).
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage
+ options for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume in.
+ If omitted, the availability zone of the server will be used.
+ The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
+ to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
+ further information.
+ type: string
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ cloudName:
+ description: The name of the cloud to use from the clouds
+ secret
+ type: string
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for your
+ server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIP:
+ description: |-
+ The floatingIP which will be associated to the machine, only used for master.
+ The floatingIP should have been created and haven't been associated.
+ type: string
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a identity to be used when reconciling this cluster.
+ If not specified, the identity ref of the cluster will be used instead.
+ properties:
+ kind:
+ description: |-
+ Kind of the identity. Must be supported by the infrastructure
+ provider and may be either cluster or namespace-scoped.
+ minLength: 1
+ type: string
+ name:
+ description: |-
+ Name of the infrastructure identity to be used.
+ Must be either a cluster-scoped resource, or namespaced-scoped
+ resource the same namespace as the resource(s) being provisioned.
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ image:
+ description: |-
+ The name of the image to use for your server instance.
+ If the RootVolume is specified, this will be ignored and use rootVolume directly.
+ type: string
+ imageUUID:
+ description: |-
+ The uuid of the image to use for your server instance.
+ if it's empty, Image name will be used
+ type: string
+ instanceID:
+ description: InstanceID is the OpenStack instance ID for this
+ machine.
+ type: string
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ type: boolean
+ allowedAddressPairs:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ macAddress:
+ type: string
+ type: object
+ type: array
+ description:
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: Specify pairs of subnet and/or IP address.
+ These should be subnets of the network with the given
+ NetworkID.
+ items:
+ properties:
+ ipAddress:
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gateway_ip:
+ type: string
+ id:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RaMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ required:
+ - subnet
+ type: object
+ type: array
+ hostId:
+ description: The ID of the host where the port is allocated
+ type: string
+ macAddress:
+ type: string
+ nameSuffix:
+ description: Used to make the name of the port unique.
+ If unspecified, instead the 0-based index of the port
+ in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding details.
+ We intentionally don't expose this as a map[string]string because we only want to enable
+ the users to set the values of the keys that are known to work in OpenStack Networking API.
+ See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ properties:
+ ovsHWOffload:
+ description: OVSHWOffload enables or disables the
+ OVS hardware offload feature.
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables
+ the propagate uplink status on the port.
+ type: boolean
+ securityGroupFilters:
+ description: The names, uuids, filters or any combination
+ these of the security groups to assign to the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Enables and disables trunk at port level.
+ If not provided, openStackMachine.Spec.Trunk is inherited.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value
+ pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: The virtual network interface card (vNIC)
+ type that is bound to the neutron port.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as specified
+ by the cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ type: string
+ diskSize:
+ type: integer
+ volumeType:
+ type: string
+ type: object
+ securityGroups:
+ description: The names of the security groups to assign to
+ the instance
+ items:
+ properties:
+ description:
+ type: string
+ id:
+ type: string
+ name:
+ type: string
+ notTags:
+ type: string
+ notTagsAny:
+ type: string
+ projectId:
+ type: string
+ tags:
+ type: string
+ tagsAny:
+ type: string
+ type: object
+ type: array
+ serverGroupID:
+ description: The server group to assign the machine to
+ type: string
+ serverMetadata:
+ additionalProperties:
+ type: string
+ description: Metadata mapping. Allows you to create a map
+ of key value pairs to add to the server instance.
+ type: object
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Machine tags
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created on a trunk
+ port or not.
+ type: boolean
+ type: object
+ required:
+ - spec
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: false
+ storage: false
+ - name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: OpenStackMachineTemplate is the Schema for the openstackmachinetemplates
+ 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: OpenStackMachineTemplateSpec defines the desired state of
+ OpenStackMachineTemplate.
+ properties:
+ template:
+ description: OpenStackMachineTemplateResource describes the data needed
+ to create a OpenStackMachine from a template.
+ properties:
+ spec:
+ description: Spec is the specification of the desired behavior
+ of the machine.
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications
+ for additional block devices to attach to the server instance
+ items:
+ description: AdditionalBlockDevice is a block device to
+ attach to the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ Name cannot be 'root', which is reserved for the root volume.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device
+ in gibibytes (GiB).
+ minimum: 1
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage
+ options for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name'
+ or default
+ rule: '!has(self.from) || self.from == ''Name''
+ ? has(self.name) : !has(self.name)'
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ configDrive:
+ description: Config Drive support
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for your
+ server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIPPoolRef:
+ description: |-
+ floatingIPPoolRef is a reference to a IPPool that will be assigned
+ to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
+ will be assigned to the OpenStackMachine.
+ 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
+ identityRef:
+ description: |-
+ IdentityRef is a reference to a secret holding OpenStack credentials
+ to be used when reconciling this machine. If not specified, the
+ credentials specified in the cluster will be used.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry
+ in the clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ image:
+ description: |-
+ The image to use for your server instance.
+ If the rootVolume is specified, this will be used when creating the root volume.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: |-
+ Filter describes a query for an image. If specified, the combination
+ of name and tags must return a single matching image or an error will
+ be raised.
+ minProperties: 1
+ properties:
+ name:
+ description: The name of the desired image. If specified,
+ the combination of name and tags must return a single
+ matching image or an error will be raised.
+ type: string
+ tags:
+ description: The tags associated with the desired
+ image. If specified, the combination of name and
+ tags must return a single matching image or an error
+ will be raised.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the image. ID will not
+ be validated before use.
+ format: uuid
+ type: string
+ imageRef:
+ description: |-
+ ImageRef is a reference to an ORC Image in the same namespace as the
+ referring object.
+ properties:
+ name:
+ description: Name is the name of the referenced resource
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ ports:
+ description: |-
+ Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
+ If not specified a default port will be added for the default cluster network.
+ items:
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port
+ should be created in the up (true) or down (false)
+ state. The default is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description
+ for the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or
+ IP address to assign to the port. If specified, these
+ must be subnets of the port's network.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If Subnet
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to
+ select the subnet. It must match exactly
+ one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet.
+ It will not be validated.
+ format: uuid
+ type: string
+ type: object
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where
+ the port resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of
+ the port. If not specified, the MAC address will be
+ generated.
+ type: string
+ nameSuffix:
+ description: NameSuffix will be appended to the name
+ of the port if specified. If unspecified, instead
+ the 0-based index of the port in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select
+ an OpenStack network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use.
+ If ID is provided, the other filters cannot be
+ provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables
+ the propagate uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of the names,
+ uuids, filters or any combination these of the security
+ groups to assign to the instance.
+ items:
+ description: SecurityGroupParam specifies an OpenStack
+ security group. It may be specified by ID or filter,
+ but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select
+ an OpenStack security group. If provided, cannot
+ be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group
+ to use. If ID is provided, the other filters
+ cannot be provided. Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: |-
+ Trunk specifies whether trunking is enabled at the port level. If not
+ provided the value is inherited from the machine, or false for a
+ bastion host.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value
+ pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ type: object
+ type: array
+ providerID:
+ description: ProviderID is the unique identifier as specified
+ by the cloud provider.
+ type: string
+ rootVolume:
+ description: The volume metadata to boot from
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name' or default
+ rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
+ : !has(self.name)'
+ sizeGiB:
+ description: SizeGiB is the size of the block device in
+ gibibytes (GiB).
+ minimum: 1
+ type: integer
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ required:
+ - sizeGiB
+ type: object
+ schedulerHintAdditionalProperties:
+ description: |-
+ SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
+ to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
+ such as specifying certain host aggregates or availability zones.
+ items:
+ description: |-
+ SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
+ It includes a Name to identify the property and a Value that can be of various types.
+ properties:
+ name:
+ description: |-
+ Name is the name of the scheduler hint property.
+ It is a unique identifier for the property.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value is the value of the scheduler hint property, which can be of various types
+ (e.g., bool, string, int). The type is indicated by the Value.Type field.
+ properties:
+ bool:
+ description: |-
+ Bool is the boolean value of the scheduler hint, used when Type is "Bool".
+ This field is required if type is 'Bool', and must not be set otherwise.
+ type: boolean
+ number:
+ description: |-
+ Number is the integer value of the scheduler hint, used when Type is "Number".
+ This field is required if type is 'Number', and must not be set otherwise.
+ type: integer
+ string:
+ description: |-
+ String is the string value of the scheduler hint, used when Type is "String".
+ This field is required if type is 'String', and must not be set otherwise.
+ maxLength: 255
+ minLength: 1
+ type: string
+ type:
+ description: |-
+ Type represents the type of the value.
+ Valid values are Bool, String, and Number.
+ enum:
+ - Bool
+ - String
+ - Number
+ type: string
+ required:
+ - type
+ type: object
+ x-kubernetes-validations:
+ - message: bool is required when type is Bool, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
+ : !has(self.bool)'
+ - message: number is required when type is Number, and
+ forbidden otherwise
+ rule: 'has(self.type) && self.type == ''Number'' ?
+ has(self.number) : !has(self.number)'
+ - message: string is required when type is String, and
+ forbidden otherwise
+ rule: 'has(self.type) && self.type == ''String'' ?
+ has(self.string) : !has(self.string)'
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ securityGroups:
+ description: The names of the security groups to assign to
+ the instance
+ items:
+ description: SecurityGroupParam specifies an OpenStack security
+ group. It may be specified by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ security group. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group to use.
+ If ID is provided, the other filters cannot be provided.
+ Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ serverGroup:
+ description: The server group to assign the machine to.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ server group. If provided, it cannot be empty.
+ minProperties: 1
+ properties:
+ name:
+ description: Name is the name of a server group to
+ look for.
+ type: string
+ type: object
+ id:
+ description: ID is the ID of the server group to use.
+ format: uuid
+ type: string
+ type: object
+ serverMetadata:
+ description: Metadata mapping. Allows you to create a map
+ of key value pairs to add to the server instance.
+ items:
+ properties:
+ key:
+ description: Key is the server metadata key
+ maxLength: 255
+ type: string
+ value:
+ description: Value is the server metadata value
+ maxLength: 255
+ type: string
+ required:
+ - key
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - key
+ x-kubernetes-list-type: map
+ sshKeyName:
+ description: The ssh key to inject in the instance
+ type: string
+ tags:
+ description: |-
+ Tags which will be added to the machine and all dependent resources
+ which support them. These are in addition to Tags defined on the
+ cluster.
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Whether the server instance is created on a trunk
+ port or not.
+ type: boolean
+ required:
+ - image
+ type: object
+ x-kubernetes-validations:
+ - message: at least one of flavor or flavorID must be set
+ rule: (has(self.flavor) || has(self.flavorID))
+ required:
+ - spec
+ type: object
+ required:
+ - template
+ type: object
+ type: object
+ served: true
+ storage: true
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ controller-gen.kubebuilder.io/version: v0.16.5
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
+ clusterctl.cluster.x-k8s.io: ""
+ name: openstackservers.infrastructure.cluster.x-k8s.io
+spec:
+ group: infrastructure.cluster.x-k8s.io
+ names:
+ categories:
+ - cluster-api
+ kind: OpenStackServer
+ listKind: OpenStackServerList
+ plural: openstackservers
+ shortNames:
+ - oss
+ singular: openstackserver
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: OpenStack instance state
+ jsonPath: .status.instanceState
+ name: InstanceState
+ type: string
+ - description: OpenStack instance ready status
+ jsonPath: .status.ready
+ name: Ready
+ type: string
+ - description: OpenStack instance ID
+ jsonPath: .status.instanceID
+ name: InstanceID
+ type: string
+ - description: Time duration since creation of OpenStack instance
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: OpenStackServer is the Schema for the openstackservers 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: OpenStackServerSpec defines the desired state of OpenStackServer.
+ properties:
+ additionalBlockDevices:
+ description: AdditionalBlockDevices is a list of specifications for
+ additional block devices to attach to the server instance.
+ items:
+ description: AdditionalBlockDevice is a block device to attach to
+ the server.
+ properties:
+ name:
+ description: |-
+ Name of the block device in the context of a machine.
+ If the block device is a volume, the Cinder volume will be named
+ as a combination of the machine name and this name.
+ Also, this name will be used for tagging the block device.
+ Information about the block device tag can be obtained from the OpenStack
+ metadata API or the config drive.
+ Name cannot be 'root', which is reserved for the root volume.
+ type: string
+ sizeGiB:
+ description: SizeGiB is the size of the block device in gibibytes
+ (GiB).
+ minimum: 1
+ type: integer
+ storage:
+ description: |-
+ Storage specifies the storage type of the block device and
+ additional storage options.
+ properties:
+ type:
+ description: |-
+ Type is the type of block device to create.
+ This can be either "Volume" or "Local".
+ type: string
+ volume:
+ description: Volume contains additional storage options
+ for a volume block device.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name' or default
+ rule: '!has(self.from) || self.from == ''Name'' ?
+ has(self.name) : !has(self.name)'
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - name
+ - sizeGiB
+ - storage
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ availabilityZone:
+ description: AvailabilityZone is the availability zone in which to
+ create the server instance.
+ type: string
+ configDrive:
+ description: ConfigDrive is a flag to enable config drive for the
+ server instance.
+ type: boolean
+ flavor:
+ description: The flavor reference for the flavor for the server instance.
+ minLength: 1
+ type: string
+ flavorID:
+ description: |-
+ FlavorID allows flavors to be specified by ID. This field takes precedence
+ over Flavor.
+ minLength: 1
+ type: string
+ floatingIPPoolRef:
+ description: FloatingIPPoolRef is a reference to a FloatingIPPool
+ to allocate a floating IP from.
+ 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
+ identityRef:
+ description: IdentityRef is a reference to a secret holding OpenStack
+ credentials.
+ properties:
+ cloudName:
+ description: CloudName specifies the name of the entry in the
+ clouds.yaml file to use.
+ type: string
+ name:
+ description: |-
+ Name is the name of a secret in the same namespace as the resource being provisioned.
+ The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
+ The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
+ type: string
+ region:
+ description: |-
+ Region specifies an OpenStack region to use. If specified, it overrides
+ any value in clouds.yaml. If specified for an OpenStackMachine, its
+ value will be included in providerID.
+ type: string
+ required:
+ - cloudName
+ - name
+ type: object
+ x-kubernetes-validations:
+ - message: region is immutable
+ rule: (!has(self.region) && !has(oldSelf.region)) || self.region
+ == oldSelf.region
+ image:
+ description: The image to use for the server instance.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: |-
+ Filter describes a query for an image. If specified, the combination
+ of name and tags must return a single matching image or an error will
+ be raised.
+ minProperties: 1
+ properties:
+ name:
+ description: The name of the desired image. If specified,
+ the combination of name and tags must return a single matching
+ image or an error will be raised.
+ type: string
+ tags:
+ description: The tags associated with the desired image. If
+ specified, the combination of name and tags must return
+ a single matching image or an error will be raised.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the image. ID will not be validated
+ before use.
+ format: uuid
+ type: string
+ imageRef:
+ description: |-
+ ImageRef is a reference to an ORC Image in the same namespace as the
+ referring object.
+ properties:
+ name:
+ description: Name is the name of the referenced resource
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ ports:
+ description: Ports to be attached to the server instance.
+ items:
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port should
+ be created in the up (true) or down (false) state. The default
+ is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description for
+ the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or IP
+ address to assign to the port. If specified, these must be
+ subnets of the port's network.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If Subnet
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: |-
+ Subnet is an openstack subnet query that will return the id of a subnet to create
+ the fixed IP of a port in. This query must not return more than one subnet.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select the
+ subnet. It must match exactly one subnet.
+ minProperties: 1
+ properties:
+ cidr:
+ type: string
+ description:
+ type: string
+ gatewayIP:
+ type: string
+ ipVersion:
+ type: integer
+ ipv6AddressMode:
+ type: string
+ ipv6RAMode:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the uuid of the subnet. It will
+ not be validated.
+ format: uuid
+ type: string
+ type: object
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where the port
+ resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of the port.
+ If not specified, the MAC address will be generated.
+ type: string
+ nameSuffix:
+ description: NameSuffix will be appended to the name of the
+ port if specified. If unspecified, instead the 0-based index
+ of the port in the list is used.
+ type: string
+ network:
+ description: |-
+ Network is a query for an openstack network that the port will be created or discovered on.
+ This will fail if the query returns more than one network.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a filter to select an OpenStack
+ network. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the network to use. If ID is
+ provided, the other filters cannot be provided. Must be
+ in UUID format.
+ format: uuid
+ type: string
+ type: object
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables the propagate
+ uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of the names, uuids, filters
+ or any combination these of the security groups to assign
+ to the instance.
+ items:
+ description: SecurityGroupParam specifies an OpenStack security
+ group. It may be specified by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ security group. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group to use.
+ If ID is provided, the other filters cannot be provided.
+ Must be in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: |-
+ Tags applied to the port (and corresponding trunk, if a trunk is configured.)
+ These tags are applied in addition to the instance's tags, which will also be applied to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: |-
+ Trunk specifies whether trunking is enabled at the port level. If not
+ provided the value is inherited from the machine, or false for a
+ bastion host.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec key-value
+ pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ type: object
+ type: array
+ rootVolume:
+ description: RootVolume is the specification for the root volume of
+ the server instance.
+ properties:
+ availabilityZone:
+ description: |-
+ AvailabilityZone is the volume availability zone to create the volume
+ in. If not specified, the volume will be created without an explicit
+ availability zone.
+ properties:
+ from:
+ default: Name
+ description: |-
+ From specifies where we will obtain the availability zone for the
+ volume. The options are "Name" and "Machine". If "Name" is specified
+ then the Name field must also be specified. If "Machine" is specified
+ the volume will use the value of FailureDomain, if any, from the
+ associated Machine.
+ enum:
+ - Name
+ - Machine
+ type: string
+ name:
+ description: |-
+ Name is the name of a volume availability zone to use. It is required
+ if From is "Name". The volume availability zone name may not contain
+ spaces.
+ minLength: 1
+ pattern: ^[^ ]+$
+ type: string
+ type: object
+ x-kubernetes-validations:
+ - message: name is required when from is 'Name' or default
+ rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
+ : !has(self.name)'
+ sizeGiB:
+ description: SizeGiB is the size of the block device in gibibytes
+ (GiB).
+ minimum: 1
+ type: integer
+ type:
+ description: |-
+ Type is the Cinder volume type of the volume.
+ If omitted, the default Cinder volume type that is configured in the OpenStack cloud
+ will be used.
+ type: string
+ required:
+ - sizeGiB
+ type: object
+ schedulerHintAdditionalProperties:
+ description: |-
+ SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
+ to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
+ such as specifying certain host aggregates or availability zones.
+ items:
+ description: |-
+ SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
+ It includes a Name to identify the property and a Value that can be of various types.
+ properties:
+ name:
+ description: |-
+ Name is the name of the scheduler hint property.
+ It is a unique identifier for the property.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value is the value of the scheduler hint property, which can be of various types
+ (e.g., bool, string, int). The type is indicated by the Value.Type field.
+ properties:
+ bool:
+ description: |-
+ Bool is the boolean value of the scheduler hint, used when Type is "Bool".
+ This field is required if type is 'Bool', and must not be set otherwise.
+ type: boolean
+ number:
+ description: |-
+ Number is the integer value of the scheduler hint, used when Type is "Number".
+ This field is required if type is 'Number', and must not be set otherwise.
+ type: integer
+ string:
+ description: |-
+ String is the string value of the scheduler hint, used when Type is "String".
+ This field is required if type is 'String', and must not be set otherwise.
+ maxLength: 255
+ minLength: 1
+ type: string
+ type:
+ description: |-
+ Type represents the type of the value.
+ Valid values are Bool, String, and Number.
+ enum:
+ - Bool
+ - String
+ - Number
+ type: string
+ required:
+ - type
+ type: object
+ x-kubernetes-validations:
+ - message: bool is required when type is Bool, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
+ : !has(self.bool)'
+ - message: number is required when type is Number, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''Number'' ? has(self.number)
+ : !has(self.number)'
+ - message: string is required when type is String, and forbidden
+ otherwise
+ rule: 'has(self.type) && self.type == ''String'' ? has(self.string)
+ : !has(self.string)'
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ securityGroups:
+ description: SecurityGroups is a list of security groups names to
+ assign to the instance.
+ items:
+ description: SecurityGroupParam specifies an OpenStack security
+ group. It may be specified by ID or filter, but not both.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack
+ security group. If provided, cannot be empty.
+ minProperties: 1
+ properties:
+ description:
+ type: string
+ name:
+ type: string
+ notTags:
+ description: |-
+ NotTags is a list of tags to filter by. If specified, resources which
+ contain all of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ notTagsAny:
+ description: |-
+ NotTagsAny is a list of tags to filter by. If specified, resources
+ which contain any of the given tags will be excluded from the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ projectID:
+ type: string
+ tags:
+ description: |-
+ Tags is a list of tags to filter by. If specified, the resource must
+ have all of the tags specified to be included in the result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ tagsAny:
+ description: |-
+ TagsAny is a list of tags to filter by. If specified, the resource
+ must have at least one of the tags specified to be included in the
+ result.
+ items:
+ description: |-
+ NeutronTag represents a tag on a Neutron resource.
+ It may not be empty and may not contain commas.
+ minLength: 1
+ pattern: ^[^,]+$
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ type: object
+ id:
+ description: ID is the ID of the security group to use. If ID
+ is provided, the other filters cannot be provided. Must be
+ in UUID format.
+ format: uuid
+ type: string
+ type: object
+ type: array
+ serverGroup:
+ description: ServerGroup is the server group to which the server instance
+ belongs.
+ maxProperties: 1
+ minProperties: 1
+ properties:
+ filter:
+ description: Filter specifies a query to select an OpenStack server
+ group. If provided, it cannot be empty.
+ minProperties: 1
+ properties:
+ name:
+ description: Name is the name of a server group to look for.
+ type: string
+ type: object
+ id:
+ description: ID is the ID of the server group to use.
+ format: uuid
+ type: string
+ type: object
+ serverMetadata:
+ description: ServerMetadata is a map of key value pairs to add to
+ the server instance.
+ items:
+ properties:
+ key:
+ description: Key is the server metadata key
+ maxLength: 255
+ type: string
+ value:
+ description: Value is the server metadata value
+ maxLength: 255
+ type: string
+ required:
+ - key
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - key
+ x-kubernetes-list-type: map
+ sshKeyName:
+ description: SSHKeyName is the name of the SSH key to inject in the
+ instance.
+ type: string
+ tags:
+ description: |-
+ Tags which will be added to the machine and all dependent resources
+ which support them. These are in addition to Tags defined on the
+ cluster.
+ Requires Nova api 2.52 minimum!
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Trunk is a flag to indicate if the server instance is
+ created on a trunk port or not.
+ type: boolean
+ userDataRef:
+ description: |-
+ UserDataRef is a reference to a secret containing the user data to
+ be injected into the server instance.
+ properties:
+ 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
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - identityRef
+ - image
+ - ports
+ - sshKeyName
+ type: object
+ x-kubernetes-validations:
+ - message: at least one of flavor or flavorID must be set
+ rule: (has(self.flavor) || has(self.flavorID))
+ status:
+ description: OpenStackServerStatus defines the observed state of OpenStackServer.
+ properties:
+ addresses:
+ description: Addresses is the list of addresses of the server instance.
+ items:
+ description: NodeAddress contains information for the node's address.
+ properties:
+ address:
+ description: The node address.
+ type: string
+ type:
+ description: Node address type, one of Hostname, ExternalIP
+ or InternalIP.
+ type: string
+ required:
+ - address
+ - type
+ type: object
+ type: array
+ conditions:
+ description: Conditions defines current service state of the OpenStackServer.
+ items:
+ description: Condition defines an observation of a Cluster API resource
+ operational state.
+ properties:
+ lastTransitionTime:
+ description: |-
+ 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: |-
+ A human readable message indicating details about the transition.
+ This field may be empty.
+ type: string
+ reason:
+ description: |-
+ The reason for the condition's last transition in CamelCase.
+ The specific API may choose whether or not this field is considered a guaranteed API.
+ This field may be empty.
+ type: string
+ severity:
+ description: |-
+ severity provides an explicit classification of Reason code, so the users or machines can immediately
+ understand the current situation and act accordingly.
+ The Severity field MUST be set only when Status=False.
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ type: string
+ type:
+ description: |-
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
+ can be useful (see .node.status.conditions), the ability to deconflict is important.
+ type: string
+ required:
+ - lastTransitionTime
+ - status
+ - type
+ type: object
+ type: array
+ instanceID:
+ description: InstanceID is the ID of the server instance.
+ type: string
+ instanceState:
+ description: InstanceState is the state of the server instance.
+ type: string
+ ready:
+ default: false
+ description: Ready is true when the OpenStack server is ready.
+ type: boolean
+ resolved:
+ description: |-
+ Resolved contains parts of the machine spec with all external
+ references fully resolved.
+ properties:
+ flavorID:
+ description: FlavorID is the ID of the flavor to use.
+ type: string
+ imageID:
+ description: ImageID is the ID of the image to use for the server
+ and is calculated based on ImageFilter.
+ type: string
+ ports:
+ description: Ports is the fully resolved list of ports to create
+ for the server.
+ items:
+ description: ResolvedPortSpec is a PortOpts with all contained
+ references fully resolved.
+ properties:
+ adminStateUp:
+ description: AdminStateUp specifies whether the port should
+ be created in the up (true) or down (false) state. The
+ default is up.
+ type: boolean
+ allowedAddressPairs:
+ description: |-
+ AllowedAddressPairs is a list of address pairs which Neutron will
+ allow the port to send traffic from in addition to the port's
+ addresses. If not specified, the MAC Address will be the MAC Address
+ of the port. Depending on the configuration of Neutron, it may be
+ supported to specify a CIDR instead of a specific IP address.
+ items:
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is the IP address of the allowed address pair. Depending on
+ the configuration of Neutron, it may be supported to specify a CIDR
+ instead of a specific IP address.
+ type: string
+ macAddress:
+ description: |-
+ MACAddress is the MAC address of the allowed address pair. If not
+ specified, the MAC address will be the MAC address of the port.
+ type: string
+ required:
+ - ipAddress
+ type: object
+ type: array
+ description:
+ description: Description is a human-readable description
+ for the port.
+ type: string
+ disablePortSecurity:
+ description: |-
+ DisablePortSecurity enables or disables the port security when set.
+ When not set, it takes the value of the corresponding field at the network level.
+ type: boolean
+ fixedIPs:
+ description: FixedIPs is a list of pairs of subnet and/or
+ IP address to assign to the port. If specified, these
+ must be subnets of the port's network.
+ items:
+ description: ResolvedFixedIP is a FixedIP with the Subnet
+ resolved to an ID.
+ properties:
+ ipAddress:
+ description: |-
+ IPAddress is a specific IP address to assign to the port. If SubnetID
+ is also specified, IPAddress must be a valid IP address in the
+ subnet. If Subnet is not specified, IPAddress must be a valid IP
+ address in any subnet of the port's network.
+ type: string
+ subnet:
+ description: SubnetID is the id of a subnet to create
+ the fixed IP of a port in.
+ type: string
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ hostID:
+ description: HostID specifies the ID of the host where the
+ port resides.
+ type: string
+ macAddress:
+ description: MACAddress specifies the MAC address of the
+ port. If not specified, the MAC address will be generated.
+ type: string
+ name:
+ description: Name is the name of the port.
+ type: string
+ networkID:
+ description: NetworkID is the ID of the network the port
+ will be created in.
+ type: string
+ profile:
+ description: |-
+ Profile is a set of key-value pairs that are used for binding
+ details. We intentionally don't expose this as a map[string]string
+ because we only want to enable the users to set the values of the
+ keys that are known to work in OpenStack Networking API. See
+ https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
+ To set profiles, your tenant needs permissions rule:create_port, and
+ rule:create_port:binding:profile
+ properties:
+ ovsHWOffload:
+ description: |-
+ OVSHWOffload enables or disables the OVS hardware offload feature.
+ This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
+ See: https://bugs.launchpad.net/nova/+bug/2020813
+ type: boolean
+ trustedVF:
+ description: TrustedVF enables or disables the “trusted
+ mode” for the VF.
+ type: boolean
+ type: object
+ propagateUplinkStatus:
+ description: PropageteUplinkStatus enables or disables the
+ propagate uplink status on the port.
+ type: boolean
+ securityGroups:
+ description: SecurityGroups is a list of security group
+ IDs to assign to the port.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ tags:
+ description: Tags applied to the port (and corresponding
+ trunk, if a trunk is configured.)
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: set
+ trunk:
+ description: Trunk specifies whether trunking is enabled
+ at the port level.
+ type: boolean
+ valueSpecs:
+ description: |-
+ Value specs are extra parameters to include in the API request with OpenStack.
+ This is an extension point for the API, so what they do and if they are supported,
+ depends on the specific OpenStack implementation.
+ items:
+ description: ValueSpec represents a single value_spec
+ key-value pair.
+ properties:
+ key:
+ description: Key is the key in the key-value pair.
+ type: string
+ name:
+ description: |-
+ Name is the name of the key-value pair.
+ This is just for identifying the pair and will not be sent to the OpenStack API.
+ type: string
+ value:
+ description: Value is the value in the key-value pair.
+ type: string
+ required:
+ - key
+ - name
+ - value
+ type: object
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ vnicType:
+ description: |-
+ VNICType specifies the type of vNIC which this port should be
+ attached to. This is used to determine which mechanism driver(s) to
+ be used to bind the port. The valid values are normal, macvtap,
+ direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
+ remote-managed, although these values will not be validated in this
+ API to ensure compatibility with future neutron changes or custom
+ implementations. What type of vNIC is actually available depends on
+ deployments. If not specified, the Neutron default value is used.
+ type: string
+ required:
+ - description
+ - name
+ - networkID
+ type: object
+ type: array
+ serverGroupID:
+ description: ServerGroupID is the ID of the server group the server
+ should be added to and is calculated based on ServerGroupFilter.
+ type: string
+ type: object
+ resources:
+ description: Resources contains references to OpenStack resources
+ created for the machine.
+ properties:
+ ports:
+ description: Ports is the status of the ports created for the
+ server.
+ items:
+ properties:
+ id:
+ description: ID is the unique identifier of the port.
+ type: string
+ required:
+ - id
+ type: object
+ type: array
+ type: object
+ required:
+ - ready
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: null
+ storedVersions: null
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-manager
+ namespace: capo-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-leader-election-role
+ namespace: capo-system
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+- apiGroups:
+ - ""
+ resources:
+ - configmaps/status
+ verbs:
+ - get
+ - update
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+- apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - get
+ - list
+ - watch
+ - create
+ - update
+ - patch
+ - delete
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-manager-role
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - secrets
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+- apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+- apiGroups:
+ - cluster.x-k8s.io
+ resources:
+ - clusters
+ - clusters/status
+ - machines
+ - machines/status
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ resources:
+ - openstackclusters
+ - openstackfloatingippools
+ - openstackmachines
+ - openstackservers
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ resources:
+ - openstackclusters/status
+ - openstackfloatingippools/status
+ - openstackmachines/status
+ - openstackservers/status
+ verbs:
+ - get
+ - patch
+ - update
+- apiGroups:
+ - ipam.cluster.x-k8s.io
+ resources:
+ - ipaddressclaims
+ - ipaddressclaims/status
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ipam.cluster.x-k8s.io
+ resources:
+ - ipaddresses
+ - ipaddresses/status
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - update
+ - watch
+- apiGroups:
+ - openstack.k-orc.cloud
+ resources:
+ - images
+ verbs:
+ - get
+ - list
+ - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-leader-election-rolebinding
+ namespace: capo-system
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: capo-leader-election-role
+subjects:
+- kind: ServiceAccount
+ name: capo-manager
+ namespace: capo-system
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-manager-rolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: capo-manager-role
+subjects:
+- kind: ServiceAccount
+ name: capo-manager
+ namespace: capo-system
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-webhook-service
+ namespace: capo-system
+spec:
+ ports:
+ - port: 443
+ targetPort: webhook-server
+ selector:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ control-plane: capo-controller-manager
+ name: capo-controller-manager
+ namespace: capo-system
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ control-plane: capo-controller-manager
+ strategy: {}
+ template:
+ metadata:
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ control-plane: capo-controller-manager
+ spec:
+ containers:
+ - args:
+ - --leader-elect
+ - --v=2
+ - --diagnostics-address=127.0.0.1:8080
+ - --insecure-diagnostics=true
+ command:
+ - /manager
+ image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.12.1
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: healthz
+ name: manager
+ ports:
+ - containerPort: 9443
+ name: webhook-server
+ protocol: TCP
+ - containerPort: 9440
+ name: healthz
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ path: /readyz
+ port: healthz
+ resources: {}
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ privileged: false
+ runAsGroup: 65532
+ runAsUser: 65532
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /tmp/k8s-webhook-server/serving-certs
+ name: cert
+ readOnly: true
+ securityContext:
+ runAsNonRoot: true
+ seccompProfile:
+ type: RuntimeDefault
+ serviceAccountName: capo-manager
+ terminationGracePeriodSeconds: 10
+ tolerations:
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ volumes:
+ - name: cert
+ secret:
+ defaultMode: 420
+ secretName: capo-webhook-service-cert
+status: {}
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+ annotations:
+ cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
+ creationTimestamp: null
+ labels:
+ cluster.x-k8s.io/provider: infrastructure-openstack
+ clusterctl.cluster.x-k8s.io: ""
+ name: capo-validating-webhook-configuration
+webhooks:
+- admissionReviewVersions:
+ - v1beta1
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackcluster
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.openstackcluster.infrastructure.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - openstackclusters
+ sideEffects: None
+- admissionReviewVersions:
+ - v1beta1
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackclustertemplate
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.openstackclustertemplate.infrastructure.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - openstackclustertemplates
+ sideEffects: None
+- admissionReviewVersions:
+ - v1beta1
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackmachine
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.openstackmachine.infrastructure.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - openstackmachines
+ sideEffects: None
+- admissionReviewVersions:
+ - v1beta1
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackmachinetemplate
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.openstackmachinetemplate.infrastructure.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ apiVersions:
+ - v1beta1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - openstackmachinetemplates
+ sideEffects: None
+- admissionReviewVersions:
+ - v1beta1
+ clientConfig:
+ service:
+ name: capo-webhook-service
+ namespace: capo-system
+ path: /validate-infrastructure-cluster-x-k8s-io-v1alpha1-openstackserver
+ failurePolicy: Fail
+ matchPolicy: Equivalent
+ name: validation.openstackserver.infrastructure.cluster.x-k8s.io
+ rules:
+ - apiGroups:
+ - infrastructure.cluster.x-k8s.io
+ apiVersions:
+ - v1alpha1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - openstackservers
+ sideEffects: None