From e9b0f28dfff9f9a4608d6cff5f1a89b3e26091fb Mon Sep 17 00:00:00 2001 From: Ole Markus With Date: Mon, 28 Jun 2021 21:13:34 +0200 Subject: [PATCH] Add nvidia configuration to the api --- k8s/crds/kops.k8s.io_clusters.yaml | 13 +++++ pkg/apis/kops/cluster.go | 13 ++++- pkg/apis/kops/v1alpha2/cluster.go | 13 ++++- .../kops/v1alpha2/zz_generated.conversion.go | 50 +++++++++++++++++++ .../kops/v1alpha2/zz_generated.deepcopy.go | 26 ++++++++++ pkg/apis/kops/zz_generated.deepcopy.go | 26 ++++++++++ pkg/apis/nodeup/config.go | 2 + 7 files changed, 139 insertions(+), 4 deletions(-) diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index 9ab711e40f..e1b65f37d8 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -4238,6 +4238,19 @@ spec: to false. type: boolean type: object + nvidia: + description: NvidiaConfiguration configures the Nvidia GPU runtime. + properties: + enabled: + description: Enabled determines if kOps will install the Nvidia + GPU runtime and drivers. They will only be installed on intances + that has an Nvidia GPU. + type: boolean + package: + description: Package is the name of the nvidia driver package + that will be installed. Default is "nvidia-headless-460-server". + type: string + type: object podCIDR: description: PodCIDR is the CIDR from which we allocate IPs for pods type: string diff --git a/pkg/apis/kops/cluster.go b/pkg/apis/kops/cluster.go index 44c978abdd..850bce3f43 100644 --- a/pkg/apis/kops/cluster.go +++ b/pkg/apis/kops/cluster.go @@ -208,12 +208,21 @@ type ClusterSpec struct { ClusterAutoscaler *ClusterAutoscalerConfig `json:"clusterAutoscaler,omitempty"` // WarmPool defines the default warm pool settings for instance groups (AWS only). WarmPool *WarmPoolSpec `json:"warmPool,omitempty"` - // ServiceAccountIssuerDiscovery configures the OIDC Issuer for ServiceAccounts. ServiceAccountIssuerDiscovery *ServiceAccountIssuerDiscoveryConfig `json:"serviceAccountIssuerDiscovery,omitempty"` - // SnapshotController defines the CSI Snapshot Controller configuration. SnapshotController *SnapshotControllerConfig `json:"snapshotController,omitempty"` + // NvidiaConfiguration configures the Nvidia GPU runtime. + Nvidia *NvidiaConfig `json:"nvidia,omitempty"` +} + +type NvidiaConfig struct { + // Package is the name of the nvidia driver package that will be installed. + // Default is "nvidia-headless-460-server". + DriverPackage string `json:"package,omitempty"` + // Enabled determines if kOps will install the Nvidia GPU runtime and drivers. + // They will only be installed on intances that has an Nvidia GPU. + Enabled *bool `json:"enabled,omitempty"` } // ServiceAccountIssuerDiscoveryConfig configures an OIDC Issuer. diff --git a/pkg/apis/kops/v1alpha2/cluster.go b/pkg/apis/kops/v1alpha2/cluster.go index 1c55673499..8d73c323d0 100644 --- a/pkg/apis/kops/v1alpha2/cluster.go +++ b/pkg/apis/kops/v1alpha2/cluster.go @@ -206,12 +206,21 @@ type ClusterSpec struct { ClusterAutoscaler *ClusterAutoscalerConfig `json:"clusterAutoscaler,omitempty"` // WarmPool defines the default warm pool settings for instance groups (AWS only). WarmPool *WarmPoolSpec `json:"warmPool,omitempty"` - // ServiceAccountIssuerDiscovery configures the OIDC Issuer for ServiceAccounts. ServiceAccountIssuerDiscovery *ServiceAccountIssuerDiscoveryConfig `json:"serviceAccountIssuerDiscovery,omitempty"` - // SnapshotController defines the CSI Snapshot Controller configuration. SnapshotController *SnapshotControllerConfig `json:"snapshotController,omitempty"` + // NvidiaConfiguration configures the Nvidia GPU runtime. + Nvidia *NvidiaConfig `json:"nvidia,omitempty"` +} + +type NvidiaConfig struct { + // Package is the name of the nvidia driver package that will be installed. + // Default is "nvidia-headless-460-server". + DriverPackage string `json:"package,omitempty"` + // Enabled determines if kOps will install the Nvidia GPU runtime and drivers. + // They will only be installed on intances that has an Nvidia GPU. + Enabled *bool `json:"enabled,omitempty"` } // ServiceAccountIssuerDiscoveryConfig configures an OIDC Issuer. diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index ce3b773cd1..8fc133cdf7 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -883,6 +883,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*NvidiaConfig)(nil), (*kops.NvidiaConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha2_NvidiaConfig_To_kops_NvidiaConfig(a.(*NvidiaConfig), b.(*kops.NvidiaConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*kops.NvidiaConfig)(nil), (*NvidiaConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_kops_NvidiaConfig_To_v1alpha2_NvidiaConfig(a.(*kops.NvidiaConfig), b.(*NvidiaConfig), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*OpenstackBlockStorageConfig)(nil), (*kops.OpenstackBlockStorageConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha2_OpenstackBlockStorageConfig_To_kops_OpenstackBlockStorageConfig(a.(*OpenstackBlockStorageConfig), b.(*kops.OpenstackBlockStorageConfig), scope) }); err != nil { @@ -2690,6 +2700,15 @@ func autoConvert_v1alpha2_ClusterSpec_To_kops_ClusterSpec(in *ClusterSpec, out * } else { out.SnapshotController = nil } + if in.Nvidia != nil { + in, out := &in.Nvidia, &out.Nvidia + *out = new(kops.NvidiaConfig) + if err := Convert_v1alpha2_NvidiaConfig_To_kops_NvidiaConfig(*in, *out, s); err != nil { + return err + } + } else { + out.Nvidia = nil + } return nil } @@ -3102,6 +3121,15 @@ func autoConvert_kops_ClusterSpec_To_v1alpha2_ClusterSpec(in *kops.ClusterSpec, } else { out.SnapshotController = nil } + if in.Nvidia != nil { + in, out := &in.Nvidia, &out.Nvidia + *out = new(NvidiaConfig) + if err := Convert_kops_NvidiaConfig_To_v1alpha2_NvidiaConfig(*in, *out, s); err != nil { + return err + } + } else { + out.Nvidia = nil + } return nil } @@ -6122,6 +6150,28 @@ func Convert_kops_NodeTerminationHandlerConfig_To_v1alpha2_NodeTerminationHandle return autoConvert_kops_NodeTerminationHandlerConfig_To_v1alpha2_NodeTerminationHandlerConfig(in, out, s) } +func autoConvert_v1alpha2_NvidiaConfig_To_kops_NvidiaConfig(in *NvidiaConfig, out *kops.NvidiaConfig, s conversion.Scope) error { + out.DriverPackage = in.DriverPackage + out.Enabled = in.Enabled + return nil +} + +// Convert_v1alpha2_NvidiaConfig_To_kops_NvidiaConfig is an autogenerated conversion function. +func Convert_v1alpha2_NvidiaConfig_To_kops_NvidiaConfig(in *NvidiaConfig, out *kops.NvidiaConfig, s conversion.Scope) error { + return autoConvert_v1alpha2_NvidiaConfig_To_kops_NvidiaConfig(in, out, s) +} + +func autoConvert_kops_NvidiaConfig_To_v1alpha2_NvidiaConfig(in *kops.NvidiaConfig, out *NvidiaConfig, s conversion.Scope) error { + out.DriverPackage = in.DriverPackage + out.Enabled = in.Enabled + return nil +} + +// Convert_kops_NvidiaConfig_To_v1alpha2_NvidiaConfig is an autogenerated conversion function. +func Convert_kops_NvidiaConfig_To_v1alpha2_NvidiaConfig(in *kops.NvidiaConfig, out *NvidiaConfig, s conversion.Scope) error { + return autoConvert_kops_NvidiaConfig_To_v1alpha2_NvidiaConfig(in, out, s) +} + func autoConvert_v1alpha2_OpenstackBlockStorageConfig_To_kops_OpenstackBlockStorageConfig(in *OpenstackBlockStorageConfig, out *kops.OpenstackBlockStorageConfig, s conversion.Scope) error { out.Version = in.Version out.IgnoreAZ = in.IgnoreAZ diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index 7e3ec3bc20..96afe652b4 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -1185,6 +1185,11 @@ func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { *out = new(SnapshotControllerConfig) (*in).DeepCopyInto(*out) } + if in.Nvidia != nil { + in, out := &in.Nvidia, &out.Nvidia + *out = new(NvidiaConfig) + (*in).DeepCopyInto(*out) + } return } @@ -4131,6 +4136,27 @@ func (in *NodeTerminationHandlerConfig) DeepCopy() *NodeTerminationHandlerConfig return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NvidiaConfig) DeepCopyInto(out *NvidiaConfig) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NvidiaConfig. +func (in *NvidiaConfig) DeepCopy() *NvidiaConfig { + if in == nil { + return nil + } + out := new(NvidiaConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackBlockStorageConfig) DeepCopyInto(out *OpenstackBlockStorageConfig) { *out = *in diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index c3c0f9df62..00eca139f7 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -1269,6 +1269,11 @@ func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { *out = new(SnapshotControllerConfig) (*in).DeepCopyInto(*out) } + if in.Nvidia != nil { + in, out := &in.Nvidia, &out.Nvidia + *out = new(NvidiaConfig) + (*in).DeepCopyInto(*out) + } return } @@ -4313,6 +4318,27 @@ func (in *NodeTerminationHandlerConfig) DeepCopy() *NodeTerminationHandlerConfig return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NvidiaConfig) DeepCopyInto(out *NvidiaConfig) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NvidiaConfig. +func (in *NvidiaConfig) DeepCopy() *NvidiaConfig { + if in == nil { + return nil + } + out := new(NvidiaConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackBlockStorageConfig) DeepCopyInto(out *OpenstackBlockStorageConfig) { *out = *in diff --git a/pkg/apis/nodeup/config.go b/pkg/apis/nodeup/config.go index 098e76c63a..e938f01087 100644 --- a/pkg/apis/nodeup/config.go +++ b/pkg/apis/nodeup/config.go @@ -76,6 +76,8 @@ type Config struct { // APIServerConfig is additional configuration for nodes running an APIServer. APIServerConfig *APIServerConfig `json:",omitempty"` + // Nvidia contains the configuration for nvidia + Nvidia *kops.NvidiaConfig `json:",omitempty"` } // BootConfig is the configuration for the nodeup binary that might be too big to fit in userdata.