From aa130a6c3aa3625900392f5a053c9e403e2db3ff Mon Sep 17 00:00:00 2001 From: olivier beyler Date: Thu, 12 Mar 2020 22:21:22 +0100 Subject: [PATCH] fix issues #371 --- jobs/kubelet/spec | 7 +++++++ jobs/kubelet/templates/bin/kubelet_ctl.erb | 1 + jobs/kubelet/templates/bin/post-start.erb | 14 ++++++++++++-- jobs/kubelet/templates/monit.erb | 12 ++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 jobs/kubelet/templates/monit.erb diff --git a/jobs/kubelet/spec b/jobs/kubelet/spec index acfad819f..d9bf34c19 100644 --- a/jobs/kubelet/spec +++ b/jobs/kubelet/spec @@ -14,6 +14,8 @@ templates: config/kubeletconfig.yml.erb: config/kubeletconfig.yml config/openstack-ca.crt.erb: config/openstack-ca.crt config/service_key.json.erb: config/service_key.json + monit.erb: monit + packages: - pid_utils - kubernetes @@ -24,6 +26,10 @@ properties: description: The token to access Kubernetes API cloud-provider: description: "The type of cloud-provider that is being deployed" + container-runtime: + description: "The container runtime job can be containerd or docker" + default: docker + drain-api-token: description: The token to access Kubernetes API used to drain the kubelet. http_proxy: @@ -54,6 +60,7 @@ properties: kubelet-drain-force-node: description: "Forcibly terminate pods if all the pods fail to drain before the timeout." default: false + k8s-args: description: "Pass-through options for Kubernetes runtime arguments. See docs https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/ for reference." example: | diff --git a/jobs/kubelet/templates/bin/kubelet_ctl.erb b/jobs/kubelet/templates/bin/kubelet_ctl.erb index 5aa92a1db..a6b42b9c0 100644 --- a/jobs/kubelet/templates/bin/kubelet_ctl.erb +++ b/jobs/kubelet/templates/bin/kubelet_ctl.erb @@ -3,6 +3,7 @@ NAME="${0##*/}" export PATH=/var/vcap/packages/kubernetes/bin/:/var/vcap/packages/docker/sbin/:/var/vcap/packages/socat/bin/:$PATH +export PATH=$PATH:/var/vcap/packages/containerd/bin RUN_DIR=/var/vcap/sys/run/kubernetes PIDFILE=$RUN_DIR/kubelet.pid diff --git a/jobs/kubelet/templates/bin/post-start.erb b/jobs/kubelet/templates/bin/post-start.erb index 01476607b..3556d4fb9 100644 --- a/jobs/kubelet/templates/bin/post-start.erb +++ b/jobs/kubelet/templates/bin/post-start.erb @@ -5,14 +5,24 @@ kubectl="/var/vcap/packages/kubernetes/bin/kubectl --kubeconfig=/var/vcap/jobs/kubelet/config/kubeconfig" -DOCKER_SOCKET=unix:///var/vcap/sys/run/docker/docker.sock + +if p('container-runtime').downcase == "docker" + DOCKER_SOCKET=unix:///var/vcap/sys/run/docker/docker.sock +else if p('container-runtime').downcase == "containerd" + DOCKER_SOCKET=unix:///var/vcap/sys/run/containerd/containerd.sock +end + CONTAINER_IMAGE_DIR=/var/vcap/packages/kubernetes/container-images load_container() { path=$1 echo "loading cached container: ${path}" - if sudo /var/vcap/jobs/kubelet/packages/docker/bin/docker -H ${DOCKER_SOCKET} load < "${path}"; then + if p('container-runtime').downcase == "containerd" + result = sudo ctr -n=k8s.io --address=/var/vcap/sys/run/containerd/containerd.sock images import "${path}; + if p('container-runtime').downcase == "docker" + result = sudo /var/vcap/jobs/kubelet/packages/docker/bin/docker -H ${DOCKER_SOCKET} load < "${path}"; + if $result then echo "successfully loaded container: ${path}" else echo "failed to load container: ${path}" diff --git a/jobs/kubelet/templates/monit.erb b/jobs/kubelet/templates/monit.erb new file mode 100644 index 000000000..33844b8e3 --- /dev/null +++ b/jobs/kubelet/templates/monit.erb @@ -0,0 +1,12 @@ +check process kubelet + with pidfile /var/vcap/sys/run/kubernetes/kubelet.pid + start program "/var/vcap/jobs/kubelet/bin/kubelet_ctl start" + stop program "/var/vcap/jobs/kubelet/bin/kubelet_ctl stop" + group vcap + <%= if p("container-runtime").eq? "docker" + depends on docker + %> + <%= if p("container-runtime").eq? "containerd" + depends on containerd + %> +