summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Ospalý <p.ospaly@partner.samsung.com>2019-08-22 17:33:07 +0200
committerPetr Ospalý <p.ospaly@partner.samsung.com>2019-08-23 12:52:00 +0200
commit8f834557f7ccaa38b477853b7b1caf7c91784207 (patch)
treebe4645524a0070c8765da483353400a5f39fe27d
parent0364bc6ebc6d26877f1db1be342a10b24f51d80b (diff)
Add configurable etcd storage feature
Plus the option to have etcd on tmpfs (volatile storage) for little bigger (maybe) speed (NOT FOR PRODUCTION DEPLOYMENT!). Issue-ID: OOM-2058 Change-Id: I0bbfc4fbae7f6b46e2fae49656437cd6748efd49 Signed-off-by: Petr Ospalý <p.ospaly@partner.samsung.com>
-rw-r--r--ansible/rke.yml7
-rw-r--r--ansible/roles/rke/defaults/main.yml40
-rw-r--r--ansible/roles/rke/tasks/rke_etcd.yml9
-rw-r--r--ansible/roles/rke/templates/cluster.yml.j27
4 files changed, 63 insertions, 0 deletions
diff --git a/ansible/rke.yml b/ansible/rke.yml
index 13e7bb5b..ab6c0bb5 100644
--- a/ansible/rke.yml
+++ b/ansible/rke.yml
@@ -2,6 +2,13 @@
- name: Gather facts for all hosts
hosts: all
+- name: Configure etcd (RKE)
+ hosts: kubernetes-etcd
+ roles:
+ - role: rke
+ vars:
+ mode: etcd
+
- name: Configure kubernetes cluster (RKE)
hosts: infrastructure
roles:
diff --git a/ansible/roles/rke/defaults/main.yml b/ansible/roles/rke/defaults/main.yml
index 2f160fc2..d9c044b6 100644
--- a/ansible/roles/rke/defaults/main.yml
+++ b/ansible/roles/rke/defaults/main.yml
@@ -6,6 +6,46 @@ kube_config_dir: "{{ ansible_env.HOME }}/.kube"
cluster_config_dir: "{{ app_data_path }}/cluster"
# Whether dashboard is exposed.
rke_dashboard_exposed: true
+rke_etcd:
+ # By default rke creates bind mount:
+ # /var/lib/etcd -> /var/lib/rancher/etcd
+ # These parameters provide means of modifying it:
+ # - custom bind mount
+ # - option to use volatile storage
+
+ # Custom bind mount
+ #
+ # I did not find a proper way (in the docs) how to override the
+ # defaults so I just abuse the extra_* args for the rke etcd
+ # service. It means that it will create another mount point in the
+ # container and you should use different pathnames than default...
+ #
+ # The custom bind mount is by default disabled.
+ enabled_custom_etcd_storage: false
+
+ # Applicated only if custom mount is enabled.
+ # Paths must be absolute (start with '/')
+ #
+ # Path on the kubernetes/etcd node
+ storage_path: /var/lib/etcd-custom
+ # Path inside the container where it is mounted.
+ storage_mountpoint: /var/lib/rancher/etcd-custom
+
+ # On top of it (with or without custom mount) you can use tmpfs
+ # as a volatile storage.
+ #
+ # CAUTION: This will create temporary filesystem (in the memory)
+ # so if an etcd node will be poweroff then all etcd data will be
+ # lost!!!
+ #
+ # Don't use unless you don't care about your cluster!
+ #
+ # This is intended as an attempt to make deployment little bit
+ # more faster...by default it is disabled.
+ enabled_unsafe_volatile_storage: false
+ # Size of the volatile storage - tmpfs (this will eat your RAM)
+ tmpfs_size: 5G
+
rke:
# rke (rancher) images
etcd: rancher/coreos-etcd:v3.2.24-rancher1
diff --git a/ansible/roles/rke/tasks/rke_etcd.yml b/ansible/roles/rke/tasks/rke_etcd.yml
new file mode 100644
index 00000000..3dddf9e8
--- /dev/null
+++ b/ansible/roles/rke/tasks/rke_etcd.yml
@@ -0,0 +1,9 @@
+---
+- name: "Mount tmpfs as etcd storage - non-persistent data (BEWARE)"
+ mount:
+ path: "{{ rke_etcd.storage_path if rke_etcd.enabled_custom_etcd_storage else '/var/lib/etcd' }}"
+ src: tmpfs
+ fstype: tmpfs
+ opts: "defaults,size={{ rke_etcd.tmpfs_size }},mode=700"
+ state: mounted
+ when: rke_etcd.enabled_unsafe_volatile_storage
diff --git a/ansible/roles/rke/templates/cluster.yml.j2 b/ansible/roles/rke/templates/cluster.yml.j2
index 2012ab92..737d306f 100644
--- a/ansible/roles/rke/templates/cluster.yml.j2
+++ b/ansible/roles/rke/templates/cluster.yml.j2
@@ -25,8 +25,15 @@ nodes:
services:
etcd:
image: ""
+{% if rke_etcd.enabled_custom_etcd_storage %}
+ extra_args:
+ data-dir: "{{ rke_etcd.storage_mountpoint }}"
+ extra_binds:
+ - "{{ rke_etcd.storage_path }}:{{ rke_etcd.storage_mountpoint }}"
+{% else %}
extra_args: {}
extra_binds: []
+{% endif %}
extra_env: []
external_urls: []
ca_cert: ""