From 3bb8fb6b3ebf2c40f449e39a4dc751d003c9d24c Mon Sep 17 00:00:00 2001 From: Matthew Mosesohn Date: Fri, 12 May 2017 17:32:37 +0300 Subject: [PATCH] Add host-based kubelet deployment Kubelet gets copied from hyperkube container and run locally. --- roles/kubernetes/node/defaults/main.yml | 5 +++- roles/kubernetes/node/tasks/install_host.yml | 10 +++++++ .../node/templates/kubelet.docker.service.j2 | 5 ++-- .../node/templates/kubelet.host.service.j2 | 30 +++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 roles/kubernetes/node/tasks/install_host.yml create mode 100644 roles/kubernetes/node/templates/kubelet.host.service.j2 diff --git a/roles/kubernetes/node/defaults/main.yml b/roles/kubernetes/node/defaults/main.yml index 7f1e6f4a0..7ef6d01e0 100644 --- a/roles/kubernetes/node/defaults/main.yml +++ b/roles/kubernetes/node/defaults/main.yml @@ -1,3 +1,6 @@ +# Valid options: docker (default), rkt, or host +kubelet_deployment_type: docker + # change to 0.0.0.0 to enable insecure access from anywhere (not recommended) kube_apiserver_insecure_bind_address: 127.0.0.1 @@ -47,4 +50,4 @@ kube_apiserver_node_port_range: "30000-32767" kubelet_load_modules: false ##Support custom flags to be passed to kubelet -kubelet_custom_flags: [] \ No newline at end of file +kubelet_custom_flags: [] diff --git a/roles/kubernetes/node/tasks/install_host.yml b/roles/kubernetes/node/tasks/install_host.yml new file mode 100644 index 000000000..e80b20498 --- /dev/null +++ b/roles/kubernetes/node/tasks/install_host.yml @@ -0,0 +1,10 @@ +--- +- name: install | Copy kubelet from hyperkube container + command: "{{ docker_bin_dir }}/docker run --rm -v {{ bin_dir }}:/systembindir {{ hyperkube_image_repo }}:{{ hyperkube_image_tag }} /bin/cp -f /hyperkube /systembindir/kubelet" + register: kubelet_task_result + until: kubelet_task_result.rc == 0 + retries: 4 + delay: "{{ retry_stagger | random + 3 }}" + changed_when: false + tags: [hyperkube, upgrade] + notify: restart kubelet diff --git a/roles/kubernetes/node/templates/kubelet.docker.service.j2 b/roles/kubernetes/node/templates/kubelet.docker.service.j2 index e3bf40878..cf79f6fa4 100644 --- a/roles/kubernetes/node/templates/kubelet.docker.service.j2 +++ b/roles/kubernetes/node/templates/kubelet.docker.service.j2 @@ -23,10 +23,11 @@ ExecStart={{ bin_dir }}/kubelet \ $DOCKER_SOCKET \ $KUBELET_NETWORK_PLUGIN \ $KUBELET_CLOUDPROVIDER -ExecStartPre=-{{ docker_bin_dir }}/docker rm -f kubelet -ExecReload={{ docker_bin_dir }}/docker restart kubelet Restart=always RestartSec=10s +ExecStartPre=-{{ docker_bin_dir }}/docker rm -f kubelet +ExecReload={{ docker_bin_dir }}/docker restart kubelet + [Install] WantedBy=multi-user.target diff --git a/roles/kubernetes/node/templates/kubelet.host.service.j2 b/roles/kubernetes/node/templates/kubelet.host.service.j2 new file mode 100644 index 000000000..71a9da8c3 --- /dev/null +++ b/roles/kubernetes/node/templates/kubelet.host.service.j2 @@ -0,0 +1,30 @@ +[Unit] +Description=Kubernetes Kubelet Server +Documentation=https://github.com/GoogleCloudPlatform/kubernetes +{% if kube_network_plugin is defined and kube_network_plugin == "calico" %} +After=docker.service docker.socket calico-node.service +Wants=docker.socket calico-node.service +{% else %} +After=docker.service +Wants=docker.socket +{% endif %} + +[Service] +EnvironmentFile={{kube_config_dir}}/kubelet.env +ExecStart={{ bin_dir }}/kubelet \ + $KUBE_LOGTOSTDERR \ + $KUBE_LOG_LEVEL \ + $KUBELET_API_SERVER \ + $KUBELET_ADDRESS \ + $KUBELET_PORT \ + $KUBELET_HOSTNAME \ + $KUBE_ALLOW_PRIV \ + $KUBELET_ARGS \ + $DOCKER_SOCKET \ + $KUBELET_NETWORK_PLUGIN \ + $KUBELET_CLOUDPROVIDER +Restart=always +RestartSec=10s + +[Install] +WantedBy=multi-user.target