Skip to content

Commit 09c8c84

Browse files
Merge pull request #460 from treydock/containerd
Support installing containerd using a package
2 parents a39eaac + bbaf07d commit 09c8c84

File tree

11 files changed

+606
-84
lines changed

11 files changed

+606
-84
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,18 @@ Specifies the version of the containerd runtime the module installs.
253253

254254
Defaults to `1.1.0`.
255255

256+
### `containerd_install_method`
257+
258+
The method used to install containerd. Either `archive` or `package`.
259+
260+
Defaults to `archive`.
261+
262+
### `containerd_package_name`
263+
264+
The package name for containerd when `containerd_install_method` is `package`.
265+
266+
Defaults to `containerd.io`
267+
256268
#### `containerd_archive`
257269

258270
The name of the containerd archive.

manifests/init.pp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929
# This is the version of the containerd runtime the module will install.
3030
# Defaults to 1.1.0
3131
#
32+
# [*containerd_install_method*]
33+
# Whether to install containerd via archive or package.
34+
# Defaults to archive
35+
#
36+
# [*containerd_package_name*]
37+
# containerd package name
38+
# Defaults to containerd.io
39+
#
3240
# [*containerd_archive*]
3341
# The name of the containerd archive
3442
# Defaults to containerd-${containerd_version}.linux-amd64.tar.gz
@@ -486,6 +494,8 @@
486494
},
487495
String $container_runtime = 'docker',
488496
Optional[String] $containerd_version = '1.1.0',
497+
Enum['archive','package'] $containerd_install_method = 'archive',
498+
String $containerd_package_name = 'containerd.io',
489499
Optional[String] $docker_package_name = 'docker-engine',
490500
Optional[String] $docker_version = $facts['os']['family'] ? {
491501
'Debian' => '17.03.0~ce-0~ubuntu-xenial',

manifests/packages.pp

Lines changed: 111 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,40 @@
11
# Class kubernetes packages
22

33
class kubernetes::packages (
4-
String $kubernetes_package_version = $kubernetes::kubernetes_package_version,
5-
String $container_runtime = $kubernetes::container_runtime,
6-
Boolean $manage_docker = $kubernetes::manage_docker,
7-
Boolean $manage_etcd = $kubernetes::manage_etcd,
8-
Optional[String] $docker_version = $kubernetes::docker_version,
9-
Optional[String] $docker_package_name = $kubernetes::docker_package_name,
10-
Optional[String] $docker_storage_driver = $kubernetes::docker_storage_driver,
11-
Optional[String] $docker_cgroup_driver = $kubernetes::cgroup_driver,
12-
Optional[Array] $docker_storage_opts = $kubernetes::docker_storage_opts,
13-
Optional[String] $docker_extra_daemon_config = $kubernetes::docker_extra_daemon_config,
14-
String $docker_log_max_file = $kubernetes::docker_log_max_file,
15-
String $docker_log_max_size = $kubernetes::docker_log_max_size,
16-
Boolean $controller = $kubernetes::controller,
17-
Optional[String] $containerd_archive = $kubernetes::containerd_archive,
18-
Optional[String] $containerd_archive_checksum = $kubernetes::containerd_archive_checksum,
19-
Optional[String] $containerd_source = $kubernetes::containerd_source,
20-
String $etcd_archive = $kubernetes::etcd_archive,
21-
Optional[String] $etcd_archive_checksum = $kubernetes::etcd_archive_checksum,
22-
String $etcd_version = $kubernetes::etcd_version,
23-
String $etcd_source = $kubernetes::etcd_source,
24-
String $etcd_package_name = $kubernetes::etcd_package_name,
25-
String $etcd_install_method = $kubernetes::etcd_install_method,
26-
Optional[String] $runc_source = $kubernetes::runc_source,
27-
Optional[String] $runc_source_checksum = $kubernetes::runc_source_checksum,
28-
Boolean $disable_swap = $kubernetes::disable_swap,
29-
Boolean $manage_kernel_modules = $kubernetes::manage_kernel_modules,
30-
Boolean $manage_sysctl_settings = $kubernetes::manage_sysctl_settings,
31-
Boolean $create_repos = $kubernetes::repos::create_repos,
32-
Boolean $pin_packages = $kubernetes::pin_packages,
33-
Integer $package_pin_priority = 32767,
34-
String $archive_checksum_type = 'sha256',
4+
String $kubernetes_package_version = $kubernetes::kubernetes_package_version,
5+
String $container_runtime = $kubernetes::container_runtime,
6+
Boolean $manage_docker = $kubernetes::manage_docker,
7+
Boolean $manage_etcd = $kubernetes::manage_etcd,
8+
Optional[String] $docker_version = $kubernetes::docker_version,
9+
Optional[String] $docker_package_name = $kubernetes::docker_package_name,
10+
Optional[String] $docker_storage_driver = $kubernetes::docker_storage_driver,
11+
Optional[String] $docker_cgroup_driver = $kubernetes::cgroup_driver,
12+
Optional[Array] $docker_storage_opts = $kubernetes::docker_storage_opts,
13+
Optional[String] $docker_extra_daemon_config = $kubernetes::docker_extra_daemon_config,
14+
String $docker_log_max_file = $kubernetes::docker_log_max_file,
15+
String $docker_log_max_size = $kubernetes::docker_log_max_size,
16+
Boolean $controller = $kubernetes::controller,
17+
Optional[String] $containerd_version = $kubernetes::containerd_version,
18+
Enum['archive','package'] $containerd_install_method = $kubernetes::containerd_install_method,
19+
String $containerd_package_name = $kubernetes::containerd_package_name,
20+
Optional[String] $containerd_archive = $kubernetes::containerd_archive,
21+
Optional[String] $containerd_archive_checksum = $kubernetes::containerd_archive_checksum,
22+
Optional[String] $containerd_source = $kubernetes::containerd_source,
23+
String $etcd_archive = $kubernetes::etcd_archive,
24+
Optional[String] $etcd_archive_checksum = $kubernetes::etcd_archive_checksum,
25+
String $etcd_version = $kubernetes::etcd_version,
26+
String $etcd_source = $kubernetes::etcd_source,
27+
String $etcd_package_name = $kubernetes::etcd_package_name,
28+
String $etcd_install_method = $kubernetes::etcd_install_method,
29+
Optional[String] $runc_source = $kubernetes::runc_source,
30+
Optional[String] $runc_source_checksum = $kubernetes::runc_source_checksum,
31+
Boolean $disable_swap = $kubernetes::disable_swap,
32+
Boolean $manage_kernel_modules = $kubernetes::manage_kernel_modules,
33+
Boolean $manage_sysctl_settings = $kubernetes::manage_sysctl_settings,
34+
Boolean $create_repos = $kubernetes::repos::create_repos,
35+
Boolean $pin_packages = $kubernetes::pin_packages,
36+
Integer $package_pin_priority = 32767,
37+
String $archive_checksum_type = 'sha256',
3538
) {
3639
$tmp_directory = '/var/tmp/puppetlabs-kubernetes'
3740

@@ -62,6 +65,7 @@
6265
}
6366

6467
if $manage_kernel_modules and $manage_sysctl_settings {
68+
kmod::load { 'overlay': }
6569
kmod::load { 'br_netfilter':
6670
before => Sysctl['net.bridge.bridge-nf-call-iptables'],
6771
}
@@ -75,6 +79,7 @@
7579
value => '1',
7680
}
7781
} elsif $manage_kernel_modules {
82+
kmod::load { 'overlay': }
7883
kmod::load { 'br_netfilter': }
7984
} elsif $manage_sysctl_settings {
8085
sysctl { 'net.bridge.bridge-nf-call-iptables':
@@ -170,8 +175,82 @@
170175
notify => Exec['kubernetes-systemd-reload'],
171176
}
172177
}
178+
elsif $container_runtime == 'cri_containerd' and $containerd_install_method == 'package' {
179+
# procedure: https://kubernetes.io/docs/setup/production-environment/container-runtimes/
180+
case $facts['os']['family'] {
181+
'Debian': {
182+
if $create_repos {
183+
package { $containerd_package_name:
184+
ensure => $containerd_version,
185+
require => Class['Apt::Update'],
186+
}
187+
if $pin_packages {
188+
file { '/etc/apt/preferences.d/containerd':
189+
mode => '0444',
190+
owner => 'root',
191+
group => 'root',
192+
content => template('kubernetes/containerd_apt_package_pins.erb'),
193+
notify => Service['containerd'],
194+
}
195+
}else {
196+
file { '/etc/apt/preferences.d/containerd':
197+
ensure => absent,
198+
}
199+
}
200+
}else {
201+
package { $containerd_package_name:
202+
ensure => $containerd_version,
203+
}
204+
if $pin_packages {
205+
fail('for safety reasons package pinning is only usable if you define the create_repos flag')
206+
}
207+
}
208+
209+
file { '/etc/containerd':
210+
ensure => 'directory',
211+
mode => '0644',
212+
owner => 'root',
213+
group => 'root',
214+
}
173215

174-
elsif $container_runtime == 'cri_containerd' {
216+
# Generate using 'containerd config default'
217+
file { '/etc/containerd/config.toml':
218+
ensure => file,
219+
owner => 'root',
220+
group => 'root',
221+
mode => '0644',
222+
content => template('kubernetes/containerd/config.toml.erb'),
223+
require => [File['/etc/containerd'], Package[$containerd_package_name]],
224+
notify => Service['containerd'],
225+
}
226+
}
227+
'RedHat': {
228+
package { $containerd_package_name:
229+
ensure => $containerd_version,
230+
}
231+
232+
file { '/etc/containerd':
233+
ensure => 'directory',
234+
mode => '0644',
235+
owner => 'root',
236+
group => 'root',
237+
}
238+
239+
# Generate using 'containerd config default'
240+
file { '/etc/containerd/config.toml':
241+
ensure => file,
242+
owner => 'root',
243+
group => 'root',
244+
mode => '0644',
245+
content => template('kubernetes/containerd/config.toml.erb'),
246+
require => [File['/etc/containerd'], Package[$containerd_package_name]],
247+
notify => Service['containerd'],
248+
}
249+
}
250+
default: { notify { "The OS family ${facts['os']['family']} is not supported by this module": } }
251+
}
252+
}
253+
elsif $container_runtime == 'cri_containerd' and $containerd_install_method == 'archive' {
175254
if $runc_source_checksum and $runc_source_checksum =~ /.+/ {
176255
$runc_source_checksum_verify = true
177256
$runc_source_creates = undef

manifests/repos.pp

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
## kubernetes repos
22

33
class kubernetes::repos (
4-
String $container_runtime = $kubernetes::container_runtime,
5-
Optional[String] $kubernetes_apt_location = $kubernetes::kubernetes_apt_location,
6-
Optional[String] $kubernetes_apt_release = $kubernetes::kubernetes_apt_release,
7-
Optional[String] $kubernetes_apt_repos = $kubernetes::kubernetes_apt_repos,
8-
Optional[String] $kubernetes_key_id = $kubernetes::kubernetes_key_id,
9-
Optional[String] $kubernetes_key_source = $kubernetes::kubernetes_key_source,
10-
Optional[String] $kubernetes_yum_baseurl = $kubernetes::kubernetes_yum_baseurl,
11-
Optional[String] $kubernetes_yum_gpgkey = $kubernetes::kubernetes_yum_gpgkey,
12-
Optional[String] $docker_apt_location = $kubernetes::docker_apt_location,
13-
Optional[String] $docker_apt_release = $kubernetes::docker_apt_release,
14-
Optional[String] $docker_apt_repos = $kubernetes::docker_apt_repos,
15-
Optional[String] $docker_yum_baseurl = $kubernetes::docker_yum_baseurl,
16-
Optional[String] $docker_yum_gpgkey = $kubernetes::docker_yum_gpgkey,
17-
Optional[String] $docker_key_id = $kubernetes::docker_key_id,
18-
Optional[String] $docker_key_source = $kubernetes::docker_key_source,
19-
Boolean $manage_docker = $kubernetes::manage_docker,
20-
Boolean $create_repos = $kubernetes::create_repos,
4+
String $container_runtime = $kubernetes::container_runtime,
5+
Optional[String] $kubernetes_apt_location = $kubernetes::kubernetes_apt_location,
6+
Optional[String] $kubernetes_apt_release = $kubernetes::kubernetes_apt_release,
7+
Optional[String] $kubernetes_apt_repos = $kubernetes::kubernetes_apt_repos,
8+
Optional[String] $kubernetes_key_id = $kubernetes::kubernetes_key_id,
9+
Optional[String] $kubernetes_key_source = $kubernetes::kubernetes_key_source,
10+
Optional[String] $kubernetes_yum_baseurl = $kubernetes::kubernetes_yum_baseurl,
11+
Optional[String] $kubernetes_yum_gpgkey = $kubernetes::kubernetes_yum_gpgkey,
12+
Optional[String] $docker_apt_location = $kubernetes::docker_apt_location,
13+
Optional[String] $docker_apt_release = $kubernetes::docker_apt_release,
14+
Optional[String] $docker_apt_repos = $kubernetes::docker_apt_repos,
15+
Optional[String] $docker_yum_baseurl = $kubernetes::docker_yum_baseurl,
16+
Optional[String] $docker_yum_gpgkey = $kubernetes::docker_yum_gpgkey,
17+
Optional[String] $docker_key_id = $kubernetes::docker_key_id,
18+
Optional[String] $docker_key_source = $kubernetes::docker_key_source,
19+
Optional[String] $containerd_install_method = $kubernetes::containerd_install_method,
20+
Boolean $manage_docker = $kubernetes::manage_docker,
21+
Boolean $create_repos = $kubernetes::create_repos,
2122

2223
) {
2324
if $create_repos {
@@ -34,7 +35,8 @@
3435
},
3536
}
3637

37-
if $container_runtime == 'docker' and $manage_docker == true {
38+
if ($container_runtime == 'docker' and $manage_docker == true) or
39+
($container_runtime == 'cri_containerd' and $containerd_install_method == 'package') {
3840
apt::source { 'docker':
3941
location => pick($docker_apt_location,'https://apt.dockerproject.org/repo'),
4042
repos => pick($docker_apt_repos,'main'),
@@ -47,7 +49,8 @@
4749
}
4850
}
4951
'RedHat': {
50-
if $container_runtime == 'docker' and $manage_docker == true {
52+
if ($container_runtime == 'docker' and $manage_docker == true) or
53+
($container_runtime == 'cri_containerd' and $containerd_install_method == 'package') {
5154
yumrepo { 'docker':
5255
descr => 'docker',
5356
baseurl => pick($docker_yum_baseurl,'https://download.docker.com/linux/centos/7/x86_64/stable'),

manifests/service.pp

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# Puppet class that controls the Kubelet service
22

33
class kubernetes::service (
4-
String $container_runtime = $kubernetes::container_runtime,
5-
Boolean $controller = $kubernetes::controller,
6-
Boolean $manage_docker = $kubernetes::manage_docker,
7-
Boolean $manage_etcd = $kubernetes::manage_etcd,
8-
String $kubernetes_version = $kubernetes::kubernetes_version,
9-
Optional[String] $cloud_provider = $kubernetes::cloud_provider,
10-
Optional[String] $cloud_config = $kubernetes::cloud_config,
4+
String $container_runtime = $kubernetes::container_runtime,
5+
Enum['archive','package'] $containerd_install_method = $kubernetes::containerd_install_method,
6+
Boolean $controller = $kubernetes::controller,
7+
Boolean $manage_docker = $kubernetes::manage_docker,
8+
Boolean $manage_etcd = $kubernetes::manage_etcd,
9+
String $kubernetes_version = $kubernetes::kubernetes_version,
10+
Optional[String] $cloud_provider = $kubernetes::cloud_provider,
11+
Optional[String] $cloud_config = $kubernetes::cloud_config,
1112
) {
1213
file { '/etc/systemd/system/kubelet.service.d':
1314
ensure => directory,
@@ -30,29 +31,34 @@
3031
}
3132

3233
'cri_containerd': {
33-
file { '/etc/systemd/system/kubelet.service.d/0-containerd.conf':
34-
ensure => file,
35-
owner => 'root',
36-
group => 'root',
37-
mode => '0644',
38-
content => template('kubernetes/0-containerd.conf.erb'),
39-
require => File['/etc/systemd/system/kubelet.service.d'],
40-
notify => [Exec['kubernetes-systemd-reload'], Service['containerd']],
41-
}
34+
if $containerd_install_method == 'package' {
35+
$containerd_service_require = undef
36+
} else {
37+
$containerd_service_require = Exec['kubernetes-systemd-reload']
38+
file { '/etc/systemd/system/kubelet.service.d/0-containerd.conf':
39+
ensure => file,
40+
owner => 'root',
41+
group => 'root',
42+
mode => '0644',
43+
content => template('kubernetes/0-containerd.conf.erb'),
44+
require => File['/etc/systemd/system/kubelet.service.d'],
45+
notify => [Exec['kubernetes-systemd-reload'], Service['containerd']],
46+
}
4247

43-
file { '/etc/systemd/system/containerd.service':
44-
ensure => file,
45-
owner => 'root',
46-
group => 'root',
47-
mode => '0644',
48-
content => template('kubernetes/containerd.service.erb'),
49-
notify => [Exec['kubernetes-systemd-reload'], Service['containerd']],
48+
file { '/etc/systemd/system/containerd.service':
49+
ensure => file,
50+
owner => 'root',
51+
group => 'root',
52+
mode => '0644',
53+
content => template('kubernetes/containerd.service.erb'),
54+
notify => [Exec['kubernetes-systemd-reload'], Service['containerd']],
55+
}
5056
}
5157

5258
service { 'containerd':
5359
ensure => running,
5460
enable => true,
55-
require => Exec['kubernetes-systemd-reload'],
61+
require => $containerd_service_require,
5662
}
5763
}
5864

0 commit comments

Comments
 (0)