KubeOne(1)

NAME
kubeone-migrate-to-ccm-csi - Migrate live cluster from the in-tree cloud provider to external cloud-controller-manager (CCM) and CSI plugin

SYNOPSIS
kubeone migrate to-ccm-csi [flags]

DESCRIPTION
Following the in-tree cloud provider deprecation (http://kep.k8s.io/2395), this command helps to migrate existing clusters from the in-tree cloud provider to external cloud-controller-manager (CCM) and CSI plugin.

Note: if your cluster was created with .cloudProvider.external enabled, the CCM/CSI migration is not needed because the cluster is already using external CCM.

Migration is currently available for OpenStack and vSphere. Other providers will be added in future KubeOne releases.

The migration is done in two phases:

•   Phase 1: deploy external CCM and CSI plugin, while leaving in-tree provider enabled. Kubernetes API server and kube-controller-manager are configured to:

    •   use controllers integrated in external CCM instead of in-tree cloud provider for all cloud-related operations

    •   redirect all volumes-related operations to the CSI plugin The existing worker nodes will continue to use in-tree provider (that's why it's still left enabled), so therefore, all worker nodes managed by machine-controller must be rolled out after phase 1 is complete.

•   Phase 2: complete the CCM/CSI migration by fully-disabling in-tree provider. To trigger the phase 2, users need to run "kubeone migrate to-ccm-csi" command with the "--complete" flag. This should be done after all worker nodes managed by machine-controller are rolled-out.

Make sure to familiarize yourself with the CCM/CSI migration requirements by checking the following document: https://docs.kubermatic.com/kubeone/main/guides/ccm-csi-migration/

OPTIONS
-y, --auto-approve[=false]
    auto approve plan

--complete[=false]
    complete ccm/csi migration

-h, --help[=false]
    help for to-ccm-csi

OPTIONS INHERITED FROM PARENT COMMANDS
-c, --credentials=""
    File to source credentials and secrets from

-d, --debug[=false]
    debug output with stacktrace

-l, --log-format="text"
    format for logging

-m, --manifest="./kubeone.yaml"
    Path to the KubeOne config

-t, --tfjson=""
    Source for terraform output in JSON - to read from stdin. If path is a file, contents will be used. If path is a dictionary, terraform output -json is executed in this path

-v, --verbose[=false]
    verbose output

SEE ALSO
kubeone-migrate(1)

HISTORY
2-Feb-2026 Auto generated by spf13/cobra