diff --git a/README.md b/README.md index 701bd9d..73bb439 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,18 @@ Available variables are listed below, along with default values (see `defaults/m - name: kubernetes-cni state: present +TODO. + + kubernetes_allow_swap: False + +TODO. + + kubernetes_allow_pods_on_master: True + +TODO. + + kubernetes_enable_web_ui: True + TODO. kubernetes_apt_release_channel: main diff --git a/defaults/main.yml b/defaults/main.yml index b7c3cbf..e9ade8a 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,6 +9,11 @@ kubernetes_packages: - name: kubernetes-cni state: present +kubernetes_allow_swap: False + +kubernetes_allow_pods_on_master: True +kubernetes_enable_web_ui: True + kubernetes_apt_release_channel: main kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-{{ ansible_distribution_release }} {{ kubernetes_apt_release_channel }}" kubernetes_apt_ignore_key_error: False diff --git a/tasks/main.yml b/tasks/main.yml index 90054e3..6561c16 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -15,12 +15,26 @@ notify: restart kubelet with_items: "{{ kubernetes_packages }}" +- name: Allow kubelet to run with swap enabled (if configured). + lineinfile: + path: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf + line: 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"' + regexp: 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on.+' + insertafter: '^Environment=' + state: present + when: kubernetes_allow_swap + - name: Ensure kubelet is started and enabled at boot. service: name: kubelet state: started enabled: yes +- name: Check if Kubernetes has already been initialized. + stat: + path: /etc/kubernetes/admin.conf + register: kubernetes_init_stat + - name: Initialize the Kubernetes master with kubeadm init. command: > kubeadm init @@ -30,10 +44,37 @@ --ignore-preflight-errors=all register: kubeadmin_init failed_when: False + when: kubernetes_init_stat.stat.exists == False - name: Print the init output to screen. debug: var=kubeadmin_init.stdout + when: kubernetes_init_stat.stat.exists == False -# TODO: Set up Flannel. +- name: Ensure .kube directory exists. + file: + path: ~/.kube + state: directory -# TODO: Allow pods on master with `kubectl taint nodes --all node-role.kubernetes.io/master-` +- name: Symlink the kubectl admin.conf to ~/.kube/conf. + file: + src: /etc/kubernetes/admin.conf + dest: ~/.kube/config + state: link + +- name: Configure Flannel networking. + command: "{{ item }}" + with_items: + - kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml + - kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml + +# TODO: Check if taint exists with something like `kubectl describe nodes` +# instead of using kubernetes_init_stat.stat.exists check. +- name: Allow pods on master node (if configured). + command: "kubectl taint nodes --all node-role.kubernetes.io/master-" + when: + - kubernetes_allow_pods_on_master + - kubernetes_init_stat.stat.exists == False + +- name: Enable the Kubernetes Web Dashboard UI (if configured). + command: "kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml" + when: kubernetes_enable_web_ui diff --git a/tests/test.yml b/tests/test.yml index 17a1bcd..ee92afb 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -1,6 +1,9 @@ --- - hosts: all + vars: + kubernetes_allow_swap: True + pre_tasks: - name: Update apt cache. apt: update_cache=yes cache_valid_time=600