A node provides the runtime environments for containers. Each node in a
Kubernetes cluster has the required services to be managed by the
master. Nodes also have the required services to run pods,
including the Docker service, a kubelet, and a service proxy.
OpenShift Enterprise creates nodes from a cloud provider, physical systems, or virtual
systems. Kubernetes interacts with node objects
that are a representation of those nodes. The master uses the information from
node objects to validate nodes with health checks. A node is ignored until it
passes the health checks, and the master continues checking nodes until they are
valid. The
Kubernetes documentation has more information on node management.
|
The recommended maximum number of nodes is 300.
|
Kubelet
Each node has a kubelet that updates the node as specified by a container
manifest, which is a YAML file that describes a pod. The kubelet uses a set of
manifests to ensure that its containers are started and that they
continue to run. A sample manifest can be found in the
Kubernetes documentation.
A container manifest can be provided to a kubelet by:
-
A file path on the command line that is checked every 20 seconds.
-
An HTTP endpoint passed on the command line that is checked every 20 seconds.
-
The kubelet watching an etcd server, such as /registry/hosts/$(hostname -f), and acting on any changes.
-
The kubelet listening for HTTP and responding to a simple API to submit a new
manifest.
service Proxy
Each node also runs a simple network proxy that reflects the services defined in
the API on that node. This allows the node to do simple TCP and UDP stream
forwarding across a set of back ends.
Node Object Definition
The following is an example node object definition in Kubernetes:
apiVersion: v1 (1)
kind: Node (2)
metadata:
creationTimestamp: null
labels: (3)
kubernetes.io/hostname: node1.example.com
name: node1.example.com (4)
spec:
externalID: node1.example.com (5)
status:
nodeInfo:
bootID: ""
containerRuntimeVersion: ""
kernelVersion: ""
kubeProxyVersion: ""
kubeletVersion: ""
machineID: ""
osImage: ""
systemUUID: ""
1 |
apiVersion defines the API version to use. |
2 |
kind set to Node identifies this as a definition for a node
object. |
3 |
metadata.labels lists any
labels that have been added
to the node. |
4 |
metadata.name is a required value that defines the name of the node
object. This value is shown in the NAME column when running the oc get nodes
command. |
5 |
spec.externalID defines the fully-qualified domain name where the node
can be reached. Defaults to the metadata.name value when empty. |