setup multinode cluster of kubernetes on aws using ansible
steps-1 create a inventory with previlage.
vim ansible.cfg
2.create 2 role
- 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
- ansible-galaxy init<role name>
- go to vars folder of the role and open main.yml
- in this folder set ur network cidr
- 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
- 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: