Skip to content

Commit

Permalink
add antiAffinity to virt pods
Browse files Browse the repository at this point in the history
  • Loading branch information
ksimon1 committed Apr 5, 2019
1 parent 6ae88dd commit b6546a2
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 13 deletions.
10 changes: 10 additions & 0 deletions manifests/generated/virt-api.yaml.in
Expand Up @@ -38,6 +38,16 @@ spec:
prometheus.kubevirt.io: ""
name: virt-api
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: kubevirt.io
operator: In
values:
- virt-api
topologyKey: kubernetes.io/hostname
containers:
- command:
- virt-api
Expand Down
10 changes: 10 additions & 0 deletions manifests/generated/virt-controller.yaml.in
Expand Up @@ -22,6 +22,16 @@ spec:
prometheus.kubevirt.io: ""
name: virt-controller
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: kubevirt.io
operator: In
values:
- virt-controller
topologyKey: kubernetes.io/hostname
containers:
- command:
- virt-controller
Expand Down
37 changes: 30 additions & 7 deletions pkg/virt-operator/creation/components/deployments.go
Expand Up @@ -180,7 +180,7 @@ func NewApiServerService(namespace string) *corev1.Service {
}
}

func newPodTemplateSpec(name string, repository string, version string, pullPolicy corev1.PullPolicy) (*corev1.PodTemplateSpec, error) {
func newPodTemplateSpec(name string, repository string, version string, pullPolicy corev1.PullPolicy, podAffinity *corev1.Affinity) (*corev1.PodTemplateSpec, error) {

tolerations, err := criticalAddonsToleration()
if err != nil {
Expand All @@ -200,6 +200,7 @@ func newPodTemplateSpec(name string, repository string, version string, pullPoli
Name: name,
},
Spec: corev1.PodSpec{
Affinity: podAffinity,
Containers: []corev1.Container{
{
Name: name,
Expand All @@ -211,9 +212,9 @@ func newPodTemplateSpec(name string, repository string, version string, pullPoli
}, nil
}

func newBaseDeployment(name string, namespace string, repository string, version string, pullPolicy corev1.PullPolicy) (*appsv1.Deployment, error) {
func newBaseDeployment(name string, namespace string, repository string, version string, pullPolicy corev1.PullPolicy, podAffinity *corev1.Affinity) (*appsv1.Deployment, error) {

podTemplateSpec, err := newPodTemplateSpec(name, repository, version, pullPolicy)
podTemplateSpec, err := newPodTemplateSpec(name, repository, version, pullPolicy, podAffinity)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -242,8 +243,30 @@ func newBaseDeployment(name string, namespace string, repository string, version
}, nil
}

func newPodAntiAffinity(key, topologyKey string, operator metav1.LabelSelectorOperator, values []string) *corev1.Affinity {
return &corev1.Affinity{
PodAntiAffinity: &corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{
{
LabelSelector: &metav1.LabelSelector{
MatchExpressions: []metav1.LabelSelectorRequirement{
{
Key: key,
Operator: operator,
Values: values,
},
},
},
TopologyKey: topologyKey,
},
},
},
}
}

func NewApiServerDeployment(namespace string, repository string, version string, pullPolicy corev1.PullPolicy, verbosity string) (*appsv1.Deployment, error) {
deployment, err := newBaseDeployment("virt-api", namespace, repository, version, pullPolicy)
podAntiAffinity := newPodAntiAffinity("kubevirt.io", "kubernetes.io/hostname", metav1.LabelSelectorOpIn, []string{"virt-api"})
deployment, err := newBaseDeployment("virt-api", namespace, repository, version, pullPolicy, podAntiAffinity)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -293,7 +316,8 @@ func NewApiServerDeployment(namespace string, repository string, version string,
}

func NewControllerDeployment(namespace string, repository string, version string, pullPolicy corev1.PullPolicy, verbosity string) (*appsv1.Deployment, error) {
deployment, err := newBaseDeployment("virt-controller", namespace, repository, version, pullPolicy)
podAntiAffinity := newPodAntiAffinity("kubevirt.io", "kubernetes.io/hostname", metav1.LabelSelectorOpIn, []string{"virt-controller"})
deployment, err := newBaseDeployment("virt-controller", namespace, repository, version, pullPolicy, podAntiAffinity)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -354,8 +378,7 @@ func NewControllerDeployment(namespace string, repository string, version string
}

func NewHandlerDaemonSet(namespace string, repository string, version string, pullPolicy corev1.PullPolicy, verbosity string) (*appsv1.DaemonSet, error) {

podTemplateSpec, err := newPodTemplateSpec("virt-handler", repository, version, pullPolicy)
podTemplateSpec, err := newPodTemplateSpec("virt-handler", repository, version, pullPolicy, nil)
if err != nil {
return nil, err
}
Expand Down
9 changes: 3 additions & 6 deletions pkg/virt-operator/util/readycheck.go
Expand Up @@ -88,12 +88,9 @@ func DeploymentIsReady(kv *v1.KubeVirt, deployment *appsv1.Deployment, stores St
return false
}

var specReplicas int32 = 1
if deployment.Spec.Replicas != nil {
specReplicas = *deployment.Spec.Replicas
}
if specReplicas != deployment.Status.Replicas ||
deployment.Status.Replicas != deployment.Status.ReadyReplicas {
var requiredSpecReplicas int32 = 1
if requiredSpecReplicas > deployment.Status.Replicas ||
requiredSpecReplicas > deployment.Status.ReadyReplicas {
log.Log.V(4).Infof("Deployment %v not ready yet", deployment.Name)
return false
}
Expand Down

0 comments on commit b6546a2

Please sign in to comment.