<p>Basically, a Node is just a simple worker OpenShift (or Kubernetes) instance where OpenShift can schedule Pods.</p>

<p><code>Machine</code> is a new API introduce by OpenShift 4 that manage dynamic instance provisioning on top of public (AWS, Azure...) or private (OpenStack, VMWare...) cloud provider.</p>

CC BY-SA 4.0
2020-03-07T09:39:39.630Z
2020-03-07T09:39:39.630Z
Hedi Nasr
<p>Your interpretation is correct:</p>

<blockquote>
  <p>My current understanding is that a machine represents a raw physical or virtual machine; just the computational resources like cpu, memory and storage. Nodes, then, would represent a machine that is configured for using with OpenShift, that is, a machine that contains the services necessary to run pods and is managed by the master components.</p>
</blockquote>

<p>The differences arise on the level of abstraction.</p>

<ul>
<li><p>A Node in OpenShift is exactly the same thing as a Kubernetes node. It refers to the abstraction of a worker/master "Node" in a "Cluster". The Node abstraction only exists within the boundaries of a running cluster.</p></li>
<li><p>A Machine is an abstraction introduced by the <a href="https://github.com/kubernetes-sigs/cluster-api" rel="nofollow noreferrer">Cluster API</a> which is an ongoing effort to allow deploying K8S clusters using a declarative approach. OpenShift is currently adopting the Cluster API hence they expect you to define the host infrastructure required to run your Nodes using the Machine spec.</p></li>
</ul>

CC BY-SA 4.0
2021-07-24T18:37:42.473Z
just a suggestion to add a link to the Concepts page of the book, and perhaps a bit of its description of the Machine concept:

https://cluster-api.sigs.k8s.io/user/concepts.html
caxcaxcoatl
CC BY-SA 4.0
2020-03-11T20:30:14.640Z
2020-03-11T20:30:14.640Z
davidmontoyago
<p>OpenShift 4.2 documentation defines:</p>

<blockquote>
  <p><strong>Machines</strong></p>
  
  <p>A fundamental unit that describes the host for a Node. A machine has a providerSpec, which describes the types of compute nodes that
  are offered for different cloud platforms. For example, a machine type
  for a worker node on Amazon Web Services (AWS) might define a specific
  machine type and required metadata.</p>
</blockquote>

<p><a href="https://docs.openshift.com/container-platform/4.1/machine_management/creating-machineset.html" rel="nofollow noreferrer">https://docs.openshift.com/container-platform/4.1/machine_management/creating-machineset.html</a></p>

<p>While Kubernetes doc defines:</p>

<blockquote>
  <p><strong>Nodes</strong></p>
  
  <p>A node is a worker machine in Kubernetes, previously known as a
  minion. A node may be a VM or physical machine, depending on the
  cluster. Each node contains the services necessary to run pods and is
  managed by the master components. The services on a node include the
  container runtime, kubelet and kube-proxy. See The Kubernetes Node
  section in the architecture design doc for more details.</p>
</blockquote>

<p><a href="https://kubernetes.io/docs/concepts/architecture/nodes/" rel="nofollow noreferrer">https://kubernetes.io/docs/concepts/architecture/nodes/</a></p>

<p>I don't know whether Kubernetes has the concept of <em>machines</em>, and I can't find on OpenShift's documentation its own definition of <em>node</em> (perhaps it uses Kubernetes'?)</p>

<p>And I can't get what's the difference between them.  My current understanding is that a machine represents a raw physical or virtual machine; just the computational resources like cpu, memory and storage.  Nodes, then, would represent a machine that is configured for using with OpenShift, that is, a machine that <em>contains the services necessary to run pods and is managed by the master components</em>.</p>

<p>Another theory would be that machines are just an abstraction to the existing infrastructure, so that persistent labels can be assigned to them for organizing the infrastructure, and as a way to provide information on the underlying infrastructure properties for the nodes.</p>

<p>So...  What is really the difference between nodes and machines?  Is a node in OpenShift exactly the same thing as in Kubernetes?</p>

<kubernetes><openshift>
What is the difference between a node and a machine on OpenShift?
caxcaxcoatl
# What is the difference between a node and a machine on OpenShift?

(Asked by: username_0 on 2020-03-07)

OpenShift 4.2 documentation defines:

> **Machines**
>
> A fundamental unit that describes the host for a Node. A machine has a providerSpec, which describes the types of compute nodes that
> are offered for different cloud platforms. For example, a machine type
> for a worker node on Amazon Web Services (AWS) might define a specific
> machine type and required metadata.

<https://docs.openshift.com/container-platform/4.1/machine_management/creating-machineset.html>

While Kubernetes doc defines:

> **Nodes**
>
> A node is a worker machine in Kubernetes, previously known as a
> minion. A node may be a VM or physical machine, depending on the
> cluster. Each node contains the services necessary to run pods and is
> managed by the master components. The services on a node include the
> container runtime, kubelet and kube-proxy. See The Kubernetes Node
> section in the architecture design doc for more details.

<https://kubernetes.io/docs/concepts/architecture/nodes/>

I don't know whether Kubernetes has the concept of *machines*, and I can't find on OpenShift's documentation its own definition of *node* (perhaps it uses Kubernetes'?)

And I can't get what's the difference between them. My current understanding is that a machine represents a raw physical or virtual machine; just the computational resources like cpu, memory and storage. Nodes, then, would represent a machine that is configured for using with OpenShift, that is, a machine that *contains the services necessary to run pods and is managed by the master components*.

Another theory would be that machines are just an abstraction to the existing infrastructure, so that persistent labels can be assigned to them for organizing the infrastructure, and as a way to provide information on the underlying infrastructure properties for the nodes.

So... What is really the difference between nodes and machines? Is a node in OpenShift exactly the same thing as in Kubernetes?

**Tags:** kubernetes, openshift


---

## 2 answers

### Answer by username_2 on 2020-03-11. Score: 3 | Accepted answer

Your interpretation is correct:

> My current understanding is that a machine represents a raw physical or virtual machine; just the computational resources like cpu, memory and storage. Nodes, then, would represent a machine that is configured for using with OpenShift, that is, a machine that contains the services necessary to run pods and is managed by the master components.

The differences arise on the level of abstraction.

* A Node in OpenShift is exactly the same thing as a Kubernetes node. It refers to the abstraction of a worker/master "Node" in a "Cluster". The Node abstraction only exists within the boundaries of a running cluster.
* A Machine is an abstraction introduced by the [Cluster API](https://github.com/kubernetes-sigs/cluster-api) which is an ongoing effort to allow deploying K8S clusters using a declarative approach. OpenShift is currently adopting the Cluster API hence they expect you to define the host infrastructure required to run your Nodes using the Machine spec.

> **Comments:**
> **username_0**: just a suggestion to add a link to the Concepts page of the book, and perhaps a bit of its description of the Machine concept:  https://cluster-api.sigs.k8s.io/user/concepts.html  

---

### Answer by username_1 on 2020-03-07. Score: 1

Basically, a Node is just a simple worker OpenShift (or Kubernetes) instance where OpenShift can schedule Pods.

`Machine` is a new API introduce by OpenShift 4 that manage dynamic instance provisioning on top of public (AWS, Azure...) or private (OpenStack, VMWare...) cloud provider.


---

