Skip to content

Commit a91a45b

Browse files
authored
Merge pull request #31 from puppetlabs/cri-containerd-dave
* first commit to add cri-containerd final commit for cri_containerd * final commit for cri-containerd * Update README.md fixed typo in README * Update params.pp * Update params.pp * ensuring files are created before kubelet is started * fixing acceptance tests * updates for beta containerd on kube 1.9 * Update metadata.json * Update .fixtures.yml
2 parents 9ab0142 + b1467bf commit a91a45b

22 files changed

+184
-59
lines changed

.fixtures.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@ fixtures:
33
stdlib: 'puppetlabs-stdlib'
44
apt: 'puppetlabs-apt'
55
epel: 'stahnma-epel'
6+
wget: 'maestrodev-wget'
7+
archive: "puppet-archive"
68
symlinks:
79
kubernetes: "#{source_dir}"

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ The kube_tools help menu:
4848

4949
```puppet
5050
Usage: kube_tool [options]
51+
-o, --os-type os-type the os that kubernetes will run on
52+
-v, --version version the kubernetes version to install
53+
-r container runtime, the container runtime to use. this can only be docker or cri_containerd
54+
--container_runtime
5155
-f, --fqdn fqdn fqdn
5256
-i, --ip ip ip
5357
-b bootstrap, the bootstrap controller ip address
@@ -64,11 +68,14 @@ Usage: kube_tool [options]
6468
So to generate the hiera file for my cluster I use:
6569

6670
```puppet
67-
./kube_tool.rb -f kubernetes -i 172.17.10.101 -b 172.17.10.101 -e "etcd-kube-master=http://172.17.10.101:2380,etcd-kube-replica-master-01=http://172.17.10.210:2380,etcd-kube-replica-master-02=http://172.17.10.220:2380" -t "%{::ipaddress_enp0s8}" -a "%{::ipaddress_enp0s8}" -d true
71+
./kube_tool.rb -o debian -v 1.8.4 -r docker -f kubernetes -i 172.17.10.101 -b 172.17.10.101 -e "etcd-kube-master=http://172.17.10.101:2380,etcd-kube-replica-master-01=http://172.17.10.210:2380,etcd-kube-replica-master-02=http://172.17.10.220:2380" -t "%{::ipaddress_enp0s8}" -a "%{::ipaddress_enp0s8}" -d true
6872
```
6973

7074
The parameters are:
7175

76+
* `OS`: the os kubernetes will run on.
77+
* `VERSION`: the version of kubernetes you want to deploy
78+
* `CONTAINER_RUNTIME`: the container runtime kubernetes will use, this can only be set to `docker` or `cri_containerd`
7279
* `FQDN`: the cluster fqdn.
7380
* `BOOTSTRAP_CONTROLLER_IP`: the ip address of the controller puppet will use to create things like cluster role bindings, kube dns, and the Kubernetes dashboard.
7481
* `ETCD_INITIAL_CLUSTER`: the server addresses. When in production, include three, five, or seven nodes for etcd.

manifests/cluster_roles.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
require => File['/etc/kubernetes/manifests/clusterRoleBinding.yaml'],
3333
}
3434

35-
if $kubernetes_version =~ /1[.]8[.]\d/ {
35+
if $kubernetes_version =~ /1[.](8|9)[.]\d/ {
3636

3737
exec { 'Create role biniding for system nodes':
3838
command => 'kubectl set subject clusterrolebinding system:node --group=system:nodes',

manifests/config.pp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
class kubernetes::config (
44

55
$kubernetes_version = $kubernetes::kubernetes_version,
6+
$container_runtime = $kubernetes::container_runtime,
67
$kube_dns_version = $kubernetes::kube_dns_version,
78
$kubernetes_fqdn = $kubernetes::kubernetes_fqdn,
89
$controller = $kubernetes::controller,

manifests/init.pp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@
1414
# The version of the packages the Kubernetes os packages to install
1515
# ie kubectl and kubelet
1616
# Defaults to 1.7.3
17-
#
17+
#
18+
# [*container_runtime]
19+
# This is the runtime that the Kubernetes cluster will use.
20+
# It can only be set to "cri_containerd" or "docker"
21+
# Defaults to docker
22+
#
1823
# [*cni_version*]
1924
# The version of the cni package you would like to install
2025
# Defaults to 0.5.1
@@ -203,6 +208,7 @@
203208
$kubernetes_version = $kubernetes::params::kubernetes_version,
204209
$kubernetes_package_version = $kubernetes::params::kubernetes_package_version,
205210
$kubernetes_fqdn = $kubernetes::params::kubernetes_fqdn,
211+
$container_runtime = $kubernetes::params::container_runtime,
206212
$cni_version = $kubernetes::params::cni_version,
207213
$kube_dns_version = $kubernetes::params::kube_dns_version,
208214
$controller = $kubernetes::params::controller,

manifests/kube_addons.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
require => Exec['Create kube dns service account'],
7272
}
7373

74-
if $install_dashboard and $kubernetes_version =~ /1[.]8[.]\d/ {
74+
if $install_dashboard and $kubernetes_version =~ /1[.](8|9)[.]\d/ {
7575
exec { 'Install Kubernetes dashboard':
7676
command => 'kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml',
7777
onlyif => 'kubectl get nodes',

manifests/packages.pp

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,66 @@
33
class kubernetes::packages (
44

55
$kubernetes_package_version = $kubernetes::kubernetes_package_version,
6+
$container_runtime = $kubernetes::container_runtime,
67
$cni_version = $kubernetes::cni_version,
8+
79
) {
810

911
$kube_packages = ['kubelet', 'kubectl']
1012

11-
case $::osfamily {
12-
'Debian' : {
13-
package { 'docker-engine':
13+
case $kubernetes_package_version {
14+
/1[.]9[.]\d/: {
15+
$cri_source = 'https://github.com/kubernetes-incubator/cri-containerd/releases/download/v1.0.0-beta.0/cri-containerd-1.0.0-beta.0.linux-amd64.tar.gz'
16+
$cri_archive = 'cri-containerd-1.0.0-beta.0.linux-amd64.tar.gz'
17+
}
18+
default: {
19+
$cri_source = 'https://github.com/kubernetes-incubator/cri-containerd/releases/download/v1.0.0-alpha.1/cri-containerd-1.0.0-alpha.1.tar.gz'
20+
$cri_archive = 'cri-containerd-1.0.0-alpha.1.tar.gz'
21+
}
22+
}
23+
24+
if $container_runtime == 'docker' {
25+
case $::osfamily {
26+
'Debian' : {
27+
package { 'docker-engine':
1428
ensure => '1.12.0-0~xenial',
29+
}
1530
}
16-
}
1731

18-
'RedHat' : {
19-
package { 'docker-engine':
20-
ensure => '1.12.6',
32+
'RedHat' : {
33+
package { 'docker-engine':
34+
ensure => '1.12.6',
35+
}
2136
}
22-
}
37+
2338
default: { notify {"The OS family ${::os_family} is not supported by this module":} }
39+
}
40+
41+
package { 'kubernetes-cni':
42+
ensure => $cni_version,
43+
}
2444
}
2545

26-
package { $kube_packages:
27-
ensure => $kubernetes_package_version,
46+
elsif $container_runtime == 'cri_containerd' {
47+
wget::fetch { 'wget cri-containerd':
48+
source => $cri_source,
49+
destination => '/',
50+
timeout => 0,
51+
verbose => false,
2852
}
2953

30-
package { 'kubernetes-cni':
31-
ensure => $cni_version,
54+
-> archive { $cri_archive:
55+
ensure => present,
56+
path => "/${cri_archive}",
57+
extract => true,
58+
extract_command => 'tar xfz %s --strip-components=1',
59+
extract_path => '/',
60+
cleanup => true,
61+
creates => '/usr/local/bin/cri-containerd'
62+
}
63+
}
64+
65+
package { $kube_packages:
66+
ensure => $kubernetes_package_version,
3267
}
3368
}

manifests/params.pp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
}
1616
$kubernetes_version = '1.7.3'
1717
$kube_dns_version = '1.14.2'
18+
$container_runtime = 'docker'
1819
$kubernetes_fqdn = 'kubernetes'
1920
$controller = false
2021
$bootstrap_controller = false

manifests/repos.pp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## kubernetes repos
22

33
class kubernetes::repos (
4+
$container_runtime = $kubernetes::container_runtime,
45
$manage_epel = $kubernetes::manage_epel,
56
){
67

@@ -18,26 +19,30 @@
1819
},
1920
}
2021

21-
apt::source { 'docker':
22-
location => 'https://apt.dockerproject.org/repo',
23-
repos => 'main',
24-
release => 'ubuntu-xenial',
25-
key => {
26-
'id' => '9DC858229FC7DD38854AE2D88D81803C0EBFCD88',
27-
'source' => 'https://download.docker.com/linux/ubuntu/gpg',
28-
},
22+
if $container_runtime == 'docker' {
23+
apt::source { 'docker':
24+
location => 'https://apt.dockerproject.org/repo',
25+
repos => 'main',
26+
release => 'ubuntu-xenial',
27+
key => {
28+
'id' => '9DC858229FC7DD38854AE2D88D81803C0EBFCD88',
29+
'source' => 'https://download.docker.com/linux/ubuntu/gpg',
30+
},
31+
}
2932
}
3033
}
3134
'RedHat': {
3235
if $manage_epel {
3336
include epel
3437
}
3538

36-
yumrepo { 'docker':
37-
descr => 'docker',
38-
baseurl => "https://yum.dockerproject.org/repo/main/${repo}/7",
39-
gpgkey => 'https://yum.dockerproject.org/gpg',
40-
gpgcheck => true,
39+
if $container_runtime == 'docker' {
40+
yumrepo { 'docker':
41+
descr => 'docker',
42+
baseurl => "https://yum.dockerproject.org/repo/main/${repo}/7",
43+
gpgkey => 'https://yum.dockerproject.org/gpg',
44+
gpgcheck => true,
45+
}
4146
}
4247

4348
yumrepo { 'kubernetes':

manifests/service.pp

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@
44

55
$controller = $kubernetes::controller,
66
$bootstrap_controller = $kubernetes::bootstrap_controller,
7+
$container_runtime = $kubernetes::container_runtime,
78
$etcd_ip = $kubernetes::etcd_ip,
89
){
910

1011
$peeruls = inline_template("'{\"peerURLs\":[\"http://${etcd_ip}:2380\"]}'")
1112

12-
service { 'docker':
13-
ensure => running,
14-
enable => true,
15-
}
16-
1713
file {'/etc/systemd/system/kubelet.service.d':
1814
ensure => 'directory',
19-
}
15+
}
2016

2117
file {'/etc/systemd/system/kubelet.service.d/kubernetes.conf':
2218
ensure => 'file',
@@ -26,19 +22,55 @@
2622
content => template('kubernetes/kubernetes.conf.erb'),
2723
require => File['/etc/systemd/system/kubelet.service.d'],
2824
notify => Exec['Reload systemd'],
29-
}
25+
}
3026

3127
exec { 'Reload systemd':
3228
path => '/bin',
3329
command => 'systemctl daemon-reload',
3430
refreshonly => true,
31+
}
32+
33+
case $container_runtime {
34+
'docker': {
35+
service { 'docker':
36+
ensure => running,
37+
enable => true,
38+
}
39+
40+
service {'kubelet':
41+
ensure => running,
42+
enable => true,
43+
subscribe => File['/etc/systemd/system/kubelet.service.d/kubernetes.conf'],
44+
require => Service['docker'],
45+
}
3546
}
3647

37-
service {'kubelet':
38-
ensure => running,
39-
enable => true,
40-
subscribe => File['/etc/systemd/system/kubelet.service.d/kubernetes.conf'],
41-
require => Service['docker'],
48+
'cri_containerd': {
49+
service {'containerd':
50+
ensure => running,
51+
enable => true,
52+
require => Exec['Reload systemd'],
53+
before => Service['kubelet'],
54+
}
55+
56+
service {'cri-containerd':
57+
ensure => running,
58+
enable => true,
59+
require => Exec['Reload systemd'],
60+
before => Service['kubelet'],
61+
}
62+
63+
service {'kubelet':
64+
ensure => running,
65+
enable => true,
66+
subscribe => File['/etc/systemd/system/kubelet.service.d/kubernetes.conf'],
67+
require => [Service['containerd'], Service['cri-containerd']],
68+
}
69+
}
70+
71+
default: {
72+
fail('Please specify a valid container runtime')
73+
}
4274
}
4375

4476
if $bootstrap_controller {

0 commit comments

Comments
 (0)