Skip to content

Commit 359991e

Browse files
chuckhak8s-ci-robot
authored andcommitted
Functional options for kubeadm types (#797)
Signed-off-by: Chuck Ha <[email protected]>
1 parent b59af64 commit 359991e

File tree

10 files changed

+696
-743
lines changed

10 files changed

+696
-743
lines changed

pkg/cloud/aws/services/ec2/instances.go

Lines changed: 85 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"compress/gzip"
2222
"context"
2323
"encoding/base64"
24+
"fmt"
2425
"strings"
2526
"time"
2627

@@ -41,6 +42,27 @@ import (
4142
"sigs.k8s.io/cluster-api-provider-aws/pkg/record"
4243
)
4344

45+
const (
46+
// localIPV4lookup resolves via cloudinit and looks up the instance's IP through the provider's metadata service.
47+
// See https://cloudinit.readthedocs.io/en/latest/topics/instancedata.html
48+
localIPV4Lookup = "{{ ds.meta_data.local_ipv4 }}"
49+
50+
// hostnameLookup resolves via cloud init and uses cloud provider's metadata service to lookup its own hostname.
51+
hostnameLookup = "{{ ds.meta_data.hostname }}"
52+
53+
// containerdSocket is the path to containerd socket.
54+
containerdSocket = "/var/run/containerd/containerd.sock"
55+
56+
// apiServerBindPort is the default port for the kube-apiserver to bind to.
57+
apiServerBindPort = 6443
58+
59+
// cloudProvider is the name of the cloud provider passed to various kubernetes components.
60+
cloudProvider = "aws"
61+
62+
// nodeRole is the label assigned to every node in the cluster.
63+
nodeRole = "node-role.kubernetes.io/node="
64+
)
65+
4466
// InstanceByTags returns the existing instance or nothing if it doesn't exist.
4567
func (s *Service) InstanceByTags(machine *actuators.MachineScope) (*v1alpha1.Instance, error) {
4668
s.scope.V(2).Info("Looking for existing machine instance by tags")
@@ -176,9 +198,26 @@ func (s *Service) createInstance(machine *actuators.MachineScope, bootstrapToken
176198
if bootstrapToken != "" {
177199
s.scope.V(2).Info("Allowing a machine to join the control plane")
178200

179-
updatedJoinConfiguration := kubeadm.SetJoinNodeConfigurationOverrides(caCertHash, bootstrapToken, machine, &machine.MachineConfig.KubeadmConfiguration.Join)
180-
updatedJoinConfiguration = kubeadm.SetControlPlaneJoinConfigurationOverrides(updatedJoinConfiguration)
181-
joinConfigurationYAML, err := kubeadm.ConfigurationToYAML(updatedJoinConfiguration)
201+
kubeadm.SetJoinConfigurationOptions(
202+
&machine.MachineConfig.KubeadmConfiguration.Join,
203+
kubeadm.WithBootstrapTokenDiscovery(
204+
kubeadm.NewBootstrapTokenDiscovery(
205+
kubeadm.WithAPIServerEndpoint(fmt.Sprintf("%s:%d", machine.Network().APIServerELB.DNSName, apiServerBindPort)),
206+
kubeadm.WithToken(bootstrapToken),
207+
kubeadm.WithCACertificateHash(caCertHash),
208+
),
209+
),
210+
kubeadm.WithJoinNodeRegistrationOptions(
211+
kubeadm.NewNodeRegistration(
212+
kubeadm.WithTaints(machine.GetMachine().Spec.Taints),
213+
kubeadm.WithNodeRegistrationName(hostnameLookup),
214+
kubeadm.WithCRISocket(containerdSocket),
215+
kubeadm.WithKubeletExtraArgs(map[string]string{"cloud-provider": cloudProvider}),
216+
),
217+
),
218+
kubeadm.WithLocalAPIEndpointAndPort(localIPV4Lookup, apiServerBindPort),
219+
)
220+
joinConfigurationYAML, err := kubeadm.ConfigurationToYAML(&machine.MachineConfig.KubeadmConfiguration.Join)
182221
if err != nil {
183222
return nil, err
184223
}
@@ -205,14 +244,33 @@ func (s *Service) createInstance(machine *actuators.MachineScope, bootstrapToken
205244
)
206245
}
207246

208-
clusterConfiguration := kubeadm.SetClusterConfigurationOverrides(machine, &s.scope.ClusterConfig.ClusterConfiguration)
209-
clusterConfigYAML, err := kubeadm.ConfigurationToYAML(clusterConfiguration)
247+
kubeadm.SetClusterConfigurationOptions(
248+
&s.scope.ClusterConfig.ClusterConfiguration,
249+
kubeadm.WithControlPlaneEndpoint(fmt.Sprintf("%s:%d", s.scope.Network().APIServerELB.DNSName, apiServerBindPort)),
250+
kubeadm.WithAPIServerCertificateSANs(localIPV4Lookup, s.scope.Network().APIServerELB.DNSName),
251+
kubeadm.WithAPIServerExtraArgs(map[string]string{"cloud-provider": cloudProvider}),
252+
kubeadm.WithControllerManagerExtraArgs(map[string]string{"cloud-provider": cloudProvider}),
253+
kubeadm.WithClusterName(s.scope.Name()),
254+
kubeadm.WithClusterNetworkFromClusterNetworkingConfig(s.scope.Cluster.Spec.ClusterNetwork),
255+
kubeadm.WithKubernetesVersion(machine.GetMachine().Spec.Versions.ControlPlane),
256+
)
257+
clusterConfigYAML, err := kubeadm.ConfigurationToYAML(&s.scope.ClusterConfig.ClusterConfiguration)
210258
if err != nil {
211259
return nil, err
212260
}
213261

214-
initConfiguration := kubeadm.SetInitConfigurationOverrides(machine, &machine.MachineConfig.KubeadmConfiguration.Init)
215-
initConfigYAML, err := kubeadm.ConfigurationToYAML(initConfiguration)
262+
kubeadm.SetInitConfigurationOptions(
263+
&machine.MachineConfig.KubeadmConfiguration.Init,
264+
kubeadm.WithNodeRegistrationOptions(
265+
kubeadm.NewNodeRegistration(
266+
kubeadm.WithTaints(machine.GetMachine().Spec.Taints),
267+
kubeadm.WithNodeRegistrationName(hostnameLookup),
268+
kubeadm.WithCRISocket(containerdSocket),
269+
kubeadm.WithKubeletExtraArgs(map[string]string{"cloud-provider": cloudProvider}),
270+
),
271+
),
272+
)
273+
initConfigYAML, err := kubeadm.ConfigurationToYAML(&machine.MachineConfig.KubeadmConfiguration.Init)
216274
if err != nil {
217275
return nil, err
218276
}
@@ -239,8 +297,26 @@ func (s *Service) createInstance(machine *actuators.MachineScope, bootstrapToken
239297
case "node":
240298
s.scope.V(2).Info("Joining a worker node to the cluster")
241299

242-
joinConfiguration := kubeadm.SetJoinNodeConfigurationOverrides(caCertHash, bootstrapToken, machine, &machine.MachineConfig.KubeadmConfiguration.Join)
243-
joinConfigurationYAML, err := kubeadm.ConfigurationToYAML(joinConfiguration)
300+
kubeadm.SetJoinConfigurationOptions(
301+
&machine.MachineConfig.KubeadmConfiguration.Join,
302+
kubeadm.WithBootstrapTokenDiscovery(
303+
kubeadm.NewBootstrapTokenDiscovery(
304+
kubeadm.WithAPIServerEndpoint(fmt.Sprintf("%s:%d", machine.Network().APIServerELB.DNSName, apiServerBindPort)),
305+
kubeadm.WithToken(bootstrapToken),
306+
kubeadm.WithCACertificateHash(caCertHash),
307+
),
308+
),
309+
kubeadm.WithJoinNodeRegistrationOptions(
310+
kubeadm.NewNodeRegistration(
311+
kubeadm.WithNodeRegistrationName(hostnameLookup),
312+
kubeadm.WithCRISocket(containerdSocket),
313+
kubeadm.WithKubeletExtraArgs(map[string]string{"cloud-provider": cloudProvider}),
314+
kubeadm.WithTaints(machine.GetMachine().Spec.Taints),
315+
kubeadm.WithKubeletExtraArgs(map[string]string{"node-labels": nodeRole}),
316+
),
317+
),
318+
)
319+
joinConfigurationYAML, err := kubeadm.ConfigurationToYAML(&machine.MachineConfig.KubeadmConfiguration.Join)
244320
if err != nil {
245321
return nil, err
246322
}

pkg/cloud/aws/services/kubeadm/BUILD.bazel

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,35 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
33
go_library(
44
name = "go_default_library",
55
srcs = [
6-
"aws_defaults.go",
6+
"bootstraptoken.go",
7+
"configs.go",
8+
"noderegistration.go",
79
"scheme.go",
810
],
911
importpath = "sigs.k8s.io/cluster-api-provider-aws/pkg/cloud/aws/services/kubeadm",
1012
visibility = ["//visibility:public"],
1113
deps = [
12-
"//pkg/cloud/aws/actuators:go_default_library",
1314
"//vendor/github.com/pkg/errors:go_default_library",
15+
"//vendor/k8s.io/api/core/v1:go_default_library",
1416
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
1517
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
1618
"//vendor/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library",
1719
"//vendor/k8s.io/kubernetes/cmd/kubeadm/app/util:go_default_library",
1820
"//vendor/sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1:go_default_library",
19-
"//vendor/sigs.k8s.io/cluster-api/pkg/util:go_default_library",
2021
"//vendor/sigs.k8s.io/controller-runtime/pkg/runtime/scheme:go_default_library",
2122
],
2223
)
2324

2425
go_test(
2526
name = "go_default_test",
26-
srcs = ["aws_defaults_test.go"],
27+
srcs = [
28+
"bootstraptoken_test.go",
29+
"configs_test.go",
30+
"noderegistration_test.go",
31+
],
2732
embed = [":go_default_library"],
2833
deps = [
29-
"//pkg/apis/awsprovider/v1alpha1:go_default_library",
30-
"//pkg/cloud/aws/actuators:go_default_library",
31-
"//pkg/cloudtest:go_default_library",
3234
"//vendor/k8s.io/api/core/v1:go_default_library",
33-
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
3435
"//vendor/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library",
3536
"//vendor/sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1:go_default_library",
3637
],

0 commit comments

Comments
 (0)