• Michael Taufen's avatar
    Lift embedded structure out of eviction-related KubeletConfiguration fields · 1085b6f7
    Michael Taufen authored
    - Changes the following KubeletConfiguration fields from `string` to
    `map[string]string`:
      - `EvictionHard`
      - `EvictionSoft`
      - `EvictionSoftGracePeriod`
      - `EvictionMinimumReclaim`
    - Adds flag parsing shims to maintain Kubelet's public flags API, while
    enabling structured input in the file API.
    - Also removes `kubeletconfig.ConfigurationMap`, which was an ad-hoc flag
    parsing shim living in the kubeletconfig API group, and replaces it
    with the `MapStringString` shim introduced in this PR. Flag parsing
    shims belong in a common place, not in the kubeletconfig API.
    I manually audited these to ensure that this wouldn't cause errors
    parsing the command line for syntax that would have previously been
    error free (`kubeletconfig.ConfigurationMap` was unique in that it
    allowed keys to be provided on the CLI without values. I believe this was
    done in `flags.ConfigurationMap` to facilitate the `--node-labels` flag,
    which rightfully accepts value-free keys, and that this shim was then
    just copied to `kubeletconfig`). Fortunately, the affected fields
    (`ExperimentalQOSReserved`, `SystemReserved`, and `KubeReserved`) expect
    non-empty strings in the values of the map, and as a result passing the
    empty string is already an error. Thus requiring keys shouldn't break
    anyone's scripts.
    - Updates code and tests accordingly.
    
    Regarding eviction operators, directionality is already implicit in the
    signal type (for a given signal, the decision to evict will be made when
    crossing the threshold from either above or below, never both). There is
    no need to expose an operator, such as `<`, in the API. By changing
    `EvictionHard` and `EvictionSoft` to `map[string]string`, this PR
    simplifies the experience of working with these fields via the
    `KubeletConfiguration` type. Again, flags stay the same.
    
    Other things:
    - There is another flag parsing shim, `flags.ConfigurationMap`, from the
    shared flag utility. The `NodeLabels` field still uses
    `flags.ConfigurationMap`. This PR moves the allocation of the
    `map[string]string` for the `NodeLabels` field from
    `AddKubeletConfigFlags` to the defaulter for the external
    `KubeletConfiguration` type. Flags are layered on top of an internal
    object that has undergone conversion from a defaulted external object,
    which means that previously the mere registration of flags would have
    overwritten any previously-defined defaults for `NodeLabels` (fortunately
    there were none).
    1085b6f7
Name
Last commit
Last update
..
builder Loading commit data...
conformance Loading commit data...
environment Loading commit data...
jenkins Loading commit data...
perftype Loading commit data...
remote Loading commit data...
runner Loading commit data...
services Loading commit data...
system Loading commit data...
BUILD Loading commit data...
OWNERS Loading commit data...
README.md Loading commit data...
apparmor_test.go Loading commit data...
benchmark_util.go Loading commit data...
container.go Loading commit data...
container_manager_test.go Loading commit data...
cpu_manager_test.go Loading commit data...
critical_pod_test.go Loading commit data...
density_test.go Loading commit data...
doc.go Loading commit data...
docker_test.go Loading commit data...
docker_util.go Loading commit data...
dockershim_checkpoint_test.go Loading commit data...
dynamic_kubelet_config_test.go Loading commit data...
e2e_node_suite_test.go Loading commit data...
eviction_test.go Loading commit data...
garbage_collector_test.go Loading commit data...
gke_environment_test.go Loading commit data...
gpu_device_plugin.go Loading commit data...
gpus.go Loading commit data...
gubernator.sh Loading commit data...
image_id_test.go Loading commit data...
image_list.go Loading commit data...
kubelet_test.go Loading commit data...
lifecycle_hook_test.go Loading commit data...
log_path_test.go Loading commit data...
memory_eviction_test.go Loading commit data...
mirror_pod_test.go Loading commit data...
node_container_manager_test.go Loading commit data...
node_problem_detector_linux.go Loading commit data...
pods_container_manager_test.go Loading commit data...
resource_collector.go Loading commit data...
resource_usage_test.go Loading commit data...
restart_test.go Loading commit data...
runtime_conformance_test.go Loading commit data...
security_context_test.go Loading commit data...
simple_mount.go Loading commit data...
summary_test.go Loading commit data...
util.go Loading commit data...
volume_manager_test.go Loading commit data...