diff --git a/roles/kubernetes/preinstall/defaults/main.yml b/roles/kubernetes/preinstall/defaults/main.yml
index 8ab2c9aa1fdda4a63e14ddf87ddcd8724b12b66d..0a168eb996c329d0552c00ba9a60e9f3727d0e09 100644
--- a/roles/kubernetes/preinstall/defaults/main.yml
+++ b/roles/kubernetes/preinstall/defaults/main.yml
@@ -17,6 +17,7 @@ common_required_pkgs:
   - ebtables
   - bash-completion
   - tar
+  - "{{ kube_proxy_mode == 'ipvs' | ternary(['ipvsadm', 'ipset'], []) }}"
 
 # Set to true if your network does not support IPv6
 # This may be necessary for pulling Docker images from
diff --git a/roles/kubernetes/preinstall/tasks/0070-system-packages.yml b/roles/kubernetes/preinstall/tasks/0070-system-packages.yml
index 8d02a85756d0bbdf51814d7cab17e55943c8a00d..7f0c054748dceb9edc16e257e586b082b50a68c7 100644
--- a/roles/kubernetes/preinstall/tasks/0070-system-packages.yml
+++ b/roles/kubernetes/preinstall/tasks/0070-system-packages.yml
@@ -59,14 +59,9 @@
   tags:
     - bootstrap-os
 
-- name: Update common_required_pkgs with ipvsadm when kube_proxy_mode is ipvs
-  set_fact:
-    common_required_pkgs: "{{ common_required_pkgs | default([]) + ['ipvsadm', 'ipset'] }}"
-  when: kube_proxy_mode == 'ipvs'
-
 - name: Install packages requirements
   package:
-    name: "{{ required_pkgs | default([]) | union(common_required_pkgs | default([])) }}"
+    name: "{{ required_pkgs | union(common_required_pkgs) | flatten }}"
     state: present
   register: pkgs_task_result
   until: pkgs_task_result is succeeded