2 changes: 2 additions & 0 deletions .fixtures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@ fixtures:
stdlib: 'puppetlabs-stdlib'
apt: 'puppetlabs-apt'
epel: 'stahnma-epel'
wget: 'maestrodev-wget'
archive: "puppet-archive"
symlinks:
kubernetes: "#{source_dir}"
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
#Version 0.2.0
Supports Kubernetes up to 1.9.x
Adds support for cri-containerd runtime
Provides additional os and runtime switches for Kubetool

#Version 0.1.3
Provide cli switches for kubetool, and add Dockerfile

Expand All @@ -8,6 +13,6 @@ Supports Kubernetes up to 1.8.x
Hotfix for kubeproxy

# Version 0.1.0
First release
First release
Supports Kubernetes 1.6 - 1.7.5

19 changes: 16 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ The included configuration tool `kube_tools` auto generates all the security par
1. cfssl is a requirement, so we recommend you install the module on a local machine and not a Puppet server by running this command:

```puppet
puppet module install puppetlabs-kubernetes --version 0.1.3
puppet module install puppetlabs-kubernetes --version 0.2.0
```

2. Install cfssl. See Cloudflare's [cfssl documentation](https://github.com/cloudflare/cfssl).
2. Install cfssl. See Cloudflare's [cfssl documentation](https://github.com/cloudflare/cfssl).

3. Change directory into the root of the module, and run the `bundle install` command.

Expand All @@ -48,6 +48,10 @@ The kube_tools help menu:

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

```puppet
./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
./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
```

The parameters are:

* `OS`: the os kubernetes will run on.
* `VERSION`: the version of kubernetes you want to deploy
* `CONTAINER_RUNTIME`: the container runtime kubernetes will use, this can only be set to `docker` or `cri_containerd`
* `FQDN`: the cluster fqdn.
* `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.
* `ETCD_INITIAL_CLUSTER`: the server addresses. When in production, include three, five, or seven nodes for etcd.
Expand Down Expand Up @@ -167,6 +174,12 @@ The version of kube DNS to install.

Defaults to `1.14.2`.

#### `container_runtime`

Choose between docker or cri_containerd

Defaults to docker

#### `controller`

Specifies whether to set the node as a Kubernetes controller.
Expand Down
2 changes: 1 addition & 1 deletion manifests/cluster_roles.pp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
require => File['/etc/kubernetes/manifests/clusterRoleBinding.yaml'],
}

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

exec { 'Create role biniding for system nodes':
command => 'kubectl set subject clusterrolebinding system:node --group=system:nodes',
Expand Down
1 change: 1 addition & 0 deletions manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
class kubernetes::config (

$kubernetes_version = $kubernetes::kubernetes_version,
$container_runtime = $kubernetes::container_runtime,
$kube_dns_version = $kubernetes::kube_dns_version,
$kubernetes_fqdn = $kubernetes::kubernetes_fqdn,
$controller = $kubernetes::controller,
Expand Down
8 changes: 7 additions & 1 deletion manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@
# The version of the packages the Kubernetes os packages to install
# ie kubectl and kubelet
# Defaults to 1.7.3
#
#
# [*container_runtime]
# This is the runtime that the Kubernetes cluster will use.
# It can only be set to "cri_containerd" or "docker"
# Defaults to docker
#
# [*cni_version*]
# The version of the cni package you would like to install
# Defaults to 0.5.1
Expand Down Expand Up @@ -203,6 +208,7 @@
$kubernetes_version = $kubernetes::params::kubernetes_version,
$kubernetes_package_version = $kubernetes::params::kubernetes_package_version,
$kubernetes_fqdn = $kubernetes::params::kubernetes_fqdn,
$container_runtime = $kubernetes::params::container_runtime,
$cni_version = $kubernetes::params::cni_version,
$kube_dns_version = $kubernetes::params::kube_dns_version,
$controller = $kubernetes::params::controller,
Expand Down
2 changes: 1 addition & 1 deletion manifests/kube_addons.pp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
require => Exec['Create kube dns service account'],
}

if $install_dashboard and $kubernetes_version =~ /1[.]8[.]\d/ {
if $install_dashboard and $kubernetes_version =~ /1[.](8|9)[.]\d/ {
exec { 'Install Kubernetes dashboard':
command => 'kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml',
onlyif => 'kubectl get nodes',
Expand Down
59 changes: 47 additions & 12 deletions manifests/packages.pp
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,66 @@
class kubernetes::packages (

$kubernetes_package_version = $kubernetes::kubernetes_package_version,
$container_runtime = $kubernetes::container_runtime,
$cni_version = $kubernetes::cni_version,

) {

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

case $::osfamily {
'Debian' : {
package { 'docker-engine':
case $kubernetes_package_version {
/1[.]9[.]\d/: {
$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'
$cri_archive = 'cri-containerd-1.0.0-beta.0.linux-amd64.tar.gz'
}
default: {
$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'
$cri_archive = 'cri-containerd-1.0.0-alpha.1.tar.gz'
}
}

if $container_runtime == 'docker' {
case $::osfamily {
'Debian' : {
package { 'docker-engine':
ensure => '1.12.0-0~xenial',
}
}
}

'RedHat' : {
package { 'docker-engine':
ensure => '1.12.6',
'RedHat' : {
package { 'docker-engine':
ensure => '1.12.6',
}
}
}

default: { notify {"The OS family ${::os_family} is not supported by this module":} }
}

package { 'kubernetes-cni':
ensure => $cni_version,
}
}

package { $kube_packages:
ensure => $kubernetes_package_version,
elsif $container_runtime == 'cri_containerd' {
wget::fetch { 'wget cri-containerd':
source => $cri_source,
destination => '/',
timeout => 0,
verbose => false,
}

package { 'kubernetes-cni':
ensure => $cni_version,
-> archive { $cri_archive:
ensure => present,
path => "/${cri_archive}",
extract => true,
extract_command => 'tar xfz %s --strip-components=1',
extract_path => '/',
cleanup => true,
creates => '/usr/local/bin/cri-containerd'
}
}

package { $kube_packages:
ensure => $kubernetes_package_version,
}
}
1 change: 1 addition & 0 deletions manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
}
$kubernetes_version = '1.7.3'
$kube_dns_version = '1.14.2'
$container_runtime = 'docker'
$kubernetes_fqdn = 'kubernetes'
$controller = false
$bootstrap_controller = false
Expand Down
31 changes: 18 additions & 13 deletions manifests/repos.pp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## kubernetes repos

class kubernetes::repos (
$container_runtime = $kubernetes::container_runtime,
$manage_epel = $kubernetes::manage_epel,
){

Expand All @@ -18,26 +19,30 @@
},
}

apt::source { 'docker':
location => 'https://apt.dockerproject.org/repo',
repos => 'main',
release => 'ubuntu-xenial',
key => {
'id' => '9DC858229FC7DD38854AE2D88D81803C0EBFCD88',
'source' => 'https://download.docker.com/linux/ubuntu/gpg',
},
if $container_runtime == 'docker' {
apt::source { 'docker':
location => 'https://apt.dockerproject.org/repo',
repos => 'main',
release => 'ubuntu-xenial',
key => {
'id' => '9DC858229FC7DD38854AE2D88D81803C0EBFCD88',
'source' => 'https://download.docker.com/linux/ubuntu/gpg',
},
}
}
}
'RedHat': {
if $manage_epel {
include epel
}

yumrepo { 'docker':
descr => 'docker',
baseurl => "https://yum.dockerproject.org/repo/main/${repo}/7",
gpgkey => 'https://yum.dockerproject.org/gpg',
gpgcheck => true,
if $container_runtime == 'docker' {
yumrepo { 'docker':
descr => 'docker',
baseurl => "https://yum.dockerproject.org/repo/main/${repo}/7",
gpgkey => 'https://yum.dockerproject.org/gpg',
gpgcheck => true,
}
}

yumrepo { 'kubernetes':
Expand Down
56 changes: 44 additions & 12 deletions manifests/service.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,15 @@

$controller = $kubernetes::controller,
$bootstrap_controller = $kubernetes::bootstrap_controller,
$container_runtime = $kubernetes::container_runtime,
$etcd_ip = $kubernetes::etcd_ip,
){

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

service { 'docker':
ensure => running,
enable => true,
}

file {'/etc/systemd/system/kubelet.service.d':
ensure => 'directory',
}
}

file {'/etc/systemd/system/kubelet.service.d/kubernetes.conf':
ensure => 'file',
Expand All @@ -26,19 +22,55 @@
content => template('kubernetes/kubernetes.conf.erb'),
require => File['/etc/systemd/system/kubelet.service.d'],
notify => Exec['Reload systemd'],
}
}

exec { 'Reload systemd':
path => '/bin',
command => 'systemctl daemon-reload',
refreshonly => true,
}

case $container_runtime {
'docker': {
service { 'docker':
ensure => running,
enable => true,
}

service {'kubelet':
ensure => running,
enable => true,
subscribe => File['/etc/systemd/system/kubelet.service.d/kubernetes.conf'],
require => Service['docker'],
}
}

service {'kubelet':
ensure => running,
enable => true,
subscribe => File['/etc/systemd/system/kubelet.service.d/kubernetes.conf'],
require => Service['docker'],
'cri_containerd': {
service {'containerd':
ensure => running,
enable => true,
require => Exec['Reload systemd'],
before => Service['kubelet'],
}

service {'cri-containerd':
ensure => running,
enable => true,
require => Exec['Reload systemd'],
before => Service['kubelet'],
}

service {'kubelet':
ensure => running,
enable => true,
subscribe => File['/etc/systemd/system/kubelet.service.d/kubernetes.conf'],
require => [Service['containerd'], Service['cri-containerd']],
}
}

default: {
fail('Please specify a valid container runtime')
}
}

if $bootstrap_controller {
Expand Down
6 changes: 4 additions & 2 deletions metadata.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "puppetlabs-kubernetes",
"version": "0.1.3",
"version": "0.2.0",
"author": "Puppet",
"summary": "The module installs and configures a Kubernetes cluster",
"license": "Apache-2.0",
Expand All @@ -10,7 +10,9 @@
"dependencies": [
{"name":"puppetlabs-stdlib","version_requirement":">= 4.19.0 < 5.0.0"},
{"name":"puppetlabs-apt","version_requirement":">= 4.1.0 < 4.3.0"},
{"name":"stahnma-epel","version_requirement":">= 1.2.2 < 1.3.0"}
{"name":"stahnma-epel","version_requirement":">= 1.2.2 < 1.3.0"},
{"name":"puppet-archive","version_requirement":">= 2.0.0 < 2.1.0"},
{"name":"maestrodev-wget","version_requirement":">= 1.0.0"}
],
"data_provider": null,
"operatingsystem_support": [
Expand Down
4 changes: 2 additions & 2 deletions spec/acceptance/kubernetes_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class {'kubernetes':
end
end

context 'appliction deployment' do
context 'application deployment' do

it 'can deploy an application into a namespace and expose it' do
shell('sleep 180')
Expand All @@ -53,4 +53,4 @@ class {'kubernetes':
end
end
end
end
end
2 changes: 1 addition & 1 deletion spec/acceptance/nodesets/pooler/centos7.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ HOSTS:
centos7:
roles:
- default
platform: el7-x86_64
platform: el-7-x86_64
hypervisor: vmpooler
template: Delivery/Quality Assurance/Templates/vCloud/centos-7-x86_64
CONFIG:
Expand Down
Loading