From f705eba7eda5fa3c143217233bcc431165a1a6cd Mon Sep 17 00:00:00 2001 From: Gabriel Totusek Date: Thu, 2 May 2019 11:43:01 -0700 Subject: [PATCH] Add support for kubernetes tolerations, nodeSelector, and affinity --- installer/roles/kubernetes/tasks/main.yml | 35 ++++++++++--------- .../kubernetes/templates/deployment.yml.j2 | 12 +++++++ .../templates/management-pod.yml.j2 | 12 +++++++ .../templates/postgresql-values.yml.j2 | 33 +++++++++++++++++ 4 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 installer/roles/kubernetes/templates/postgresql-values.yml.j2 diff --git a/installer/roles/kubernetes/tasks/main.yml b/installer/roles/kubernetes/tasks/main.yml index 31eb4efcda..8f53c4cbae 100644 --- a/installer/roles/kubernetes/tasks/main.yml +++ b/installer/roles/kubernetes/tasks/main.yml @@ -78,27 +78,28 @@ - postgres_svc_details is defined and postgres_svc_details.rc != 0 - openshift_host is defined -- name: Deploy and Activate Postgres (Kubernetes) - shell: | - helm repo update --tiller-namespace={{ tiller_namespace | default('kube-system') }} - helm upgrade {{ postgresql_service_name }} --install \ - --namespace {{ kubernetes_namespace }} \ - --set postgresqlUsername={{ pg_username }} \ - --set postgresqlPassword={{ pg_password | quote }} \ - --set postgresqlDatabase={{ pg_database }} \ - --set persistence.size={{ pg_volume_capacity|default('5')}}Gi \ - --version="2.0.0" \ - --tiller-namespace={{ tiller_namespace | default('kube-system') }} \ - {{ '--set persistence.storageClass='+pg_persistence_storageClass if pg_persistence_storageClass is defined else ' ' }} \ - {{ '--set resources.limits.cpu='+(pg_cpu_limit | string)+'m' if pg_cpu_limit is defined else ' ' }} \ - {{ '--set resources.limits.memory='+(pg_mem_limit | string)+'Gi' if pg_mem_limit is defined else ' ' }} \ - stable/postgresql +- name: Deploy PostgreSQL (Kubernetes) + block: + - name: Template PostgreSQL Deployment (Kubernetes) + set_fact: + pg_values: "{{ lookup('template', 'postgresql-values.yml.j2') }}" + no_log: yes + + - name: Deploy and Activate Postgres (Kubernetes) + shell: | + helm repo update --tiller-namespace={{ tiller_namespace | default('kube-system') }} + echo {{ pg_values | quote }} | helm upgrade {{ postgresql_service_name }} --install \ + --namespace {{ kubernetes_namespace }} \ + --version="5.3.9" \ + --tiller-namespace={{ tiller_namespace | default('kube-system') }} \ + --values - \ + stable/postgresql + register: kubernetes_pg_activate + no_log: yes when: - pg_hostname is not defined or pg_hostname == '' - postgres_svc_details is defined and postgres_svc_details.rc != 0 - kubernetes_context is defined - register: kubernetes_pg_activate - no_log: yes - name: Set postgresql hostname to helm package service (Kubernetes) set_fact: diff --git a/installer/roles/kubernetes/templates/deployment.yml.j2 b/installer/roles/kubernetes/templates/deployment.yml.j2 index fb75bc9d14..8e9f234c20 100644 --- a/installer/roles/kubernetes/templates/deployment.yml.j2 +++ b/installer/roles/kubernetes/templates/deployment.yml.j2 @@ -324,6 +324,18 @@ spec: {% endif %} {% if memcached_cpu_limit is defined %} cpu: "{{ memcached_cpu_limit }}m" +{% endif %} +{% if tolerations is defined %} + tolerations: +{{ tolerations | to_nice_yaml(indent=2) | indent(width=8, indentfirst=True) }} +{% endif %} +{% if node_selector is defined %} + nodeSelector: +{{ node_selector | to_nice_yaml(indent=2) | indent(width=8, indentfirst=True) }} +{% endif %} +{% if affinity is defined %} + affinity: +{{ affinity | to_nice_yaml(indent=2) | indent(width=8, indentfirst=True) }} {% endif %} volumes: {% if ca_trust_dir is defined %} diff --git a/installer/roles/kubernetes/templates/management-pod.yml.j2 b/installer/roles/kubernetes/templates/management-pod.yml.j2 index 12197019c1..9cb35932ce 100644 --- a/installer/roles/kubernetes/templates/management-pod.yml.j2 +++ b/installer/roles/kubernetes/templates/management-pod.yml.j2 @@ -32,6 +32,18 @@ spec: {% endif %} {% if management_cpu_limit is defined %} cpu: "{{ management_cpu_limit }}m" +{% endif %} +{% if tolerations is defined %} + tolerations: +{{ tolerations | to_nice_yaml(indent=2) | indent(width=4, indentfirst=True) }} +{% endif %} +{% if node_selector is defined %} + nodeSelector: +{{ node_selector | to_nice_yaml(indent=2) | indent(width=4, indentfirst=True) }} +{% endif %} +{% if affinity is defined %} + affinity: +{{ affinity | to_nice_yaml(indent=2) | indent(width=4, indentfirst=True) }} {% endif %} volumes: - name: {{ kubernetes_deployment_name }}-application-config diff --git a/installer/roles/kubernetes/templates/postgresql-values.yml.j2 b/installer/roles/kubernetes/templates/postgresql-values.yml.j2 new file mode 100644 index 0000000000..fcf4a06d6b --- /dev/null +++ b/installer/roles/kubernetes/templates/postgresql-values.yml.j2 @@ -0,0 +1,33 @@ +postgresqlUsername: {{ pg_username }} +postgresqlPassword: {{ pg_password }} +postgresqlDatabase: {{ pg_database }} +persistence: + size: {{ pg_volume_capacity|default('5') }}Gi +{% if pg_persistence_storageClass is defined %} + storageClass: {{ pg_persistence_storageClass }} +{% endif %} +{% if pg_cpu_limit is defined or pg_mem_limit is defined %} +resources: + limits: +{% if pg_cpu_limit is defined %} + cpu: {{ pg_cpu_limit | string }}m +{% endif %} +{% if pg_mem_limit is defined %} + memory: {{ pg_mem_limit | string }}Gi +{% endif %} +{% endif %} +{% if tolerations is defined or node_selector is defined or affinity is defined %} +master: +{% if tolerations is defined %} + tolerations: +{{ tolerations | to_nice_yaml(indent=2) | indent(width=4, indentfirst=True) }} +{% endif %} +{% if node_selector is defined %} + nodeSelector: +{{ node_selector | to_nice_yaml(indent=2) | indent(width=4, indentfirst=True) }} +{% endif %} +{% if affinity is defined %} + affinity: +{{ affinity | to_nice_yaml(indent=2) | indent(width=4, indentfirst=True) }} +{% endif %} +{% endif %}