From 2ac6f96f8e6f8298a321c2882f4b078e5ff9d1e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Thu, 2 Apr 2020 14:57:18 +0200 Subject: [PATCH] refactor to use roles --- common.yml | 87 ------------------------ hosts | 5 ++ kubernetes.yml | 22 ++++++ master-playbook.yml | 120 --------------------------------- node-playbook.yml | 100 --------------------------- roles/common/handlers/main.yml | 12 ++++ roles/common/tasks/main.yml | 77 +++++++++++++++++++++ roles/master/tasks/main.yml | 33 +++++++++ roles/worker/tasks/main.yml | 4 ++ 9 files changed, 153 insertions(+), 307 deletions(-) delete mode 100644 common.yml create mode 100644 hosts create mode 100644 kubernetes.yml delete mode 100644 master-playbook.yml delete mode 100644 node-playbook.yml create mode 100644 roles/common/handlers/main.yml create mode 100644 roles/common/tasks/main.yml create mode 100644 roles/master/tasks/main.yml create mode 100644 roles/worker/tasks/main.yml diff --git a/common.yml b/common.yml deleted file mode 100644 index 31d30c8..0000000 --- a/common.yml +++ /dev/null @@ -1,87 +0,0 @@ ---- -- hosts: all - become: true - tasks: - - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address'] - - debug: var=hostvars[inventory_hostname]['ansible_default_ipv6']['address'] - - name: Install packages that allow apt to be used over HTTPS - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - aptitude - - apt-transport-https - - ca-certificates - - curl - - gnupg-agent - - software-properties-common - - - name: Add an apt signing key for Docker - apt_key: - url: https://download.docker.com/linux/ubuntu/gpg - state: present - - - name: Add apt repository for stable version - apt_repository: - repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable - state: present - - - name: Install docker and its dependecies - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - docker-ce - - docker-ce-cli - - containerd.io - notify: - - docker status - - - name: Add user to docker group - user: - name: torma - group: docker - - name: Remove swapfile from /etc/fstab - mount: - name: "{{ item }}" - fstype: swap - state: absent - with_items: - - swap - - none - - - name: Disable swap - command: swapoff -a - when: ansible_swaptotal_mb > 0 - - - name: Add an apt signing key for Kubernetes - apt_key: - url: https://packages.cloud.google.com/apt/doc/apt-key.gpg - state: present - - - name: Adding apt repository for Kubernetes - apt_repository: - repo: deb https://apt.kubernetes.io/ kubernetes-xenial main - state: present - filename: kubernetes.list - - - name: Install Kubernetes binaries - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - kubelet - - kubeadm - - kubectl - - - name: Restart kubelet - service: - name: kubelet - daemon_reload: yes - state: restarted diff --git a/hosts b/hosts new file mode 100644 index 0000000..557fbd0 --- /dev/null +++ b/hosts @@ -0,0 +1,5 @@ +[master] +192.168.122.70 + +[worker] +192.168.122.193 diff --git a/kubernetes.yml b/kubernetes.yml new file mode 100644 index 0000000..9f01efc --- /dev/null +++ b/kubernetes.yml @@ -0,0 +1,22 @@ + --- + +- name: Apply common configuration to all nodes + hosts: all + become: true + + roles: + - common + +- name: Configure and deploy Kubernetes master + hosts: master + become: true + + roles: + - master + +- name: Join workers to Kubernetes cluster + hosts: worker + become: true + + roles: + - worker diff --git a/master-playbook.yml b/master-playbook.yml deleted file mode 100644 index 6a3cee1..0000000 --- a/master-playbook.yml +++ /dev/null @@ -1,120 +0,0 @@ ---- -- hosts: all - become: true - tasks: - - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address'] - - debug: var=hostvars[inventory_hostname]['ansible_default_ipv6']['address'] - - name: Install packages that allow apt to be used over HTTPS - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - aptitude - - apt-transport-https - - ca-certificates - - curl - - gnupg-agent - - software-properties-common - - - name: Add an apt signing key for Docker - apt_key: - url: https://download.docker.com/linux/ubuntu/gpg - state: present - - - name: Add apt repository for stable version - apt_repository: - repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable - state: present - - - name: Install docker and its dependecies - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - docker-ce - - docker-ce-cli - - containerd.io - notify: - - docker status - - - name: Add user to docker group - user: - name: torma - group: docker - - name: Remove swapfile from /etc/fstab - mount: - name: "{{ item }}" - fstype: swap - state: absent - with_items: - - swap - - none - - - name: Disable swap - command: swapoff -a - when: ansible_swaptotal_mb > 0 - - - name: Add an apt signing key for Kubernetes - apt_key: - url: https://packages.cloud.google.com/apt/doc/apt-key.gpg - state: present - - - name: Adding apt repository for Kubernetes - apt_repository: - repo: deb https://apt.kubernetes.io/ kubernetes-xenial main - state: present - filename: kubernetes.list - - - name: Install Kubernetes binaries - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - kubelet - - kubeadm - - kubectl - - - name: Restart kubelet - service: - name: kubelet - daemon_reload: yes - state: restarted - - - name: Initialize the Kubernetes cluster using kubeadm - command: kubeadm init --apiserver-advertise-address="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}" - - - name: Creates .kube directory - file: - path: /home/{{ ansible_user_id }}/.kube - state: directory - - - name: Copy files needed for kubectl - copy: - remote_src: yes - src: /etc/kubernetes/admin.conf - dest: /home/{{ ansible_user_id }}/.kube/config - owner: "{{ ansible_user_id }}" - group: users - - - name: set up weave network - shell: export KUBECONFIG=/etc/kubernetes/admin.conf && export kubever=$(kubectl version | base64 | tr -d '\n') && kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever" - register: weavenet_out - - - name: Generate join command - shell: kubeadm token create --print-join-command > /tmp/join_command - - - name: Specifying a destination path - fetch: - src: /tmp/join_command - dest: /tmp/ansible/join_command - flat: yes - - handlers: - - name: docker status - service: name=docker state=started diff --git a/node-playbook.yml b/node-playbook.yml deleted file mode 100644 index ed71290..0000000 --- a/node-playbook.yml +++ /dev/null @@ -1,100 +0,0 @@ ---- -- hosts: all - become: true - tasks: - - name: Install packages that allow apt to be used over HTTPS - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - apt-transport-https - - ca-certificates - - curl - - gnupg-agent - - software-properties-common - - - name: Add an apt signing key for Docker - apt_key: - url: https://download.docker.com/linux/ubuntu/gpg - state: present - - - name: Add apt repository for stable version - apt_repository: - repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable - state: present - - - name: Install docker and its dependecies - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - docker-ce - - docker-ce-cli - - containerd.io - notify: - - docker status - - - name: Add user to docker group - user: - name: torma - group: docker - - - name: Remove swapfile from /etc/fstab - mount: - name: "{{ item }}" - fstype: swap - state: absent - with_items: - - swap - - none - - - name: Disable swap - command: swapoff -a - when: ansible_swaptotal_mb > 0 - - - name: Add an apt signing key for Kubernetes - apt_key: - url: https://packages.cloud.google.com/apt/doc/apt-key.gpg - state: present - - - name: Adding apt repository for Kubernetes - apt_repository: - repo: deb https://apt.kubernetes.io/ kubernetes-xenial main - state: present - filename: kubernetes.list - - - name: Install Kubernetes binaries - apt: - name: "{{ packages }}" - state: present - update_cache: yes - vars: - packages: - - kubelet - - kubeadm - - kubectl - - - name: Configure node ip - lineinfile: - path: /etc/default/kubelet - line: KUBELET_EXTRA_ARGS=--node-ip={{ node_ip }} - - - name: Restart kubelet - service: - name: kubelet - daemon_reload: yes - state: restarted - - - name: Copy the join command to server location - copy: src=join-command dest=/tmp/join-command.sh mode=0777 - - - name: Join the node to cluster - command: sh /tmp/join-command.sh - - handlers: - - name: docker status - service: name=docker state=started diff --git a/roles/common/handlers/main.yml b/roles/common/handlers/main.yml new file mode 100644 index 0000000..d70f481 --- /dev/null +++ b/roles/common/handlers/main.yml @@ -0,0 +1,12 @@ +- name: docker status + service: + name: docker + state: started + enabled: true + +- name: restart kubelet + service: + name: kubelet + daemon_reload: yes + state: restarted + enabled: true diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml new file mode 100644 index 0000000..ed943ee --- /dev/null +++ b/roles/common/tasks/main.yml @@ -0,0 +1,77 @@ +- name: Install packages that allow apt to be used over HTTPS + apt: + name: "{{ packages }}" + state: present + update_cache: yes + vars: + packages: + - aptitude + - apt-transport-https + - ca-certificates + - curl + - gnupg-agent + - software-properties-common + +- name: Add an apt signing key for Docker + apt_key: + url: https://download.docker.com/linux/ubuntu/gpg + state: present + +- name: Add apt repository for stable version + apt_repository: + repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable + state: present + +- name: Install docker and its dependecies + apt: + name: "{{ packages }}" + state: present + update_cache: yes + vars: + packages: + - docker-ce + - docker-ce-cli + - containerd.io + notify: + - docker status + +- name: Add user to docker group + user: + name: "{{ ansible_user_id }}" + group: docker +- name: Remove swapfile from /etc/fstab + mount: + name: "{{ item }}" + fstype: swap + state: absent + with_items: + - swap + - none + +- name: Disable swap + command: swapoff -a + when: ansible_swaptotal_mb > 0 + +- name: Add an apt signing key for Kubernetes + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + +- name: Adding apt repository for Kubernetes + apt_repository: + repo: deb https://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: kubernetes.list + +- name: Install Kubernetes binaries + apt: + name: "{{ packages }}" + state: present + update_cache: yes + vars: + packages: + - kubelet + - kubeadm + - kubectl + notify: + - restart kubelet diff --git a/roles/master/tasks/main.yml b/roles/master/tasks/main.yml new file mode 100644 index 0000000..abe462f --- /dev/null +++ b/roles/master/tasks/main.yml @@ -0,0 +1,33 @@ +- name: Initialize the Kubernetes cluster using kubeadm + command: kubeadm init --apiserver-advertise-address="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}" + +- name: Creates .kube directory + file: + path: /home/{{ ansible_user_id }}/.kube + state: directory + +- name: Copy files needed for kubectl + copy: + remote_src: yes + src: /etc/kubernetes/admin.conf + dest: /home/{{ ansible_user_id }}/.kube/config + owner: "{{ ansible_user_id }}" + group: users + +- name: Set up weave network + shell: export KUBECONFIG=/etc/kubernetes/admin.conf && export kubever=$(kubectl version | base64 | tr -d '\n') && kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever" + register: weavenet_out + +- name: Generate join command + command: kubeadm token create --print-join-command + register: kubernetes_join_command_result + +- name: Set the kubeadm join command globally. + set_fact: + kubernetes_join_command: > + {{ kubernetes_join_command_result.stdout }} + {{ kubernetes_join_command_extra_opts }} + when: kubernetes_join_command_result.stdout is defined + delegate_to: "{{ item }}" + delegate_facts: true + with_items: "{{ groups['all'] }}" diff --git a/roles/worker/tasks/main.yml b/roles/worker/tasks/main.yml new file mode 100644 index 0000000..d6b9467 --- /dev/null +++ b/roles/worker/tasks/main.yml @@ -0,0 +1,4 @@ +- name: Join node to Kubernetes master + shell: > + {{ kubernetes_join_command }} + creates=/etc/kubernetes/kubelet.conf