Pravat kumar Nath sharma
3 min readApr 29, 2021

--

setup multinode cluster of kubernetes on aws using ansible

steps-1 create a inventory with previlage.

vim ansible.cfg

2.create 2 role

  1. first role for launching instanc

TO CREATE ROLE

>ansible-galaxy init <role name>

then go to your role folder

go to vars folder and set everything to launch instance

2.go to now tasks folder and set your playbook for launch instance

3.create a main playbook to include both role for launch instance as well as configure cluster.

now lets create a role for setup cluster

  1. ansible-galaxy init<role name>
  2. go to vars folder of the role and open main.yml
  3. in this folder set ur network cidr
  4. give ur role path

now go to your task folder and open main.yml .in this write the playbook for set master node as well as slave node

  1. you can do it using as well as separate role

in this i did it using single role with when keyword

>>playbook

— -
# tasks file for kube_cluster
- name: installing docker and iproute-tc
yum:
name:
— docker
— iproute-tc
state: present

- name: copy the repo
copy:
dest: /etc/yum.repos.d/kubernetes.repo
content: |
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

- name: install kubelet kubeclt kubeadm
yum:
name:
— kubectl
— kubelet
— kubeadm
state: present
enablerepo: kubernetes

- name: start the docker and kubelet service
service:
name: “{{item}}”
state: started
enabled: yes
with_items:
— kubelet
— docker

- name: pulling images
command: “kubeadm config images pull”

- name: changing cgroup to systemd
copy:
dest: /etc/docker/daemon.json
content: |
{
“exec-opts”: [“native.cgroupdriver=systemd”]
}
notify: restart docker

- name: notifing handlers to restart docker
meta: flush_handlers

- name: allowing iptables to see traffic bridge
copy:
dest: /etc/sysctl.d/k8s.conf
content: |
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

- name: restarting sysctl
command: sysctl — system

- command: “kubeadm init — pod-network-cidr={{network_cidr}} — ignore-preflight-errors=NumCPU — ignore-preflight-errors=Mem”
ignore_errors: yes
when:
node_name == “master”
- name: create folder and copy the conf file
shell: “{{item}}”
with_items:
— mkdir -p $HOME/.kube
— cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
— chown $(id -u):$(id -g) $HOME/.kube/config
when:
node_name == “master”
- name: flannel run
shell: “kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml"
when:
node_name == “master”

- name: create token
shell: “kubeadm token create — print-join-command”
register: token_cred
when:
node_name == “master”

- local_action:
module: copy
content: “token: {{token_cred.stdout}}”
dest: “{{role_path}}/vars/token.yml”
when:
node_name == “master”

- name: include variables
include_vars:
file: “{{role_path}}/vars/token.yml”
when:
node_name == “slave”

- name: joining slave to master
shell: “{{token}}”
when:
node_name == “slave”

>>now lets run the main playbook

the multinode cluster setup done sucessfulyy if you have any doubt or suggestion you can contact me in my linkedin:

https://www.linkedin.com/in/pravat-kumar-nathsharma/

--

--