instruction: Create a comprehensive Dockerfile for cluster applications with best practices
output: ```dockerfile
  from placing new pods onto
  that Node but does not affect existing Pods on the Node. This is useful as a
  preparatory step before a node reboot or other maintenance.
  To mark a Node unschedulable, run:
  kubectl cordon $NODENAME
  See Safely Drain a Node
  for more details.
  
  Note: Pods that are part of a DaemonSet tolerate
  being run on an unschedulable Node. DaemonSets typically provide node-local services
  that should run on the Node even if it is being drained of workload applications.
  
  Node status
  A Node's status contains the following information:
  
  Addresses
  Conditions
  Capacity and Allocatable
  Info
  
  You can use kubectl to view a Node's status and other details:
  kubectl describe node <insert-node-name-here>
  See Node Status for more details.
  Node heartbeats
  Heartbeats, sent by Kubernetes nodes, help your cluster determine the
  availability of each node, and to take action when failures are detected.
  For nodes there are two forms of heartbeats:
  
  Updates to the .status of a Node.
  Lease objects
  within the kube-node-lease
  namespace.
  Each Node has an associated Lease object.
  
  Node controller
  The node controller is a
  Kubernetes control plane component that manages various aspects of nodes.
  The node controller has multiple roles in a node's life. The first is assigning a
  CIDR block to the node when it is registered (if CIDR assignment is turned on).
  The second is keeping the node controller's internal list of nodes up to date with
  the cloud provider's list of available machines. When running in a cloud
  environment and whenever a node is unhealthy, the node controller asks the cloud
  provider if the VM for that node is still available. If not, the node
  controller deletes the node
  ```