Řešení potíží se službou Azure Container Storage
Azure Container Storage je cloudová služba pro správu svazků, nasazení a orchestraci sestavená nativně pro kontejnery. Tento článek vám pomůže vyřešit běžné problémy se službou Azure Container Storage a najít řešení problémů.
Řešení problémů s instalací
Azure Container Storage se nepodaří nainstalovat kvůli chybějící konfiguraci
Po spuštění az aks create
se může zobrazit zpráva , že se službě Azure Container Storage nepodařilo nainstalovat. Vytvoří se cluster AKS. Spuštěním az aks update
--enable-azure-container-storage
společně povolte Službu Azure Container Storage.
Tato zpráva znamená, že služba Azure Container Storage nebyla nainstalována, ale váš cluster AKS (Azure Kubernetes Service) byl vytvořen správně.
Pokud chcete do clusteru nainstalovat Službu Azure Container Storage a vytvořit fond úložiště, spusťte následující příkaz. Nahraďte <cluster-name>
a <resource-group>
nahraďte vlastními hodnotami. Nahradit <storage-pool-type>
čím azureDisk
, ephemeraldisk
nebo elasticSan
.
az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type>
Azure Container Storage se nepodařilo nainstalovat kvůli omezením služby Azure Policy
Azure Container Storage se nemusí podařit nainstalovat, pokud jsou zavedená omezení služby Azure Policy. Konkrétně služba Azure Container Storage spoléhá na privilegované kontejnery. Azure Policy můžete nakonfigurovat tak, aby blokovala privilegované kontejnery. Když jsou zablokované, může dojít k vypršení časového limitu nebo selhání instalace služby Azure Container Storage a v gatekeeper-controller
protokolech se můžou zobrazit chyby, například:
$ kubectl logs -n gatekeeper-system deployment/gatekeeper-controller
...
{"level":"info","ts":1722622443.9484184,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: prereq, securityContext: {\"privileged\": true, \"runAsUser\": 0}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-prereq-gt58x","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622443.9839077,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: metrics-exporter, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-metrics-exporter-286np","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622444.0515249,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: csi-node, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-csi-node-7hcd7","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622444.0729053,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: io-engine, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-io-engine-84hwx","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622444.0742755,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: ndm, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-ndm-x6q5n","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
{"level":"info","ts":1722622449.2412128,"logger":"webhook","msg":"denied admission: Privileged container is not allowed: ndm, securityContext: {\"privileged\": true}","hookType":"validation","process":"admission","details":{},"event_type":"violation","constraint_name":"azurepolicy-k8sazurev2noprivilege-686dd8b209a774ba977c","constraint_group":"constraints.gatekeeper.sh","constraint_api_version":"v1beta1","constraint_kind":"K8sAzureV2NoPrivilege","constraint_action":"deny","resource_group":"","resource_api_version":"v1","resource_kind":"Pod","resource_namespace":"acstor","resource_name":"azurecontainerstorage-ndm-b5nfg","request_username":"system:serviceaccount:kube-system:daemon-set-controller"}
Pokud chcete vyřešit blokování, musíte přidat acstor
obor názvů do seznamu vyloučení služby Azure Policy. Azure Policy slouží k vytváření a vynucování pravidel pro správu prostředků v Rámci Azure, včetně clusterů AKS. V některých případech můžou zásady blokovat vytváření podů a komponent azure Container Storage. Další podrobnosti o práci se službou Azure Policy pro Kubernetes najdete v azure Policy pro Kubernetes.
Chcete-li přidat acstor
obor názvů do seznamu vyloučení, postupujte takto:
- Vytvořte cluster Azure Kubernetes.
- Povolte Azure Policy pro AKS.
- Vytvořte zásadu, kterou máte podezření, že blokuje instalaci služby Azure Container Storage.
- Pokus o instalaci služby Azure Container Storage v clusteru AKS
- Zkontrolujte protokoly podu gatekeeper-controller a ověřte porušení zásad.
acstor
Přidejte obor názvů aazure-extensions-usage-system
obor názvů do seznamu vyloučení zásad.- Zkuste znovu nainstalovat Službu Azure Container Storage v clusteru AKS.
Nejde nainstalovat a povolit Službu Azure Container Storage ve fondech uzlů s tainty
Tainty uzlů ve fondech uzlů můžete nakonfigurovat tak, aby se na těchto fondech uzlů neplánovaly pody. Instalace a povolení služby Azure Container Storage v těchto fondech uzlů může být blokovaná, protože požadované pody se v těchto fondech uzlů nedají vytvořit. Toto chování platí jak pro fond systémových uzlů při instalaci, tak pro fondy uzlů uživatele při povolování.
Tainty uzlů můžete zkontrolovat pomocí následujícího příkladu:
$ az aks nodepool list -g $resourceGroup --cluster-name $clusterName --query "[].{PoolName:name, nodeTaints:nodeTaints}"
[
...
{
"PoolName": "nodepoolx",
"nodeTaints": [
"sku=gpu:NoSchedule"
]
}
]
Tyto tainty můžete dočasně odebrat, abyste je odblokovali a nakonfigurovali zpět po instalaci a úspěšném povolení. Můžete přejít na fondy uzlů clusteru > AKS na webu Azure Portal>, kliknout na fond uzlů, odebrat tainty v části Taints a popisky. Nebo můžete pomocí následujícího příkazu odebrat tainty a potvrdit změnu.
$ az aks nodepool update -g $resourceGroup --cluster-name $clusterName --name $nodePoolName --node-taints ""
$ az aks nodepool list -g $resourceGroup --cluster-name $clusterName --query "[].{PoolName:name, nodeTaints:nodeTaints}"
[
...
{
"PoolName": "nodepoolx",
"nodeTaints": null
}
]
Po úspěšném odebrání taintů uzlů zkuste instalaci nebo povolení zopakovat. Po úspěšném dokončení můžete nakonfigurovat tainty uzlů zpět, abyste obnovili omezení plánování podů.
Nejde nastavit typ fondu úložiště na NVMe
Pokud se pokusíte nainstalovat Službu Azure Container Storage s dočasným diskem, konkrétně s místním nvMe v clusteru, kde skladová položka virtuálního počítače nemá jednotky NVMe, zobrazí se následující chybová zpráva: Nejde nastavit parametr --storage-pool-option jako NVMe jako žádný z fondů uzlů nemůže podporovat dočasný disk NVMe.
Pokud chcete provést nápravu, vytvořte fond uzlů s skladovou jednotkou virtuálního počítače, která obsahuje jednotky NVMe, a zkuste to znovu. Viz virtuální počítače optimalizované pro úložiště.
Řešení potíží s fondem úložiště
Pokud chcete zkontrolovat stav fondů úložiště, spusťte kubectl describe sp <storage-pool-name> -n acstor
příkaz . Tady jsou některé problémy, se kterými se můžete setkat.
Dočasný fond úložiště nevrací kapacitu, pokud dočasné disky používají jiné sady démon.
Povolení dočasného fondu úložiště ve fondu uzlů s dočasnými disky SSD nebo místními disky NVMe nemusí nárokovat kapacitu z těchto disků, pokud je používají jiné sady démonů.
Spuštěním následujících kroků povolte službě Azure Container Storage výhradně správu těchto místních disků:
Spuštěním následujícího příkazu zobrazte deklarovanou kapacitu dočasným fondem úložiště:
$ kubectl get sp -A NAMESPACE NAME CAPACITY AVAILABLE USED RESERVED READY AGE acstor ephemeraldisk-nvme 0 0 0 0 False 82s
Tento příklad ukazuje nulovou kapacitu deklarovanou fondem
ephemeraldisk-nvme
úložiště.Spuštěním následujícího příkazu potvrďte stav nezařazených těchto místních blokových zařízení a zkontrolujte existující systém souborů na discích:
$ kubectl get bd -A NAMESPACE NAME NODENAME SIZE CLAIMSTATE STATUS AGE acstor blockdevice-1f7ad8fa32a448eb9768ad8e261312ff aks-nodepoolnvme-38618677-vmss000001 1920383410176 Unclaimed Active 22m acstor blockdevice-9c8096fc47cc2b41a2ed07ec17a83527 aks-nodepoolnvme-38618677-vmss000000 1920383410176 Unclaimed Active 23m $ kubectl describe bd -n acstor blockdevice-1f7ad8fa32a448eb9768ad8e261312ff Name: blockdevice-1f7ad8fa32a448eb9768ad8e261312ff … Filesystem: Fs Type: ext4 …
Tento příklad ukazuje, že bloková zařízení jsou
Unclaimed
ve stavu a na disku je existující systém souborů.Než budete pokračovat, potvrďte, že chcete použít Azure Container Storage ke správě místních datových disků výhradně.
Zastavte a odeberte sady démonů nebo komponenty, které spravují místní datové disky.
Přihlaste se ke každému uzlu, který má místní datové disky.
Odeberte existující systémy souborů ze všech místních datových disků.
Restartujte démona ndm, abyste zjistili nepoužívané místní datové disky.
$ kubectl rollout restart daemonset -l app=ndm -n acstor daemonset.apps/azurecontainerstorage-ndm restarted $ kubectl rollout status daemonset -l app=ndm -n acstor --watch … daemon set "azurecontainerstorage-ndm" successfully rolled out
Počkejte několik sekund a zkontrolujte, jestli dočasný fond úložiště deklaruje kapacitu z místních datových disků.
$ kubectl wait -n acstor sp --all --for condition=ready storagepool.containerstorage.azure.com/ephemeraldisk-nvme condition met $ kubectl get bd -A NAMESPACE NAME NODENAME SIZE CLAIMSTATE STATUS AGE acstor blockdevice-1f7ad8fa32a448eb9768ad8e261312ff aks-nodepoolnvme-38618677-vmss000001 1920383410176 Claimed Active 4d16h acstor blockdevice-9c8096fc47cc2b41a2ed07ec17a83527 aks-nodepoolnvme-38618677-vmss000000 1920383410176 Claimed Active 4d16h $ kubectl get sp -A NAMESPACE NAME CAPACITY AVAILABLE USED RESERVED READY AGE acstor ephemeraldisk-nvme 3840766820352 3812058578944 28708241408 26832871424 True 4d16h
Tento příklad ukazuje, že
ephemeraldisk-nvme
fond úložiště úspěšně deklaruje kapacitu z místních disků NVMe na uzlech.
Chyba při pokusu o rozbalení fondu úložiště Disků Azure
Pokud je váš existující fond úložiště menší než 4 TiB (4 096 GiB), můžete ho rozšířit až na 4 095 GiB. Pokud se pokusíte rozšířit nad rámec limitu, zobrazí se interní PVC chybovou zprávu o velikosti disku nebo omezení typu ukládání do mezipaměti. Zastavte virtuální počítač nebo disk odpojte a zkuste operaci zopakovat.
Abyste se vyhnuli chybám, nepokoušejte se rozšířit aktuální fond úložiště nad rámec 4 095 GiB, pokud je zpočátku menší než 4 TiB (4 096 GiB). Fondy úložiště větší než 4 TiB je možné rozšířit až na maximální dostupnou kapacitu úložiště.
Toto omezení platí pouze při použití Premium_LRS
, , StandardSSD_LRS
Standard_LRS
, Premium_ZRS
a StandardSSD_ZRS
jednotek SKU disku.
Selhání vytvoření elastické sítě SAN
Pokud se pokoušíte vytvořit fond úložiště Elastic SAN, může se zobrazit zpráva , že vytvoření elastické sítě SAN azure selhalo: Maximální možný počet elastických san pro předplatné, které jste už vytvořili. To znamená, že dosáhnete limitu počtu prostředků elastické sítě SAN, které je možné nasadit v oblasti pro každé předplatné. Omezení můžete zkontrolovat tady: Škálovatelnost a výkonnostní cíle elastické sítě SAN. Zvažte odstranění existujících prostředků elastické sítě SAN v předplatném, které se už nepoužívají, nebo zkuste vytvořit fond úložiště v jiné oblasti.
Nenašla se žádná bloková zařízení.
Pokud se zobrazí tato zpráva, pravděpodobně se pokoušíte vytvořit dočasný fond úložiště disků v clusteru, ve kterém skladová položka virtuálního počítače nemá jednotky NVMe.
Pokud chcete provést nápravu, vytvořte fond uzlů s skladovou jednotkou virtuálního počítače, která obsahuje jednotky NVMe, a zkuste to znovu. Viz virtuální počítače optimalizované pro úložiště.
Typ fondu úložiště už je povolený.
Pokud se pokusíte povolit typ fondu úložiště, který existuje, zobrazí se následující zpráva: Neplatná --enable-azure-container-storage
hodnota. Služba Azure Container Storage už je v clusteru povolená pro typ <storage-pool-type>
fondu úložiště. Spuštěním příkazu kubectl get sp -n acstor
můžete zkontrolovat, jestli máte nějaké existující fondy úložiště vytvořené.
Zakázání typu fondu úložiště
Pokud existuje existující fond úložiště tohoto typu, zobrazí se při zakázání typu fondu úložiště nebo az aks update --disable-azure-container-storage <storage-pool-type>
odinstalace služby Azure Container Storage prostřednictvím az aks update --disable-azure-container-storage all
existujícího fondu úložiště tohoto typu následující zpráva:
Zakázání služby Azure Container Storage pro typ <storage-pool-type>
fondu úložiště vynucuje odstranění všech fondů úložiště stejného typu a ovlivňuje aplikace používající tyto fondy úložiště. Vynucené odstranění fondů úložiště může také vést k úniku prostředků úložiště, které se spotřebovávají. Chcete před zakázáním služby Azure Container Storage ověřit, jestli se některý z fondů úložiště typu <storage-pool-type>
používá? (Y/n)
Pokud vyberete Y, spustí se automatické ověření, aby se zajistilo, že ve fondu úložiště nejsou vytvořené žádné trvalé svazky. Výběrem možnosti n projdete tímto ověřením a zakážete typ fondu úložiště, odstraníte všechny existující fondy úložiště a potenciálně ovlivní vaši aplikaci.
Řešení potíží se svazky
Nevyřízené vytvoření podu kvůli dočasné velikosti svazku nad rámec dostupné kapacity
Dočasný svazek je přidělen na jednom uzlu. Při konfiguraci velikosti dočasných svazků pro pody by velikost měla být menší než dostupná kapacita dočasného disku jednoho uzlu. V opačném případě je vytvoření podu ve stavu čekání.
Pomocí následujícího příkazu zkontrolujte, jestli je vytvoření podu ve stavu čekání na vyřízení.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
fiopod 0/1 Pending 0 17s
V tomto příkladu je pod fiopod
ve Pending
stavu.
Pomocí následujícího příkazu zkontrolujte, jestli má pod událost upozornění pro trvalé vytvoření souboruvolumeclaim.
$ kubectl describe pod fiopod
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 40s default-scheduler 0/3 nodes are available: waiting for ephemeral volume controller to create the persistentvolumeclaim "fiopod-ephemeralvolume". preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..
V tomto příkladu pod zobrazí událost upozornění při vytváření trvalé deklarace identity fiopod-ephemeralvolume
svazku .
Pomocí následujícího příkazu zkontrolujte, jestli se deklarace identity trvalého svazku kvůli nedostatečné kapacitě nezřídí.
$ kubectl describe pvc fiopod-ephemeralvolume
...
Warning ProvisioningFailed 107s (x13 over 20m) containerstorage.csi.azure.com_aks-nodepool1-29463073-vmss000000_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx failed to provision volume with StorageClass "acstor-ephemeraldisk-temp": rpc error: code = Internal desc = Operation failed: GenericOperation("error in response: status code '507 Insufficient Storage', content: 'RestJsonError { details: \"Operation failed due to insufficient resources: Not enough suitable pools available, 0/1\", message: \"SvcError :: NotEnoughResources\", kind: ResourceExhausted }'")
V tomto příkladu Insufficient Storage
se zobrazuje jako důvod selhání zřizování svazků.
Spuštěním následujícího příkazu zkontrolujte dostupnou kapacitu dočasného disku jednoho uzlu.
$ kubectl get diskpool -n acstor
NAME CAPACITY AVAILABLE USED RESERVED READY AGE
ephemeraldisk-temp-diskpool-jaxwb 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-temp-diskpool-wzixx 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-temp-diskpool-xbtlj 75660001280 75031990272 628011008 560902144 True 21h
V tomto příkladu je dostupná kapacita dočasného disku pro jeden uzel 75031990272
bajty nebo 69 GiB.
Upravte velikost úložiště svazků menší než dostupnou kapacitu a znovu nasaďte pod. Viz Nasazení podu s obecným dočasným svazkem.
Svazek se nepodaří připojit kvůli offline úložišti metadat
Azure Container Storage používá etcd
distribuované a spolehlivé úložiště klíč-hodnota k ukládání a správě metadat svazků pro podporu operací orchestrace svazků. Pro zajištění vysoké dostupnosti a odolnosti etcd
běží ve třech podech. Pokud jsou spuštěny méně než dvě etcd
instance, Azure Container Storage zastaví operace orchestrace svazků a zároveň umožní přístup k datům ke svazkům. Azure Container Storage automaticky rozpozná, kdy etcd
je instance offline a obnoví ji. Pokud si ale po restartování clusteru AKS všimnete chyb orchestrace svazků, je možné, že etcd
se instanci nepodařilo automaticky obnovit. Podle pokynů v této části určete stav etcd
instancí.
Spuštěním následujícího příkazu získejte seznam podů.
kubectl get pods
Může se zobrazit výstup podobný následujícímu.
NAME READY STATUS RESTARTS AGE
fiopod 0/1 ContainerCreating 0 25m
Popište pod:
kubectl describe pod fiopod
Pokud je úložiště metadat offline, obvykle se zobrazí zprávy o selhání svazku. V tomto příkladu je fiopod ve stavu ContainerCreating a upozornění FailedAttachVolume indikuje, že vytvoření čeká kvůli selhání připojení svazku.
Name: fiopod
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 25m default-scheduler Successfully assigned default/fiopod to aks-nodepool1-xxxxxxxx-vmss000009
Warning FailedAttachVolume 3m8s (x6 over 23m) attachdetach-controller AttachVolume.Attach failed for volume "pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" : timed out waiting for external-attacher of containerstorage.csi.azure.com CSI driver to attach volume xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Můžete také spustit následující příkaz a zkontrolovat stav etcd
instancí:
kubectl get pods -n acstor | grep "^etcd"
Měl by se zobrazit výstup podobný následujícímu s všemi instancemi ve stavu Spuštěno:
etcd-azurecontainerstorage-bn89qvzvzv 1/1 Running 0 4d19h
etcd-azurecontainerstorage-phf92lmqml 1/1 Running 0 4d19h
etcd-azurecontainerstorage-xznvwcgq4p 1/1 Running 0 4d19h
Pokud je spuštěných méně než dvě instance, svazek se nepřipojí, protože úložiště metadat je offline a automatizované obnovení selhalo. Pokud ano, vytvořte lístek podpory s podporou Azure.