14 changes: 12 additions & 2 deletions .fixtures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@ fixtures:
forge_modules:
stdlib: 'puppetlabs-stdlib'
apt: 'puppetlabs-apt'
wget: 'maestrodev-wget'
archive: "puppet-archive"
wget: 'puppet-wget'
archive: "puppet-archive"
translate: "puppetlabs-translate"
augeasproviders_sysctl: "herculesteam-augeasproviders_sysctl"
augeasproviders_core: "herculesteam-augeasproviders_core"
kmod: "camptocamp-kmod"
repositories:
yumrepo_core:
repo: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git
puppet_version: ">= 6.0.0"
augueas_core:
repo: https://github.com/puppetlabs/puppetlabs-augeas_core.git
puppet_version: ">= 6.0.0"
symlinks:
kubernetes: "#{source_dir}"
19 changes: 7 additions & 12 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,18 @@ before_install:
- gem --version
- bundle -v
script:
- 'bundle exec rake $CHECK'
bundler_args:
- 'bundle exec rake syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop'
- 'bundle exec rake parallel_spec'
- 'bundle exec rake test'
bundler_args:
rvm:
- 2.4.4
env:
global:
- BEAKER_PUPPET_COLLECTION=puppet5 PUPPET_GEM_VERSION="~> 5.0"
- PUPPET_GEM_VERSION="~> 4.0"
- PUPPET_GEM_VERSION="~> 5.0"
- PUPPET_GEM_VERSION="~> 6.0"
matrix:
fast_finish: true
include:
-
env: CHECK="syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop"
-
env: CHECK=parallel_spec
-
env: PUPPET_GEM_VERSION="~> 4.0" CHECK=parallel_spec
rvm: 2.3.3
branches:
only:
- master
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
# Version 3.2.0

Includes support for 1.13.x with the alpha3 config files

Uses config file for join tasks

Versions Dashboard

Enables kubelet service on RHEL/Centos

Removes params.pp in favor of data in init.pp

A full list of PR's and issues closed can be found here [here](https://github.com/puppetlabs/puppetlabs-kubernetes/milestone/4)

# Version 3.1.0

Adds support for Kubernetes 1.12.x
Expand Down
5 changes: 1 addition & 4 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,7 @@ group :development do
gem "rake", '~> 10.0', require: false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('1.8.7') && Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('1.9')
end

#Temporarily commenting out ENV variable for puppet_version and hardcoding puppet version to 5.5.6 until we add puppet 6 support this is to fix ci.
#puppet_version = ENV['PUPPET_GEM_VERSION']

puppet_version = '5.5.6'
puppet_version = ENV['PUPPET_GEM_VERSION']
puppet_type = gem_type(puppet_version)
facter_version = ENV['FACTER_GEM_VERSION']
hiera_version = ENV['HIERA_GEM_VERSION']
Expand Down
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ pdk test unit --puppet-version='5.3.6'
#### Public classes

* kubernetes
* kubernetes::params

#### Private classes

Expand Down Expand Up @@ -258,6 +257,22 @@ Valid values are `true`, `false`.

Defaults to `true`.

#### `manage_kernel_modules`

Specifies whether to manage the kernel modules needed for kubernetes

Valid values are `true`, `false`.

Defaults to `true`

#### `manage_sysctl_settings`

Specifies whether to manage the the sysctl settings needed for kubernetes

Valid values are `true`, `false`.

Defaults to `true`

#### `discovery_token_hash`

The string used to validate to the root CA public key when joining a cluster. This value is created by `kubetool`.
Expand Down Expand Up @@ -471,6 +486,12 @@ A hash containing extra configuration data to be serialised with `to_yaml` and a

Defaults to `{}`.

#### `kubelet_extra_arguments`

A string array to be appended to kubeletExtraArgs in the Kubelet's nodeRegistration configuration. It is applied to both masters and nodes. Use this for critical Kubelet settings such as `pod-infra-container-image` which may be problematic to configure via kubelet_extra_config and DynamicKubeletConfig.

Defaults to `[]`.

#### `kubernetes_apt_location`

The APT repo URL for the Kubernetes packages.
Expand Down
30 changes: 5 additions & 25 deletions manifests/cluster_roles.pp
Original file line number Diff line number Diff line change
@@ -1,26 +1,12 @@
# This class configures the RBAC roles for Kubernetes 1.10.x

class kubernetes::cluster_roles (

Optional[String] $controller_address = $kubernetes::controller_address,
Optional[Boolean] $controller = $kubernetes::controller,
Optional[Boolean] $worker = $kubernetes::worker,
Optional[String] $etcd_ip = $kubernetes::etcd_ip,
Optional[String] $etcd_initial_cluster = $kubernetes::etcd_initial_cluster,
String $node_label = $kubernetes::node_label,
String $etcd_ca_key = $kubernetes::etcd_ca_key,
String $etcd_ca_crt = $kubernetes::etcd_ca_crt,
String $etcdclient_key = $kubernetes::etcdclient_key,
String $etcdclient_crt = $kubernetes::etcdclient_crt,
String $kube_api_advertise_address = $kubernetes::kube_api_advertise_address,
Integer $api_server_count = $kubernetes::api_server_count,
String $cni_pod_cidr = $kubernetes::cni_pod_cidr,
String $token = $kubernetes::token,
String $discovery_token_hash = $kubernetes::discovery_token_hash,
String $node_name = $kubernetes::node_name,
String $container_runtime = $kubernetes::container_runtime,
Optional[Array] $ignore_preflight_errors = []

){
) {
$path = ['/usr/bin','/bin','/sbin','/usr/local/bin']
$env_controller = ['HOME=/root', 'KUBECONFIG=/etc/kubernetes/admin.conf']
#Worker nodes do not have admin.conf present
Expand All @@ -36,25 +22,19 @@


if $controller {
kubernetes::kubeadm_init { $node_label:
config => '/etc/kubernetes/config.yaml',
kubernetes::kubeadm_init { $node_name:
path => $path,
env => $env_controller,
node_label => $node_label,
ignore_preflight_errors => $preflight_errors,
}
}

if $worker {
kubernetes::kubeadm_join { $node_label:
kubernetes::kubeadm_join { $node_name:
path => $path,
env => $env_worker,
controller_address => $controller_address,
token => $token,
ca_cert_hash => $discovery_token_hash,
cri_socket => $cri_socket,
node_label => $node_label,
ignore_preflight_errors => $preflight_errors,
}
}
}
}
35 changes: 32 additions & 3 deletions manifests/config.pp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Calss kubernetes config, populates config files with params to bootstrap cluster
class kubernetes::config (

String $config_file = $kubernetes::config_file,
Boolean $manage_etcd = $kubernetes::manage_etcd,
String $kubernetes_version = $kubernetes::kubernetes_version,
String $etcd_ca_key = $kubernetes::etcd_ca_key,
Expand All @@ -27,8 +27,9 @@
String $sa_key = $kubernetes::sa_key,
Optional[Array] $apiserver_cert_extra_sans = $kubernetes::apiserver_cert_extra_sans,
Optional[Array] $apiserver_extra_arguments = $kubernetes::apiserver_extra_arguments,
Optional[Array] $kubelet_extra_arguments = $kubernetes::kubelet_extra_arguments,
String $service_cidr = $kubernetes::service_cidr,
String $node_label = $kubernetes::node_label,
String $node_name = $kubernetes::node_name,
Optional[String] $cloud_provider = $kubernetes::cloud_provider,
Optional[String] $cloud_config = $kubernetes::cloud_config,
Optional[Hash] $kubeadm_extra_config = $kubernetes::kubeadm_extra_config,
Expand Down Expand Up @@ -75,6 +76,34 @@
},
}

# Need to merge the cloud configuration parameters into extra_arguments
if $cloud_provider {
$cloud_args = $cloud_config ? {
undef => ["cloud-provider: ${cloud_provider}"],
default => ["cloud-provider: ${cloud_provider}", "cloud-config: ${cloud_config}"],
}
$apiserver_merged_extra_arguments = concat($apiserver_extra_arguments, $cloud_args)
$kubelet_merged_extra_arguments = concat($kubelet_extra_arguments, $cloud_args)
$controllermanager_merged_extra_arguments = $cloud_args

# could check against Kubernetes 1.10 here, but that uses alpha1 config which doesn't have these options
if $cloud_config {
# The cloud config must be mounted into the apiserver and controllermanager containers
$controllermanager_extra_volumes = $apiserver_extra_volumes = {
'cloud' => {
hostPath => $cloud_config,
mountPath => $cloud_config,
}
}
}
}
else {
$apiserver_merged_extra_arguments = $apiserver_extra_arguments
$apiserver_extra_volumes = {}
$controllermanager_merged_extra_arguments = []
$controllermanager_extra_volumes = {}
}

# to_yaml emits a complete YAML document, so we must remove the leading '---'
$kubeadm_extra_config_yaml = regsubst(to_yaml($kubeadm_extra_config), '^---\n', '')
$kubelet_extra_config_yaml = regsubst(to_yaml($kubelet_extra_config), '^---\n', '')
Expand All @@ -86,7 +115,7 @@
$template = 'alpha3'
}

file { '/etc/kubernetes/config.yaml':
file { $config_file:
ensure => present,
content => template("kubernetes/config-${template}.yaml.erb"),
}
Expand Down
47 changes: 47 additions & 0 deletions manifests/config/worker.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Class kubernetes config_worker, populates worker config files with joinconfig
class kubernetes::config::worker (
String $node_name = $kubernetes::node_name,
String $config_file = $kubernetes::config_file,
String $kubernetes_version = $kubernetes::kubernetes_version,
String $controller_address = $kubernetes::controller_address,
String $discovery_token_hash = $kubernetes::discovery_token_hash,
String $container_runtime = $kubernetes::container_runtime,
String $discovery_token = $kubernetes::token,
String $tls_bootstrap_token = $kubernetes::token,
String $token = $kubernetes::token,
Optional[String] $discovery_file = undef,
Optional[String] $feature_gates = undef,
Optional[String] $cloud_provider = $kubernetes::cloud_provider,
Optional[String] $cloud_config = $kubernetes::cloud_config,
Optional[Array] $kubelet_extra_arguments = $kubernetes::kubelet_extra_arguments,
Optional[Hash] $kubelet_extra_config = $kubernetes::kubelet_extra_config,
Optional[Array] $ignore_preflight_errors = undef,
Boolean $skip_ca_verification = false,
) {
# Need to merge the cloud configuration parameters into extra_arguments
if !empty($cloud_provider) {
$cloud_args = empty($cloud_config) ? {
true => ["cloud-provider: ${cloud_provider}"],
default => ["cloud-provider: ${cloud_provider}", "cloud-config: ${cloud_config}"],
}
$kubelet_merged_extra_arguments = concat($kubelet_extra_arguments, $cloud_args)
}
else {
$kubelet_merged_extra_arguments = $kubelet_extra_arguments
}

# to_yaml emits a complete YAML document, so we must remove the leading '---'
$kubelet_extra_config_yaml = regsubst(to_yaml($kubelet_extra_config), '^---\n', '')

$template = $kubernetes_version ? {
default => 'v1alpha3',
}

file { $config_file:
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
content => template("kubernetes/${template}/config_worker.yaml.erb"),
}
}
Loading