Skip to content

Commit d416a02

Browse files
authored
Merge pull request #66 from ananace/hieraify-defaults
Initial work on hiera-ifying and Puppet 8 support for standalone etcd
2 parents 8973c33 + 682d184 commit d416a02

26 files changed

+618
-1999
lines changed

REFERENCE.md

Lines changed: 288 additions & 1813 deletions
Large diffs are not rendered by default.

manifests/common.pp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# @summary Sets up common Kubernetes components - users/groups/folders/etc
2+
# @api private
3+
class k8s::common {
4+
assert_private()
5+
6+
group { $k8s::group:
7+
ensure => present,
8+
system => true,
9+
gid => $k8s::gid,
10+
}
11+
12+
user { $k8s::user:
13+
ensure => present,
14+
comment => 'Kubernetes user',
15+
gid => $k8s::group,
16+
home => '/srv/kubernetes',
17+
managehome => false,
18+
shell => (fact('os.family') ? {
19+
'Debian' => '/usr/sbin/nologin',
20+
default => '/sbin/nologin',
21+
}),
22+
system => true,
23+
uid => $k8s::uid,
24+
}
25+
26+
file {
27+
default:
28+
ensure => directory,
29+
force => true,
30+
purge => true,
31+
recurse => true;
32+
33+
'/opt/k8s': ;
34+
'/opt/k8s/bin': ;
35+
}
36+
37+
file { '/var/run/kubernetes':
38+
ensure => directory,
39+
owner => $k8s::user,
40+
group => $k8s::group,
41+
}
42+
43+
file { "${k8s::sysconfig_path}/kube-common":
44+
ensure => file,
45+
content => epp('k8s/sysconfig.epp', {
46+
comment => 'General Kubernetes Configuration',
47+
environment_variables => {
48+
'KUBE_LOG_LEVEL' => '',
49+
},
50+
}),
51+
}
52+
53+
file {
54+
default:
55+
ensure => directory;
56+
57+
'/etc/kubernetes': ;
58+
'/etc/kubernetes/certs': ;
59+
'/etc/kubernetes/manifests':
60+
purge => $k8s::purge_manifests,
61+
recurse => true;
62+
'/root/.kube': ;
63+
'/srv/kubernetes':
64+
owner => $k8s::user,
65+
group => $k8s::group;
66+
'/usr/libexec/kubernetes': ;
67+
'/var/lib/kubelet': ;
68+
'/var/lib/kubelet/pki': ;
69+
70+
'/usr/share/containers/': ;
71+
'/usr/share/containers/oci/': ;
72+
'/usr/share/containers/oci/hooks.d': ;
73+
}
74+
}

manifests/init.pp

Lines changed: 9 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
# @param puppetdb_discovery whether to use puppetdb for node discovery
3838
# @param puppetdb_discovery_tag tag to use for puppetdb node discovery
3939
# @param purge_manifests whether to purge manifests
40-
# @param role role of the node
40+
# @param role the role of the node
4141
# @param runc_version version of runc to install
4242
# @param service_cluster_cidr CIDR for the service network
43-
# @param sysconfig_path path to the sysconfig directory
43+
# @param sysconfig_path path to the sysconfig directory, per-OS values are configured in hiera
4444
# @param tarball_url_template template for tarball packaging
4545
# @param uid user id for kubernetes files and services
4646
# @param user username for kubernetes files and services
@@ -82,7 +82,7 @@
8282
String[1] $tarball_url_template = 'https://dl.k8s.io/release/v%{version}/kubernetes-%{component}-%{kernel}-%{arch}.tar.gz',
8383
String[1] $package_template = 'kubernetes-%{component}',
8484
String[1] $hyperkube_name = 'hyperkube',
85-
Optional[Stdlib::Unixpath] $sysconfig_path = undef,
85+
Stdlib::Unixpath $sysconfig_path = '/etc/sysconfig',
8686

8787
K8s::Node_auth $node_auth = 'bootstrap',
8888

@@ -95,108 +95,19 @@
9595
Stdlib::Fqdn $cluster_domain = 'cluster.local',
9696
String[1] $etcd_cluster_name = 'default',
9797

98-
Enum['node','server','none'] $role = 'none',
98+
Optional[K8s::Node_role] $role = undef,
9999
Optional[K8s::Firewall] $firewall_type = undef,
100100

101101
String[1] $user = 'kube',
102102
String[1] $group = 'kube',
103103
Integer[0, 65535] $uid = 888,
104104
Integer[0, 65535] $gid = 888,
105105
) {
106-
if $manage_container_manager {
107-
include k8s::install::container_runtime
108-
}
109-
110-
group { $group:
111-
ensure => present,
112-
system => true,
113-
gid => $gid,
114-
}
115-
116-
user { $user:
117-
ensure => present,
118-
comment => 'Kubernetes user',
119-
gid => $group,
120-
home => '/srv/kubernetes',
121-
managehome => false,
122-
shell => (fact('os.family') ? {
123-
'Debian' => '/usr/sbin/nologin',
124-
default => '/sbin/nologin',
125-
}),
126-
system => true,
127-
uid => $uid,
128-
}
129-
130-
file {
131-
default:
132-
ensure => directory,
133-
force => true,
134-
purge => true,
135-
recurse => true;
136-
137-
'/opt/k8s': ;
138-
'/opt/k8s/bin': ;
139-
}
140-
141-
file { '/var/run/kubernetes':
142-
ensure => directory,
143-
owner => $user,
144-
group => $group,
145-
}
146-
147-
$_sysconfig_path = pick($sysconfig_path, '/etc/sysconfig')
148-
file { "${_sysconfig_path}/kube-common":
149-
ensure => file,
150-
content => epp('k8s/sysconfig.epp', {
151-
comment => 'General Kubernetes Configuration',
152-
environment_variables => {
153-
'KUBE_LOG_LEVEL' => '',
154-
},
155-
}),
156-
}
157-
158-
file {
159-
default:
160-
ensure => directory;
161-
162-
'/etc/kubernetes': ;
163-
'/etc/kubernetes/certs': ;
164-
'/etc/kubernetes/manifests':
165-
purge => $purge_manifests,
166-
recurse => true;
167-
'/root/.kube': ;
168-
'/srv/kubernetes':
169-
owner => $user,
170-
group => $group;
171-
'/usr/libexec/kubernetes': ;
172-
'/var/lib/kubelet': ;
173-
'/var/lib/kubelet/pki': ;
174-
175-
'/usr/share/containers/': ;
176-
'/usr/share/containers/oci/': ;
177-
'/usr/share/containers/oci/hooks.d': ;
178-
}
179-
180-
if $manage_repo {
181-
include k8s::repo
182-
}
183-
184-
if $manage_packages {
185-
# Ensure conntrack is installed to properly handle networking cleanup
186-
if fact('os.family') == 'Debian' {
187-
$_conntrack = 'conntrack'
188-
} else {
189-
$_conntrack = 'conntrack-tools'
190-
}
191-
192-
ensure_packages([$_conntrack,])
193-
}
194-
195-
include k8s::install::cni_plugins
196-
197-
if $role == 'server' {
198-
include k8s::server
106+
if $role == 'server' or $role == 'control-plane' {
107+
contain k8s::server
199108
} elsif $role == 'node' {
200-
include k8s::node
109+
contain k8s::node
110+
} elsif $role == 'etcd-replica' {
111+
contain k8s::server::etcd
201112
}
202113
}

manifests/install/container_runtime.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,6 @@
8787
}
8888

8989
if $manage_repo {
90-
Class['k8s::repo'] -> Package['k8s container manager']
90+
require k8s::repo
9191
}
9292
}

manifests/install/crictl.pp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
Stdlib::HTTPUrl $download_url_template = 'https://github.com/kubernetes-sigs/cri-tools/releases/download/%{version}/crictl-%{version}-linux-%{arch}.tar.gz',
2222
) {
2323
if $manage_repo {
24-
$pkg = pick($crictl_package, 'cri-tools')
24+
include k8s::repo
2525

26+
$pkg = pick($crictl_package, 'cri-tools')
2627
package { $pkg:
2728
ensure => stdlib::ensure($ensure, 'package'),
2829
}

manifests/node.pp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,24 @@
5454

5555
Optional[K8s::Firewall] $firewall_type = $k8s::firewall_type,
5656
) {
57+
include k8s::common
58+
include k8s::install::cni_plugins
59+
60+
if $k8s::manage_container_manager {
61+
include k8s::install::container_runtime
62+
}
63+
if $k8s::manage_repo {
64+
include k8s::repo
65+
}
66+
if $k8s::manage_packages {
67+
# Ensure conntrack is installed to properly handle networking cleanup
68+
$_conntrack = fact('os.family') ? {
69+
'Debian' => 'conntrack',
70+
default => 'conntrack-tools',
71+
}
72+
ensure_packages([$_conntrack,])
73+
}
74+
5775
if $manage_crictl {
5876
include k8s::install::crictl
5977
}

manifests/node/kube_proxy.pp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# @summary Sets up a on-node kube-proxy instance
2+
# @api private
23
#
34
# For most use-cases, running kube-proxy inside the cluster itself is recommended
45
#
@@ -100,8 +101,7 @@
100101

101102
if $k8s::packaging == 'container' {
102103
} else {
103-
$_sysconfig_path = pick($k8s::sysconfig_path, '/etc/sysconfig')
104-
file { "${_sysconfig_path}/kube-proxy":
104+
file { "${k8s::sysconfig_path}/kube-proxy":
105105
ensure => $_ensure,
106106
content => epp('k8s/sysconfig.epp', {
107107
comment => 'Kubernetes kube-proxy configuration',
@@ -122,7 +122,7 @@
122122
bin => 'kube-proxy',
123123
}),
124124
require => [
125-
File["${_sysconfig_path}/kube-proxy"],
125+
File["${k8s::sysconfig_path}/kube-proxy"],
126126
User[$k8s::user],
127127
],
128128
notify => Service['kube-proxy'],

manifests/node/kubelet.pp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# @summary Installs and configures kubelet
2+
# @api private
23
#
34
# @param arguments additional arguments to pass to kubelet
45
# @param auth type of node authentication
@@ -52,6 +53,8 @@
5253

5354
Optional[K8s::Firewall] $firewall_type = $k8s::node::firewall_type,
5455
) {
56+
assert_private()
57+
5558
k8s::binary { 'kubelet':
5659
ensure => $ensure,
5760
notify => Service['kubelet'],
@@ -231,8 +234,7 @@
231234
node_ip => $_node_ip,
232235
} + $arguments)
233236

234-
$_sysconfig_path = pick($k8s::sysconfig_path, '/etc/sysconfig')
235-
file { "${_sysconfig_path}/kubelet":
237+
file { "${k8s::sysconfig_path}/kubelet":
236238
content => epp('k8s/sysconfig.epp', {
237239
comment => 'Kubernetes Kubelet configuration',
238240
environment_variables => {
@@ -252,7 +254,7 @@
252254
bin => 'kubelet',
253255
}),
254256
require => [
255-
File["${_sysconfig_path}/kubelet", '/etc/kubernetes/kubelet.conf'],
257+
File["${k8s::sysconfig_path}/kubelet", '/etc/kubernetes/kubelet.conf'],
256258
User[$k8s::user],
257259
],
258260
notify => Service['kubelet'],

manifests/server.pp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
Optional[K8s::Firewall] $firewall_type = $k8s::firewall_type,
6060
String[1] $etcd_cluster_name = $k8s::etcd_cluster_name,
6161
) {
62+
include k8s::common
63+
6264
if $manage_etcd {
6365
class { 'k8s::server::etcd':
6466
ensure => $ensure,

manifests/server/apiserver.pp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# @summary Installs and configures a Kubernetes apiserver
2+
# @api private
23
#
34
# @param advertise_address bind address of the apiserver
45
# @param aggregator_ca_cert path to the aggregator ca cert file
@@ -263,8 +264,7 @@
263264
}
264265
# TODO: Create a dummy kube-apiserver service that just requires kubelet
265266
} else {
266-
$_sysconfig_path = pick($k8s::sysconfig_path, '/etc/sysconfig')
267-
file { "${_sysconfig_path}/kube-apiserver":
267+
file { "${k8s::sysconfig_path}/kube-apiserver":
268268
content => epp('k8s/sysconfig.epp', {
269269
comment => 'Kubernetes API Server configuration',
270270
environment_variables => {
@@ -287,7 +287,7 @@
287287
group => $k8s::group,
288288
}),
289289
require => [
290-
File["${_sysconfig_path}/kube-apiserver"],
290+
File["${k8s::sysconfig_path}/kube-apiserver"],
291291
User[$k8s::user],
292292
],
293293
notify => Service['kube-apiserver'],

0 commit comments

Comments
 (0)