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  }