@@ -40,12 +40,7 @@ def fetch_ip_hostname_by_role(role)
4040 platform = fetch_platform_by_node ( ipaddr )
4141 ENV [ 'TARGET_HOST' ] = target_roles ( role ) [ 0 ] [ :name ]
4242 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
4944 [ hostname , ipaddr , int_ipaddr ]
5045end
5146
@@ -54,6 +49,10 @@ def change_target_host(role)
5449 ENV [ 'TARGET_HOST' ] = target_roles ( role ) [ 0 ] [ :name ]
5550end
5651
52+ def os_family
53+ run_shell ( "facter -y os.family | cut -d':' -f2 | tr -d ' '" ) . stdout . strip
54+ end
55+
5756def reset_target_host
5857 ENV [ 'TARGET_HOST' ] = @orig_target_host
5958end
@@ -70,37 +69,79 @@ def configure_puppet_server(controller, worker1, worker2)
7069 configure_puppet_agent ( 'worker2' )
7170 puppet_cert_sign
7271 # 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+ if os_family . casecmp ( 'redhat' ) . zero?
74+ site_pp = <<-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+ site_pp = <<-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+
104145 ENV [ 'TARGET_HOST' ] = target_roles ( 'controller' ) [ 0 ] [ :name ]
105146 create_remote_file ( 'site' , '/etc/puppetlabs/code/environments/production/manifests/site.pp' , site_pp )
106147 run_shell ( 'chmod 644 /etc/puppetlabs/code/environments/production/manifests/site.pp' )
@@ -133,8 +174,15 @@ def execute_agent(role)
133174def reset_and_restart_containerd
134175 [ 'controller' , 'worker1' , 'worker2' ] . each do |node |
135176 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
138186 end
139187end
140188
@@ -147,7 +195,11 @@ def open_communication_ports
147195 run_shell ( 'iptables -I INPUT -p tcp -m multiport --dports 10251,10252,10255,30000:32767 -j ACCEPT' )
148196 end
149197 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
151203 end
152204end
153205
@@ -157,6 +209,7 @@ def open_communication_ports
157209 hostname1 , ipaddr1 , int_ipaddr1 = fetch_ip_hostname_by_role ( 'controller' )
158210 hostname2 , ipaddr2 , int_ipaddr2 = fetch_ip_hostname_by_role ( 'worker1' )
159211 hostname3 , ipaddr3 , int_ipaddr3 = fetch_ip_hostname_by_role ( 'worker2' )
212+
160213 if c . filter . rules . key? :integration
161214 ENV [ 'TARGET_HOST' ] = target_roles ( 'controller' ) [ 0 ] [ :name ]
162215 [ 'controller' , 'worker1' , 'worker2' ] . each do |node |
@@ -260,26 +313,48 @@ def open_communication_ports
260313 PUPPETCODE
261314
262315 apply_manifest ( pp )
263- if %r{debian|ubuntu-1604-lts} . match? ( family )
316+
317+ if %r{debian|ubuntu} . match? ( family )
264318 runtime = 'cri_containerd'
265319 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
281355 end
282356 end
357+
283358 if %r{rhel|redhat|centos} . match? ( family )
284359 runtime = 'docker'
285360 cni = 'weave'
@@ -302,7 +377,8 @@ def open_communication_ports
302377 end
303378
304379 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' )
306382
307383 docker_run = <<~DOCKER
308384 docker run --rm -v $(pwd)/hieradata:/mnt -e OS=#{ family } \
@@ -317,6 +393,7 @@ def open_communication_ports
317393 DOCKER
318394
319395 run_shell ( docker_run )
396+
320397 create_remote_file ( 'nginx' , '/tmp/nginx.yml' , nginx )
321398 create_remote_file ( 'hiera' , '/etc/puppetlabs/puppet/hiera.yaml' , hiera )
322399 run_shell ( 'chmod 644 /etc/puppetlabs/puppet/hiera.yaml' )
0 commit comments