From 953597134babf68ad6eb40d497631ced28366033 Mon Sep 17 00:00:00 2001 From: Jing Xu Date: Fri, 12 Jun 2020 00:02:26 -0700 Subject: [PATCH] Add WINDOWS_CONTAINER_RUNTIME env vairable Now the default value of container runtime for linux is changed to containerd. However, containerd is not ready to be used in Windows node. THis PR adds a new env varabile to handle container runtime setup for windows nodes. This way, linux and windows can set up their owe container runtime. By default, linux uses containerd while windows uses dockerd --- cluster/gce/config-default.sh | 2 ++ cluster/gce/config-test.sh | 4 +++- cluster/gce/util.sh | 10 ++++++---- cluster/gce/windows/k8s-node-setup.psm1 | 12 ++++++++++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/cluster/gce/config-default.sh b/cluster/gce/config-default.sh index 3a0ce3625d7..3671da42383 100755 --- a/cluster/gce/config-default.sh +++ b/cluster/gce/config-default.sh @@ -95,6 +95,8 @@ export KUBELET_TEST_ARGS=${KUBE_KUBELET_EXTRA_ARGS:-} # Default container runtime export CONTAINER_RUNTIME=${KUBE_CONTAINER_RUNTIME:-containerd} +# Default container runtime for windows +export WINDOWS_CONTAINER_RUNTIME=${KUBE_WINDOWS_CONTAINER_RUNTIME:-docker} # Set default values with override if [[ "${CONTAINER_RUNTIME}" == "docker" ]]; then diff --git a/cluster/gce/config-test.sh b/cluster/gce/config-test.sh index 0f9cd3dd353..7bd4c276d7b 100755 --- a/cluster/gce/config-test.sh +++ b/cluster/gce/config-test.sh @@ -96,8 +96,10 @@ export NODE_IMAGE=${KUBE_GCE_NODE_IMAGE:-${GCI_VERSION}} export NODE_IMAGE_PROJECT=${KUBE_GCE_NODE_PROJECT:-cos-cloud} export NODE_SERVICE_ACCOUNT=${KUBE_GCE_NODE_SERVICE_ACCOUNT:-default} -# Default container runtime +# Default container runtime for linux export CONTAINER_RUNTIME=${KUBE_CONTAINER_RUNTIME:-containerd} +# Default container runtime for windows +export WINDOWS_CONTAINER_RUNTIME=${KUBE_WINDOWS_CONTAINER_RUNTIME:-docker} # Set default values with override if [[ "${CONTAINER_RUNTIME}" == "docker" ]]; then diff --git a/cluster/gce/util.sh b/cluster/gce/util.sh index 18b676cbe6c..14517c5da25 100755 --- a/cluster/gce/util.sh +++ b/cluster/gce/util.sh @@ -897,11 +897,11 @@ function construct-windows-kubelet-flags { # Force disable KubeletPodResources feature on Windows until #78628 is fixed. flags+=" --feature-gates=KubeletPodResources=false" - if [[ "${CONTAINER_RUNTIME:-}" != "docker" ]]; then + if [[ "${WINDOWS_CONTAINER_RUNTIME:-}" != "docker" ]]; then flags+=" --container-runtime=remote" - if [[ "${CONTAINER_RUNTIME}" == "containerd" ]]; then - CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-npipe:////./pipe/containerd-containerd} - flags+=" --container-runtime-endpoint=${CONTAINER_RUNTIME_ENDPOINT}" + if [[ "${WINDOWS_CONTAINER_RUNTIME}" == "containerd" ]]; then + WINDOWS_CONTAINER_RUNTIME_ENDPOINT=${KUBE_WINDOWS_CONTAINER_RUNTIME_ENDPOINT:-npipe:////./pipe/containerd-containerd} + flags+=" --container-runtime-endpoint=${WINDOWS_CONTAINER_RUNTIME_ENDPOINT}" fi fi @@ -1550,6 +1550,8 @@ CNI_DIR: $(yaml-quote ${WINDOWS_CNI_DIR}) CNI_CONFIG_DIR: $(yaml-quote ${WINDOWS_CNI_CONFIG_DIR}) WINDOWS_CNI_STORAGE_PATH: $(yaml-quote ${WINDOWS_CNI_STORAGE_PATH}) WINDOWS_CNI_VERSION: $(yaml-quote ${WINDOWS_CNI_VERSION}) +WINDOWS_CONTAINER_RUNTIME: $(yaml-quote ${WINDOWS_CONTAINER_RUNTIME}) +WINDOWS_CONTAINER_RUNTIME_ENDPOINT: $(yaml-quote ${WINDOWS_CONTAINER_RUNTIME_ENDPOINT}) MANIFESTS_DIR: $(yaml-quote ${WINDOWS_MANIFESTS_DIR}) PKI_DIR: $(yaml-quote ${WINDOWS_PKI_DIR}) CA_FILE_PATH: $(yaml-quote ${WINDOWS_CA_FILE}) diff --git a/cluster/gce/windows/k8s-node-setup.psm1 b/cluster/gce/windows/k8s-node-setup.psm1 index 336958b9a83..e74bfc48bc3 100644 --- a/cluster/gce/windows/k8s-node-setup.psm1 +++ b/cluster/gce/windows/k8s-node-setup.psm1 @@ -241,6 +241,14 @@ function Set_CurrentShellEnvironmentVar { # Sets environment variables used by Kubernetes binaries and by other functions # in this module. Depends on numerous ${kube_env} keys. function Set-EnvironmentVars { + if ($kube_env.ContainsKey('WINDOWS_CONTAINER_RUNTIME')) { + $container_runtime = ${kube_env}['WINDOWS_CONTAINER_RUNTIME'] + $container_runtime_endpoint = ${kube_env}['WINDOWS_CONTAINER_RUNTIME_ENDPOINT'] + } else { + Log-Output "ERROR: WINDOWS_CONTAINER_RUNTIME not set in kube-env, falling back in CONTAINER_RUNTIME" + $container_runtime = ${kube_env}['CONTAINER_RUNTIME'] + $container_runtime_endpoint = ${kube_env}['CONTAINER_RUNTIME_ENDPOINT'] + } # Turning the kube-env values into environment variables is not required but # it makes debugging this script easier, and it also makes the syntax a lot # easier (${env:K8S_DIR} can be expanded within a string but @@ -268,8 +276,8 @@ function Set-EnvironmentVars { "KUBELET_CERT_PATH" = ${kube_env}['PKI_DIR'] + '\kubelet.crt' "KUBELET_KEY_PATH" = ${kube_env}['PKI_DIR'] + '\kubelet.key' - "CONTAINER_RUNTIME" = ${kube_env}['CONTAINER_RUNTIME'] - "CONTAINER_RUNTIME_ENDPOINT" = ${kube_env}['CONTAINER_RUNTIME_ENDPOINT'] + "CONTAINER_RUNTIME" = $container_runtime + "CONTAINER_RUNTIME_ENDPOINT" = $container_runtime_endpoint 'LICENSE_DIR' = 'C:\Program Files\Google\Compute Engine\THIRD_PARTY_NOTICES' }