• Kubernetes Submit Queue's avatar
    Merge pull request #54823 from mtaufen/structure-eviction-thresholds · 00fe2cfe
    Kubernetes Submit Queue authored
    Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.
    
    Lift embedded structure out of eviction-related KubeletConfiguration fields
    
    - 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).
    
    Related: #53833 (lifting embedded structures out of string fields is part of getting this API to beta)
    
    ```release-note
    The EvictionHard, EvictionSoft, EvictionSoftGracePeriod, EvictionMinimumReclaim, SystemReserved, and KubeReserved fields in the KubeletConfiguration object (kubeletconfig/v1alpha1) are now of type map[string]string, which facilitates writing JSON and YAML files.
    ```
    00fe2cfe
Name
Last commit
Last update
..
conformance Loading commit data...
e2e Loading commit data...
e2e_node Loading commit data...
fixtures Loading commit data...
images Loading commit data...
integration Loading commit data...
kubemark Loading commit data...
list Loading commit data...
soak Loading commit data...
utils Loading commit data...
BUILD Loading commit data...
OWNERS Loading commit data...
test_owners.csv Loading commit data...
test_owners.json Loading commit data...