-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbootstrap.yaml
202 lines (167 loc) · 5.1 KB
/
bootstrap.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
---
- name: Bootstrap the master and worker nodes
become: true
hosts: [master_nodes, worker_nodes]
tasks:
- name: Install system packages
apt:
pkg:
- software-properties-common
- python3-pip
- virtualenv
- python3-setuptools
- samba
- net-tools
- docker.io
state: latest
update_cache: true
- name: Set docker sock permissions
file:
path: /var/run/docker.sock
owner: root
group: docker
mode: '1666'
- name: Add K8s GPG key
apt_key:
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
state: present
- name: Add k8s repo
apt_repository:
repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
state: present
- name: Install K8s
apt:
pkg:
- kubeadm
- kubelet
- kubectl
state: latest
update_cache: true
- name: Make sure docker uses correct cgroup driver
copy:
src: "{{ playbook_dir }}/templates/daemon.json"
dest: /etc/docker/daemon.json
remote_src: no
owner: k8s
mode: '0755'
group: k8s
- name: Restart docker service
service:
name: docker
state: restarted
- name: Create home directory
file:
path: "/home/k8s/.kube"
state: directory
- name: Remove dependencies that are no longer required
apt:
autoremove: yes
- name: Enable cgroups memory
copy:
src: "{{ playbook_dir }}/templates/cmdline.txt"
dest: /boot/firmware/cmdline.txt
remote_src: no
owner: root
mode: '0751'
group: root
- name: Reboot machines and wait until they are back up
reboot:
################################
################################
- name: Configure master nodes
become: true
hosts: [master_nodes]
tasks:
- name: Create bootstrap dir to store configs
file:
path: "/home/k8s/.bootstrap"
state: directory
- name: Copy kube-config
copy:
src: "{{ playbook_dir }}/templates/kube-config.yaml"
dest: /home/k8s/.bootstrap/kube-config.yaml
remote_src: no
owner: k8s
mode: '0755'
group: k8s
- name: Copy calico config
copy:
src: "{{ playbook_dir }}/templates/calico.yaml"
dest: /home/k8s/.bootstrap/calico.yaml
remote_src: no
owner: k8s
mode: '0755'
group: k8s
- name: Init master
become: true
shell: kubeadm init --config /home/k8s/.bootstrap/kube-config.yaml
- name: Copy kubectl config
copy:
src: /etc/kubernetes/admin.conf
dest: /home/k8s/.kube/config
owner: k8s
group: k8s
remote_src: yes
- name: Fetch kubectl config
fetch:
become: false
src: /home/k8s/.kube/config
dest: "{{ playbook_dir }}/.kube/config"
flat: yes
- name: Install calico CNI
become: false
shell: kubectl apply -f /home/k8s/.bootstrap/calico.yaml
- name: Create join token
become: false
shell: kubeadm token create --print-join-command
register: kubernetes_join_command
- name: Print join command to console
debug:
msg: "{{ kubernetes_join_command.stdout_lines[0] }}"
- name: Set join command fact
set_fact:
join_command: "{{ kubernetes_join_command.stdout_lines[0] }}"
################################
################################
- name: Join worker nodes to cluster
hosts: [worker_nodes]
become: yes
gather_facts: yes
tasks:
- name: Join worker nodes
shell: "{{ hostvars['k8s@master01']['join_command'] }}"
register: joined_or_not
- name: Print join output
debug:
msg: "{{ joined_or_not.stdout }}"
################################
################################
- name: Configure cluster
hosts: [master_nodes]
tasks:
- name: Remove master node taint
shell: kubectl taint nodes master01 node-role.kubernetes.io/control-plane:NoSchedule-
- name: Copy metallb
copy:
src: "{{ playbook_dir }}/templates/metallb.yaml"
dest: /home/k8s/.bootstrap/metallb.yaml
remote_src: no
owner: k8s
mode: '0755'
group: k8s
- name: Install metallb
become: false
shell: kubectl apply -f /home/k8s/.bootstrap/metallb.yaml
- name: Copy ELB config map
copy:
src: "{{ playbook_dir }}/templates/elb-cm.yaml"
dest: /home/k8s/.bootstrap/elb-cm.yaml
remote_src: no
owner: k8s
mode: '0755'
group: k8s
- name: Set ELB config map
become: false
shell: kubectl apply -f /home/k8s/.bootstrap/elb-cm.yaml
- name: Install nginx ingress-controller
shell: kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/baremetal/deploy.yaml