diff options
| author | KubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com> | 2023-09-22 10:12:54 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-22 10:12:54 +0800 |
| commit | f7105461ecacc35d89d92ca03601a155a68a6944 (patch) | |
| tree | 5751fad0c7024e98d89224431ff49d8309da3d84 | |
| parent | Merge pull request #5025 from wbc6080/update-docker (diff) | |
| parent | chore: update import sort (diff) | |
| download | kubeedge-f7105461ecacc35d89d92ca03601a155a68a6944.tar.gz | |
Merge pull request #4967 from wujunyi792/feat/windows-nodes-edgecore
Feat/windows nodes edgecore
18 files changed, 270 insertions, 101 deletions
diff --git a/common/constants/default.go b/common/constants/default.go index f42b3873f..cb7231078 100644 --- a/common/constants/default.go +++ b/common/constants/default.go @@ -28,38 +28,17 @@ const ( // Resources const ( - // Certificates - DefaultConfigDir = "/etc/kubeedge/config/" - DefaultCAFile = "/etc/kubeedge/ca/rootCA.crt" - DefaultCAKeyFile = "/etc/kubeedge/ca/rootCA.key" - DefaultCertFile = "/etc/kubeedge/certs/server.crt" - DefaultKeyFile = "/etc/kubeedge/certs/server.key" + DefaultCAURL = "/ca.crt" + DefaultCertURL = "/edge.crt" + DefaultNodeUpgradeURL = "/nodeupgrade" DefaultServiceAccountIssuer = "https://kubernetes.default.svc.cluster.local" - DefaultCAURL = "/ca.crt" - DefaultCertURL = "/edge.crt" - DefaultNodeUpgradeURL = "/nodeupgrade" - - DefaultStreamCAFile = "/etc/kubeedge/ca/streamCA.crt" - DefaultStreamCertFile = "/etc/kubeedge/certs/stream.crt" - DefaultStreamKeyFile = "/etc/kubeedge/certs/stream.key" - - DefaultMqttCAFile = "/etc/kubeedge/ca/rootCA.crt" - DefaultMqttCertFile = "/etc/kubeedge/certs/server.crt" - DefaultMqttKeyFile = "/etc/kubeedge/certs/server.key" - - // Bootstrap file, contains token used by edgecore to apply for ca/cert - BootstrapFile = "/etc/kubeedge/bootstrap-edgecore.conf" - // Edged - DefaultRootDir = "/var/lib/edged" - DefaultDockerAddress = "unix:///var/run/docker.sock" - DefaultRuntimeType = "remote" - DefaultDockershimRootDir = "/var/lib/dockershim" - DefaultEdgedMemoryCapacity = 7852396000 - DefaultRemoteRuntimeEndpoint = "unix:///run/containerd/containerd.sock" - DefaultRemoteImageEndpoint = "unix:///run/containerd/containerd.sock" - DefaultMosquittoImage = "eclipse-mosquitto:1.6.15" + DefaultDockerAddress = "unix:///var/run/docker.sock" + DefaultDockershimRootDir = "/var/lib/dockershim" + DefaultRuntimeType = "remote" + DefaultEdgedMemoryCapacity = 7852396000 + DefaultMosquittoImage = "eclipse-mosquitto:1.6.15" // update PodSandboxImage version when bumping k8s vendor version, consistent with vendor/k8s.io/kubernetes/cmd/kubelet/app/options/container_runtime.go defaultPodSandboxImageVersion // When this value are updated, also update comments in pkg/apis/componentconfig/edgecore/v1alpha1/types.go DefaultPodSandboxImage = "kubeedge/pause:3.6" @@ -69,9 +48,6 @@ const ( DefaultMaximumDeadContainersPerPod = 1 DefaultHostnameOverride = "default-edge-node" DefaultRegisterNodeNamespace = "default" - DefaultCNIConfDir = "/etc/cni/net.d" - DefaultCNIBinDir = "/opt/cni/bin" - DefaultCNICacheDir = "/var/lib/cni/cache" DefaultNetworkPluginMTU = 1500 DefaultConcurrentConsumers = 5 DefaultCgroupRoot = "" diff --git a/common/constants/default_others.go b/common/constants/default_others.go new file mode 100644 index 000000000..20defe4a7 --- /dev/null +++ b/common/constants/default_others.go @@ -0,0 +1,33 @@ +//go:build !windows + +package constants + +// Resources +const ( + // Certificates + DefaultConfigDir = "/etc/kubeedge/config/" + DefaultCAFile = "/etc/kubeedge/ca/rootCA.crt" + DefaultCAKeyFile = "/etc/kubeedge/ca/rootCA.key" + DefaultCertFile = "/etc/kubeedge/certs/server.crt" + DefaultKeyFile = "/etc/kubeedge/certs/server.key" + + DefaultStreamCAFile = "/etc/kubeedge/ca/streamCA.crt" + DefaultStreamCertFile = "/etc/kubeedge/certs/stream.crt" + DefaultStreamKeyFile = "/etc/kubeedge/certs/stream.key" + + DefaultMqttCAFile = "/etc/kubeedge/ca/rootCA.crt" + DefaultMqttCertFile = "/etc/kubeedge/certs/server.crt" + DefaultMqttKeyFile = "/etc/kubeedge/certs/server.key" + + // Bootstrap file, contains token used by edgecore to apply for ca/cert + BootstrapFile = "/etc/kubeedge/bootstrap-edgecore.conf" + + // Edged + DefaultRootDir = "/var/lib/edged" + DefaultRemoteRuntimeEndpoint = "unix:///run/containerd/containerd.sock" + DefaultRemoteImageEndpoint = "unix:///run/containerd/containerd.sock" + DefaultCNIConfDir = "/etc/cni/net.d" + DefaultCNIBinDir = "/opt/cni/bin" + DefaultCNICacheDir = "/var/lib/cni/cache" + DefaultVolumePluginDir = "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/" +) diff --git a/common/constants/default_windows.go b/common/constants/default_windows.go new file mode 100644 index 000000000..021ed739c --- /dev/null +++ b/common/constants/default_windows.go @@ -0,0 +1,36 @@ +//go:build windows + +package constants + +// Module name and group name +const () + +// Resources +const ( + // Certificates + DefaultConfigDir = "c:\\etc\\kubeedge\\config\\" + DefaultCAFile = "c:\\etc\\kubeedge\\ca\\rootCA.crt" + DefaultCAKeyFile = "c:\\etc\\kubeedge\\ca\\rootCA.key" + DefaultCertFile = "c:\\etc\\kubeedge\\certs\\server.crt" + DefaultKeyFile = "c:\\etc\\kubeedge\\certs\\server.key" + + DefaultStreamCAFile = "c:\\etc\\kubeedge\\ca\\streamCA.crt" + DefaultStreamCertFile = "c:\\etc\\kubeedge\\certs\\stream.crt" + DefaultStreamKeyFile = "c:\\etc\\kubeedge\\certs\\stream.key" + + DefaultMqttCAFile = "c:\\etc\\kubeedge\\ca\\rootCA.crt" + DefaultMqttCertFile = "c:\\etc\\kubeedge\\certs\\server.crt" + DefaultMqttKeyFile = "c:\\etc\\kubeedge\\certs\\server.key" + + // Bootstrap file, contains token used by edgecore to apply for ca/cert + BootstrapFile = "c:\\etc\\kubeedge\\bootstrap-edgecore.conf" + + // Edged + DefaultRootDir = "c:\\var\\lib\\edged" + DefaultRemoteRuntimeEndpoint = "npipe://./pipe/containerd-containerd" + DefaultRemoteImageEndpoint = "npipe://./pipe/containerd-containerd" + DefaultCNIConfDir = "c:\\etc\\cni\\net.d" + DefaultCNIBinDir = "c:\\opt\\cni\\bin" + DefaultCNICacheDir = "c:\\var\\lib\\cni\\cache" + DefaultVolumePluginDir = "C:\\usr\\libexec\\kubernetes\\kubelet-plugins\\volume\\exec\\" +) diff --git a/edge/cmd/edgecore/app/server.go b/edge/cmd/edgecore/app/server.go index 0438829f1..e3ad3429e 100644 --- a/edge/cmd/edgecore/app/server.go +++ b/edge/cmd/edgecore/app/server.go @@ -176,7 +176,8 @@ func environmentCheck() error { for _, process := range processes { processName, err := process.Name() if err != nil { - return err + // err usually cant be fixed by user, so just skip it instead of return error (we only check named process) + continue } switch processName { case "kubelet": // if kubelet is running, return error diff --git a/edge/pkg/devicetwin/dmiserver/const_others.go b/edge/pkg/devicetwin/dmiserver/const_others.go new file mode 100644 index 000000000..f06eb0b58 --- /dev/null +++ b/edge/pkg/devicetwin/dmiserver/const_others.go @@ -0,0 +1,7 @@ +//go:build !windows + +package dmiserver + +const ( + SockPath = "/etc/kubeedge/dmi.sock" +) diff --git a/edge/pkg/devicetwin/dmiserver/const_windows.go b/edge/pkg/devicetwin/dmiserver/const_windows.go new file mode 100644 index 000000000..9f68fd48f --- /dev/null +++ b/edge/pkg/devicetwin/dmiserver/const_windows.go @@ -0,0 +1,7 @@ +//go:build windows + +package dmiserver + +const ( + SockPath = "c:\\etc\\kubeedge\\dmi.sock" +) diff --git a/edge/pkg/devicetwin/dmiserver/server.go b/edge/pkg/devicetwin/dmiserver/server.go index a63d20ae8..83eee807f 100644 --- a/edge/pkg/devicetwin/dmiserver/server.go +++ b/edge/pkg/devicetwin/dmiserver/server.go @@ -21,7 +21,6 @@ import ( "encoding/json" "fmt" "net" - "os" "sync" "time" @@ -46,9 +45,8 @@ import ( ) const ( - SockPath = "/etc/kubeedge/dmi.sock" - Limit = 1000 - Burst = 100 + Limit = 1000 + Burst = 100 ) type server struct { @@ -179,22 +177,6 @@ func CreateMessageTwinUpdate(name, valueType, value string) ([]byte, error) { return msg, err } -func initSock(sockPath string) error { - klog.Infof("init uds socket: %s", sockPath) - _, err := os.Stat(sockPath) - if err == nil { - err = os.Remove(sockPath) - if err != nil { - return err - } - return nil - } else if os.IsNotExist(err) { - return nil - } else { - return fmt.Errorf("fail to stat uds socket path") - } -} - func StartDMIServer(cache *DMICache) { err := initSock(SockPath) if err != nil { diff --git a/edge/pkg/devicetwin/dmiserver/server_others.go b/edge/pkg/devicetwin/dmiserver/server_others.go new file mode 100644 index 000000000..48f9b3c0a --- /dev/null +++ b/edge/pkg/devicetwin/dmiserver/server_others.go @@ -0,0 +1,26 @@ +//go:build !windows + +package dmiserver + +import ( + "fmt" + "os" + + "k8s.io/klog/v2" +) + +func initSock(sockPath string) error { + klog.Infof("init uds socket: %s", sockPath) + _, err := os.Stat(sockPath) + if err == nil { + err = os.Remove(sockPath) + if err != nil { + return err + } + return nil + } else if os.IsNotExist(err) { + return nil + } else { + return fmt.Errorf("fail to stat uds socket path") + } +} diff --git a/edge/pkg/devicetwin/dmiserver/server_windows.go b/edge/pkg/devicetwin/dmiserver/server_windows.go new file mode 100644 index 000000000..28a398c9c --- /dev/null +++ b/edge/pkg/devicetwin/dmiserver/server_windows.go @@ -0,0 +1,22 @@ +//go:build windows + +package dmiserver + +import ( + "fmt" + "os" + + "k8s.io/klog/v2" +) + +func initSock(sockPath string) error { + klog.Infof("init uds socket: %s", sockPath) + err := os.Remove(sockPath) + if os.IsNotExist(err) { + return nil + } else if err != nil { + klog.Error(err) + return fmt.Errorf("fail to stat uds socket path") + } + return nil +} diff --git a/edge/pkg/edged/config/config.go b/edge/pkg/edged/config/config.go index 975b34442..52228dbad 100644 --- a/edge/pkg/edged/config/config.go +++ b/edge/pkg/edged/config/config.go @@ -184,6 +184,9 @@ func ConvertConfigEdgedFlagToConfigKubeletFlag(in *v1alpha2.TailoredKubeletFlag, out.RegisterSchedulable = in.RegisterSchedulable out.KeepTerminatedPodVolumes = in.KeepTerminatedPodVolumes out.SeccompDefault = in.SeccompDefault + out.WindowsPriorityClass = in.WindowsPriorityClass + // out.WindowsService may always be false, or kubelet will try to install itself as a windows service. + // out.WindowsService = in.WindowsService // container-runtime-specific options out.ContainerRuntime = in.ContainerRuntime diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/default.go b/pkg/apis/componentconfig/edgecore/v1alpha2/default.go index 97a761157..8924ebfa5 100644 --- a/pkg/apis/componentconfig/edgecore/v1alpha2/default.go +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/default.go @@ -30,14 +30,14 @@ import ( ) // NewDefaultEdgeCoreConfig returns a full EdgeCoreConfig object -func NewDefaultEdgeCoreConfig() *EdgeCoreConfig { +func NewDefaultEdgeCoreConfig() (config *EdgeCoreConfig) { hostnameOverride := util.GetHostname() localIP, _ := util.GetLocalIP(hostnameOverride) defaultTailedKubeletConfig := TailoredKubeletConfiguration{} SetDefaultsKubeletConfiguration(&defaultTailedKubeletConfig) - return &EdgeCoreConfig{ + config = &EdgeCoreConfig{ TypeMeta: metav1.TypeMeta{ Kind: Kind, APIVersion: path.Join(GroupName, APIVersion), @@ -67,6 +67,7 @@ func NewDefaultEdgeCoreConfig() *EdgeCoreConfig { NodeLabels: make(map[string]string), RegisterNode: true, RegisterSchedulable: true, + WindowsPriorityClass: DefaultWindowsPriorityClass, }, CustomInterfaceName: "", RegisterNodeNamespace: constants.DefaultRegisterNodeNamespace, @@ -158,17 +159,18 @@ func NewDefaultEdgeCoreConfig() *EdgeCoreConfig { }, }, } + return } // NewMinEdgeCoreConfig returns a common EdgeCoreConfig object -func NewMinEdgeCoreConfig() *EdgeCoreConfig { +func NewMinEdgeCoreConfig() (config *EdgeCoreConfig) { hostnameOverride := util.GetHostname() localIP, _ := util.GetLocalIP(hostnameOverride) defaultTailedKubeletConfig := TailoredKubeletConfiguration{} SetDefaultsKubeletConfiguration(&defaultTailedKubeletConfig) - return &EdgeCoreConfig{ + config = &EdgeCoreConfig{ TypeMeta: metav1.TypeMeta{ Kind: Kind, APIVersion: path.Join(GroupName, APIVersion), @@ -196,6 +198,7 @@ func NewMinEdgeCoreConfig() *EdgeCoreConfig { NodeLabels: make(map[string]string), RegisterNode: true, RegisterSchedulable: true, + WindowsPriorityClass: DefaultWindowsPriorityClass, }, CustomInterfaceName: "", RegisterNodeNamespace: constants.DefaultRegisterNodeNamespace, @@ -231,4 +234,5 @@ func NewMinEdgeCoreConfig() *EdgeCoreConfig { }, }, } + return } diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/default_kubelet_configuration.go b/pkg/apis/componentconfig/edgecore/v1alpha2/default_kubelet_configuration.go index b80888583..5207d5550 100644 --- a/pkg/apis/componentconfig/edgecore/v1alpha2/default_kubelet_configuration.go +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/default_kubelet_configuration.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The KubeEdge Authors. +Copyright 2023 The KubeEdge Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -32,18 +32,11 @@ import ( configv1beta1 "k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/qos" - kubetypes "k8s.io/kubernetes/pkg/kubelet/types" utilpointer "k8s.io/utils/pointer" "github.com/kubeedge/kubeedge/common/constants" ) -var ( - // TODO: Move these constants to k8s.io/kubelet/config/v1beta1 instead? - // Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. - DefaultNodeAllocatableEnforcement = []string{"pods"} -) - // SetDefaultsKubeletConfiguration sets defaults for tailored kubelet configuration func SetDefaultsKubeletConfiguration(obj *TailoredKubeletConfiguration) { obj.SyncFrequency = metav1.Duration{Duration: 1 * time.Minute} @@ -63,8 +56,6 @@ func SetDefaultsKubeletConfiguration(obj *TailoredKubeletConfiguration) { obj.ImageGCHighThresholdPercent = utilpointer.Int32Ptr(constants.DefaultImageGCHighThreshold) obj.ImageGCLowThresholdPercent = utilpointer.Int32Ptr(constants.DefaultImageGCLowThreshold) obj.VolumeStatsAggPeriod = metav1.Duration{Duration: time.Minute} - obj.CgroupsPerQOS = utilpointer.BoolPtr(true) - obj.CgroupDriver = "cgroupfs" obj.CPUManagerPolicy = "none" // Keep the same as default NodeStatusUpdateFrequency obj.CPUManagerReconcilePeriod = metav1.Duration{Duration: 10 * time.Second} @@ -76,8 +67,6 @@ func SetDefaultsKubeletConfiguration(obj *TailoredKubeletConfiguration) { obj.MaxPods = 110 // default nil or negative value to -1 (implies node allocatable pid limit) obj.PodPidsLimit = utilpointer.Int64(-1) - obj.ResolverConfig = utilpointer.String(kubetypes.ResolvConfDefault) - obj.CPUCFSQuota = utilpointer.BoolPtr(true) obj.CPUCFSQuotaPeriod = &metav1.Duration{Duration: 100 * time.Millisecond} obj.NodeStatusMaxImages = utilpointer.Int32Ptr(0) obj.MaxOpenFiles = 1000000 @@ -94,7 +83,7 @@ func SetDefaultsKubeletConfiguration(obj *TailoredKubeletConfiguration) { obj.ContainerLogMaxFiles = utilpointer.Int32Ptr(5) obj.ConfigMapAndSecretChangeDetectionStrategy = kubeletconfigv1beta1.GetChangeDetectionStrategy obj.EnforceNodeAllocatable = DefaultNodeAllocatableEnforcement - obj.VolumePluginDir = configv1beta1.DefaultVolumePluginDir + obj.VolumePluginDir = constants.DefaultVolumePluginDir // Use the Default LoggingConfiguration option logsapi.SetRecommendedLoggingConfiguration(&obj.Logging) obj.EnableSystemLogHandler = utilpointer.BoolPtr(true) @@ -103,4 +92,10 @@ func SetDefaultsKubeletConfiguration(obj *TailoredKubeletConfiguration) { obj.SeccompDefault = utilpointer.BoolPtr(false) obj.MemoryThrottlingFactor = utilpointer.Float64Ptr(configv1beta1.DefaultMemoryThrottlingFactor) obj.RegisterNode = utilpointer.BoolPtr(true) + + obj.EnforceNodeAllocatable = DefaultNodeAllocatableEnforcement + obj.CgroupDriver = DefaultCgroupDriver + obj.CgroupsPerQOS = utilpointer.Bool(DefaultCgroupsPerQOS) + obj.ResolverConfig = utilpointer.String(DefaultResolverConfig) + obj.CPUCFSQuota = utilpointer.Bool(DefaultCPUCFSQuota) } diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/default_others.go b/pkg/apis/componentconfig/edgecore/v1alpha2/default_others.go new file mode 100644 index 000000000..ba7dbb6c0 --- /dev/null +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/default_others.go @@ -0,0 +1,25 @@ +//go:build !windows + +package v1alpha2 + +import kubetypes "k8s.io/kubernetes/pkg/kubelet/types" + +const ( + CGroupDriverCGroupFS = "cgroupfs" + CGroupDriverSystemd = "systemd" + + // DataBaseDataSource is edge.db + DataBaseDataSource = "/var/lib/kubeedge/edgecore.db" + + DefaultCgroupDriver = "cgroupfs" + DefaultCgroupsPerQOS = true + DefaultResolverConfig = kubetypes.ResolvConfDefault + DefaultCPUCFSQuota = true + DefaultWindowsPriorityClass = "" +) + +var ( + // TODO: Move these constants to k8s.io/kubelet/config/v1beta1 instead? + // Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. + DefaultNodeAllocatableEnforcement = []string{"pods"} +) diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/default_windows.go b/pkg/apis/componentconfig/edgecore/v1alpha2/default_windows.go new file mode 100644 index 000000000..4ff62fdef --- /dev/null +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/default_windows.go @@ -0,0 +1,23 @@ +//go:build windows + +package v1alpha2 + +const ( + CGroupDriverCGroupFS = "-" + CGroupDriverSystemd = "" + + // DataBaseDataSource is edge.db + DataBaseDataSource = "C:\\var\\lib\\kubeedge\\edgecore.db" + + DefaultCgroupDriver = "" + DefaultCgroupsPerQOS = false + DefaultResolverConfig = "" + DefaultCPUCFSQuota = false + DefaultWindowsPriorityClass = "NORMAL_PRIORITY_CLASS" +) + +var ( + // TODO: Move these constants to k8s.io/kubelet/config/v1beta1 instead? + // Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. + DefaultNodeAllocatableEnforcement = []string{} +) diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/types.go b/pkg/apis/componentconfig/edgecore/v1alpha2/types.go index e82660aed..0628649ad 100644 --- a/pkg/apis/componentconfig/edgecore/v1alpha2/types.go +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/types.go @@ -33,17 +33,10 @@ const ( ) const ( - CGroupDriverCGroupFS = "cgroupfs" - CGroupDriverSystemd = "systemd" -) - -const ( // DataBaseDriverName is sqlite3 DataBaseDriverName = "sqlite3" // DataBaseAliasName is default DataBaseAliasName = "default" - // DataBaseDataSource is edge.db - DataBaseDataSource = "/var/lib/kubeedge/edgecore.db" ) type ProtocolName string diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation.go b/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation.go index cda0c581d..76ef74a2e 100644 --- a/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation.go +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation.go @@ -22,8 +22,6 @@ import ( "path" "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/apis/core/validation" "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha2" utilvalidation "github.com/kubeedge/kubeedge/pkg/util/validation" @@ -57,28 +55,6 @@ func ValidateDataBase(db v1alpha2.DataBase) field.ErrorList { return allErrs } -// ValidateModuleEdged validates `e` and returns an errorList if it is invalid -func ValidateModuleEdged(e v1alpha2.Edged) field.ErrorList { - if !e.Enable { - return field.ErrorList{} - } - allErrs := field.ErrorList{} - messages := validation.ValidateNodeName(e.HostnameOverride, false) - for _, msg := range messages { - allErrs = append(allErrs, field.Invalid(field.NewPath("HostnameOverride"), e.HostnameOverride, msg)) - } - if e.NodeIP == "" { - klog.Warningf("NodeIP is empty , use default ip which can connect to cloud.") - } - switch e.TailoredKubeletConfig.CgroupDriver { - case v1alpha2.CGroupDriverCGroupFS, v1alpha2.CGroupDriverSystemd: - default: - allErrs = append(allErrs, field.Invalid(field.NewPath("CGroupDriver"), e.TailoredKubeletConfig.CgroupDriver, - "CGroupDriver value error")) - } - return allErrs -} - // ValidateModuleEdgeHub validates `h` and returns an errorList if it is invalid func ValidateModuleEdgeHub(h v1alpha2.EdgeHub) field.ErrorList { if !h.Enable { diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation_others.go b/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation_others.go new file mode 100644 index 000000000..9c88befe9 --- /dev/null +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation_others.go @@ -0,0 +1,33 @@ +//go:build !windows + +package validation + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/apis/core/validation" + + "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha2" +) + +// ValidateModuleEdged validates `e` and returns an errorList if it is invalid +func ValidateModuleEdged(e v1alpha2.Edged) field.ErrorList { + if !e.Enable { + return field.ErrorList{} + } + allErrs := field.ErrorList{} + messages := validation.ValidateNodeName(e.HostnameOverride, false) + for _, msg := range messages { + allErrs = append(allErrs, field.Invalid(field.NewPath("HostnameOverride"), e.HostnameOverride, msg)) + } + if e.NodeIP == "" { + klog.Warningf("NodeIP is empty , use default ip which can connect to cloud.") + } + switch e.TailoredKubeletConfig.CgroupDriver { + case v1alpha2.CGroupDriverCGroupFS, v1alpha2.CGroupDriverSystemd: + default: + allErrs = append(allErrs, field.Invalid(field.NewPath("CGroupDriver"), e.TailoredKubeletConfig.CgroupDriver, + "CGroupDriver value error")) + } + return allErrs +} diff --git a/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation_windows.go b/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation_windows.go new file mode 100644 index 000000000..ba5d7dee5 --- /dev/null +++ b/pkg/apis/componentconfig/edgecore/v1alpha2/validation/validation_windows.go @@ -0,0 +1,27 @@ +//go:build windows + +package validation + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/apis/core/validation" + + "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha2" +) + +// ValidateModuleEdged validates `e` and returns an errorList if it is invalid +func ValidateModuleEdged(e v1alpha2.Edged) field.ErrorList { + if !e.Enable { + return field.ErrorList{} + } + allErrs := field.ErrorList{} + messages := validation.ValidateNodeName(e.HostnameOverride, false) + for _, msg := range messages { + allErrs = append(allErrs, field.Invalid(field.NewPath("HostnameOverride"), e.HostnameOverride, msg)) + } + if e.NodeIP == "" { + klog.Warningf("NodeIP is empty , use default ip which can connect to cloud.") + } + return allErrs +} |
