From 1f11dfc8822bdeaa82a38ac4348738a70655b0b5 Mon Sep 17 00:00:00 2001 From: fedy95 Date: Fri, 23 Apr 2021 17:42:37 +0300 Subject: [PATCH 1/4] temp --- ansible-desktop.yml | 8 +- hosts | 18 +++- roles/common/tasks/main.yml | 10 +++ .../tasks/main.yml} | 0 .../{docker => docker-compose}/vars/main.yml | 0 roles/docker/tasks/docker.yml | 52 ------------ roles/docker/tasks/main.yml | 52 +++++++++++- roles/kube-dependencies/tasks/main.yml | 82 +++++++++++++++++++ roles/kube-dependencies/vars/main.yml | 3 + 9 files changed, 167 insertions(+), 58 deletions(-) rename roles/{docker/tasks/docker-compose.yml => docker-compose/tasks/main.yml} (100%) rename roles/{docker => docker-compose}/vars/main.yml (100%) delete mode 100644 roles/docker/tasks/docker.yml create mode 100644 roles/kube-dependencies/tasks/main.yml create mode 100644 roles/kube-dependencies/vars/main.yml diff --git a/ansible-desktop.yml b/ansible-desktop.yml index ff719d8..ff6b259 100644 --- a/ansible-desktop.yml +++ b/ansible-desktop.yml @@ -1,7 +1,13 @@ --- -- name: Base playbook +- name: docker-units playbook hosts: docker-units roles: - { role: common, become: true } - { role: docker, become: true } + - { role: docker-compose, become: true } + +- name: k8s playbook + hosts: docker-units + roles: + - { role: common, become: true } ... diff --git a/hosts b/hosts index a45e710..13baaef 100644 --- a/hosts +++ b/hosts @@ -1,8 +1,20 @@ +[k8s:children] +k8s-master +k8s-worker + +[k8s-master] +k8s-master-01 ansible_host=192.168.1.180 +k8s-master-02 ansible_host=192.168.1.181 + +[k8s-worker] +k8s-worker-01 ansible_host=192.168.1.190 +k8s-worker-02 ansible_host=192.168.1.191 + [docker-units] -10.10.10.6 -192.168.1.151 +homeassistant ansible_host=10.10.10.6 +pi-hole ansible_host=192.168.1.151 -[docker-units:vars] +[all:vars] ansible_connection=ssh ansible_ssh_private_key_file=/home/fedy95/.ssh/id_rsa ansible_user=fedy95 diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index e4c0b45..96d712d 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -25,4 +25,14 @@ - name: Upgrade installed packages apt: upgrade=yes + +- name: Disable all swaps from /proc/swaps + shell: | + swapoff --all + +- name: Disable SWAP in fstab + lineinfile: + path: /etc/fstab + regexp: 'swap' + state: absent ... diff --git a/roles/docker/tasks/docker-compose.yml b/roles/docker-compose/tasks/main.yml similarity index 100% rename from roles/docker/tasks/docker-compose.yml rename to roles/docker-compose/tasks/main.yml diff --git a/roles/docker/vars/main.yml b/roles/docker-compose/vars/main.yml similarity index 100% rename from roles/docker/vars/main.yml rename to roles/docker-compose/vars/main.yml diff --git a/roles/docker/tasks/docker.yml b/roles/docker/tasks/docker.yml deleted file mode 100644 index 92c19bf..0000000 --- a/roles/docker/tasks/docker.yml +++ /dev/null @@ -1,52 +0,0 @@ ---- -- name: Update apt cache - apt: - update_cache: yes - cache_valid_time: "{{ aptcachetime }}" - -- name: Upgrade all apt packages - apt: upgrade=dist - -- name: Install docker packages - apt: - name: "{{ item }}" - state: present - update_cache: yes - loop: - - 'apt-transport-https' - - 'ca-certificates' - - 'curl' - - 'gnupg' - - 'lsb-release' - -- name: Add Docker GPG key - apt_key: - url: https://download.docker.com/linux/ubuntu/gpg - state: present - -- name: Add deb repository - apt_repository: - repo: deb https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable - state: present - update_cache: yes - -- name: Install docker - apt: - name: "{{ item }}" - state: present - update_cache: yes - loop: - - 'docker-ce' - - 'docker-ce-cli' - - 'containerd.io' - -- name: Ensure docker users are added to the docker group. - user: - name: "{{ item }}" - groups: docker - append: true - with_items: "{{ ansible_env.USER }}" - -- name: "Ensure Docker is {{ docker.start | ternary('started','stopped') }}" - service: name=docker state={{ docker.start | ternary('restarted','stopped') }} enabled={{ docker.service_enabled }} -... diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml index 9e33dc7..92c19bf 100644 --- a/roles/docker/tasks/main.yml +++ b/roles/docker/tasks/main.yml @@ -1,4 +1,52 @@ --- -- include_tasks: docker.yml -- include_tasks: docker-compose.yml +- name: Update apt cache + apt: + update_cache: yes + cache_valid_time: "{{ aptcachetime }}" + +- name: Upgrade all apt packages + apt: upgrade=dist + +- name: Install docker packages + apt: + name: "{{ item }}" + state: present + update_cache: yes + loop: + - 'apt-transport-https' + - 'ca-certificates' + - 'curl' + - 'gnupg' + - 'lsb-release' + +- name: Add Docker GPG key + apt_key: + url: https://download.docker.com/linux/ubuntu/gpg + state: present + +- name: Add deb repository + apt_repository: + repo: deb https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable + state: present + update_cache: yes + +- name: Install docker + apt: + name: "{{ item }}" + state: present + update_cache: yes + loop: + - 'docker-ce' + - 'docker-ce-cli' + - 'containerd.io' + +- name: Ensure docker users are added to the docker group. + user: + name: "{{ item }}" + groups: docker + append: true + with_items: "{{ ansible_env.USER }}" + +- name: "Ensure Docker is {{ docker.start | ternary('started','stopped') }}" + service: name=docker state={{ docker.start | ternary('restarted','stopped') }} enabled={{ docker.service_enabled }} ... diff --git a/roles/kube-dependencies/tasks/main.yml b/roles/kube-dependencies/tasks/main.yml new file mode 100644 index 0000000..cf714be --- /dev/null +++ b/roles/kube-dependencies/tasks/main.yml @@ -0,0 +1,82 @@ +- hosts: k8s + - name: add Kubernetes apt-key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + + - name: add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + + - name: install kubelet + apt: + name: kubelet={{ kube_version }} + state: present + update_cache: true + + - name: install kubeadm + apt: + name: kubeadm={{ kube_version }} + state: present + +- hosts: k8s-master + become: yes + tasks: + - name: install kubectl + apt: + name: kubectl={{ kube_version }} + state: present + force: yes + + - name: initialize the cluster + shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt + args: + chdir: $HOME + creates: cluster_initialized.txt + + - name: create .kube directory + become: yes + become_user: ubuntu + file: + path: $HOME/.kube + state: directory + mode: 0755 + + - name: copy admin.conf to user's kube config + copy: + src: /etc/kubernetes/admin.conf + dest: /home/ubuntu/.kube/config + remote_src: yes + owner: ubuntu + + - name: install Pod network + become: yes + become_user: ubuntu + shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml >> pod_network_setup.txt + args: + chdir: $HOME + creates: pod_network_setup.txt + +- hosts: k8s-master + become: yes + gather_facts: false + tasks: + - name: get join command + shell: kubeadm token create --print-join-command + register: join_command_raw + + - name: set join command + set_fact: + join_command: "{{ join_command_raw.stdout_lines[0] }}" + + +- hosts: k8s-workers + become: yes + tasks: + - name: join cluster + shell: "{{ hostvars['master'].join_command }} >> node_joined.txt" + args: + chdir: $HOME + creates: node_joined.txt diff --git a/roles/kube-dependencies/vars/main.yml b/roles/kube-dependencies/vars/main.yml new file mode 100644 index 0000000..fb9fe16 --- /dev/null +++ b/roles/kube-dependencies/vars/main.yml @@ -0,0 +1,3 @@ +--- +kube_version: "1.14.0-00" +... -- 2.30.2 From c9f156822b815a415bef8782684d2f86d378dcc2 Mon Sep 17 00:00:00 2001 From: fedy95 Date: Tue, 27 Apr 2021 18:00:32 +0300 Subject: [PATCH 2/4] temp --- Makefile | 11 ++--- README.md | 2 + hosts => inventory/hosts | 0 .../docker-units/init.yml | 5 -- playbooks/k8s/init.yml | 18 +++++++ roles/common/tasks/main.yml | 9 ---- roles/k8s/tasks/01_prepare.yml | 48 +++++++++++++++++++ .../{kube-dependencies => k8s}/tasks/main.yml | 31 +----------- roles/k8s/vars/main.yml | 3 ++ roles/kube-dependencies/vars/main.yml | 3 -- 10 files changed, 78 insertions(+), 52 deletions(-) rename hosts => inventory/hosts (100%) rename ansible-desktop.yml => playbooks/docker-units/init.yml (67%) create mode 100644 playbooks/k8s/init.yml create mode 100644 roles/k8s/tasks/01_prepare.yml rename roles/{kube-dependencies => k8s}/tasks/main.yml (65%) create mode 100644 roles/k8s/vars/main.yml delete mode 100644 roles/kube-dependencies/vars/main.yml diff --git a/Makefile b/Makefile index 1e9ca9d..bbb97fd 100644 --- a/Makefile +++ b/Makefile @@ -10,18 +10,17 @@ LINT-YAML-CMD=docker run --rm -it -v $(PWD):/data ${REGISTRY}/${YAMLLINT_TAG} lint-yaml: docker pull ${REGISTRY}/${YAMLLINT_TAG} $(LINT-YAML-CMD) group_vars/all.yml + $(LINT-YAML-CMD) playbooks/ansible-desktop.yml $(LINT-YAML-CMD) roles/common/tasks/main.yml $(LINT-YAML-CMD) roles/docker/defaults/main.yml $(LINT-YAML-CMD) roles/docker/handlers/main.yml - $(LINT-YAML-CMD) roles/docker/tasks/docker.yml - $(LINT-YAML-CMD) roles/docker/tasks/docker-compose.yml $(LINT-YAML-CMD) roles/docker/tasks/main.yml - $(LINT-YAML-CMD) roles/docker/vars/main.yml + $(LINT-YAML-CMD) roles/docker-compose/tasks/main.yml + $(LINT-YAML-CMD) roles/docker-compose/vars/main.yml $(LINT-YAML-CMD) .drone.yml - $(LINT-YAML-CMD) ansible-desktop.yml -run: - ansible-playbook ansible-desktop.yml -i hosts --ask-become-pass +docker-units-init: + ansible-playbook playbooks/docker-units/init.yml -i inventory/hosts --ask-become-pass ping: ansible -i hosts all -m ping diff --git a/README.md b/README.md index 11ba883..f01775a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ ### docs - [ansible](https://www.ansible.com/) +- https://github.com/IBM/ansible-kubernetes-ha-cluster +- https://www.linuxsysadmins.com/install-kubernetes-cluster-with-ansible/ ### how to run - see Makefile diff --git a/hosts b/inventory/hosts similarity index 100% rename from hosts rename to inventory/hosts diff --git a/ansible-desktop.yml b/playbooks/docker-units/init.yml similarity index 67% rename from ansible-desktop.yml rename to playbooks/docker-units/init.yml index ff6b259..047429e 100644 --- a/ansible-desktop.yml +++ b/playbooks/docker-units/init.yml @@ -5,9 +5,4 @@ - { role: common, become: true } - { role: docker, become: true } - { role: docker-compose, become: true } - -- name: k8s playbook - hosts: docker-units - roles: - - { role: common, become: true } ... diff --git a/playbooks/k8s/init.yml b/playbooks/k8s/init.yml new file mode 100644 index 0000000..2dbbc93 --- /dev/null +++ b/playbooks/k8s/init.yml @@ -0,0 +1,18 @@ +--- +- name: k8s-units playbook + hosts: k8s + roles: + - { role: common, become: true } + - { role: docker, become: true } + - { role: k8s, become: true } + +- name: k8s playbook + hosts: k8s-master + roles: + - { role: common, become: true } + +- name: k8s playbook + hosts: k8s-worker + roles: + - { role: common, become: true } +... diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 96d712d..9899889 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -26,13 +26,4 @@ - name: Upgrade installed packages apt: upgrade=yes -- name: Disable all swaps from /proc/swaps - shell: | - swapoff --all - -- name: Disable SWAP in fstab - lineinfile: - path: /etc/fstab - regexp: 'swap' - state: absent ... diff --git a/roles/k8s/tasks/01_prepare.yml b/roles/k8s/tasks/01_prepare.yml new file mode 100644 index 0000000..98eeb2c --- /dev/null +++ b/roles/k8s/tasks/01_prepare.yml @@ -0,0 +1,48 @@ +--- +- hosts: k8s + - name: Disable all swaps from /proc/swaps + shell: | + swapoff --all + + - name: Disable SWAP in fstab + lineinfile: + path: /etc/fstab + regexp: 'swap' + state: absent + + - name: Add Google GPG key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + + - name: Add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + mode: 0600 + + - name: Installing Kubernetes Cluster Packages + apt: + name: "{{ item }}" + state: present + cache_valid_time: "{{ aptcachetime }}" + with_items: + - kubelet-{{kubelet_version}} + - kubeadm + - kubectl + loop: [ 'kubeadm', 'kubectl', 'kubelet' ] + + - name: Enable service kubelet persistently + service: + name: kubelet + enabled: yes + +# TODO ??? +# - name: Reboot all the kubernetes nodes. +# reboot: +# post_reboot_delay: 10 +# reboot_timeout: 40 +# connect_timeout: 60 +# test_command: uptime +... diff --git a/roles/kube-dependencies/tasks/main.yml b/roles/k8s/tasks/main.yml similarity index 65% rename from roles/kube-dependencies/tasks/main.yml rename to roles/k8s/tasks/main.yml index cf714be..8d59650 100644 --- a/roles/kube-dependencies/tasks/main.yml +++ b/roles/k8s/tasks/main.yml @@ -1,26 +1,3 @@ -- hosts: k8s - - name: add Kubernetes apt-key - apt_key: - url: https://packages.cloud.google.com/apt/doc/apt-key.gpg - state: present - - - name: add Kubernetes' APT repository - apt_repository: - repo: deb http://apt.kubernetes.io/ kubernetes-xenial main - state: present - filename: 'kubernetes' - - - name: install kubelet - apt: - name: kubelet={{ kube_version }} - state: present - update_cache: true - - - name: install kubeadm - apt: - name: kubeadm={{ kube_version }} - state: present - - hosts: k8s-master become: yes tasks: @@ -37,8 +14,6 @@ creates: cluster_initialized.txt - name: create .kube directory - become: yes - become_user: ubuntu file: path: $HOME/.kube state: directory @@ -47,13 +22,11 @@ - name: copy admin.conf to user's kube config copy: src: /etc/kubernetes/admin.conf - dest: /home/ubuntu/.kube/config + dest: $HOME/.kube/config remote_src: yes - owner: ubuntu + owner: fedy95 - name: install Pod network - become: yes - become_user: ubuntu shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml >> pod_network_setup.txt args: chdir: $HOME diff --git a/roles/k8s/vars/main.yml b/roles/k8s/vars/main.yml new file mode 100644 index 0000000..c0c1eca --- /dev/null +++ b/roles/k8s/vars/main.yml @@ -0,0 +1,3 @@ +--- +kubelet_version: "1.14.0-00" +... diff --git a/roles/kube-dependencies/vars/main.yml b/roles/kube-dependencies/vars/main.yml deleted file mode 100644 index fb9fe16..0000000 --- a/roles/kube-dependencies/vars/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -kube_version: "1.14.0-00" -... -- 2.30.2 From 11a27eeea5958cbd9a7dc0f68b28675c1fd00153 Mon Sep 17 00:00:00 2001 From: fedy95 Date: Tue, 27 Apr 2021 18:24:43 +0300 Subject: [PATCH 3/4] temp --- .drone.yml | 9 ++-- Makefile | 13 ++++- ansible.cfg | 2 + group_vars/all.yml | 5 -- inventory/hosts | 1 + playbooks/k8s/init.yml | 25 +++++----- roles/common/tasks/main.yml | 1 - roles/k8s-init-machines/tasks/main.yml | 43 +++++++++++++++++ .../tasks/other.yml} | 0 roles/k8s/tasks/01_prepare.yml | 48 ------------------- roles/k8s/vars/main.yml | 3 -- 11 files changed, 75 insertions(+), 75 deletions(-) delete mode 100644 group_vars/all.yml create mode 100644 roles/k8s-init-machines/tasks/main.yml rename roles/{k8s/tasks/main.yml => k8s-init-machines/tasks/other.yml} (100%) delete mode 100644 roles/k8s/tasks/01_prepare.yml delete mode 100644 roles/k8s/vars/main.yml diff --git a/.drone.yml b/.drone.yml index 4958385..df36a74 100644 --- a/.drone.yml +++ b/.drone.yml @@ -10,15 +10,16 @@ steps: image: registry.fedy95.com/baseimage-yamllint:latest commands: - yamllint -c /yamllint/relaxed.yaml group_vars/all.yml + - yamllint -c /yamllint/relaxed.yaml playbooks/docker-units/init.yml + - yamllint -c /yamllint/relaxed.yaml playbooks/k8s/init.yml - yamllint -c /yamllint/relaxed.yaml roles/common/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker/defaults/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker/handlers/main.yml - - yamllint -c /yamllint/relaxed.yaml roles/docker/tasks/docker.yml - - yamllint -c /yamllint/relaxed.yaml roles/docker/tasks/docker-compose.yml - yamllint -c /yamllint/relaxed.yaml roles/docker/tasks/main.yml - - yamllint -c /yamllint/relaxed.yaml roles/docker/vars/main.yml + - yamllint -c /yamllint/relaxed.yaml roles/docker-compose/tasks/main.yml + - yamllint -c /yamllint/relaxed.yaml roles/docker-compose/vars/main.yml + - yamllint -c /yamllint/relaxed.yaml roles/k8s-init-machines/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml .drone.yml - - yamllint -c /yamllint/relaxed.yaml ansible-desktop.yml when: event: pull_request ... diff --git a/Makefile b/Makefile index bbb97fd..19843a8 100644 --- a/Makefile +++ b/Makefile @@ -10,19 +10,28 @@ LINT-YAML-CMD=docker run --rm -it -v $(PWD):/data ${REGISTRY}/${YAMLLINT_TAG} lint-yaml: docker pull ${REGISTRY}/${YAMLLINT_TAG} $(LINT-YAML-CMD) group_vars/all.yml - $(LINT-YAML-CMD) playbooks/ansible-desktop.yml + $(LINT-YAML-CMD) playbooks/docker-units/init.yml + $(LINT-YAML-CMD) playbooks/k8s/init.yml $(LINT-YAML-CMD) roles/common/tasks/main.yml $(LINT-YAML-CMD) roles/docker/defaults/main.yml $(LINT-YAML-CMD) roles/docker/handlers/main.yml $(LINT-YAML-CMD) roles/docker/tasks/main.yml $(LINT-YAML-CMD) roles/docker-compose/tasks/main.yml $(LINT-YAML-CMD) roles/docker-compose/vars/main.yml + $(LINT-YAML-CMD) roles/k8s-init-machines/tasks/main.yml $(LINT-YAML-CMD) .drone.yml +check-playbooks-syntax: + ansible-playbook playbooks/docker-units/init.yml -i inventory/hosts --syntax-check + ansible-playbook playbooks/k8s/init.yml -i inventory/hosts --syntax-check + docker-units-init: ansible-playbook playbooks/docker-units/init.yml -i inventory/hosts --ask-become-pass +k8s-units-init: + ansible-playbook playbooks/k8s/init.yml -i inventory/hosts --ask-become-pass + ping: - ansible -i hosts all -m ping + ansible -i inventory/hosts all -m ping .DEFAULT_GOAL := lint diff --git a/ansible.cfg b/ansible.cfg index f89b190..2a0c0fc 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,6 +1,8 @@ [defaults] hostfile = hosts nocows = 1 +inventory = inventory +roles_path = roles [privilege_escalation] become_method = sudo diff --git a/group_vars/all.yml b/group_vars/all.yml deleted file mode 100644 index 4eda9d0..0000000 --- a/group_vars/all.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -aptcachetime: 3600 -locale: "en_US.UTF-8" -timezone: "Europe/Moscow" -... diff --git a/inventory/hosts b/inventory/hosts index 13baaef..808046e 100644 --- a/inventory/hosts +++ b/inventory/hosts @@ -18,3 +18,4 @@ pi-hole ansible_host=192.168.1.151 ansible_connection=ssh ansible_ssh_private_key_file=/home/fedy95/.ssh/id_rsa ansible_user=fedy95 +aptcachetime=3600 diff --git a/playbooks/k8s/init.yml b/playbooks/k8s/init.yml index 2dbbc93..7ab0d8f 100644 --- a/playbooks/k8s/init.yml +++ b/playbooks/k8s/init.yml @@ -1,18 +1,19 @@ --- - name: k8s-units playbook hosts: k8s + become: true roles: - - { role: common, become: true } - - { role: docker, become: true } - - { role: k8s, become: true } + - common + - docker + - k8s-init-machines -- name: k8s playbook - hosts: k8s-master - roles: - - { role: common, become: true } - -- name: k8s playbook - hosts: k8s-worker - roles: - - { role: common, become: true } +#- name: k8s playbook +# hosts: k8s-master +# roles: +# - { role: common, become: true } +# +#- name: k8s playbook +# hosts: k8s-worker +# roles: +# - { role: common, become: true } ... diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 9899889..e4c0b45 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -25,5 +25,4 @@ - name: Upgrade installed packages apt: upgrade=yes - ... diff --git a/roles/k8s-init-machines/tasks/main.yml b/roles/k8s-init-machines/tasks/main.yml new file mode 100644 index 0000000..6abeec5 --- /dev/null +++ b/roles/k8s-init-machines/tasks/main.yml @@ -0,0 +1,43 @@ +--- +- name: Disable all swaps from /proc/swaps + shell: | + swapoff --all + +- name: Disable SWAP in fstab + lineinfile: + path: /etc/fstab + regexp: 'swap' + state: absent + +- name: Add Google GPG key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + +- name: Add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + mode: 0600 + +- name: Installing Kubernetes Cluster Packages + apt: + name: "{{ item }}" + state: present + cache_valid_time: "{{ aptcachetime }}" + loop: [ 'kubeadm', 'kubectl', 'kubelet' ] + +- name: Enable service kubelet persistently + service: + name: kubelet + enabled: yes + +# TODO ??? +#- name: Reboot all the kubernetes nodes. +# reboot: +# post_reboot_delay: 10 +# reboot_timeout: 40 +# connect_timeout: 60 +# test_command: uptime +... diff --git a/roles/k8s/tasks/main.yml b/roles/k8s-init-machines/tasks/other.yml similarity index 100% rename from roles/k8s/tasks/main.yml rename to roles/k8s-init-machines/tasks/other.yml diff --git a/roles/k8s/tasks/01_prepare.yml b/roles/k8s/tasks/01_prepare.yml deleted file mode 100644 index 98eeb2c..0000000 --- a/roles/k8s/tasks/01_prepare.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -- hosts: k8s - - name: Disable all swaps from /proc/swaps - shell: | - swapoff --all - - - name: Disable SWAP in fstab - lineinfile: - path: /etc/fstab - regexp: 'swap' - state: absent - - - name: Add Google GPG key - apt_key: - url: https://packages.cloud.google.com/apt/doc/apt-key.gpg - state: present - - - name: Add Kubernetes' APT repository - apt_repository: - repo: deb http://apt.kubernetes.io/ kubernetes-xenial main - state: present - filename: 'kubernetes' - mode: 0600 - - - name: Installing Kubernetes Cluster Packages - apt: - name: "{{ item }}" - state: present - cache_valid_time: "{{ aptcachetime }}" - with_items: - - kubelet-{{kubelet_version}} - - kubeadm - - kubectl - loop: [ 'kubeadm', 'kubectl', 'kubelet' ] - - - name: Enable service kubelet persistently - service: - name: kubelet - enabled: yes - -# TODO ??? -# - name: Reboot all the kubernetes nodes. -# reboot: -# post_reboot_delay: 10 -# reboot_timeout: 40 -# connect_timeout: 60 -# test_command: uptime -... diff --git a/roles/k8s/vars/main.yml b/roles/k8s/vars/main.yml deleted file mode 100644 index c0c1eca..0000000 --- a/roles/k8s/vars/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -kubelet_version: "1.14.0-00" -... -- 2.30.2 From 14e10d080c545ff890d393195efb6812769851ad Mon Sep 17 00:00:00 2001 From: fedy95 Date: Thu, 29 Apr 2021 18:32:48 +0300 Subject: [PATCH 4/4] temp --- .drone.yml | 5 +- Makefile | 9 ++- README.md | 7 ++- inventory/hosts | 15 +++++ playbooks/k8s-dev/init.yml | 31 +++++++++++ roles/common/tasks/main.yml | 6 +- roles/docker/tasks/main.yml | 2 +- roles/k8s-init-first-master/tasks/main.yml | 45 +++++++++++++++ roles/k8s-init-machines/tasks/main.yml | 5 +- roles/k8s-init-machines/tasks/other.yml | 55 ------------------- roles/k8s-init-workers/tasks/main.yml | 14 +++++ .../tasks/main.yml | 7 +++ 12 files changed, 140 insertions(+), 61 deletions(-) create mode 100644 playbooks/k8s-dev/init.yml create mode 100644 roles/k8s-init-first-master/tasks/main.yml delete mode 100644 roles/k8s-init-machines/tasks/other.yml create mode 100644 roles/k8s-init-workers/tasks/main.yml create mode 100644 roles/k8s-join-workers-to-first-master/tasks/main.yml diff --git a/.drone.yml b/.drone.yml index df36a74..06cbf94 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,16 +9,19 @@ steps: - name: lint yaml image: registry.fedy95.com/baseimage-yamllint:latest commands: - - yamllint -c /yamllint/relaxed.yaml group_vars/all.yml - yamllint -c /yamllint/relaxed.yaml playbooks/docker-units/init.yml - yamllint -c /yamllint/relaxed.yaml playbooks/k8s/init.yml + - yamllint -c /yamllint/relaxed.yaml playbooks/k8s-dev/init.yml - yamllint -c /yamllint/relaxed.yaml roles/common/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker/defaults/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker/handlers/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker-compose/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml roles/docker-compose/vars/main.yml + - yamllint -c /yamllint/relaxed.yaml roles/k8s-init-first-master/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml roles/k8s-init-machines/tasks/main.yml + - yamllint -c /yamllint/relaxed.yaml roles/k8s-init-workers/tasks/main.yml + - yamllint -c /yamllint/relaxed.yaml roles/k8s-join-workers-to-first-master/tasks/main.yml - yamllint -c /yamllint/relaxed.yaml .drone.yml when: event: pull_request diff --git a/Makefile b/Makefile index 19843a8..21a2d72 100644 --- a/Makefile +++ b/Makefile @@ -9,21 +9,25 @@ lint: lint-yaml LINT-YAML-CMD=docker run --rm -it -v $(PWD):/data ${REGISTRY}/${YAMLLINT_TAG} lint-yaml: docker pull ${REGISTRY}/${YAMLLINT_TAG} - $(LINT-YAML-CMD) group_vars/all.yml $(LINT-YAML-CMD) playbooks/docker-units/init.yml $(LINT-YAML-CMD) playbooks/k8s/init.yml + $(LINT-YAML-CMD) playbooks/k8s-dev/init.yml $(LINT-YAML-CMD) roles/common/tasks/main.yml $(LINT-YAML-CMD) roles/docker/defaults/main.yml $(LINT-YAML-CMD) roles/docker/handlers/main.yml $(LINT-YAML-CMD) roles/docker/tasks/main.yml $(LINT-YAML-CMD) roles/docker-compose/tasks/main.yml $(LINT-YAML-CMD) roles/docker-compose/vars/main.yml + $(LINT-YAML-CMD) roles/k8s-init-first-master/tasks/main.yml $(LINT-YAML-CMD) roles/k8s-init-machines/tasks/main.yml + $(LINT-YAML-CMD) roles/k8s-init-workers/tasks/main.yml + $(LINT-YAML-CMD) roles/k8s-join-workers-to-first-master/tasks/main.yml $(LINT-YAML-CMD) .drone.yml check-playbooks-syntax: ansible-playbook playbooks/docker-units/init.yml -i inventory/hosts --syntax-check ansible-playbook playbooks/k8s/init.yml -i inventory/hosts --syntax-check + ansible-playbook playbooks/k8s-dev/init.yml -i inventory/hosts --syntax-check docker-units-init: ansible-playbook playbooks/docker-units/init.yml -i inventory/hosts --ask-become-pass @@ -31,6 +35,9 @@ docker-units-init: k8s-units-init: ansible-playbook playbooks/k8s/init.yml -i inventory/hosts --ask-become-pass +k8s-dev-units-init: + ansible-playbook playbooks/k8s-dev/init.yml -i inventory/hosts --ask-become-pass + ping: ansible -i inventory/hosts all -m ping diff --git a/README.md b/README.md index f01775a..2ae0ab6 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ - [ansible](https://www.ansible.com/) - https://github.com/IBM/ansible-kubernetes-ha-cluster - https://www.linuxsysadmins.com/install-kubernetes-cluster-with-ansible/ - +- https://www.youtube.com/watch?v=l7gC4SgW7DU ### how to run - see Makefile + +Creating User Account +Install Kubernetes & Docker Packages. +Setting up Kubernetes Master Server +Setting Up Worker Nodes diff --git a/inventory/hosts b/inventory/hosts index 808046e..f610e22 100644 --- a/inventory/hosts +++ b/inventory/hosts @@ -1,3 +1,18 @@ +[k8s-dev:children] +k8s-dev-master +k8s-dev-worker + +[k8s-dev-master-first] +k8s-dev-master-01 ansible_host=192.168.1.200 + +[k8s-dev-master] +k8s-dev-master-01 ansible_host=192.168.1.200 +k8s-dev-master-02 ansible_host=192.168.1.201 + +[k8s-dev-worker] +k8s-dev-worker-01 ansible_host=192.168.1.202 +k8s-dev-worker-02 ansible_host=192.168.1.203 + [k8s:children] k8s-master k8s-worker diff --git a/playbooks/k8s-dev/init.yml b/playbooks/k8s-dev/init.yml new file mode 100644 index 0000000..62c71d5 --- /dev/null +++ b/playbooks/k8s-dev/init.yml @@ -0,0 +1,31 @@ +--- +- name: k8s-units playbook + hosts: k8s-dev + become: true + roles: + - common + - docker + - k8s-init-machines + +- name: k8s-units playbook 2 + hosts: k8s-dev-master-first + become: true + vars_prompt: + - name: "k8s_master_ip" + prompt: "Enter the Apiserver advertise address, example: 192.168.1.200" + private: no + roles: + - k8s-init-first-master + +- name: k8s-units playbook 3 + hosts: k8s-dev-worker + become: true + roles: + - k8s-init-workers + +- name: k8s-units playbook 4 + hosts: k8s-dev-master-first + become: true + roles: + - k8s-join-workers-to-first-master +... diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index e4c0b45..86f6edd 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -21,7 +21,11 @@ state: latest update_cache: yes cache_valid_time: "{{ aptcachetime }}" - loop: [ 'git', 'make', 'nano', 'net-tools' ] + loop: + - 'git' + - 'make' + - 'nano' + - 'net-tools' - name: Upgrade installed packages apt: upgrade=yes diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml index 92c19bf..22ca296 100644 --- a/roles/docker/tasks/main.yml +++ b/roles/docker/tasks/main.yml @@ -45,7 +45,7 @@ name: "{{ item }}" groups: docker append: true - with_items: "{{ ansible_env.USER }}" + with_items: "fedy95" - name: "Ensure Docker is {{ docker.start | ternary('started','stopped') }}" service: name=docker state={{ docker.start | ternary('restarted','stopped') }} enabled={{ docker.service_enabled }} diff --git a/roles/k8s-init-first-master/tasks/main.yml b/roles/k8s-init-first-master/tasks/main.yml new file mode 100644 index 0000000..b39500c --- /dev/null +++ b/roles/k8s-init-first-master/tasks/main.yml @@ -0,0 +1,45 @@ +--- +#- name: Intilizing Kubernetes Cluster +# command: kubeadm init --pod-network-cidr 192.168.0.0/16 --apiserver-advertise-address "{{ k8s_master_ip }}" +# run_once: true +# delegate_to: "{{ k8s_master_ip }}" + +- name: Create directory for kube config. + file: + path: /home/fedy95/.kube + state: directory + owner: "fedy95" + group: "fedy95" + mode: 0755 + +- name: Copy /etc/kubernetes/admin.conf to user home directory /home/fedy95/.kube/config. + copy: + src: /etc/kubernetes/admin.conf + dest: /home/fedy95/.kube/config + remote_src: yes + owner: "fedy95" + group: "fedy95" + mode: '0644' + +- name: Remove the cache directory. + file: + path: /home/fedy95/.kube/cache + state: absent + +- name: Create Pod Network & RBAC. + command: "{{ item }}" + with_items: + - kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml + - kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml + +- name: Get the token for joining the nodes with Kuberentes master. + shell: kubeadm token create --print-join-command + register: kubernetes_join_command + +- debug: + msg: "{{ kubernetes_join_command.stdout }}" + +- name: Copy join command to local file. + become: false + local_action: copy content="{{ kubernetes_join_command.stdout_lines[0] }}" dest="/tmp/kubernetes_join_command" mode=0777 +... diff --git a/roles/k8s-init-machines/tasks/main.yml b/roles/k8s-init-machines/tasks/main.yml index 6abeec5..29eb13c 100644 --- a/roles/k8s-init-machines/tasks/main.yml +++ b/roles/k8s-init-machines/tasks/main.yml @@ -26,7 +26,10 @@ name: "{{ item }}" state: present cache_valid_time: "{{ aptcachetime }}" - loop: [ 'kubeadm', 'kubectl', 'kubelet' ] + loop: + - 'kubeadm' + - 'kubectl' + - 'kubelet' - name: Enable service kubelet persistently service: diff --git a/roles/k8s-init-machines/tasks/other.yml b/roles/k8s-init-machines/tasks/other.yml deleted file mode 100644 index 8d59650..0000000 --- a/roles/k8s-init-machines/tasks/other.yml +++ /dev/null @@ -1,55 +0,0 @@ -- hosts: k8s-master - become: yes - tasks: - - name: install kubectl - apt: - name: kubectl={{ kube_version }} - state: present - force: yes - - - name: initialize the cluster - shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt - args: - chdir: $HOME - creates: cluster_initialized.txt - - - name: create .kube directory - file: - path: $HOME/.kube - state: directory - mode: 0755 - - - name: copy admin.conf to user's kube config - copy: - src: /etc/kubernetes/admin.conf - dest: $HOME/.kube/config - remote_src: yes - owner: fedy95 - - - name: install Pod network - shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml >> pod_network_setup.txt - args: - chdir: $HOME - creates: pod_network_setup.txt - -- hosts: k8s-master - become: yes - gather_facts: false - tasks: - - name: get join command - shell: kubeadm token create --print-join-command - register: join_command_raw - - - name: set join command - set_fact: - join_command: "{{ join_command_raw.stdout_lines[0] }}" - - -- hosts: k8s-workers - become: yes - tasks: - - name: join cluster - shell: "{{ hostvars['master'].join_command }} >> node_joined.txt" - args: - chdir: $HOME - creates: node_joined.txt diff --git a/roles/k8s-init-workers/tasks/main.yml b/roles/k8s-init-workers/tasks/main.yml new file mode 100644 index 0000000..3346375 --- /dev/null +++ b/roles/k8s-init-workers/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- name: Copy join command to worker nodes. + copy: + src: /tmp/kubernetes_join_command + dest: /tmp/kubernetes_join_command + mode: 0777 + +- name: Join the Worker nodes with master. + command: sh /tmp/kubernetes_join_command + register: joined_or_not + +- debug: + msg: "{{ joined_or_not.stdout }}" +... diff --git a/roles/k8s-join-workers-to-first-master/tasks/main.yml b/roles/k8s-join-workers-to-first-master/tasks/main.yml new file mode 100644 index 0000000..749d9e4 --- /dev/null +++ b/roles/k8s-join-workers-to-first-master/tasks/main.yml @@ -0,0 +1,7 @@ +--- +- name: Configure kubectl command auto completion. + lineinfile: + dest: /home/fedy95/.bashrc + line: 'source <(kubectl completion bash)' + insertafter: EOF +... -- 2.30.2