k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/pkg/kubelet/apis/config/fuzzer/fuzzer.go (about) 1 /* 2 Copyright 2017 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package fuzzer 18 19 import ( 20 "math/rand" 21 "time" 22 23 fuzz "github.com/google/gofuzz" 24 25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 26 runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" 27 "k8s.io/kubelet/config/v1beta1" 28 "k8s.io/kubernetes/pkg/cluster/ports" 29 kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" 30 kubeletconfigv1beta1 "k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1" 31 "k8s.io/kubernetes/pkg/kubelet/eviction" 32 "k8s.io/kubernetes/pkg/kubelet/qos" 33 kubetypes "k8s.io/kubernetes/pkg/kubelet/types" 34 utilpointer "k8s.io/utils/pointer" 35 ) 36 37 // Funcs returns the fuzzer functions for the kubeletconfig apis. 38 func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { 39 return []interface{}{ 40 // provide non-empty values for fields with defaults, so the defaulter doesn't change values during round-trip 41 func(obj *kubeletconfig.KubeletConfiguration, c fuzz.Continue) { 42 c.FuzzNoCustom(obj) 43 obj.EnableServer = true 44 obj.Authentication.Anonymous.Enabled = true 45 obj.Authentication.Webhook.Enabled = false 46 obj.Authentication.Webhook.CacheTTL = metav1.Duration{Duration: 2 * time.Minute} 47 obj.Authorization.Mode = kubeletconfig.KubeletAuthorizationModeAlwaysAllow 48 obj.Authorization.Webhook.CacheAuthorizedTTL = metav1.Duration{Duration: 5 * time.Minute} 49 obj.Authorization.Webhook.CacheUnauthorizedTTL = metav1.Duration{Duration: 30 * time.Second} 50 obj.Address = "0.0.0.0" 51 obj.VolumeStatsAggPeriod = metav1.Duration{Duration: time.Minute} 52 obj.RuntimeRequestTimeout = metav1.Duration{Duration: 2 * time.Minute} 53 obj.CPUCFSQuota = true 54 obj.EventBurst = 10 55 obj.EventRecordQPS = 5 56 obj.EnableControllerAttachDetach = true 57 obj.EnableDebuggingHandlers = true 58 obj.EnableSystemLogQuery = false 59 obj.FileCheckFrequency = metav1.Duration{Duration: 20 * time.Second} 60 obj.HealthzBindAddress = "127.0.0.1" 61 obj.HealthzPort = 10248 62 obj.HTTPCheckFrequency = metav1.Duration{Duration: 20 * time.Second} 63 obj.ImageMinimumGCAge = metav1.Duration{Duration: 2 * time.Minute} 64 obj.ImageMaximumGCAge = metav1.Duration{} 65 obj.ImageGCHighThresholdPercent = 85 66 obj.ImageGCLowThresholdPercent = 80 67 obj.KernelMemcgNotification = false 68 obj.MaxOpenFiles = 1000000 69 obj.MaxPods = 110 70 obj.MemoryManagerPolicy = v1beta1.NoneMemoryManagerPolicy 71 obj.PodPidsLimit = -1 72 obj.NodeStatusUpdateFrequency = metav1.Duration{Duration: 10 * time.Second} 73 obj.NodeStatusReportFrequency = metav1.Duration{Duration: time.Minute} 74 obj.NodeLeaseDurationSeconds = 40 75 obj.CPUManagerPolicy = "none" 76 obj.CPUManagerPolicyOptions = make(map[string]string) 77 obj.CPUManagerReconcilePeriod = obj.NodeStatusUpdateFrequency 78 obj.NodeStatusMaxImages = 50 79 obj.TopologyManagerPolicy = kubeletconfig.NoneTopologyManagerPolicy 80 obj.TopologyManagerScope = kubeletconfig.ContainerTopologyManagerScope 81 obj.TopologyManagerPolicyOptions = make(map[string]string) 82 obj.QOSReserved = map[string]string{ 83 "memory": "50%", 84 } 85 obj.OOMScoreAdj = int32(qos.KubeletOOMScoreAdj) 86 obj.PodLogsDir = "/var/log/pods" 87 obj.Port = ports.KubeletPort 88 obj.ReadOnlyPort = ports.KubeletReadOnlyPort 89 obj.RegistryBurst = 10 90 obj.RegistryPullQPS = 5 91 obj.ResolverConfig = kubetypes.ResolvConfDefault 92 obj.SerializeImagePulls = true 93 obj.StreamingConnectionIdleTimeout = metav1.Duration{Duration: 4 * time.Hour} 94 obj.SyncFrequency = metav1.Duration{Duration: 1 * time.Minute} 95 obj.ContentType = "application/vnd.kubernetes.protobuf" 96 obj.KubeAPIQPS = 50 97 obj.KubeAPIBurst = 100 98 obj.HairpinMode = v1beta1.PromiscuousBridge 99 obj.EvictionHard = eviction.DefaultEvictionHard 100 obj.EvictionPressureTransitionPeriod = metav1.Duration{Duration: 5 * time.Minute} 101 obj.MakeIPTablesUtilChains = true 102 obj.IPTablesMasqueradeBit = kubeletconfigv1beta1.DefaultIPTablesMasqueradeBit 103 obj.IPTablesDropBit = kubeletconfigv1beta1.DefaultIPTablesDropBit 104 obj.CgroupsPerQOS = true 105 obj.CgroupDriver = "cgroupfs" 106 obj.EnforceNodeAllocatable = kubeletconfigv1beta1.DefaultNodeAllocatableEnforcement 107 obj.StaticPodURLHeader = make(map[string][]string) 108 obj.ContainerLogMaxFiles = 5 109 obj.ContainerLogMaxSize = "10Mi" 110 obj.ContainerLogMaxWorkers = 1 111 obj.ContainerLogMonitorInterval = metav1.Duration{Duration: 10 * time.Second} 112 obj.ConfigMapAndSecretChangeDetectionStrategy = "Watch" 113 obj.AllowedUnsafeSysctls = []string{} 114 obj.VolumePluginDir = kubeletconfigv1beta1.DefaultVolumePluginDir 115 obj.ContainerRuntimeEndpoint = "unix:///run/containerd/containerd.sock" 116 117 if obj.Logging.Format == "" { 118 obj.Logging.Format = "text" 119 } 120 obj.EnableSystemLogHandler = true 121 obj.MemoryThrottlingFactor = utilpointer.Float64(rand.Float64()) 122 obj.LocalStorageCapacityIsolation = true 123 }, 124 } 125 }