Skip to content

Commit 5815384

Browse files
Merge pull request #531 from treydock/kubeadm-v1beta3
Support Kubernetes 1.22 and kubeadm v1beta3 configurations
2 parents 2d4d458 + ef47e12 commit 5815384

File tree

6 files changed

+220
-9
lines changed

6 files changed

+220
-9
lines changed

manifests/config/kubeadm.pp

+6-4
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
Integer $conntrack_min = $kubernetes::conntrack_min,
6464
String $conntrack_tcp_wait_timeout = $kubernetes::conntrack_tcp_wait_timeout,
6565
String $conntrack_tcp_stablished_timeout = $kubernetes::conntrack_tcp_stablished_timeout,
66+
Hash[String[1], Boolean] $feature_gates = $kubernetes::feature_gates,
6667
) {
6768
if !($proxy_mode in ['', 'userspace', 'iptables', 'ipvs', 'kernelspace']) {
6869
fail('Invalid kube-proxy mode! Must be one of "", userspace, iptables, ipvs, kernelspace.')
@@ -167,10 +168,11 @@
167168
$kubelet_extra_config_alpha1_yaml = regsubst(to_yaml($kubelet_extra_config_alpha1), '^---\n', '')
168169

169170
$config_version = $kubernetes_version ? {
170-
/1\.1(0|1)/ => 'v1alpha1',
171-
/1\.12/ => 'v1alpha3',
172-
/1\.1(3|4|5\.[012])/ => 'v1beta1',
173-
default => 'v1beta2',
171+
/1\.1(0|1)/ => 'v1alpha1',
172+
/1\.12/ => 'v1alpha3',
173+
/1\.1(3|4|5\.[012])/ => 'v1beta1',
174+
/1\.(16|17|18|19|20|21)/ => 'v1beta2',
175+
default => 'v1beta3',
174176
}
175177

176178
file { $config_file:

manifests/config/worker.pp

+5-3
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@
1919
Optional[Array] $ignore_preflight_errors = undef,
2020
Boolean $skip_ca_verification = false,
2121
String $cgroup_driver = $kubernetes::cgroup_driver,
22+
Optional[Array] $skip_phases_join = $kubernetes::skip_phases_join,
2223
) {
2324
# to_yaml emits a complete YAML document, so we must remove the leading '---'
2425
$kubelet_extra_config_yaml = regsubst(to_yaml($kubelet_extra_config), '^---\n', '')
2526

2627
$template = $kubernetes_version ? {
27-
/1\.12/ => 'v1alpha3',
28-
/1\.1(3|4|5\.[012])/ => 'v1beta1',
29-
default => 'v1beta2',
28+
/1\.12/ => 'v1alpha3',
29+
/1\.1(3|4|5\.[012])/ => 'v1beta1',
30+
/1\.(16|17|18|19|20|21)/ => 'v1beta2',
31+
default => 'v1beta3',
3032
}
3133

3234
file { '/etc/kubernetes':

manifests/init.pp

+13
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,17 @@
522522
# Allow kubeadm init skip some phases
523523
# Default: none phases skipped
524524
#
525+
# [*skip_phases_join*]
526+
# Allow kubeadm join to skip some phases
527+
# Only works with Kubernetes 1.22+
528+
# Default: no phases skipped
529+
#
530+
# [*feature_gates*]
531+
# Feature gate hash to be added to kubeadm configuration
532+
# Example:
533+
# {'RootlessControlPlane' => true}
534+
# Default: undefined, no feature gates
535+
#
525536
# Authors
526537
# -------
527538
#
@@ -671,13 +682,15 @@
671682
Stdlib::IP::Address $metrics_bind_address = '127.0.0.1',
672683
Optional[String] $join_discovery_file = undef,
673684
Optional[String] $skip_phases = undef,
685+
Optional[Array] $skip_phases_join = undef,
674686
Integer $conntrack_max_per_core = 32768,
675687
Integer $conntrack_min = 131072,
676688
String $conntrack_tcp_wait_timeout = '1h0m0s',
677689
String $conntrack_tcp_stablished_timeout = '24h0m0s',
678690
String $tmp_directory = '/var/tmp/puppetlabs-kubernetes',
679691
Integer $wait_for_default_sa_tries = 5,
680692
Integer $wait_for_default_sa_try_sleep = 6,
693+
Hash[String[1], Boolean] $feature_gates = {},
681694
) {
682695
if !$facts['os']['family'] in ['Debian', 'RedHat'] {
683696
notify { "The OS family ${facts['os']['family']} is not supported by this module": }

spec/acceptance/kubernetes_spec.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
pp = <<-MANIFEST
1414
if $facts['os']['family'] == 'redhat'{
1515
class {'kubernetes':
16-
kubernetes_version => '1.20.6',
17-
kubernetes_package_version => '1.20.6',
16+
kubernetes_version => '1.22.0',
17+
kubernetes_package_version => '1.22.0',
1818
controller_address => "$::ipaddress:6443",
1919
container_runtime => 'docker',
2020
manage_docker => false,
+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
apiVersion: kubeadm.k8s.io/v1beta3
2+
bootstrapTokens:
3+
- groups:
4+
- system:bootstrappers:kubeadm:default-node-token
5+
token: <%= @token %>
6+
ttl: <%= @ttl_duration %>
7+
usages:
8+
- signing
9+
- authentication
10+
kind: InitConfiguration
11+
localAPIEndpoint:
12+
advertiseAddress: <%= @kube_api_advertise_address %>
13+
bindPort: <%= @kube_api_bind_port %>
14+
nodeRegistration:
15+
name: <%= @node_name %>
16+
<%- if @container_runtime == "cri_containerd" -%>
17+
criSocket: unix:///run/containerd/containerd.sock
18+
<%- end -%>
19+
taints:
20+
- effect: NoSchedule
21+
key: node-role.kubernetes.io/master
22+
kubeletExtraArgs:
23+
cgroup-driver: <%= @cgroup_driver %>
24+
<%- if @cloud_provider -%>
25+
cloud-provider: <%= @cloud_provider %>
26+
<%- end -%>
27+
<%- if @cloud_config -%>
28+
cloud-config: <%= @cloud_config %>
29+
<%- end -%>
30+
<%- @kubelet_extra_arguments.each do |arg| -%>
31+
<%= arg %>
32+
<%- end -%>
33+
<% if @skip_phases -%>
34+
skipPhases:
35+
<% @skip_phases.split(',').each do |skip_phase| -%>
36+
- <%= skip_phase %>
37+
<% end -%>
38+
<% end -%>
39+
---
40+
apiServer:
41+
timeoutForControlPlane: 4m0s
42+
<%- if @apiserver_cert_extra_sans -%>
43+
certSANs:
44+
<%- @apiserver_cert_extra_sans.each do |san| -%>
45+
- <%= san %>
46+
<%- end -%>
47+
<%- end -%>
48+
<%- if @apiserver_merged_extra_arguments -%>
49+
extraArgs:
50+
<%- @apiserver_merged_extra_arguments.each do |arg| -%>
51+
<%= arg %>
52+
<%- end -%>
53+
<%- end -%>
54+
<%- if @apiserver_merged_extra_volumes -%>
55+
extraVolumes:
56+
<%- @apiserver_merged_extra_volumes.each do |name, config| -%>
57+
- name: <%= name %>
58+
hostPath: <%= config['hostPath'] %>
59+
mountPath: <%= config['mountPath'] %>
60+
readOnly: <%= config['readOnly'] %>
61+
pathType: <%= config['pathType'] %>
62+
<%- end -%>
63+
<%- end -%>
64+
apiVersion: kubeadm.k8s.io/v1beta3
65+
certificatesDir: /etc/kubernetes/pki
66+
<%- if @kubernetes_cluster_name != "kubernetes" -%>
67+
clusterName: <%= @kubernetes_cluster_name %>
68+
<%- end -%>
69+
controlPlaneEndpoint: "<%= @controller_address %>"
70+
controllerManager:
71+
<%- if @controllermanager_merged_extra_arguments -%>
72+
extraArgs:
73+
<%- @controllermanager_merged_extra_arguments.each do |arg| -%>
74+
<%= arg %>
75+
<%- end -%>
76+
<%- end -%>
77+
<%- if @controllermanager_merged_extra_volumes -%>
78+
extraVolumes:
79+
<%- @controllermanager_merged_extra_volumes.each do |name, config| -%>
80+
- name: <%= name %>
81+
hostPath: <%= config['hostPath'] %>
82+
mountPath: <%= config['mountPath'] %>
83+
readOnly: <%= config['readOnly'] %>
84+
pathType: <%= config['pathType'] %>
85+
<%- end -%>
86+
<%- end -%>
87+
scheduler:
88+
<%- if @scheduler_merged_extra_arguments -%>
89+
extraArgs:
90+
<%- @scheduler_merged_extra_arguments.each do |arg| -%>
91+
<%= arg %>
92+
<%- end -%>
93+
<%- end -%>
94+
etcd:
95+
external:
96+
caFile: /etc/kubernetes/pki/etcd/ca.crt
97+
certFile: /etc/kubernetes/pki/etcd/client.crt
98+
endpoints:
99+
<% @etcd_peers.each do |peer| -%>
100+
- https://<%= peer %>:2379
101+
<% end -%>
102+
keyFile: /etc/kubernetes/pki/etcd/client.key
103+
imageRepository: <%= @image_repository %>
104+
<% unless @feature_gates.empty? -%>
105+
featureGates:
106+
<% @feature_gates.each_pair do |key,value| -%>
107+
<%= key %>: <%= value %>
108+
<% end -%>
109+
<% end -%>
110+
kind: ClusterConfiguration
111+
kubernetesVersion: v<%= @kubernetes_version %>
112+
networking:
113+
dnsDomain: <%= @dns_domain %>
114+
podSubnet: <%= @cni_pod_cidr %>
115+
serviceSubnet: <%= @service_cidr %>
116+
<%- if @kubeadm_extra_config -%>
117+
<%= @kubeadm_extra_config_yaml %>
118+
<%- end -%>
119+
---
120+
apiVersion: kubeproxy.config.k8s.io/v1alpha1
121+
bindAddress: 0.0.0.0
122+
clientConnection:
123+
acceptContentTypes: ""
124+
burst: 10
125+
contentType: application/vnd.kubernetes.protobuf
126+
kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
127+
qps: 5
128+
clusterCIDR: <%= @cni_pod_cidr %>
129+
configSyncPeriod: 15m0s
130+
conntrack:
131+
maxPerCore: <%= @conntrack_max_per_core %>
132+
min: <%= @conntrack_min %>
133+
tcpCloseWaitTimeout: <%= @conntrack_tcp_wait_timeout %>
134+
tcpEstablishedTimeout: <%= @conntrack_tcp_stablished_timeout %>
135+
enableProfiling: false
136+
healthzBindAddress: 0.0.0.0:10256
137+
hostnameOverride: ""
138+
iptables:
139+
masqueradeAll: false
140+
masqueradeBit: 14
141+
minSyncPeriod: 0s
142+
syncPeriod: 30s
143+
ipvs:
144+
excludeCIDRs: null
145+
minSyncPeriod: 0s
146+
scheduler: ""
147+
syncPeriod: 30s
148+
kind: KubeProxyConfiguration
149+
metricsBindAddress: <%= @metrics_bind_address %>:10249
150+
mode: "<%= @proxy_mode %>"
151+
nodePortAddresses: null
152+
oomScoreAdj: -999
153+
portRange: ""
154+
udpIdleTimeout: 250ms
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
apiVersion: kubeadm.k8s.io/v1beta3
2+
caCertPath: /etc/kubernetes/pki/ca.crt
3+
kind: JoinConfiguration
4+
<%- if @kubernetes_cluster_name != "kubernetes" -%>
5+
clusterName: <%= @kubernetes_cluster_name %>
6+
<%- end -%>
7+
discovery:
8+
timeout: 5m0s
9+
bootstrapToken:
10+
token: <%= @discovery_token %>
11+
apiServerEndpoint: '<%= @controller_address %>'
12+
unsafeSkipCAVerification: false
13+
caCertHashes:
14+
- 'sha256:<%= @discovery_token_hash %>'
15+
nodeRegistration:
16+
name: <%= @node_name %>
17+
<%- if @container_runtime == "cri_containerd" -%>
18+
criSocket: unix:///run/containerd/containerd.sock
19+
taints: null
20+
<%- end -%>
21+
kubeletExtraArgs:
22+
cgroup-driver: <%= @cgroup_driver %>
23+
<%- if @cloud_provider -%>
24+
cloud-provider: <%= @cloud_provider %>
25+
<%- if @cloud_config -%>
26+
cloud-config: <%= @cloud_config %>
27+
<%- end -%>
28+
<%- end -%>
29+
<%- @kubelet_extra_arguments.each do |arg| -%>
30+
<%= arg %>
31+
<%- end %>
32+
<% if @feature_gates -%>
33+
featureGates: <%= @feature_gates %>
34+
<% end -%>
35+
<% if @skip_phases_join -%>
36+
skipPhases:
37+
<% @skip_phases_join.each do |skip_phase| -%>
38+
- <%= skip_phase %>
39+
<% end -%>
40+
<% end -%>

0 commit comments

Comments
 (0)