The rolling-update requires the apiserver (when called without --cloudonly),
so reconcile should wait for apiserver to start responding.
Implement this by reusing "validate cluster", but filtering to only the instance groups
and pods that we expect to be online.
This should allow us to build our own rest config in future,
rather than relying on the kubeconfig being configured correctly.
To do this, we need to stop sharing the factory between the channels
and kops commands.
We want to be able to use "dns=none" (without peer-to-peer gossip)
even for clusters that have the k8s.local extension. These were
previously called "gossip clusters", but really that is an
implementation; what actually matters to users is that they don't rely
on writing records into a DNS zone (such as Route53).
Ensure apiserver role can only be used on AWS (because of firewalling)
Apply api-server label to CP as well
Consolidate node not ready validation message
Guard apiserver nodes with a feature flag
Rename Apiserver role to APIServer
Add an integration test for apiserver nodes
Rename Apiserver role to APIServer
Enumerate all roles in rolling update docs
Apply suggestions from code review
Co-authored-by: Steven E. Harris <seh@panix.com>
We are now able to identify the instance group associated with a pod.
Add an extra layer to the validatePodFailure to the test where we
create a mock InstanceGroup and associate the pod failures with the
instance group to which the pod belongs to.
In the ValidationError struct, there is a field to identify the instance group to
which the ValidationError is associated with.
For pod related ValidationErrors, it is not straightforward to identify the
instance group to which the pod is associated with.
To acheive this, we create a node to instance group mapping in ValidateNodes.
This node to instance group mapping is used in collectPodFailures to identify the
pod instance group by using the pod's hostIp field.
We don't associate system-cluster-critical pods to instance groups as those pod
failures are cluster wide
The InstanceGroup field in ValidationError struct is an optional field meant
to indicate the InstanceGroup which has reported that failure. This field either
holds a pointer to the instance group which caused the validation error or can be
nil which indicates that we were unable to determine the instance group to which
this failure should be attributed to.
This field is mainly used to identify whether a failure is worth waiting for
when validating a particular instance group.
The client-go signature for most methods adds a context.Context
object, and also makes Options mandatory. Feed through a
context.Context through many of our methods (but use context.TODO to
stop it getting totally out of hand!)