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 +...