K8s does not store any graph model internally.
The relationship engine in Cyphernetes is comparing fields that should either match/contain all/etc. between two resources - for example a ResplicaSet's .metadata.ownerReferences[].name matches a Deployment's .metadata.name, or a Deployment's .metadata.labels contains all of a Service's spec.selector.
These rules are used both to read the resources but also for creating them. Each rule may also contain a set of default properties which are used in create operations - for instance:
Will create a clusterIp Service (similar to what `kubectl expose` does).
Doing this with kubectl or programmatically without tuning for rate limiting, implementing caching etc. of course fails even at a very small scale - Cyphernetes has its own request throttling and caching layer to make this possible.
These rules are used both to read the resources but also for creating them. Each rule may also contain a set of default properties which are used in create operations - for instance:
`MATCH (d:Deployment {name: "nginx"}) CREATE (d)->(s:Service)`
Will create a clusterIp Service (similar to what `kubectl expose` does).
Doing this with kubectl or programmatically without tuning for rate limiting, implementing caching etc. of course fails even at a very small scale - Cyphernetes has its own request throttling and caching layer to make this possible.