k8s.io/kubernetes@v1.29.3/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.Port = ports.KubeletPort 87 obj.ReadOnlyPort = ports.KubeletReadOnlyPort 88 obj.RegistryBurst = 10 89 obj.RegistryPullQPS = 5 90 obj.ResolverConfig = kubetypes.ResolvConfDefault 91 obj.SerializeImagePulls = true 92 obj.StreamingConnectionIdleTimeout = metav1.Duration{Duration: 4 * time.Hour} 93 obj.SyncFrequency = metav1.Duration{Duration: 1 * time.Minute} 94 obj.ContentType = "application/vnd.kubernetes.protobuf" 95 obj.KubeAPIQPS = 50 96 obj.KubeAPIBurst = 100 97 obj.HairpinMode = v1beta1.PromiscuousBridge 98 obj.EvictionHard = eviction.DefaultEvictionHard 99 obj.EvictionPressureTransitionPeriod = metav1.Duration{Duration: 5 * time.Minute} 100 obj.MakeIPTablesUtilChains = true 101 obj.IPTablesMasqueradeBit = kubeletconfigv1beta1.DefaultIPTablesMasqueradeBit 102 obj.IPTablesDropBit = kubeletconfigv1beta1.DefaultIPTablesDropBit 103 obj.CgroupsPerQOS = true 104 obj.CgroupDriver = "cgroupfs" 105 obj.EnforceNodeAllocatable = kubeletconfigv1beta1.DefaultNodeAllocatableEnforcement 106 obj.StaticPodURLHeader = make(map[string][]string) 107 obj.ContainerLogMaxFiles = 5 108 obj.ContainerLogMaxSize = "10Mi" 109 obj.ConfigMapAndSecretChangeDetectionStrategy = "Watch" 110 obj.AllowedUnsafeSysctls = []string{} 111 obj.VolumePluginDir = kubeletconfigv1beta1.DefaultVolumePluginDir 112 obj.ContainerRuntimeEndpoint = "unix:///run/containerd/containerd.sock" 113 114 if obj.Logging.Format == "" { 115 obj.Logging.Format = "text" 116 } 117 obj.EnableSystemLogHandler = true 118 obj.MemoryThrottlingFactor = utilpointer.Float64(rand.Float64()) 119 obj.LocalStorageCapacityIsolation = true 120 }, 121 } 122 }