From 3125f93b3f8a843dd9726e727a46a6a306fc348c Mon Sep 17 00:00:00 2001
From: Virgil Chereches <virgil.chereches@gmail.com>
Date: Thu, 18 Jan 2018 10:55:23 +0000
Subject: [PATCH] Added disable_volume_zone_conflict variable

---
 inventory/group_vars/k8s-cluster.yml                        | 5 +++++
 roles/kubernetes/master/defaults/main.yml                   | 3 +++
 .../master/templates/manifests/kube-scheduler.manifest.j2   | 6 +++---
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/inventory/group_vars/k8s-cluster.yml b/inventory/group_vars/k8s-cluster.yml
index 800d9dbb9..b925f5d7a 100644
--- a/inventory/group_vars/k8s-cluster.yml
+++ b/inventory/group_vars/k8s-cluster.yml
@@ -179,3 +179,8 @@ local_volumes_enabled: false
 ## Supplementary addresses that can be added in kubernetes ssl keys.
 ## That can be usefull for example to setup a keepalived virtual IP
 # supplementary_addresses_in_ssl_keys: [10.0.0.1, 10.0.0.2, 10.0.0.3]
+
+## Running on top of openstack vms with cinder enabled may lead to unschedulable pods due to NoVolumeZoneConflict restriction in kube-scheduler.
+## See https://github.com/kubernetes-incubator/kubespray/issues/2141
+## Set this variable to true to get rid of this issue
+disable_volume_zone_conflict: false
diff --git a/roles/kubernetes/master/defaults/main.yml b/roles/kubernetes/master/defaults/main.yml
index fb19290cd..4615591a7 100644
--- a/roles/kubernetes/master/defaults/main.yml
+++ b/roles/kubernetes/master/defaults/main.yml
@@ -80,3 +80,6 @@ scheduler_custom_flags: []
 # kubeadm settings
 # Value of 0 means it never expires
 kubeadm_token_ttl: 0
+
+## Variable for influencing kube-scheduler behaviour
+disable_volume_zone_conflict: false
diff --git a/roles/kubernetes/master/templates/manifests/kube-scheduler.manifest.j2 b/roles/kubernetes/master/templates/manifests/kube-scheduler.manifest.j2
index fd1d24547..7b7c2b804 100644
--- a/roles/kubernetes/master/templates/manifests/kube-scheduler.manifest.j2
+++ b/roles/kubernetes/master/templates/manifests/kube-scheduler.manifest.j2
@@ -28,7 +28,7 @@ spec:
     - scheduler
     - --leader-elect=true
     - --kubeconfig={{ kube_config_dir }}/kube-scheduler-kubeconfig.yaml
-{% if cloud_provider == 'openstack' %}
+{% if cloud_provider == 'openstack' and disable_volume_zone_conflict %}
     - --policy-config-file={{ kube_config_dir }}/kube-scheduler-policy.yaml
 {% endif %}
     - --profiling=false
@@ -65,7 +65,7 @@ spec:
     - mountPath: "{{ kube_config_dir }}/kube-scheduler-kubeconfig.yaml"
       name: kubeconfig
       readOnly: true
-{% if cloud_provider == 'openstack' %}
+{% if cloud_provider == 'openstack' and disable_volume_zone_conflict %}
     - mountPath: "{{ kube_config_dir }}/kube-scheduler-policy.yaml"
       name: kube-scheduler-policy
       readOnly: true
@@ -85,7 +85,7 @@ spec:
   - name: kubeconfig
     hostPath:
       path: "{{ kube_config_dir }}/kube-scheduler-kubeconfig.yaml"
-{% if cloud_provider == 'openstack' %}
+{% if cloud_provider == 'openstack' and disable_volume_zone_conflict %}
   - name: kube-scheduler-policy
     hostPath:
       path: "{{ kube_config_dir }}/kube-scheduler-policy.yaml"
-- 
GitLab