Kubernetes Cluster

In this example the Digraph has a top to bottom direction as defined by the rankdir variable.

The following image:

was generated with this code:

require 'diagrams-rb'

# Kubernetes Cluster
module Diagrams
  Digraph.new(rankdir: 'TB', ranksep: 1.1, pad: 0.1) do # rubocop:disable Metrics/BlockLength
    cluster 'CLUSTER', fontsize: '18', fontcolor: '"#326CE5"' do
      cluster 'Node 1', margin: 30 do
        node :node_n1, label: '', icon: K8s::Infra.node
        node :kubelet_n1, label: 'kubelet', icon: K8s::Controlplane.kubelet
        node :kube_proxy_n1, label: 'kube-proxy', icon: K8s::Controlplane.k_proxy
        cluster do
          node :pod1_n1, label: '', icon: K8s::Compute.pod
          node :pod2_n1, label: 'CRI', icon: K8s::Compute.pod, fontsize: '16', fontcolor: '"#326CE5"'
          node :pod3_n1, label: '', icon: K8s::Compute.pod
        end
      end

      cluster 'Node 2', margin: 30 do
        node :node_n2, label: '', icon: K8s::Infra.node
        node :kubelet_n2, label: 'kubelet', icon: K8s::Controlplane.kubelet
        node :kube_proxy_n2, label: 'kube-proxy', icon: K8s::Controlplane.k_proxy
        cluster do
          node :pod1_n2, label: 'CRI', icon: K8s::Compute.pod, fontsize: '16', fontcolor: '"#326CE5"'
        end
      end

      cluster 'CONTROL PLANE', fontsize: '18', fontcolor: '"#326CE5"' do
        node :ccm, label: 'cloud-control-manager', icon: K8s::Controlplane.c_c_m
        node :etcd, label: 'etcd', icon: K8s::Infra.etcd
        node :api, label: 'kube-api-server', icon: K8s::Controlplane.api
        node :sched, label: 'scheduler', icon: K8s::Controlplane.sched
        node :cm, label: 'Controller Manager', icon: K8s::Controlplane.c_m
      end
    end

    n1 = %i[kubelet_n1 kube_proxy_n1]
    n2 = %i[kubelet_n2 kube_proxy_n2]
    edge n1, to: :pod2_n1, constraint: 'false', rank: 'min'
    edge :kubelet_n1, to: :api, constraint: 'false'
    edge :kube_proxy_n1, to: :api, style: 'dashed', constraint: 'false'
    edge n2, to: :pod1_n2, constraint: 'false'
    edge :kubelet_n2, to: :api, constraint: 'false'
    edge :kube_proxy_n2, to: :api, style: 'dashed', constraint: 'false'
    edge :ccm, to: :api
    edge :etcd, to: :api
    edge :sched, to: :api
    edge :cm, to: :api
    edge :kubelet_n1, to: :kube_proxy_n1, style: 'invis'
    edge :kubelet_n2, to: :kube_proxy_n2, style: 'invis'
  end
end

Architecture diagram taken from the Kubernetes documentation