diff --git a/README.md b/README.md index facbd1a..f0a1f9e 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Below are variables that are set against specific hosts in your inventory. | `k3s_node_ip_address` | IP Address to advertise for this node. | _NULL_ | | `k3s_node_external_address` | External IP Address to advertise for this node. | _NULL_ | | `k3s_node_labels` | List of node labels. | _NULL_ | +| `k3s_kubelet_args` | A list of kubelet args to pass to the server. | [] | | `k3s_node_taints` | List of node taints. | _NULL_ | | `k3s_node_data_dir` | Folder to hold state. | `/var/lib/rancher/k3s` | | `k3s_tls_san` | Add additional hosname or IP as Subject Alternate Name in the TLS cert. | _NULL_ | @@ -155,6 +156,23 @@ If you are running k3s on systems with multiple network interfaces, it is necessary to have the flannel interface on a network interface that is routable to the master node(s). +#### Notes about `k3s_kubelet_args` + +This parameter allows for assigning additional kubelet args to the server during +runtime. For instance, to use the Azure Cloud Controller, assign the following to +the master node's configuration in your host file. + +Note, when using an external cloud controller as below, ensure that the native k3s +cloud controller is disabled by setting the `k3s_disable_cloud_controller` to `true`. + +**YAML**: + +```yaml +k3s_kubelet_args: + - cloud-provider: external + - provider-id: azure +``` + #### Notes about `k3s_node_labels` and `k3s_node_taints` Both these variables are lists that will be iterated on. The below example will diff --git a/molecule/default/playbook-no-deploy.yml b/molecule/default/playbook-no-deploy.yml index 127fbf5..831b989 100644 --- a/molecule/default/playbook-no-deploy.yml +++ b/molecule/default/playbook-no-deploy.yml @@ -19,5 +19,8 @@ - hello: world k3s_node_taints: - key1: value1:NoExecute + k3s_kubelet_args: + - cloud-provider: external + - provider-id: azure roles: - role: xanmanning.k3s diff --git a/tasks/validate/check-variables.yml b/tasks/validate/check-variables.yml index 29a1f23..3999bec 100644 --- a/tasks/validate/check-variables.yml +++ b/tasks/validate/check-variables.yml @@ -118,6 +118,14 @@ fail_msg: "Node Taints are not supported in {{ k3s_release_version }}" when: k3s_node_taints is defined and k3s_node_taints +- name: Check k3s_kubelet_args against k3s version + assert: + that: + - (k3s_release_version | replace('v', '')) is version_compare('0.4.0', '>=') + success_msg: "Kubelet args supported in {{ k3s_release_version }}" + fail_msg: "Kubelet args are not supported in {{ k3s_release_version }}" + when: k3s_kubelet_args is defined and k3s_kubelet_args | length > 0 + - name: Check k3s_flannel_backend against k3s version assert: that: diff --git a/templates/k3s.service.j2 b/templates/k3s.service.j2 index 7f096c6..06fb371 100644 --- a/templates/k3s.service.j2 +++ b/templates/k3s.service.j2 @@ -129,6 +129,13 @@ ExecStart={{ k3s_install_dir }}/k3s {% endfor %} {% endfor %} {% endif %} +{% if k3s_kubelet_args is defined and k3s_kubelet_args is iterable %} + {% for arg in k3s_kubelet_args %} + {% for key, value in arg.items() %} + --kubelet-arg {{ key }}={{ value }} + {% endfor %} + {% endfor %} +{% endif %} {% endfilter %} {% endfilter %}