diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8a145aa4024ce051f8a18144aab59b52cecb5ee8..9b92261c940344d97c117da1bd790f7f433b454c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -27,6 +27,7 @@ variables:
   ANSIBLE_INVENTORY: ./inventory/sample/${CI_JOB_NAME}-${BUILD_NUMBER}.ini
   IDEMPOT_CHECK: "false"
   RESET_CHECK: "false"
+  REMOVE_NODE_CHECK: "false"
   UPGRADE_TEST: "false"
   MITOGEN_ENABLE: "false"
   ANSIBLE_LOG_LEVEL: "-vv"
diff --git a/.gitlab-ci/packet.yml b/.gitlab-ci/packet.yml
index 237e2b501536011de67ee90a9d030e9ca88b8842..a0d514c5c15ee8f0db56b5d775ac5af309057876 100644
--- a/.gitlab-ci/packet.yml
+++ b/.gitlab-ci/packet.yml
@@ -283,6 +283,14 @@ packet_debian10-calico-upgrade:
   variables:
     UPGRADE_TEST: graceful
 
+packet_almalinux8-calico-remove-node:
+  stage: deploy-part3
+  extends: .packet_pr
+  when: on_success
+  variables:
+    REMOVE_NODE_CHECK: "true"
+    REMOVE_NODE_NAME: "instance-3"
+
 packet_debian10-calico-upgrade-once:
   stage: deploy-part3
   extends: .packet_periodic
diff --git a/tests/files/packet_almalinux8-calico-remove-node.yml b/tests/files/packet_almalinux8-calico-remove-node.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4cb5dfc04e7e005d7e02a5541d1bdde16d74affc
--- /dev/null
+++ b/tests/files/packet_almalinux8-calico-remove-node.yml
@@ -0,0 +1,7 @@
+---
+# Instance settings
+cloud_image: almalinux-8
+mode: ha
+
+# Kubespray settings
+auto_renew_certificates: true
diff --git a/tests/scripts/testcases_run.sh b/tests/scripts/testcases_run.sh
index ed16b24d0e8953911931dac1913e2567a83f3baf..5947309df18f0d0c5b861c977001350ada10c519 100755
--- a/tests/scripts/testcases_run.sh
+++ b/tests/scripts/testcases_run.sh
@@ -109,6 +109,11 @@ if [ "${IDEMPOT_CHECK}" = "true" ]; then
   fi
 fi
 
+# Test node removal procedure
+if [ "${REMOVE_NODE_CHECK}" = "true" ]; then
+  ansible-playbook ${ANSIBLE_LOG_LEVEL} -e @${CI_TEST_SETTING} -e @${CI_TEST_REGISTRY_MIRROR}  -e @${CI_TEST_VARS} ${CI_TEST_ADDITIONAL_VARS} -e skip_confirmation=yes -e node=${REMOVE_NODE_NAME} --limit "all:!fake_hosts" remove-node.yml
+fi
+
 # Clean up at the end, this is to allow stage1 tests to include cleanup test
 if [ "${RESET_CHECK}" = "true" ]; then
   ansible-playbook ${ANSIBLE_LOG_LEVEL} -e @${CI_TEST_SETTING} -e @${CI_TEST_REGISTRY_MIRROR}  -e @${CI_TEST_VARS} ${CI_TEST_ADDITIONAL_VARS} -e reset_confirmation=yes --limit "all:!fake_hosts" reset.yml