Skip to content

Commit a86e3c9

Browse files
author
Swapnil Kulkarni
authored
Merge pull request #1 from coolsvap/ansible
Ansible changes
2 parents 8381c5f + 9501f9d commit a86e3c9

8 files changed

+360
-0
lines changed

.env

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
BOX_IMAGE="generic/ubuntu1804"
2+
PROVIDER="virtualbox"
3+
NODE_MEMORY="2048"
4+
NODE_CPU="1"
5+
HOSTNAME="k8s-node"
6+
KUBE_VERSION="1.21.1"
7+
8+
9+
10+

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.vagrant
2+

Vagrantfile

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Vagrant.configure("2") do |config|
2+
config.env.enable
3+
config.vm.box = ENV["BOX_IMAGE"]
4+
config.vm.box_check_update = false
5+
6+
config.vm.provider ENV["PROVIDER"] do |l|
7+
l.cpus = ENV["NODE_CPU"]
8+
l.memory = ENV["NODE_MEMORY"]
9+
end
10+
11+
config.hostmanager.enabled = true
12+
config.hostmanager.manage_guest = true
13+
config.vm.synced_folder ".", "/vagrant"
14+
config.vm.provision :shell, :path => "install-ansible.sh"
15+
16+
config.vm.define ENV["HOSTNAME"] do |master|
17+
master.vm.hostname = ENV["HOSTNAME"]
18+
master.vm.provision "ansible_local" do |ansible|
19+
ansible.playbook = "base.yaml"
20+
ansible.extra_vars = {
21+
node_ip: "127.0.0.1",
22+
kube_version: ENV["KUBE_VERSION"]
23+
}
24+
end
25+
end
26+
end

base.yaml

+183
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
---
2+
- hosts: all
3+
become: true
4+
gather_facts: yes
5+
handlers:
6+
- name: docker status
7+
service: name=docker state=started
8+
- name: kubelet status
9+
service: name=kubelet state=started
10+
tasks:
11+
- name: Remove existing Docker Kubernetes packages
12+
apt:
13+
name: "{{ packages }}"
14+
state: absent
15+
update_cache: yes
16+
vars:
17+
packages:
18+
- docker.io
19+
- kubelet
20+
- kubeadm
21+
- kubectl
22+
- kubernetes-cni
23+
- docker-ce
24+
25+
- name: Recursively remove directory
26+
ansible.builtin.file:
27+
path: "{{ item }}"
28+
state: absent
29+
with_items:
30+
- /root/.kube
31+
- /etc/cni/net.d
32+
- /etc/kubernetes
33+
- /var/lib/etcd
34+
- /var/lib/kubelet
35+
- /var/run/kubernetes
36+
- /var/lib/cni
37+
- /opt/cni
38+
39+
- name: Iptables flush filter
40+
ansible.builtin.iptables:
41+
flush: yes
42+
43+
- name: Just force systemd to reread configs (2.4 and above)
44+
ansible.builtin.systemd:
45+
daemon_reload: yes
46+
47+
- name: Install packages that allow apt to be used over HTTPS
48+
apt:
49+
name: "{{ packages }}"
50+
state: present
51+
update_cache: yes
52+
vars:
53+
packages:
54+
- apt-transport-https
55+
- ca-certificates
56+
- curl
57+
- lsb-release
58+
- gnupg
59+
- software-properties-common
60+
- wget
61+
62+
- name: Install Linux Headers for the kernelversion
63+
apt:
64+
name: linux-headers-{{ ansible_kernel }}
65+
state: present
66+
update_cache: true
67+
68+
69+
- name: Add an apt signing key for Docker
70+
apt_key:
71+
url: https://download.docker.com/linux/ubuntu/gpg
72+
state: present
73+
74+
- name: Add an apt signing key for Kubernetes
75+
apt_key:
76+
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
77+
state: present
78+
79+
- name: Adding apt repository for Kubernetes
80+
apt_repository:
81+
repo: deb https://apt.kubernetes.io/ kubernetes-xenial main
82+
state: present
83+
filename: kubernetes.list
84+
85+
- name: Add apt repository for stable version
86+
apt_repository:
87+
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
88+
state: present
89+
90+
- name: Install docker and its dependecies
91+
apt:
92+
name: "{{ packages }}"
93+
state: present
94+
update_cache: yes
95+
vars:
96+
packages:
97+
- etcd-client
98+
- vim
99+
- build-essential
100+
- bash-completion
101+
- binutils
102+
- apparmor-utils
103+
- docker-ce
104+
- docker-ce-cli
105+
- "kubelet={{ kube_version }}-00"
106+
- "kubeadm={{ kube_version }}-00"
107+
- "kubectl={{ kube_version }}-00"
108+
- kubernetes-cni=0.8.7-00
109+
notify:
110+
- docker status
111+
112+
- name: Create new directory for Docker
113+
ansible.builtin.file:
114+
path: /etc/systemd/system/docker.service.d
115+
state: directory
116+
recurse: yes
117+
118+
- name: Add vagrant user to docker group
119+
user:
120+
name: vagrant
121+
group: docker
122+
123+
- name: Remove swapfile from /etc/fstab
124+
mount:
125+
name: "{{ item }}"
126+
fstype: swap
127+
state: absent
128+
with_items:
129+
- swap
130+
- none
131+
132+
- name: Disable swap
133+
command: swapoff -a
134+
when: ansible_swaptotal_mb > 0
135+
136+
- name: Deploy Docker daemon.json.
137+
copy:
138+
src: daemon.json
139+
dest: /etc/docker/daemon.json
140+
141+
- name: Enable service docker
142+
ansible.builtin.systemd:
143+
name: docker
144+
enabled: yes
145+
146+
- name: Restart kubelet and docker daemon
147+
service:
148+
name: "{{ item }}"
149+
daemon_reload: yes
150+
state: restarted
151+
with_items:
152+
- docker
153+
- kubelet
154+
notify:
155+
- docker status
156+
- kubelet status
157+
158+
- name: Remove useless packages from the cache
159+
apt:
160+
autoclean: yes
161+
162+
- name: Remove dependencies that are no longer required
163+
apt:
164+
autoremove: yes
165+
166+
- name: Create new directory for installer scripts
167+
ansible.builtin.file:
168+
path: /etc/k8s-scripts
169+
state: directory
170+
recurse: yes
171+
172+
- name: Copy Initialization Scripts
173+
ansible.builtin.copy:
174+
remote_src: yes
175+
src: "{{ item }}"
176+
dest: /etc/k8s-scripts
177+
mode: '0755'
178+
with_items:
179+
- master.yaml
180+
- worker.yaml
181+
182+
- name: Pull Kubernetes images
183+
shell: kubeadm config images pull

daemon.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"exec-opts": ["native.cgroupdriver=systemd"],
3+
"log-driver": "json-file",
4+
"storage-driver": "overlay2"
5+
}

install-ansible.sh

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/sh
2+
3+
apt-add-repository ppa:ansible/ansible
4+
apt update
5+
apt install ansible -y
6+
7+
### Setting up background to operate Kubernetes
8+
echo 'colorscheme ron' >> ~/.vimrc
9+
echo 'set tabstop=2' >> ~/.vimrc
10+
echo 'set shiftwidth=2' >> ~/.vimrc
11+
echo 'set expandtab' >> ~/.vimrc
12+
echo 'source <(kubectl completion bash)' >> ~/.bashrc
13+
echo 'alias k=kubectl' >> ~/.bashrc
14+
echo 'alias c=clear' >> ~/.bashrc
15+
echo 'complete -F __start_kubectl k' >> ~/.bashrc
16+
sed -i '1s/^/force_color_prompt=yes\n/' ~/.bashrc

master.yaml

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
- hosts: all
3+
become: true
4+
gather_facts: yes
5+
tasks:
6+
- name: Reset existing cluster components if any
7+
command: kubeadm reset -f
8+
9+
- name: Recursively remove directory
10+
ansible.builtin.file:
11+
path: "{{ item }}"
12+
state: absent
13+
with_items:
14+
- /root/.kube
15+
- /vagrant/.kube
16+
- /etc/cni/net.d
17+
- /etc/kubernetes
18+
- /var/lib/etcd
19+
- /var/lib/kubelet
20+
- /var/run/kubernetes
21+
- /var/lib/cni
22+
- /opt/cni
23+
24+
- name: Iptables flush filter
25+
ansible.builtin.iptables:
26+
flush: yes
27+
28+
- name: Configure default IP route for service network
29+
command: "ip route add 10.96.0.0/16 dev eth1 src {{ ansible_eth1.ipv4.address }}"
30+
31+
- name: Initialize the Kubernetes cluster using kubeadm
32+
command: kubeadm init --apiserver-advertise-address={{ ansible_eth1.ipv4.address }} --apiserver-cert-extra-sans={{ ansible_eth1.ipv4.address }} --node-name {{ansible_hostname}} --pod-network-cidr={{ pod_network_cidr }}
33+
34+
- name: Create new directory for Kubenetes config
35+
ansible.builtin.file:
36+
path: "{{ item }}"
37+
state: directory
38+
recurse: yes
39+
with_items:
40+
- /home/vagrant/.kube
41+
- /root/.kube
42+
43+
- name: Copy file with owner and permissions
44+
ansible.builtin.copy:
45+
remote_src: yes
46+
src: "{{ item.src }}"
47+
dest: "{{ item.dest }}"
48+
owner: root
49+
group: root
50+
mode: '0644'
51+
with_items:
52+
- { src: /etc/kubernetes/admin.conf, dest: /home/vagrant/.kube/config }
53+
- { src: /etc/kubernetes/admin.conf, dest: /root/.kube/config }
54+
become: true
55+
56+
- name: Recursively change ownership of a directory
57+
ansible.builtin.file:
58+
path: /home/vagrant/.kube/
59+
state: directory
60+
recurse: yes
61+
owner: vagrant
62+
group: vagrant
63+
64+
- name: Untaint the master nodes
65+
command: kubectl taint nodes --all node-role.kubernetes.io/master-
66+
67+
- name: Install calico pod network
68+
become: false
69+
command: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
70+
when: nw_plugin == 'calico'
71+
72+
- name: Get the kubectl version
73+
shell: kubectl version | base64 | tr -d '\n'
74+
register: kubectl_version
75+
76+
- name: Install weave pod network
77+
become: false
78+
command: "kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version={{ kubectl_version.stdout_lines[0] }}"
79+
when: nw_plugin == 'weave'
80+
81+
- name: Generate join command
82+
command: kubeadm token create --print-join-command --ttl 0
83+
register: join_command
84+
85+
- name: Copy join command to local file
86+
local_action: copy content="{{ join_command.stdout_lines[0] }}" dest="/etc/.vagrantdata/kubeadm-join"

worker.yaml

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
- hosts: all
3+
become: true
4+
gather_facts: yes
5+
tasks:
6+
- name: Reset existing cluster components if any
7+
command: kubeadm reset -f
8+
9+
- name: Recursively remove directory
10+
ansible.builtin.file:
11+
path: "{{ item }}"
12+
state: absent
13+
with_items:
14+
- /root/.kube
15+
- /vagrant/.kube
16+
- /etc/cni/net.d
17+
- /etc/kubernetes
18+
- /var/lib/etcd
19+
- /var/lib/kubelet
20+
- /var/run/kubernetes
21+
- /var/lib/cni
22+
- /opt/cni
23+
24+
- name: Iptables flush filter
25+
ansible.builtin.iptables:
26+
flush: yes
27+
28+
- name: Configure default IP route for service network
29+
command: "ip route add 10.96.0.0/16 dev eth1 src {{ ansible_eth1.ipv4.address }}"
30+
31+
- name: Run the join command
32+
shell: $(cat /etc/.vagrantdata/kubeadm-join)

0 commit comments

Comments
 (0)