Skip to content

Commit 1aa6797

Browse files
committed
cluster/gce: set KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR when requested by a CI jobs
When the KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR environment variable was set then clients (client-go, dynamic-client) perform a data consistency check for requests that have a high chance of being served from the watch-cache. The consistency check is meant to be enforced only in the CI, not in production. The check ensures that data retrieved by a list api call from the watch-cache is exactly the same as data received by the list api call from etcd. Note that this function will panic when data inconsistency is detected. This is intentional because we want to catch it in the CI. Note that the new env var is set in the same places the ENABLE_CACHE_MUTATION_DETECTOR is set.
1 parent 3532601 commit 1aa6797

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

cluster/gce/gci/configure-helper.sh

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1806,6 +1806,15 @@ function prepare-kube-proxy-manifest-variables {
18061806
kube_watchlist_inconsistency_detector_env_name="- name: KUBE_WATCHLIST_INCONSISTENCY_DETECTOR"
18071807
kube_watchlist_inconsistency_detector_env_value="value: \"${ENABLE_KUBE_WATCHLIST_INCONSISTENCY_DETECTOR}\""
18081808
fi
1809+
local kube_list_from_cache_inconsistency_detector_env_name=""
1810+
local kube_list_from_cache_inconsistency_detector_env_value=""
1811+
if [[ -n "${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR:-}" ]]; then
1812+
if [[ -z "${container_env}" ]]; then
1813+
container_env="env:"
1814+
fi
1815+
kube_list_from_cache_inconsistency_detector_env_name="- name: KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR"
1816+
kube_list_from_cache_inconsistency_detector_env_value="value: \"${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR}\""
1817+
fi
18091818
sed -i -e "s@{{kubeconfig}}@${kubeconfig}@g" "${src_file}"
18101819
sed -i -e "s@{{pillar\['kube_docker_registry'\]}}@${kube_docker_registry}@g" "${src_file}"
18111820
sed -i -e "s@{{pillar\['kube-proxy_docker_tag'\]}}@${kube_proxy_docker_tag}@g" "${src_file}"
@@ -1817,6 +1826,8 @@ function prepare-kube-proxy-manifest-variables {
18171826
sed -i -e "s@{{kube_cache_mutation_detector_env_value}}@${kube_cache_mutation_detector_env_value}@g" "${src_file}"
18181827
sed -i -e "s@{{kube_watchlist_inconsistency_detector_env_name}}@${kube_watchlist_inconsistency_detector_env_name}@g" "${src_file}"
18191828
sed -i -e "s@{{kube_watchlist_inconsistency_detector_env_value}}@${kube_watchlist_inconsistency_detector_env_value}@g" "${src_file}"
1829+
sed -i -e "s@{{kube_list_from_cache_inconsistency_detector_env_name}}@${kube_list_from_cache_inconsistency_detector_env_name}@g" "${src_file}"
1830+
sed -i -e "s@{{kube_list_from_cache_inconsistency_detector_env_value}}@${kube_list_from_cache_inconsistency_detector_env_value}@g" "${src_file}"
18201831
sed -i -e "s@{{ cpurequest }}@${KUBE_PROXY_CPU_REQUEST:-100m}@g" "${src_file}"
18211832
sed -i -e "s@{{ memoryrequest }}@${KUBE_PROXY_MEMORY_REQUEST:-50Mi}@g" "${src_file}"
18221833
sed -i -e "s@{{api_servers_with_port}}@${api_servers}@g" "${src_file}"
@@ -2255,10 +2266,15 @@ function start-kube-controller-manager {
22552266
fi
22562267
container_env+="{\"name\": \"KUBE_WATCHLIST_INCONSISTENCY_DETECTOR\", \"value\": \"${ENABLE_KUBE_WATCHLIST_INCONSISTENCY_DETECTOR}\"}"
22572268
fi
2269+
if [[ -n "${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR:-}" ]]; then
2270+
if [[ -n "${container_env}" ]]; then
2271+
container_env="${container_env}, "
2272+
fi
2273+
container_env+="{\"name\": \"KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR\", \"value\": \"${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR}\"}"
2274+
fi
22582275
if [[ -n "${container_env}" ]]; then
22592276
container_env="\"env\":[${container_env}],"
22602277
fi
2261-
22622278
local paramstring
22632279
paramstring="$(convert-manifest-params "${params[*]}")"
22642280
local -r src_file="${KUBE_HOME}/kube-manifests/kubernetes/gci-trusty/kube-controller-manager.manifest"
@@ -2370,6 +2386,12 @@ function start-cloud-controller-manager {
23702386
fi
23712387
container_env+="{\"name\": \"KUBE_WATCHLIST_INCONSISTENCY_DETECTOR\", \"value\": \"${ENABLE_KUBE_WATCHLIST_INCONSISTENCY_DETECTOR}\"}"
23722388
fi
2389+
if [[ -n "${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR:-}" ]]; then
2390+
if [[ -n "${container_env}" ]]; then
2391+
container_env="${container_env}, "
2392+
fi
2393+
container_env+="{\"name\": \"KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR\", \"value\": \"${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR}\"}"
2394+
fi
23732395
if [[ -n "${container_env}" ]]; then
23742396
container_env="\"env\":[${container_env}],"
23752397
fi

cluster/gce/gci/configure-kubeapiserver.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,12 @@ function start-kube-apiserver {
343343
fi
344344
container_env+="{\"name\": \"KUBE_WATCHLIST_INCONSISTENCY_DETECTOR\", \"value\": \"${ENABLE_KUBE_WATCHLIST_INCONSISTENCY_DETECTOR}\"}"
345345
fi
346+
if [[ -n "${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR:-}" ]]; then
347+
if [[ -n "${container_env}" ]]; then
348+
container_env="${container_env}, "
349+
fi
350+
container_env+="{\"name\": \"KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR\", \"value\": \"${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR}\"}"
351+
fi
346352
if [[ -n "${ENABLE_PATCH_CONVERSION_DETECTOR:-}" ]]; then
347353
if [[ -n "${container_env}" ]]; then
348354
container_env="${container_env}, "

cluster/gce/manifests/kube-proxy.manifest

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ spec:
3333
{{kube_cache_mutation_detector_env_value}}
3434
{{kube_watchlist_inconsistency_detector_env_name}}
3535
{{kube_watchlist_inconsistency_detector_env_value}}
36+
{{kube_list_from_cache_inconsistency_detector_env_name}}
37+
{{kube_list_from_cache_inconsistency_detector_env_value}}
3638
securityContext:
3739
privileged: true
3840
volumeMounts:

cluster/gce/util.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,7 @@ ENABLE_APISERVER_ADVANCED_AUDIT: $(yaml-quote "${ENABLE_APISERVER_ADVANCED_AUDIT
11781178
ENABLE_APISERVER_DYNAMIC_AUDIT: $(yaml-quote "${ENABLE_APISERVER_DYNAMIC_AUDIT:-}")
11791179
ENABLE_CACHE_MUTATION_DETECTOR: $(yaml-quote "${ENABLE_CACHE_MUTATION_DETECTOR:-false}")
11801180
ENABLE_KUBE_WATCHLIST_INCONSISTENCY_DETECTOR: $(yaml-quote "${ENABLE_KUBE_WATCHLIST_INCONSISTENCY_DETECTOR:-false}")
1181+
ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR: $(yaml-quote "${ENABLE_KUBE_LIST_FROM_CACHE_INCONSISTENCY_DETECTOR:-false}")
11811182
ENABLE_PATCH_CONVERSION_DETECTOR: $(yaml-quote "${ENABLE_PATCH_CONVERSION_DETECTOR:-false}")
11821183
ADVANCED_AUDIT_POLICY: $(yaml-quote "${ADVANCED_AUDIT_POLICY:-}")
11831184
ADVANCED_AUDIT_BACKEND: $(yaml-quote "${ADVANCED_AUDIT_BACKEND:-log}")

0 commit comments

Comments
 (0)