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 |
|
Eklenti, belirli bir kubelet parametresi gerektirir. Kubelet parametresi |
|
|
FlexVolume |
|
Eklenti, belirli bir kubelet parametresi gerektirir. Kubelet parametresi |
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
-
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.
-
alicloud-disk-controller ve alicloud-nas-controller Deployment'larını silin.
kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller -
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.
-
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-ssdBeklenen çı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.comNotBu 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.
-
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.
-
CSI eklentisinin doğru şekilde çalıştığını doğrulayın.
kubectl get pods -n kube-system | grep csiBeklenen çı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.
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.
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.
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.
Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde seçeneğine tıklayın.
Node Pools sayfasında hedef düğüm havuzunu bulun ve Actions sütununda Edit seçeneğine tıklayın.
-
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.
NotBu 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.
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.