Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Migrate FlexVolume to CSI for clusters without data

Son Güncelleme:Oct 06, 2026

FlexVolume depolama eklentisi kullanım dışı bırakılmıştır ve yeni kümeler için desteklenmemektedir. FlexVolume eklentisini kullanan mevcut kümeleriniz varsa, Container Storage Interface (CSI) eklentisine geçiş yapmanızı öneririz. FlexVolume eklentisini kaldırıp, CSI eklentisini yükleyerek ve düğüm havuzu ile mevcut düğüm yapılandırmalarını güncelleyerek bu geçişi gerçekleştirebilirsiniz. Bu konu, FlexVolume tarafından yönetilen veri bulunmayan kümeler için bu geçiş sürecini açıklar.

Eklenti karşılaştırması

Aşağıdaki tabloda CSI ve FlexVolume depolama eklentileri karşılaştırılmaktadır.

Eklenti

Bileşenler

Kubelet parametresi

Referanslar

CSI

  • CSI-Provisioner (Deployment)

    Birimlerin ve anlık görüntülerin otomatik oluşturulmasını yönetir. Yanlışlıkla silme sonrası veri kurtarma ve Container Network File System (CNFS) depolama gibi özellikleri destekler.

  • CSI-Plugin (DaemonSet)

    Birimlerin otomatik olarak bağlanmasını ve bağlantısının kesilmesini yönetir. Birden fazla depolama türünü destekler.

Eklenti, belirli bir kubelet parametresi gerektirir.

Kubelet parametresi enable-controller-attach-detach değerini true olarak ayarlayın.

Depolama

FlexVolume

  • Disk-Controller (Deployment)

    Disk birimlerinin otomatik oluşturulmasını yönetir.

  • Flexvolume (DaemonSet)

    Birimlerin bağlanmasını ve bağlantısının kesilmesini yönetir.

Eklenti, belirli bir kubelet parametresi gerektirir.

Kubelet parametresi enable-controller-attach-detach değerini false olarak ayarlayın.

FlexVolume'a genel bakış

Kullanım senaryoları

CSI eklentisi, FlexVolume eklentisine göre daha kararlı ve verimlidir. Kümeniz aşağıdaki koşullardan birini karşılıyorsa FlexVolume eklentisinden CSI eklentisine geçiş yapmanızı öneririz:

  • Kümede FlexVolume kullanılarak bağlanmış herhangi bir birim bulunmamaktadır.

  • Daha önce FlexVolume kullanılarak birimler bağlanmış ancak bunlarla ilişkili veriler silinmiştir.

Adım 1: FlexVolume'u kaldırma

  1. OpenAPI Explorer konsolu üzerinde oturum açın ve FlexVolume eklentisini kaldırmak için UnInstallClusterAddons işlemini çağırın.

    • ClusterId: Küme kimliğiniz. Küme kimliğini, kümenizin Basic Information sayfasında bulabilirsiniz.

    • name: Flexvolume.

    Daha fazla bilgi için bkz. Küme ek bileşenlerini kaldırma.

  2. alicloud-disk-controller ve alicloud-nas-controller Deployment'larını silin.

    kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller
  3. FlexVolume eklentisinin kaldırıldığını doğrulayın.

    kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'

    Komut herhangi bir çıktı döndürmezse FlexVolume eklentisi kaldırılmış demektir.

  4. FlexVolume StorageClass kaynaklarını silin. Bu kaynakların sağlayıcısı (provisioner) alicloud/disk'tir.

    kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssd

    Beklenen çıktı:

    storageclass.storage.k8s.io "alicloud-disk-available" deleted
    storageclass.storage.k8s.io "alicloud-disk-efficiency" deleted
    storageclass.storage.k8s.io "alicloud-disk-essd" deleted
    storageclass.storage.k8s.io "alicloud-disk-ssd" deleted

    Çıktı, StorageClass'ların silindiğini göstermektedir.

Adım 2: CSI yükleme

  • Kümeniz csi-compatible-controller eklentisini kullanıyorsa özel bir CSI eklentisi zaten yüklüdür. Bu eklenti standart CSI eklentisi değildir. Standart CSI eklentisini yüklemeden önce aşağıdaki komutları çalıştırarak özel CSI bileşenlerini silmeniz gerekir.

    kubectl delete deploy csi-provisioner -n kube-system
    kubectl delete ds csi-plugin -n kube-system
    kubectl delete csidriver diskplugin.csi.alibabacloud.com nasplugin.csi.alibabacloud.com ossplugin.csi.alibabacloud.com
    Not

    Bu silme işlemleri, kümedeki mevcut pod'ları etkilemez. Ancak, özel bileşenleri sildikten ve standart CSI eklentisini yüklemeden önce pod'larda herhangi bir değişiklik yapmayın.

  • csi-compatible-controller eklentisi kullanılmıyorsa OpenAPI'yi doğrudan çağırarak standart CSI eklentisini yükleyebilirsiniz.

  1. OpenAPI Explorer konsolu üzerinde oturum açın ve CSI eklentisini yüklemek için InstallClusterAddons işlemini çağırın.

    • ClusterId: Küme kimliğiniz.

    • name: csi-provisioner.

    • version: CSI eklentisinin en son sürümü. CSI sürümleri hakkında daha fazla bilgi için bkz. csi-provisioner.

    Daha fazla bilgi için bkz. Küme ek bileşenlerini yükleme.

  2. CSI eklentisinin doğru şekilde çalıştığını doğrulayın.

    kubectl get pods -n kube-system | grep csi

    Beklenen çıktı:

    csi-plugin-577mm                              4/4     Running   0          3d20h
    csi-plugin-k9mzt                              4/4     Running   0          41d
    csi-provisioner-6b58f46989-8wwl5              9/9     Running   0          41d
    csi-provisioner-6b58f46989-qzh8l              9/9     Running   0          6d20h

    Çıktı, CSI eklentisinin beklendiği gibi çalıştığını göstermektedir.

Adım 3: Düğüm havuzu yapılandırmalarını değiştirme

Düğüm havuzu yapılandırmaları, kümenin depolama bileşenlerine bağlıdır. Standart CSI bileşenlerini yükledikten sonra mevcut düğüm havuzlarının yapılandırmaları otomatik olarak güncellenmez. Bir güncellemeyi tetiklemek için düğüm havuzu yapılandırmalarını manuel olarak değiştirmeniz gerekir. Güncelleme başarılı olduktan sonra, düğüm havuzundaki yeni düğümler için --enable-controller-attach-detach kubelet parametresi false değerinden true değerine güncellenir.

Önemli

Bir düğüm havuzu yapılandırmasını manuel olarak değiştirmek, o havuzdaki düğümlerdeki kubelet'i yeniden başlatır. Bu işlemi yoğun olmayan saatlerde gerçekleştirmenizi öneririz. Bir düğüm havuzunun doğru şekilde güncellendiğini onayladıktan sonra kalan düğüm havuzlarını aşamalı olarak güncelleyin.

Güncellemeyi tetiklemek için tüm düğüm havuzlarını bir örnek türü ekleyerek veya oturum açma parolasını değiştirerek değiştirebilirsiniz. Bu eylem, arka uçtaki depolama eklentisi türünü günceller, düğüm başlatma betiğinin yenilenmesini tetikler ve yeni düğümlerin doğru parametrelerle yapılandırılmasını sağlar.

Not

Alternatif olarak, yeni bir düğüm havuzu oluşturabilir ve ardından eski havuzları aşamalı olarak ölçeklendirip silebilirsiniz. Bu yöntemi kullanırsanız aşağıdaki adımları atlayabilirsiniz.

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.

  2. Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Nodes > Node Pools seçeneğine tıklayın.

  3. Node Pools sayfasında hedef düğüm havuzunu bulun ve Actions sütununda Edit seçeneğine tıklayın.

  4. Görüntülenen iletişim kutusunda düğüm havuzunun örnek türü yapılandırmasını değiştirin ve OK seçeneğine tıklayın.

    Not

    Bu değişiklik yalnızca arka uç depolama eklentisi türünün güncellenmesini tetikler. Güncelleme etkin hale geldikten sonra bu değişikliği geri alabilirsiniz.

Adım 4: Mevcut düğüm yapılandırmalarını değiştirme

Kubelet parametrelerini CSI gereksinimlerini karşılayacak şekilde güncellemek için aşağıdaki YAML dosyasını uygulayın. Bu DaemonSet, mevcut düğümlerde --enable-controller-attach-detach parametresini true olarak ayarlar. İşlem tamamlandıktan sonra DaemonSet'i silebilirsiniz.

Önemli

Aşağıdaki YAML dosyasının uygulanması, her düğümdeki kubelet'i yeniden başlatır. Devam etmeden önce iş yükleriniz üzerindeki olası etkiyi değerlendirin.

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: kubelet-set
spec:
  selector:
    matchLabels:
      app: kubelet-set
  template:
    metadata:
      labels:
        app: kubelet-set
    spec:
      tolerations:
        - operator: "Exists"
      hostNetwork: true
      hostPID: true
      containers:
        - name: kubelet-set
          securityContext:
            privileged: true
            capabilities:
              add: ["SYS_ADMIN"]
            allowPrivilegeEscalation: true
          image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.26.5-56d1e30-aliyun
          imagePullPolicy: "Always"
          env:
          - name: enableADController
            value: "true"
          command: ["sh", "-c"]
          args:
          - echo "Starting kubelet flag set to $enableADController";
            ifFlagTrueNum=`cat /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf | grep enable-controller-attach-detach=$enableADController | grep -v grep | wc -l`;
            echo "ifFlagTrueNum is $ifFlagTrueNum";
            if [ "$ifFlagTrueNum" = "0" ]; then
                curValue="true";
                if [ "$enableADController" = "true" ]; then
                    curValue="false";
                fi;
                sed -i "s/enable-controller-attach-detach=$curValue/enable-controller-attach-detach=$enableADController/" /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf;
                restartKubelet="true";
                echo "current value is $curValue, change to expect "$enableADController;
            fi;
            if [ "$restartKubelet" = "true" ]; then
                /nsenter --mount=/proc/1/ns/mnt systemctl daemon-reload;
                /nsenter --mount=/proc/1/ns/mnt service kubelet restart;
                echo "restart kubelet";
            fi;
            while true;
            do
                sleep 5;
            done;
          volumeMounts:
          - name: etc
            mountPath: /host/etc
      volumes:
        - name: etc
          hostPath:
            path: /etc

Sonraki adımlar

Geçiş tamamlandıktan sonra dinamik olarak sağlanan bir disk birimi oluşturarak CSI eklentisinin doğru çalıştığını doğrulayabilirsiniz. Daha fazla bilgi için bkz. Dinamik olarak sağlanan disk birimi kullanma.