Skip to content

Commit cc118b7

Browse files
committed
(CAT-2193): Fixed kubernetes environment setup for Debian. This allows spec tests to run successfully for debian platform
1 parent 689d78b commit cc118b7

File tree

6 files changed

+165
-87
lines changed

6 files changed

+165
-87
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
runs-on: ubuntu-20.04
1717
strategy:
1818
fail-fast: false
19-
matrix: {'platform':['rhel-8'],'collection':['puppet7-nightly', 'puppet8-nightly']}
19+
matrix: {'platform':['rhel-8', 'debian-11'],'collection':['puppet7-nightly', 'puppet8-nightly']}
2020

2121
steps:
2222
- name: Checkout Source

.github/workflows/nightly.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-20.04
1515
strategy:
1616
fail-fast: false
17-
matrix: {'platform':['rhel-8'],'collection':['puppet7-nightly', 'puppet8-nightly']}
17+
matrix: {'platform':['rhel-8', 'debian-11'],'collection':['puppet7-nightly', 'puppet8-nightly']}
1818

1919
steps:
2020
- name: Checkout Source

manifests/repos.pp

+7-6
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,13 @@
6464
'Debian': {
6565
$codename = fact('os.distro.codename')
6666
apt::source { 'kubernetes':
67-
location => pick($kubernetes_apt_location, 'https://apt.kubernetes.io'),
68-
repos => pick($kubernetes_apt_repos, 'main'),
69-
release => pick($kubernetes_apt_release, 'kubernetes-xenial'),
67+
location => pick($kubernetes_apt_location, 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/'),
68+
repos => pick($kubernetes_apt_repos, ' '),
69+
release => pick($kubernetes_apt_release, ' /'),
70+
comment => 'Kubernetes',
7071
key => {
71-
'id' => pick($kubernetes_key_id, 'A362B822F6DEDC652817EA46B53DC80D13EDEF05'),
72-
'source' => pick($kubernetes_key_source, 'https://packages.cloud.google.com/apt/doc/apt-key.gpg'),
72+
'name' => 'kubernetes-apt-keyring.gpg',
73+
'source' => pick($kubernetes_key_source, 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key'),
7374
},
7475
}
7576

@@ -78,7 +79,7 @@
7879
apt::source { 'docker':
7980
location => pick($docker_apt_location, 'https://download.docker.com/linux/ubuntu/'),
8081
repos => pick($docker_apt_repos, 'stable'),
81-
release => pick($docker_apt_release,$codename),
82+
release => pick($docker_apt_release, $codename),
8283
key => {
8384
'id' => pick($docker_key_id, '9DC858229FC7DD38854AE2D88D81803C0EBFCD88'),
8485
'source' => pick($docker_key_source, 'https://download.docker.com/linux/ubuntu/gpg'),

spec/acceptance/kubernetes_spec.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ class {'kubernetes':
3030
}
3131
}
3232
/^(Debian|Ubuntu)$/: {
33-
class {'kubernetes':
34-
controller => true,
35-
schedule_on_controller => true,
36-
environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
37-
ignore_preflight_errors => ['NumCPU'],
38-
}
33+
class {'kubernetes':
34+
controller => true,
35+
schedule_on_controller => true,
36+
environment => ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf'],
37+
ignore_preflight_errors => ['NumCPU','ExternalEtcdVersion'],
38+
}
3939
}
4040
default: {
4141
class {'kubernetes': } # any other OS are not supported

spec/classes/repos_spec.rb

+16-16
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
let(:params) do
2323
{
2424
'container_runtime' => 'docker',
25-
'kubernetes_apt_location' => 'http://apt.kubernetes.io',
26-
'kubernetes_apt_release' => 'kubernetes-xenial',
27-
'kubernetes_apt_repos' => 'main',
25+
'kubernetes_apt_location' => 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/',
26+
'kubernetes_apt_release' => ' /',
27+
'kubernetes_apt_repos' => ' ',
2828
'kubernetes_key_id' => '54A647F9048D5688D7DA2ABE6A030B21BA07F4FB',
29-
'kubernetes_key_source' => 'https://packages.cloud.google.com/apt/doc/apt-key.gpg',
29+
'kubernetes_key_source' => 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key',
3030
'kubernetes_yum_baseurl' => 'https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64',
3131
'kubernetes_yum_gpgkey' => 'https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg',
3232
'docker_apt_location' => 'https://download.docker.com/linux/ubuntu',
@@ -45,10 +45,10 @@
4545
it {
4646
expect(subject).to contain_apt__source('kubernetes').with(
4747
ensure: 'present',
48-
location: 'http://apt.kubernetes.io',
49-
repos: 'main',
50-
release: 'kubernetes-xenial',
51-
key: { 'id' => '54A647F9048D5688D7DA2ABE6A030B21BA07F4FB', 'source' => 'https://packages.cloud.google.com/apt/doc/apt-key.gpg' },
48+
location: 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/',
49+
repos: ' ',
50+
release: ' /',
51+
key: { 'name' => 'kubernetes-apt-keyring.gpg', 'source' => 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key' },
5252
)
5353
}
5454

@@ -83,11 +83,11 @@
8383
let(:params) do
8484
{
8585
'container_runtime' => 'cri_containerd',
86-
'kubernetes_apt_location' => 'http://apt.kubernetes.io',
87-
'kubernetes_apt_release' => 'kubernetes-xenial',
88-
'kubernetes_apt_repos' => 'main',
86+
'kubernetes_apt_location' => 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/',
87+
'kubernetes_apt_release' => ' /',
88+
'kubernetes_apt_repos' => ' ',
8989
'kubernetes_key_id' => '54A647F9048D5688D7DA2ABE6A030B21BA07F4FB',
90-
'kubernetes_key_source' => 'https://packages.cloud.google.com/apt/doc/apt-key.gpg',
90+
'kubernetes_key_source' => 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key',
9191
'kubernetes_yum_baseurl' => 'https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64',
9292
'kubernetes_yum_gpgkey' => 'https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg',
9393
'docker_apt_location' => 'https://download.docker.com/linux/ubuntu',
@@ -106,10 +106,10 @@
106106
it {
107107
expect(subject).to contain_apt__source('kubernetes').with(
108108
ensure: 'present',
109-
location: 'http://apt.kubernetes.io',
110-
repos: 'main',
111-
release: 'kubernetes-xenial',
112-
key: { 'id' => '54A647F9048D5688D7DA2ABE6A030B21BA07F4FB', 'source' => 'https://packages.cloud.google.com/apt/doc/apt-key.gpg' },
109+
location: 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/',
110+
repos: ' ',
111+
release: ' /',
112+
key: { 'name' => 'kubernetes-apt-keyring.gpg', 'source' => 'https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key' },
113113
)
114114
}
115115

spec/spec_helper_acceptance_local.rb

+134-57
Original file line numberDiff line numberDiff line change
@@ -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]
5045
end
5146

@@ -54,6 +49,10 @@ def change_target_host(role)
5449
ENV['TARGET_HOST'] = target_roles(role)[0][:name]
5550
end
5651

52+
def os_family
53+
run_shell("facter -y os.family | cut -d':' -f2 | tr -d ' '").stdout.strip
54+
end
55+
5756
def reset_target_host
5857
ENV['TARGET_HOST'] = @orig_target_host
5958
end
@@ -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+
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+
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)
133174
def 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
139187
end
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
152204
end
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

Comments
 (0)