Support using docker containerd in COS and Ubuntu on GCE.
Signed-off-by: Lantao Liu <lantaol@google.com>
This commit is contained in:
		| @@ -79,22 +79,30 @@ fi | |||||||
| # you are updating the os image versions, update this variable. | # you are updating the os image versions, update this variable. | ||||||
| # Also please update corresponding image for node e2e at: | # Also please update corresponding image for node e2e at: | ||||||
| # https://github.com/kubernetes/kubernetes/blob/master/test/e2e_node/jenkins/image-config.yaml | # https://github.com/kubernetes/kubernetes/blob/master/test/e2e_node/jenkins/image-config.yaml | ||||||
| GCI_VERSION=${KUBE_GCI_VERSION:-cos-beta-73-11647-64-0} | GCI_VERSION=${KUBE_GCI_VERSION:-cos-73-11647-163-0} | ||||||
| MASTER_IMAGE=${KUBE_GCE_MASTER_IMAGE:-} | MASTER_IMAGE=${KUBE_GCE_MASTER_IMAGE:-} | ||||||
| MASTER_IMAGE_PROJECT=${KUBE_GCE_MASTER_PROJECT:-cos-cloud} | MASTER_IMAGE_PROJECT=${KUBE_GCE_MASTER_PROJECT:-cos-cloud} | ||||||
| NODE_IMAGE=${KUBE_GCE_NODE_IMAGE:-${GCI_VERSION}} | NODE_IMAGE=${KUBE_GCE_NODE_IMAGE:-${GCI_VERSION}} | ||||||
| NODE_IMAGE_PROJECT=${KUBE_GCE_NODE_PROJECT:-cos-cloud} | NODE_IMAGE_PROJECT=${KUBE_GCE_NODE_PROJECT:-cos-cloud} | ||||||
| NODE_SERVICE_ACCOUNT=${KUBE_GCE_NODE_SERVICE_ACCOUNT:-default} | NODE_SERVICE_ACCOUNT=${KUBE_GCE_NODE_SERVICE_ACCOUNT:-default} | ||||||
|  |  | ||||||
|  | # KUBELET_TEST_ARGS are extra arguments passed to kubelet. | ||||||
|  | KUBELET_TEST_ARGS=${KUBE_KUBELET_EXTRA_ARGS:-} | ||||||
| CONTAINER_RUNTIME=${KUBE_CONTAINER_RUNTIME:-docker} | CONTAINER_RUNTIME=${KUBE_CONTAINER_RUNTIME:-docker} | ||||||
| CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-} | CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-} | ||||||
| CONTAINER_RUNTIME_NAME=${KUBE_CONTAINER_RUNTIME_NAME:-} | CONTAINER_RUNTIME_NAME=${KUBE_CONTAINER_RUNTIME_NAME:-} | ||||||
| LOAD_IMAGE_COMMAND=${KUBE_LOAD_IMAGE_COMMAND:-} | LOAD_IMAGE_COMMAND=${KUBE_LOAD_IMAGE_COMMAND:-} | ||||||
|  | if [[ "${CONTAINER_RUNTIME}" == "containerd" ]]; then | ||||||
|  |   CONTAINER_RUNTIME_NAME=${KUBE_CONTAINER_RUNTIME_NAME:-containerd} | ||||||
|  |   CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-unix:///run/containerd/containerd.sock} | ||||||
|  |   LOAD_IMAGE_COMMAND=${KUBE_LOAD_IMAGE_COMMAND:-ctr -n=k8s.io images import} | ||||||
|  |   KUBELET_TEST_ARGS="${KUBELET_TEST_ARGS} --runtime-cgroups=/system.slice/containerd.service" | ||||||
|  | fi | ||||||
|  |  | ||||||
| # MASTER_EXTRA_METADATA is the extra instance metadata on master instance separated by commas. | # MASTER_EXTRA_METADATA is the extra instance metadata on master instance separated by commas. | ||||||
| MASTER_EXTRA_METADATA=${KUBE_MASTER_EXTRA_METADATA:-${KUBE_EXTRA_METADATA:-}} | MASTER_EXTRA_METADATA=${KUBE_MASTER_EXTRA_METADATA:-${KUBE_EXTRA_METADATA:-}} | ||||||
| # MASTER_EXTRA_METADATA is the extra instance metadata on node instance separated by commas. | # MASTER_EXTRA_METADATA is the extra instance metadata on node instance separated by commas. | ||||||
| NODE_EXTRA_METADATA=${KUBE_NODE_EXTRA_METADATA:-${KUBE_EXTRA_METADATA:-}} | NODE_EXTRA_METADATA=${KUBE_NODE_EXTRA_METADATA:-${KUBE_EXTRA_METADATA:-}} | ||||||
| # KUBELET_TEST_ARGS are extra arguments passed to kubelet. |  | ||||||
| KUBELET_TEST_ARGS=${KUBE_KUBELET_EXTRA_ARGS:-} |  | ||||||
|  |  | ||||||
| NETWORK=${KUBE_GCE_NETWORK:-default} | NETWORK=${KUBE_GCE_NETWORK:-default} | ||||||
| # Enable network deletion by default (for kube-down), unless we're using 'default' network. | # Enable network deletion by default (for kube-down), unless we're using 'default' network. | ||||||
|   | |||||||
| @@ -86,17 +86,25 @@ ALLOWED_NOTREADY_NODES="${ALLOWED_NOTREADY_NODES:-$(($(get-num-nodes) / 100))}" | |||||||
| # you are updating the os image versions, update this variable. | # you are updating the os image versions, update this variable. | ||||||
| # Also please update corresponding image for node e2e at: | # Also please update corresponding image for node e2e at: | ||||||
| # https://github.com/kubernetes/kubernetes/blob/master/test/e2e_node/jenkins/image-config.yaml | # https://github.com/kubernetes/kubernetes/blob/master/test/e2e_node/jenkins/image-config.yaml | ||||||
| GCI_VERSION=${KUBE_GCI_VERSION:-cos-beta-73-11647-64-0} | GCI_VERSION=${KUBE_GCI_VERSION:-cos-73-11647-163-0} | ||||||
| MASTER_IMAGE=${KUBE_GCE_MASTER_IMAGE:-} | MASTER_IMAGE=${KUBE_GCE_MASTER_IMAGE:-} | ||||||
| MASTER_IMAGE_PROJECT=${KUBE_GCE_MASTER_PROJECT:-cos-cloud} | MASTER_IMAGE_PROJECT=${KUBE_GCE_MASTER_PROJECT:-cos-cloud} | ||||||
| NODE_IMAGE=${KUBE_GCE_NODE_IMAGE:-${GCI_VERSION}} | NODE_IMAGE=${KUBE_GCE_NODE_IMAGE:-${GCI_VERSION}} | ||||||
| NODE_IMAGE_PROJECT=${KUBE_GCE_NODE_PROJECT:-cos-cloud} | NODE_IMAGE_PROJECT=${KUBE_GCE_NODE_PROJECT:-cos-cloud} | ||||||
| NODE_SERVICE_ACCOUNT=${KUBE_GCE_NODE_SERVICE_ACCOUNT:-default} | NODE_SERVICE_ACCOUNT=${KUBE_GCE_NODE_SERVICE_ACCOUNT:-default} | ||||||
|  |  | ||||||
| CONTAINER_RUNTIME=${KUBE_CONTAINER_RUNTIME:-docker} | CONTAINER_RUNTIME=${KUBE_CONTAINER_RUNTIME:-docker} | ||||||
| CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-} | CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-} | ||||||
| CONTAINER_RUNTIME_NAME=${KUBE_CONTAINER_RUNTIME_NAME:-} | CONTAINER_RUNTIME_NAME=${KUBE_CONTAINER_RUNTIME_NAME:-} | ||||||
| LOAD_IMAGE_COMMAND=${KUBE_LOAD_IMAGE_COMMAND:-} | LOAD_IMAGE_COMMAND=${KUBE_LOAD_IMAGE_COMMAND:-} | ||||||
| GCI_DOCKER_VERSION=${KUBE_GCI_DOCKER_VERSION:-} | GCI_DOCKER_VERSION=${KUBE_GCI_DOCKER_VERSION:-} | ||||||
|  | if [[ "${CONTAINER_RUNTIME}" == "containerd" ]]; then | ||||||
|  |   CONTAINER_RUNTIME_NAME=${KUBE_CONTAINER_RUNTIME_NAME:-containerd} | ||||||
|  |   CONTAINER_RUNTIME_ENDPOINT=${KUBE_CONTAINER_RUNTIME_ENDPOINT:-unix:///run/containerd/containerd.sock} | ||||||
|  |   LOAD_IMAGE_COMMAND=${KUBE_LOAD_IMAGE_COMMAND:-ctr -n=k8s.io images import} | ||||||
|  |   KUBELET_TEST_ARGS="${KUBELET_TEST_ARGS:-} --runtime-cgroups=/system.slice/containerd.service" | ||||||
|  | fi | ||||||
|  |  | ||||||
| # MASTER_EXTRA_METADATA is the extra instance metadata on master instance separated by commas. | # MASTER_EXTRA_METADATA is the extra instance metadata on master instance separated by commas. | ||||||
| MASTER_EXTRA_METADATA=${KUBE_MASTER_EXTRA_METADATA:-${KUBE_EXTRA_METADATA:-}} | MASTER_EXTRA_METADATA=${KUBE_MASTER_EXTRA_METADATA:-${KUBE_EXTRA_METADATA:-}} | ||||||
| # MASTER_EXTRA_METADATA is the extra instance metadata on node instance separated by commas. | # MASTER_EXTRA_METADATA is the extra instance metadata on node instance separated by commas. | ||||||
|   | |||||||
| @@ -2877,6 +2877,73 @@ function ensure-bootstrap-kubectl-auth { | |||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function setup-containerd { | ||||||
|  |   echo "Generate containerd config" | ||||||
|  |   local config_path="${CONTAINERD_CONFIG_PATH:-"/etc/containerd/config.toml"}" | ||||||
|  |   mkdir -p "$(dirname "${config_path}")" | ||||||
|  |   local cni_template_path="${KUBE_HOME}/cni.template" | ||||||
|  |   cat > "${cni_template_path}" <<EOF | ||||||
|  | { | ||||||
|  |   "name": "k8s-pod-network", | ||||||
|  |   "cniVersion": "0.3.1", | ||||||
|  |   "plugins": [ | ||||||
|  |     { | ||||||
|  |       "type": "ptp", | ||||||
|  |       "mtu": 1460, | ||||||
|  |       "ipam": { | ||||||
|  |         "type": "host-local", | ||||||
|  |         "subnet": "{{.PodCIDR}}", | ||||||
|  |         "routes": [ | ||||||
|  |           { | ||||||
|  |             "dst": "0.0.0.0/0" | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "type": "portmap", | ||||||
|  |       "capabilities": { | ||||||
|  |         "portMappings": true | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  |   if [[ "${KUBERNETES_MASTER:-}" != "true" ]]; then | ||||||
|  |     if [[ "${NETWORK_POLICY_PROVIDER:-"none"}" != "none" || "${ENABLE_NETD:-}" == "true" ]]; then | ||||||
|  |       # Use Kubernetes cni daemonset on node if network policy provider is specified | ||||||
|  |       # or netd is enabled. | ||||||
|  |       cni_template_path="" | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  |   # Reuse docker group for containerd. | ||||||
|  |   local containerd_gid="$(cat /etc/group | grep ^docker: | cut -d: -f 3)" | ||||||
|  |   cat > "${config_path}" <<EOF | ||||||
|  | # Kubernetes doesn't use containerd restart manager. | ||||||
|  | disabled_plugins = ["restart"] | ||||||
|  |  | ||||||
|  | [debug] | ||||||
|  |   level = "${CONTAINERD_LOG_LEVEL:-"info"}" | ||||||
|  |  | ||||||
|  | [grpc] | ||||||
|  |   gid = ${containerd_gid} | ||||||
|  |  | ||||||
|  | [plugins.cri] | ||||||
|  |   stream_server_address = "127.0.0.1" | ||||||
|  |   max_container_log_line_size = ${CONTAINERD_MAX_CONTAINER_LOG_LINE:-262144} | ||||||
|  | [plugins.cri.cni] | ||||||
|  |   bin_dir = "${KUBE_HOME}/bin" | ||||||
|  |   conf_dir = "/etc/cni/net.d" | ||||||
|  |   conf_template = "${cni_template_path}" | ||||||
|  | [plugins.cri.registry.mirrors."docker.io"] | ||||||
|  |   endpoint = ["https://mirror.gcr.io","https://registry-1.docker.io"] | ||||||
|  | EOF | ||||||
|  |   chmod 644 "${config_path}" | ||||||
|  |  | ||||||
|  |   echo "Restart containerd to load the config change" | ||||||
|  |   systemctl restart containerd | ||||||
|  | } | ||||||
|  |  | ||||||
| ########### Main Function ########### | ########### Main Function ########### | ||||||
| function main() { | function main() { | ||||||
|   echo "Start to configure instance for kubernetes" |   echo "Start to configure instance for kubernetes" | ||||||
| @@ -2964,9 +3031,12 @@ function main() { | |||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   override-kubectl |   override-kubectl | ||||||
|  |   container_runtime="${CONTAINER_RUNTIME:-docker}" | ||||||
|   # Run the containerized mounter once to pre-cache the container image. |   # Run the containerized mounter once to pre-cache the container image. | ||||||
|   if [[ "${CONTAINER_RUNTIME:-docker}" == "docker" ]]; then |   if [[ "${container_runtime}" == "docker" ]]; then | ||||||
|     assemble-docker-flags |     assemble-docker-flags | ||||||
|  |   elif [[ "${container_runtime}" == "containerd" ]]; then | ||||||
|  |     setup-containerd | ||||||
|   fi |   fi | ||||||
|   start-kubelet |   start-kubelet | ||||||
|  |  | ||||||
|   | |||||||
| @@ -782,8 +782,8 @@ function construct-linux-kubelet-flags { | |||||||
|   if [[ -n "${NODE_TAINTS:-}" ]]; then |   if [[ -n "${NODE_TAINTS:-}" ]]; then | ||||||
|     flags+=" --register-with-taints=${NODE_TAINTS}" |     flags+=" --register-with-taints=${NODE_TAINTS}" | ||||||
|   fi |   fi | ||||||
|   if [[ -n "${CONTAINER_RUNTIME:-}" ]]; then |   if [[ "${CONTAINER_RUNTIME:-}" != "docker" ]]; then | ||||||
|     flags+=" --container-runtime=${CONTAINER_RUNTIME}" |     flags+=" --container-runtime=remote" | ||||||
|   fi |   fi | ||||||
|   if [[ -n "${CONTAINER_RUNTIME_ENDPOINT:-}" ]]; then |   if [[ -n "${CONTAINER_RUNTIME_ENDPOINT:-}" ]]; then | ||||||
|     flags+=" --container-runtime-endpoint=${CONTAINER_RUNTIME_ENDPOINT}" |     flags+=" --container-runtime-endpoint=${CONTAINER_RUNTIME_ENDPOINT}" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Lantao Liu
					Lantao Liu