@@ -40,12 +40,7 @@ def fetch_ip_hostname_by_role(role)
40
40
platform = fetch_platform_by_node ( ipaddr )
41
41
ENV [ 'TARGET_HOST' ] = target_roles ( role ) [ 0 ] [ :name ]
42
42
hostname = run_shell ( 'hostname' ) . stdout . strip
43
- os_family = run_shell ( "facter -y os.family | cut -d':' -f2 | tr -d ' '" ) . stdout . strip
44
- int_ipaddr = if os_family . casecmp ( 'redhat' ) . zero?
45
- run_shell ( "ip route get 8.8.8.8 | awk '{print $7; exit}'" ) . stdout . strip
46
- else
47
- run_shell ( "ip route get 8.8.8.8 | awk '{print $NF; exit}'" ) . stdout . strip
48
- end
43
+ int_ipaddr = run_shell ( "ip route get 8.8.8.8 | awk '{print $7; exit}'" ) . stdout . strip
49
44
[ hostname , ipaddr , int_ipaddr ]
50
45
end
51
46
@@ -54,6 +49,10 @@ def change_target_host(role)
54
49
ENV [ 'TARGET_HOST' ] = target_roles ( role ) [ 0 ] [ :name ]
55
50
end
56
51
52
+ def os_family
53
+ run_shell ( "facter -y os.family | cut -d':' -f2 | tr -d ' '" ) . stdout . strip
54
+ end
55
+
57
56
def reset_target_host
58
57
ENV [ 'TARGET_HOST' ] = @orig_target_host
59
58
end
@@ -70,37 +69,79 @@ def configure_puppet_server(controller, worker1, worker2)
70
69
configure_puppet_agent ( 'worker2' )
71
70
puppet_cert_sign
72
71
# Create site.pp
73
- site_pp = <<-EOS
74
- node /#{ controller [ 0 ] } / {
75
- class {'kubernetes':
76
- kubernetes_version => '1.28.15',
77
- kubernetes_package_version => '1.28.15',
78
- controller_address => "#{ controller [ 1 ] } :6443",
79
- container_runtime => 'docker',
80
- manage_docker => false,
81
- controller => true,
82
- schedule_on_controller => true,
83
- environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
84
- ignore_preflight_errors => ['NumCPU','ExternalEtcdVersion'],
85
- cgroup_driver => 'systemd',
86
- service_cidr => '10.138.0.0/12',
87
- }
88
- }
89
- node /#{ worker1 } / {
90
- class {'kubernetes':
91
- worker => true,
92
- manage_docker => false,
93
- cgroup_driver => 'systemd',
94
- }
95
- }
96
- node /#{ worker2 } / {
97
- class {'kubernetes':
98
- worker => true,
99
- manage_docker => false,
100
- cgroup_driver => 'systemd',
101
- }
102
- }
103
- EOS
72
+
73
+ site_pp = if os_family . casecmp ( 'redhat' ) . zero?
74
+ <<-EOS
75
+ node /#{ controller [ 0 ] } / {
76
+ class {'kubernetes':
77
+ kubernetes_version => '1.28.15',
78
+ kubernetes_package_version => '1.28.15',
79
+ controller_address => "#{ controller [ 1 ] } :6443",
80
+ container_runtime => 'docker',
81
+ manage_docker => false,
82
+ controller => true,
83
+ schedule_on_controller => true,
84
+ environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
85
+ ignore_preflight_errors => ['NumCPU','ExternalEtcdVersion'],
86
+ cgroup_driver => 'systemd',
87
+ service_cidr => '10.138.0.0/12',
88
+ }
89
+ }
90
+
91
+ node /#{ worker1 } / {
92
+ class {'kubernetes':
93
+ worker => true,
94
+ manage_docker => false,
95
+ cgroup_driver => 'systemd',
96
+ }
97
+ }
98
+
99
+ node /#{ worker2 } / {
100
+ class {'kubernetes':
101
+ worker => true,
102
+ manage_docker => false,
103
+ cgroup_driver => 'systemd',
104
+ }
105
+ }
106
+ EOS
107
+ else
108
+ <<-EOS
109
+ node /#{ controller [ 0 ] } / {
110
+ class {'kubernetes':
111
+ kubernetes_version => '1.28.15',
112
+ kubernetes_package_version => '1.28.15-1.1',
113
+ controller_address => "#{ controller [ 1 ] } :6443",
114
+ container_runtime => 'cri_containerd',
115
+ manage_docker => false,
116
+ controller => true,
117
+ schedule_on_controller => true,
118
+ environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
119
+ ignore_preflight_errors => ['NumCPU','ExternalEtcdVersion'],
120
+ cgroup_driver => 'systemd',
121
+ service_cidr => '10.138.0.0/12',
122
+ }
123
+ }
124
+
125
+ node /#{ worker1 } / {
126
+ class {'kubernetes':
127
+ kubernetes_package_version => '1.28.15-1.1',
128
+ worker => true,
129
+ manage_docker => false,
130
+ cgroup_driver => 'systemd',
131
+ }
132
+ }
133
+
134
+ node /#{ worker2 } / {
135
+ class {'kubernetes':
136
+ kubernetes_package_version => '1.28.15-1.1',
137
+ worker => true,
138
+ manage_docker => false,
139
+ cgroup_driver => 'systemd',
140
+ }
141
+ }
142
+ EOS
143
+ end
144
+
104
145
ENV [ 'TARGET_HOST' ] = target_roles ( 'controller' ) [ 0 ] [ :name ]
105
146
create_remote_file ( 'site' , '/etc/puppetlabs/code/environments/production/manifests/site.pp' , site_pp )
106
147
run_shell ( 'chmod 644 /etc/puppetlabs/code/environments/production/manifests/site.pp' )
@@ -133,8 +174,15 @@ def execute_agent(role)
133
174
def reset_and_restart_containerd
134
175
[ 'controller' , 'worker1' , 'worker2' ] . each do |node |
135
176
ENV [ 'TARGET_HOST' ] = target_roles ( node ) [ 0 ] [ :name ]
136
- run_shell ( 'rm -f /etc/containerd/config.toml' )
137
- run_shell ( 'systemctl restart containerd' )
177
+ if os_family . casecmp ( 'redhat' ) . zero?
178
+ run_shell ( 'rm -f /etc/containerd/config.toml' )
179
+ run_shell ( 'systemctl restart containerd' )
180
+ else
181
+ run_shell ( 'wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz && tar xvf containerd-1.6.12-linux-amd64.tar.gz' )
182
+ run_shell ( 'systemctl stop containerd' )
183
+ run_shell ( 'cd bin && cp * /usr/bin/' )
184
+ run_shell ( 'systemctl start containerd' )
185
+ end
138
186
end
139
187
end
140
188
@@ -147,7 +195,11 @@ def open_communication_ports
147
195
run_shell ( 'iptables -I INPUT -p tcp -m multiport --dports 10251,10252,10255,30000:32767 -j ACCEPT' )
148
196
end
149
197
run_shell ( 'iptables -I INPUT -p udp -m multiport --dports 8472 -j ACCEPT' )
150
- run_shell ( 'iptables-save > /etc/sysconfig/iptables' )
198
+ if os_family . casecmp ( 'redhat' ) . zero?
199
+ run_shell ( 'iptables-save > /etc/sysconfig/iptables' )
200
+ else
201
+ run_shell ( 'iptables-save > /etc/iptables/rules.v4' )
202
+ end
151
203
end
152
204
end
153
205
@@ -157,6 +209,7 @@ def open_communication_ports
157
209
hostname1 , ipaddr1 , int_ipaddr1 = fetch_ip_hostname_by_role ( 'controller' )
158
210
hostname2 , ipaddr2 , int_ipaddr2 = fetch_ip_hostname_by_role ( 'worker1' )
159
211
hostname3 , ipaddr3 , int_ipaddr3 = fetch_ip_hostname_by_role ( 'worker2' )
212
+
160
213
if c . filter . rules . key? :integration
161
214
ENV [ 'TARGET_HOST' ] = target_roles ( 'controller' ) [ 0 ] [ :name ]
162
215
[ 'controller' , 'worker1' , 'worker2' ] . each do |node |
@@ -260,26 +313,48 @@ def open_communication_ports
260
313
PUPPETCODE
261
314
262
315
apply_manifest ( pp )
263
- if %r{debian|ubuntu-1604-lts} . match? ( family )
316
+
317
+ if %r{debian|ubuntu} . match? ( family )
264
318
runtime = 'cri_containerd'
265
319
cni = 'weave'
266
- run_shell ( 'apt-get update && apt-get install -y apt-transport-https' )
267
- run_shell ( 'curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -' )
268
- run_shell ( 'echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list' )
269
- run_shell ( 'apt-get update' )
270
- run_shell ( 'apt-get install -y kubectl' )
271
- run_shell ( 'sudo apt install docker-ce=18.06.0~ce~3-0~ubuntu docker-ce-cli=18.06.0~ce~3-0~ubuntu -y' )
272
- run_shell ( 'sudo apt install docker.io -y' )
273
- run_shell ( 'systemctl start docker.service' )
274
- run_shell ( 'systemctl enable docker.service' )
275
- if family . include? ( 'ubuntu-1604-lts' )
276
- run_shell ( 'sudo ufw disable' )
277
- else
278
- # Workaround for debian as the strech repositories do not have updated kubernetes packages
279
- run_shell ( 'echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> /etc/apt/sources.list.d/kube-xenial.list' )
280
- run_shell ( '/sbin/iptables -F' )
320
+ [ 'controller' , 'worker1' , 'worker2' ] . each do |node |
321
+ ENV [ 'TARGET_HOST' ] = target_roles ( node ) [ 0 ] [ :name ]
322
+
323
+ run_shell ( 'apt update && apt install apt-transport-https -y' )
324
+ run_shell ( 'mkdir -p /etc/apt/keyrings' )
325
+ run_shell ( 'apt-get install -y curl gnupg2 software-properties-common' )
326
+
327
+ if %r{debian-(10|11)} . match? ( family )
328
+ run_shell ( 'curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -' )
329
+ run_shell ( 'add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"' )
330
+ else
331
+ run_shell ( 'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -' )
332
+ run_shell ( 'add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"' )
333
+ end
334
+ run_shell ( 'curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg' )
335
+ run_shell ( 'echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list' )
336
+
337
+ run_shell ( 'apt-get update' )
338
+ run_shell ( 'apt install containerd -y' )
339
+ run_shell ( 'apt install kubectl kubelet kubeadm -y' )
340
+ run_shell ( 'apt-mark hold kubectl kubelet kubeadm' )
341
+ run_shell ( 'apt install docker-ce docker-ce-cli -y' )
342
+ run_shell ( 'apt install docker.io -y' )
343
+ run_shell ( 'systemctl start docker.service' )
344
+ run_shell ( 'systemctl enable docker.service' )
345
+ run_shell ( 'echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections' )
346
+ run_shell ( 'echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections' )
347
+ run_shell ( 'apt install iptables-persistent -y' )
348
+ if family . include? ( 'ubuntu' )
349
+ run_shell ( 'sudo ufw disable' )
350
+ else
351
+ # Workaround for debian as the strech repositories do not have updated kubernetes packages
352
+ # run_shell('echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> /etc/apt/sources.list.d/kube-xenial.list')
353
+ run_shell ( '/sbin/iptables -F' )
354
+ end
281
355
end
282
356
end
357
+
283
358
if %r{rhel|redhat|centos} . match? ( family )
284
359
runtime = 'docker'
285
360
cni = 'weave'
@@ -302,7 +377,8 @@ def open_communication_ports
302
377
end
303
378
304
379
ENV [ 'TARGET_HOST' ] = target_roles ( 'controller' ) [ 0 ] [ :name ]
305
- run_shell ( 'docker build -t kubetool:latest /etc/puppetlabs/code/environments/production/modules/kubernetes/tooling' )
380
+
381
+ run_shell ( 'docker build -t kubetool:latest --network host /etc/puppetlabs/code/environments/production/modules/kubernetes/tooling' )
306
382
307
383
docker_run = <<~DOCKER
308
384
docker run --rm -v $(pwd)/hieradata:/mnt -e OS=#{ family } \
@@ -317,6 +393,7 @@ def open_communication_ports
317
393
DOCKER
318
394
319
395
run_shell ( docker_run )
396
+
320
397
create_remote_file ( 'nginx' , '/tmp/nginx.yml' , nginx )
321
398
create_remote_file ( 'hiera' , '/etc/puppetlabs/puppet/hiera.yaml' , hiera )
322
399
run_shell ( 'chmod 644 /etc/puppetlabs/puppet/hiera.yaml' )
0 commit comments