def METHOD_NAME(test_name, cloud_provider, rke_client, kubectl):
    """
    Update cluster k8s service images and remove worker node, cluster config:
    node0 - controlplane, etcd
    node1 - worker
    node2 - worker
    Upgrade removes a worker node:
    node0 - controlplane, etcd
    node1 - worker
    """
    rke_template = 'cluster_upgrade_3_1.yml.j2'
    all_nodes = cloud_provider.create_multiple_nodes(3, test_name)
    rke_config = create_rke_cluster(
        rke_client, kubectl, all_nodes, rke_template,
        k8_rancher_image=K8S_PREUPGRADE_IMAGE)
    network, dns_discovery = validate_rke_cluster(
        rke_client, kubectl, all_nodes, 'beforeupgrade')
    validate_k8s_service_images(all_nodes, K8S_PREUPGRADE_IMAGE,
                                rke_client, kubectl)
    # New cluster needs to keep controlplane and etcd nodes the same
    rke_template = 'cluster_upgrade_3_2.yml.j2'
    after_upgrade_nodes = all_nodes[0:-1]
    rke_config = create_rke_cluster(
        rke_client, kubectl, after_upgrade_nodes, rke_template,
        k8_rancher_image=K8S_UPGRADE_IMAGE)
    validate_k8s_service_images(after_upgrade_nodes, K8S_UPGRADE_IMAGE,
                                rke_client, kubectl)
    # Rerun validation on existing and new resources
    validate_rke_cluster(
        rke_client, kubectl, after_upgrade_nodes, 'beforeupgrade',
        network_validation=network, dns_validation=dns_discovery)
    validate_rke_cluster(
        rke_client, kubectl, after_upgrade_nodes, 'afterupgrade')
    delete_nodes(cloud_provider, all_nodes)