platform9 / cctl

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Set kubeadm properties previously set by nodeadm

dlipovetsky opened this issue · comments

After platform9/nodeadm#77, nodeadm no longer sets a number of kubeadm properties. To make sure these properties continue to be set for cctl users, they must be set by cctl; the machine actuator will apply the properties to the nodeadm config it writes to the host.

  1. Node has no taints: MasterConfiguration.NodeRegistration.Taints = []corev1.Taint{} // empty slice denotes no taints
  2. Set feature gates on the control plane components.
  3. Node name should be the IP (to be made configurable in the future)
  4. Kubelet configuration
	FailSwapOn       bool
	MaxPods          int32
	ClusterDNS       string
	ClusterDomain    string
	HostnameOverride string
	KubeAPIQPS       int32
	KubeAPIBurst     int32
	EvictionHard     string
	FeatureGates     string
	CPUManagerPolicy string
	KubeReserved     string
  • Set Machine.Spec.Taints = []corev1.Taint{} (This did not work--see the problem and workaround in platform9/ssh-provider#63)
  • Enable ExperimentalCriticalPodAnnotation and PodPriority. Set feature gates on kubelet and control plane:
Cluster.ProviderSpec.ClusterConfig.KubeletConfiguration.FeatureGates
Cluster.ProviderSpec.ClusterConfig.KubeAPIServer["feature-gates"]
Cluster.ProviderSpec.ClusterConfig.KubeControllerManager["feature-gates"]
Cluster.ProviderSpec.ClusterConfig.KubeScheduler["feature-gates"]

(We do not the experimental critical pod annotation feature, as pod priority is in beta in 1.11 and enabled by default for all components except Kubelet. The control plane pods have a pod priority defined, but CoreDNS needs one defined.

  • Set Machine.Name to the IP (no change required)
  • Set
Cluster.ProviderSpec.ClusterConfig.KubeletConfiguration.EvictionHard

Note that ssh-provider will derive ClusterDNS from the Pods CIDR (Cluster.Spec.Pods.CIDRBlocks[0]), and ClusterDomain from Cluster.Spec.ServiceDomain.

Note that CPUManagerPolicy and KubeReserved do not need to be set because they are the default values.

Note that these are already set by cctl:

Cluster.ProviderSpec.ClusterConfig.KubeletConfiguration.FailSwapOn
Cluster.ProviderSpec.ClusterConfig.KubeletConfiguration.MaxPods
Cluster.ProviderSpec.ClusterConfig.KubeletConfiguration.KubeAPIQPS
Cluster.ProviderSpec.ClusterConfig.KubeletConfiguration.KubeAPIBurst