summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dan/sk-cloudia.yml2
-rw-r--r--inventory/host_vars/sk-cloudia.yml13
-rw-r--r--roles/containerd/tasks/lvm.yml18
-rw-r--r--roles/containerd/tasks/main.yml19
-rw-r--r--roles/containerd/tasks/zfs.yml15
-rw-r--r--roles/kubernetes/base/tasks/lvm.yml18
-rw-r--r--roles/kubernetes/base/tasks/main.yml45
-rw-r--r--roles/kubernetes/base/tasks/zfs.yml15
8 files changed, 122 insertions, 23 deletions
diff --git a/dan/sk-cloudia.yml b/dan/sk-cloudia.yml
index b19c2f77..ecdbbbcc 100644
--- a/dan/sk-cloudia.yml
+++ b/dan/sk-cloudia.yml
@@ -6,3 +6,5 @@
- role: sshd
- role: zsh
- role: zfs/base
+ - role: containerd
+ - role: kubernetes/base
diff --git a/inventory/host_vars/sk-cloudia.yml b/inventory/host_vars/sk-cloudia.yml
index b085be8a..e6919456 100644
--- a/inventory/host_vars/sk-cloudia.yml
+++ b/inventory/host_vars/sk-cloudia.yml
@@ -19,7 +19,14 @@ zfs_arc_size:
max: "{{ 16 * 1024 * 1024 * 1024 }}"
-docker_zfs:
+containerd_zfs:
pool: storage
- name: docker
- size: 1G
+ name: containerd
+ size: 40G
+
+kubelet_zfs:
+ pool: storage
+ name: kubelet
+ size: 20G
+
+kubernetes_container_runtime: containerd
diff --git a/roles/containerd/tasks/lvm.yml b/roles/containerd/tasks/lvm.yml
new file mode 100644
index 00000000..d6233ff7
--- /dev/null
+++ b/roles/containerd/tasks/lvm.yml
@@ -0,0 +1,18 @@
+---
+- name: create logical volume
+ lvol:
+ vg: "{{ containerd_lvm.vg }}"
+ lv: "{{ containerd_lvm.lv }}"
+ size: "{{ containerd_lvm.size }}"
+
+- name: create filesystem
+ filesystem:
+ fstype: "{{ containerd_lvm.fs }}"
+ dev: "/dev/mapper/{{ containerd_lvm.vg | replace('-', '--') }}-{{ containerd_lvm.lv | replace('-', '--') }}"
+
+- name: mount filesytem
+ mount:
+ src: "/dev/mapper/{{ containerd_lvm.vg | replace('-', '--') }}-{{ containerd_lvm.lv | replace('-', '--') }}"
+ path: /var/lib/containerd
+ fstype: "{{ containerd_lvm.fs }}"
+ state: mounted
diff --git a/roles/containerd/tasks/main.yml b/roles/containerd/tasks/main.yml
new file mode 100644
index 00000000..daf613ae
--- /dev/null
+++ b/roles/containerd/tasks/main.yml
@@ -0,0 +1,19 @@
+---
+- name: check for supported platform
+ when: ansible_distribution != "Ubuntu"
+ fail:
+ msg: "currenty this only works with ubuntu"
+
+- name: prepare /var/lib/containerd as LVM
+ when: containerd_lvm is defined
+ import_tasks: lvm.yml
+
+- name: prepare /var/lib/containerd as ZFS dataset
+ when: containerd_zfs is defined
+ import_tasks: zfs.yml
+
+- name: install containerd
+ apt:
+ name: containerd
+ state: present
+ force: yes
diff --git a/roles/containerd/tasks/zfs.yml b/roles/containerd/tasks/zfs.yml
new file mode 100644
index 00000000..52dde5af
--- /dev/null
+++ b/roles/containerd/tasks/zfs.yml
@@ -0,0 +1,15 @@
+---
+- name: create zfs dataset
+ zfs:
+ name: "{{ containerd_zfs.pool }}/{{ containerd_zfs.name }}"
+ state: present
+ extra_zfs_properties:
+ quota: "{{ containerd_zfs.size }}"
+
+- name: bind mount filesytem
+ mount:
+ src: "{{ zfs_zpools[containerd_zfs.pool].mountpoint }}/{{ containerd_zfs.name }}"
+ path: /var/lib/containerd
+ fstype: none
+ opts: bind,x-systemd.automount,nofail
+ state: mounted
diff --git a/roles/kubernetes/base/tasks/lvm.yml b/roles/kubernetes/base/tasks/lvm.yml
new file mode 100644
index 00000000..3ef36e89
--- /dev/null
+++ b/roles/kubernetes/base/tasks/lvm.yml
@@ -0,0 +1,18 @@
+---
+- name: create logical volume
+ lvol:
+ vg: "{{ kubelet_lvm.vg }}"
+ lv: "{{ kubelet_lvm.lv }}"
+ size: "{{ kubelet_lvm.size }}"
+
+- name: create filesystem
+ filesystem:
+ fstype: "{{ kubelet_lvm.fs }}"
+ dev: "/dev/mapper/{{ kubelet_lvm.vg | replace('-', '--') }}-{{ kubelet_lvm.lv | replace('-', '--') }}"
+
+- name: mount filesytem
+ mount:
+ src: "/dev/mapper/{{ kubelet_lvm.vg | replace('-', '--') }}-{{ kubelet_lvm.lv | replace('-', '--') }}"
+ path: /var/lib/kubelet
+ fstype: "{{ kubelet_lvm.fs }}"
+ state: mounted
diff --git a/roles/kubernetes/base/tasks/main.yml b/roles/kubernetes/base/tasks/main.yml
index 0b0be821..375bb63e 100644
--- a/roles/kubernetes/base/tasks/main.yml
+++ b/roles/kubernetes/base/tasks/main.yml
@@ -1,25 +1,11 @@
---
- name: prepare /var/lib/kubelet as LVM
when: kubelet_lvm is defined
- block:
+ import_tasks: lvm.yml
- - name: create logical volume
- lvol:
- vg: "{{ kubelet_lvm.vg }}"
- lv: "{{ kubelet_lvm.lv }}"
- size: "{{ kubelet_lvm.size }}"
-
- - name: create filesystem
- filesystem:
- fstype: "{{ kubelet_lvm.fs }}"
- dev: "/dev/mapper/{{ kubelet_lvm.vg | replace('-', '--') }}-{{ kubelet_lvm.lv | replace('-', '--') }}"
-
- - name: mount filesytem
- mount:
- src: "/dev/mapper/{{ kubelet_lvm.vg | replace('-', '--') }}-{{ kubelet_lvm.lv | replace('-', '--') }}"
- path: /var/lib/kubelet
- fstype: "{{ kubelet_lvm.fs }}"
- state: mounted
+- name: prepare /var/lib/kubelet as ZFS dataset
+ when: kubelet_zfs is defined
+ import_tasks: zfs.yml
- name: install apt https transport
apt:
@@ -35,17 +21,19 @@
- name: add repository entry
copy:
content: |
- deb http://apt.kubernetes.io/ kubernetes-xenial main
+ deb https://apt.kubernetes.io/ kubernetes-xenial main
dest: /etc/apt/sources.list.d/kubernetes.list
notify: update apt cache
- name: update apt cache
meta: flush_handlers
-- name: install kubelet
+- name: install kubelet and utils
apt:
name:
- "kubelet{% if kubernetes.pkg_version is defined %}={{ kubernetes.pkg_version }}{% endif %}"
+ - cri-tools
+ - bridge-utils
state: present
- name: disable automatic upgrades for kubelet
@@ -56,6 +44,23 @@
name: "{{ item }}"
selection: hold
+- name: configure crictl to use containerd
+ when: kubernetes_container_runtime == 'containerd'
+ loop:
+ - zsh
+ - bash
+ blockinfile:
+ path: "/root/.{{ item }}rc"
+ create: yes
+ marker: "### {mark} ANSIBLE MANAGED BLOCK for crictl ###"
+ content: |
+ alias crictl="crictl --runtime-endpoint unix:///run/containerd/containerd.sock"
+ {% if item == 'zsh' %}
+ ## TODO: see https://github.com/kubernetes-sigs/cri-tools/issues/435
+ autoload -U +X bashcompinit && bashcompinit
+ {% endif %}
+ source <(crictl completion)
+
- name: add dummy group with gid 998
group:
name: app
diff --git a/roles/kubernetes/base/tasks/zfs.yml b/roles/kubernetes/base/tasks/zfs.yml
new file mode 100644
index 00000000..4311dd3f
--- /dev/null
+++ b/roles/kubernetes/base/tasks/zfs.yml
@@ -0,0 +1,15 @@
+---
+- name: create zfs dataset
+ zfs:
+ name: "{{ kubelet_zfs.pool }}/{{ kubelet_zfs.name }}"
+ state: present
+ extra_zfs_properties:
+ quota: "{{ kubelet_zfs.size }}"
+
+- name: bind mount filesytem
+ mount:
+ src: "{{ zfs_zpools[kubelet_zfs.pool].mountpoint }}/{{ kubelet_zfs.name }}"
+ path: /var/lib/kubelet
+ fstype: none
+ opts: bind,x-systemd.automount,nofail
+ state: mounted