ACK'de bağlama hatalarını giderin, hesaplar arası erişimi yapılandırın ve ossfs 2.0 birimlerini yönetin.
ossfs 2.0 pod sorunlarını teşhis etme
Sorun gidermeye başlamadan önce ossfs 2.0 pod durumunu ve olaylarını kontrol edin:
# Check pod events for mount errors
kubectl describe pod <pod-name> -n <namespace>
# Check whether the ossfs 2.0 pod exists and is running
kubectl -n ack-csi-fuse get pod -l csi.alibabacloud.com/volume-id=<pv-name> -owide
Pod olaylarında görülen hatayı aşağıdaki ilgili bölümle eşleştirin.
Bağlama hataları
AccessKey izinleri nedeniyle FailedMount hatasıyla pod başlatılamıyor
AccessKey gerekli izinlere sahip olmadığından pod FailedMount hatası bildirir.
Bu sorunu çözmek için:
RAM kullanıcısının erişim ilkesinin OSS bağlama gereksinimlerini karşıladığını doğrulayın. Bkz. Statik olarak sağlanan ossfs 2.0 birimi kullanma.
AccessKey'in devre dışı bırakılmadığını veya yenilenmediğini onaylayın.
nodePublishSecretRef tarafından belirtilen Secret içindeki AccessKey değişiklikleri, çalışan bir ossfs 2.0 işlemine otomatik olarak yansımaz. Yeni kimlik bilgilerinin uygulanması için ossfs 2.0 pod'unu yeniden başlatın. Bkz. ossfs 2.0 işlemini yeniden başlatma.
Sanal düğümdeki pod "secrets is forbidden" hatasıyla başarısız oluyor
Pod olayı aşağıdaki içeriği içerir:
failed to get secret secrets "xxx" is forbidden: User "serverless-xxx" cannot get resource "secrets" in API group "" in the namespace "xxx"
Sanal düğümlerde (Container Compute Service pod'ları), nodePublishSecretRef tarafından başvurulan Secret, PersistentVolumeClaim (PVC) ile aynı ad alanında bulunmalıdır.
Secret'i PVC ad alanında oluşturun. PV'de bu Secret'a başvuracak şekilde nodePublishSecretRef değerini ayarlayın. Bkz. RAM kullanıcısının AccessKey'ini kullanarak kimlik doğrulama.
Pod "mounter.sock: connect: no such file or directory" hatasıyla başarısız oluyor
Pod olayı aşağıdaki içeriği içerir:
FailedMount /run/fuse.ossfs/xxxxxx/mounter.sock: connect: no such file or directory
ossfs 2.0 pod'u doğru şekilde başlatılmamış veya beklenmedik bir şekilde silinmiştir.
-
Uygulama pod'unun zamanlandığı düğümde ossfs 2.0 pod'unun var olup olmadığını kontrol edin:
Pod varsa ancak
Runningdurumunda değilse sorunu giderin. PodRunningdurumuna geldikten sonra uygulamayı yeniden bağlamak için uygulama pod'unu yeniden başlatın.Pod yoksa bir sonraki adıma geçin.
kubectl -n ack-csi-fuse get pod -l csi.alibabacloud.com/volume-id=<PV_NAME> -owide | grep <NODE_NAME> (İsteğe bağlı) Beklenmedik pod silme işlemleri için denetim günlüklerini kontrol edin. Yaygın nedenler arasında temizleme betikleri, düğüm boşaltmaları ve otomatik iyileştirme yer alır. Tekrarlanmasını önlemek için yapılandırmaları ayarlayın.
-
Kalan VolumeAttachment kaynaklarını kontrol edin:
kubectl get volumeattachment | grep <PV_NAME> | grep <NODE_NAME> Yeni bir ossfs 2.0 pod'unun oluşturulduğunu doğrulamak ve yeniden bağlamayı tetiklemek için uygulama pod'unu yeniden başlatın.
Paket yansıtma tabanlı kökene geri dönüş kullandığı için bağlama başarısız oluyor
OSS paketi yansıtma tabanlı kökene geri dönüş kullanıyorsa ve bağlama dizini kaynaktan senkronize edilmemişse bağlama işlemi başarısız olur.
Bağlamadan önce verileri kaynaktan senkronize edin. Bkz. Kökene geri dönüş genel bakış.
Pakette statik web sitesi barındırma etkin olduğu için bağlama başarısız oluyor
Statik web sitesi barındırma etkinleştirildiğinde, ossfs 2.0 dizin kontrolleri index.html gibi dosyalara yönlendirilir ve bu durum bağlamanın başarısız olmasına neden olur.
Bağlamadan önce statik web sitesi barındırmayı devre dışı bırakın veya ayarlayın. Bkz. Statik web sitesi barındırma.
Bağlama yapılandırması
OSS paketinden tek bir dosya bağlama
ossfs 2.0, bir OSS paket yolunu dosya sistemi olarak bağlar; tek bir dosyayı doğrudan bağlayamaz. Belirli bir dosyaya erişmek için üst dizini bağlayın ve volumeMounts içinde subPath kullanın.
Örneğin, bucket:/subpath konumundaki a.txt ve b.txt dosyalarını farklı pod'larda /path/to/file/ konumuna bağlamak için:
PV yapılandırması -- üst dizini bağlayın:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-oss
spec:
capacity:
storage: 5Gi
accessModes:
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: ossplugin.csi.alibabacloud.com
volumeHandle: pv-oss
volumeAttributes:
bucket: bucket
path: subpath # Parent path containing a.txt and b.txt
url: "oss-cn-hangzhou.aliyuncs.com"
fuseType: ossfs2
Pod volumeMounts -- dosyayı seçmek için subPath kullanın:
volumeMounts:
- mountPath: /path/to/file # Maps to bucket:/subpath
name: oss-pvc # Must match the volume name
subPath: a.txt # Relative path within bucket:/subpath
Bağlama işleminden sonra, pod içindeki /path/to/file/a.txt yolu bucket:/subpath/a.txt konumuna eşlenir.
Farklı bir hesaptaki OSS paketini bağlama
Hesaplar arasında paket bağlamak için RRSA (Service Accounts için RAM Rolleri) kullanın.
Kümenizin ve CSI bileşeni sürümlerinizin RRSA gereksinimlerini karşıladığını doğrulayın.
Aşağıdaki yordam, B Hesabı'ndaki bir paketi A Hesabı'ndaki bir kümeye bağlar.
B Hesabı'nda (paketin bulunduğu hesap):
A Hesabı'na güvenen
roleBadlı bir RAM rolü oluşturun. Bkz. Güvenilen Alibaba Cloud hesabı için RAM rolü oluşturma.roleBrolüne hedef OSS paketlerine erişim izni verin.RAM konsolu içinde
roleBayrıntılar sayfasını açın ve ARN'sini kopyalayın. Örnek:acs:ram::130xxxxxxxx:role/roleB.
A Hesabı'nda (kümenin bulunduğu hesap):
RRSA için
roleAadlı bir RAM rolü oluşturun. Güvenilen varlık türünü OIDC IdP olarak ayarlayın.roleArolüneroleBrolünü üstlenme izni verin.roleArolünün OSS erişim ilkesine ihtiyacı yoktur;sts:AssumeRoleeylemini içeren bir ilke ekleyin (örneğinAliyunSTSAssumeRoleAccess). Bkz. Kümede RRSA'yı etkinleştirme (statik birimler) veya Dinamik olarak sağlanan ossfs 1.0 birimi kullanma (dinamik birimler).
Birimi yapılandırma -- assumeRoleArn değerini roleB rolünün ARN'sine ayarlayın:
-
Statik olarak sağlanan birim (PV):
volumeAttributesbölümüne ekleyin:assumeRoleArn: <ARN of roleB> -
Dinamik olarak sağlanan birim (StorageClass):
parametersbölümüne ekleyin:assumeRoleArn: <ARN of roleB>
OSS erişim uç noktalarını çözmek için CoreDNS kullanma
OSS uç noktalarını dahili küme alan adı üzerinden çözmek için, bağlama sırasında CoreDNS'e öncelik verecek şekilde ossfs pod'u için bir DNS ilkesi yapılandırın.
CSI bileşeni v1.34.2 veya sonraki bir sürüm gerektirir. Yükseltme yapmak için bkz. CSI bileşenlerini yönetme.
-
Statik birim (PV):
spec.csi.volumeAttributesbölümünednsPolicyekleyin.dnsPolicy: ClusterFirstWithHostNet -
Dinamik birimler (StorageClass):
parametersbölümünednsPolicyekleyin.dnsPolicy: ClusterFirstWithHostNet
RRSA için özel ARN veya ServiceAccount kullanma
Varsayılan olarak, PV'de roleName ayarlandığında CSI, Role ARN ve OIDC Provider ARN değerlerini otomatik olarak alır. Üçüncü taraf OIDC IdP kullanma veya varsayılan olmayan ServiceAccount kullanma gibi daha fazla kontrol sağlamak için roleArn ve oidcProviderArn değerlerini doğrudan belirtin.
roleArnveoidcProviderArnbirlikte yapılandırılmalıdır. AyarlandıklarındaroleNamedeğerini geçersiz kılarlar.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-oss
spec:
capacity:
storage: 5Gi
accessModes:
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: ossplugin.csi.alibabacloud.com
volumeHandle: pv-oss # Must match the PV name
volumeAttributes:
bucket: "oss"
url: "oss-cn-hangzhou.aliyuncs.com"
authType: "rrsa"
fuseType: "ossfs2"
oidcProviderArn: "<oidc-provider-arn>"
roleArn: "<role-arn>"
# roleName: "<role-name>" # Ignored when roleArn and oidcProviderArn are set
serviceAccountName: "csi-fuse-<service-account-name>"
|
|
|
|
|
|
|
|
|
|
|
|
Kapasite
Yapılandırılan birim kapasitesinin aşılması
OSS, paketlerde veya alt dizinlerde kapasite sınırlarını zorlamaz. .spec.capacity (PV) ve .spec.resources.requests.storage (PVC) değerleri dikkate alınmaz; bağlı PV ve PVC arasında bu değerlerin eşleştiğinden emin olun.
Gerçek kullanım yapılandırılan kapasiteyi aşarsa birim normal şekilde çalışmaya devam eder. Ölçeklendirme gerekmez.
İşlemler
ossfs 2.0 işlemini yeniden başlatma
Kimlik bilgilerini veya ossfs 2.0 sürümünü değiştirdikten sonra çalışan işlem değişiklikleri otomatik olarak almaz. Değişikliklerin uygulanması için hem ossfs 2.0 pod'unun (ack-csi-fuse içindeki csi-fuse-ossfs2-*) hem de birimi kullanan tüm uygulama pod'larının yeniden başlatılması gerekir; bu durum hizmet kesintisine neden olur.
ossfs 2.0 pod'unu manuel olarak silmeyin. CSI, yaşam döngüsü yönetimi dışında silinen bir pod'u kurtaramaz veya yeniden oluşturamaz.
Yordam:
-
Hedef ossfs 2.0 pod'unu belirleyin.
<pv-name>ve<node-name>değerlerini değiştirin:kubectl -n ack-csi-fuse get pod -l csi.alibabacloud.com/volume-id=<pv-name> -owide | grep <node-name> -
Bu birimi kullanan tüm uygulama pod'larını belirleyin.
<ns>ve<pvc-name>değerlerini değiştirin.Used Byalanı pod'ları listeler:kubectl -n <ns> describe pvc <pvc-name>Used By: oss-static-94849f647-4**** oss-static-94849f647-6**** oss-static-94849f647-h**** -
ossfs 2.0 pod'u ile aynı düğümdeki uygulama pod'larını bulun:
kubectl -n <ns> get pod -owide | grep <node-name> Tüm uygulama pod'larını aynı anda silin.
kubectl scaleveya eşdeğer bir komut kullanın. Hiçbir pod bağlamaya referans vermediğinde CSI,csi-fuse-ossfs2-*pod'unu geri alır. Kopyalar yeniden oluşturulduğunda birim güncellenmiş yapılandırmayla yeniden bağlanır.
Alternatif yaklaşım -- aynı anda silme mümkün değilse (örneğin, bir Deployment, StatefulSet veya DaemonSet silinen pod'ları hemen yeniden oluşturuyorsa) veya uygulama geçici OSS okuma/yazma hatalarına tolerans gösteriyorsa:
-
Birim için VolumeAttachment öğesini bulun. Beklenen çıktı:
kubectl get volumeattachment | grep <pv-name> | grep <node-name>csi-bd463c719189f858c2394608da7feb5af8f181704b77a46bbc219b********** ossplugin.csi.alibabacloud.com <pv-name> <node-name> true 12m VolumeAttachment öğesini silin. Uygulama pod'ları OSS işlemlerinde
disconnected errorhatası döndürür.Uygulama pod'larını tek tek yeniden başlatın. Her biri, güncellenmiş yapılandırmayla yeni bir
csi-fuse-ossfs2-*pod'una bağlanır.