Skip to content

Serve the Kubernetes API: a Day-2 collection cannot exercise a single k8s module #763

Description

@stephrobert

stephrobert.scaleway ships twenty Kubernetes modules as of its 0.8.0 cycle, and
none of them can be exercised against feint. Measured today:

GET http://127.0.0.1:4899/instance/v1/zones/fr-par-1/servers  -> 200
GET http://127.0.0.1:4899/k8s/v1/regions/fr-par/clusters      -> 501
{"type":"not_emulated","message":"feint does not serve /k8s/v1/regions/fr-par/clusters; see /_feint/routes for what it does"}

The 501 with not_emulated is exactly the right answer, and it is what let this
be measured in one command rather than guessed. This issue is about closing the
gap, not about the refusal.

What the collection would exercise

The read side is what matters most, because it is what a Day-2 collection is
made of. In rough order of value:

ListClusters · GetCluster                    the fleet of clusters
ListPools · GetPool                          what each cluster runs on
ListNodes · GetNode                          the nodes, and their status
ListVersions · ListClusterAvailableVersions  version drift, computed rather than guessed
ListClusterACLRules                          who can reach the control plane

The last two are the interesting ones. ListClusterAvailableVersions next to
GetCluster.version is what makes "am I behind" a measurement rather than an
impression, and nobody serves that question today: the official Scaleway
collection creates clusters and offers nothing to operate them afterwards.

The write side that would follow: UpgradeCluster, UpgradePool, RebootNode,
ReplaceNode, ResetClusterAdminToken, SetPoolTaints, UpdateCluster,
UpdatePool.

What would make it useful even in a first pass

Clusters and pools with a status that moves, the way Instances do. A cluster that
is ready the instant it is created would hide exactly the class of defect an
emulator is worth having for: an operation that waits on a state it never sees.

ListClusterAvailableVersions returning something other than the cluster's own
version, so a drift rule has something to find.

Why this is filed rather than worked around

The collection declares the gap rather than skipping it: the twenty modules are
listed as having no target, with this measurement as the reason, and the entry
reopens at its 0.9.0. The alternative is a Kapsule cluster on a real billed
account for every example run, which is tracked separately on our side.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions