Documentation ¶
Overview ¶
+groupName=machine.k8s.io
Package v1alpha1 contains types to represent Kubernetes cluster and machine configuration.
Index ¶
Constants ¶
const ( MasterRole = "Master" NodeRole = "Node" )
const GroupName = "machine.k8s.io"
GroupName is the group name use in this package
const GroupVersion = "v1alpha1"
const MachineResourcePlural = "machines"
Variables ¶
var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) AddToScheme = SchemeBuilder.AddToScheme )
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: GroupVersion}
SchemeGroupVersion is group version used to register these objects
Functions ¶
func Resource ¶
func Resource(resource string) schema.GroupResource
Resource takes an unqualified resource and returns a Group qualified GroupResource
Types ¶
type Machine ¶
type Machine struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata"` Spec MachineSpec `json:"spec"` Status MachineStatus `json:"status,omitempty"` }
Machine represents a single Node that should exist (whether it does or not yet). In this model, there is no grouping of nodes to scale with a numeric field. Each Machine exists independently, and grouping can only be inferred via label selectors.
In order for a new Node to be created, one can generically create a new Machine object, possibly copying the spec from an existing Machine or a template. To scale down the cluster, delete specific instances of Machines and the underlying Nodes will be unregistered/deprovisioned. Separate provider-specific controllers will watch Machine objects they can act on (like a GCE cloud controller watching for only Machines destined for GCE) and take the appropriate actions.
Any updates to the MachineSpec will be actuated to change the Node in place or replace the Node with one conforming to the spec. In this model, the fact that a controller is able to upgrade a node via in-place upgrades or via a cloud replacement is an implementation detail without API controls.
It is recommended, but not required, that provider-specific controllers add finalizers to Machine objects so that they can be triggered on deletion to release the necessary external resources, reporting any errors encountered.
func (*Machine) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Machine.
func (*Machine) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*Machine) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type MachineList ¶
type MachineList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata"` Items []Machine `json:"items"` }
+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
func (*MachineList) DeepCopy ¶
func (in *MachineList) DeepCopy() *MachineList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineList.
func (*MachineList) DeepCopyInto ¶
func (in *MachineList) DeepCopyInto(out *MachineList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*MachineList) DeepCopyObject ¶
func (in *MachineList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type MachineRole ¶
type MachineRole string
The MachineRole indicates the purpose of the Machine, and will determine what software and configuration will be used when provisioning and managing the Machine. A single Machine may have more than one role, and the list and definitions of supported roles is expected to evolve over time.
Currently, only two roles are supported: Master and Node. In the future, we expect user needs to drive the evolution and granularity of these roles, with new additions accommodating common cluster patterns, like dedicated etcd Machines.
+-----------------------+------------------------+ | Master present | Master absent |
+---------------+-----------------------+------------------------| | Node present: | Install control plane | Join the cluster as | | | and be schedulable | just a node | |---------------+-----------------------+------------------------| | Node absent: | Install control plane | Invalid configuration | | | and be unscheduleable | | +---------------+-----------------------+------------------------+
type MachineSpec ¶
type MachineSpec struct { // This ObjectMeta will autopopulate the Node created. Use this to // indicate what labels, annotations, etc., should be used when // creating the Node. // +optional metav1.ObjectMeta `json:"metadata,omitempty"` // The full, authoritative list of taints to apply to the corresponding // Node. This list will overwrite any modifications made to the Node on // an ongoing basis. // +optional Taints []corev1.Taint `json:"taints,omitempty"` // Provider-specific serialized configuration to use during node // creation. It is recommended that providers maintain their own // versioned API types that should be serialized/deserialized from this // field, akin to component config. // +optional ProviderConfig runtime.RawExtension `json:"providerConfig"` // A list of roles for this Machine to use. Roles []MachineRole `json:"roles,omitempty"` // Versions of key software to use. This field is optional at cluster // creation time, and omitting the field indicates that the cluster // installation tool should select defaults for the user. These // defaults may differ based on the cluster installer, but the tool // should populate the values it uses when persisting Machine objects. // A Machine spec missing this field at runtime is invalid. // +optional Versions MachineVersionInfo `json:"versions,omitempty"` // To populate in the associated Node for dynamic kubelet config. This // field already exists in Node, so any updates to it in the Machine // spec will be automatically copied to the linked NodeRef from the // status. The rest of dynamic kubelet config support should then work // as-is. // +optional ConfigSource *corev1.NodeConfigSource `json:"configSource,omitempty"` }
func (*MachineSpec) DeepCopy ¶
func (in *MachineSpec) DeepCopy() *MachineSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineSpec.
func (*MachineSpec) DeepCopyInto ¶
func (in *MachineSpec) DeepCopyInto(out *MachineSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MachineStatus ¶
type MachineStatus struct { // If the corresponding Node exists, this will point to its object. // +optional NodeRef *corev1.ObjectReference `json:"nodeRef,omitempty"` // When was this status last observed // +optional LastUpdated metav1.Time `json:"lastUpdated,omitempty"` // The current versions of software on the corresponding Node (if it // exists). This is provided for a few reasons: // // 1) It is more convenient than checking the NodeRef, traversing it to // the Node, and finding the appropriate field in Node.Status.NodeInfo // (which uses different field names and formatting). // 2) It removes some of the dependency on the structure of the Node, // so that if the structure of Node.Status.NodeInfo changes, only // machine controllers need to be updated, rather than every client // of the Machines API. // 3) There is no other way simple way to check the ControlPlane // version. A client would have to connect directly to the apiserver // running on the target node in order to find out its version. // +optional Versions *MachineVersionInfo `json:"versions,omitempty"` // In the event that there is a terminal problem reconciling the // Machine, both ErrorReason and ErrorMessage will be set. ErrorReason // will be populated with a succinct value suitable for machine // interpretation, while ErrorMessage 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 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. // +optional ErrorReason *MachineStatusError `json:"errorReason,omitempty"` // +optional ErrorMessage *string `json:"errorMessage,omitempty"` }
func (*MachineStatus) DeepCopy ¶
func (in *MachineStatus) DeepCopy() *MachineStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineStatus.
func (*MachineStatus) DeepCopyInto ¶
func (in *MachineStatus) DeepCopyInto(out *MachineStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type MachineStatusError ¶
type MachineStatusError string
const ( // Represents that the combination of configuration in the MachineSpec // is not supported by this cluster. This is not a transient error, but // indicates a state that must be fixed before progress can be made. // // Example: the ProviderConfig specifies an instance type that doesn't exist, InvalidConfigurationMachineError MachineStatusError = "InvalidConfiguration" // This indicates that the MachineSpec has been updated in a way that // is not supported for reconciliation on this cluster. The spec may be // completely valid from a configuration standpoint, but the controller // does not support changing the real world state to match the new // spec. // // Example: the responsible controller is not capable of changing the // container runtime from docker to rkt. UnsupportedChangeMachineError MachineStatusError = "UnsupportedChange" // This generally refers to exceeding one's quota in a cloud provider, // or running out of physical machines in an on-premise environment. InsufficientResourcesMachineError MachineStatusError = "InsufficientResources" // There was an error while trying to create a Node to match this // Machine. This may indicate a transient problem that will be fixed // automatically with time, such as a service outage, or a terminal // error during creation that doesn't match a more specific // MachineStatusError value. // // Example: timeout trying to connect to GCE. CreateMachineError MachineStatusError = "CreateError" // An error was encountered while trying to delete the Node that this // Machine represents. This could be a transient or terminal error, but // will only be observable if the provider's Machine controller has // added a finalizer to the object to more gracefully handle deletions. // // Example: cannot resolve EC2 IP address. DeleteMachineError MachineStatusError = "DeleteError" )
type MachineVersionInfo ¶
type MachineVersionInfo struct { // Semantic version of kubelet to run Kubelet string `json:"kubelet"` // Semantic version of the Kubernetes control plane to // run. This should only be populated when the machine is a // master. // +optional ControlPlane string `json:"controlPlane,omitempty"` }
func (*MachineVersionInfo) DeepCopy ¶
func (in *MachineVersionInfo) DeepCopy() *MachineVersionInfo
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineVersionInfo.
func (*MachineVersionInfo) DeepCopyInto ¶
func (in *MachineVersionInfo) DeepCopyInto(out *MachineVersionInfo)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.