Sdílet prostřednictvím


Ř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 createse 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, ephemeraldisknebo 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:

  1. Vytvořte cluster Azure Kubernetes.
  2. Povolte Azure Policy pro AKS.
  3. Vytvořte zásadu, kterou máte podezření, že blokuje instalaci služby Azure Container Storage.
  4. Pokus o instalaci služby Azure Container Storage v clusteru AKS
  5. Zkontrolujte protokoly podu gatekeeper-controller a ověřte porušení zásad.
  6. acstor Přidejte obor názvů a azure-extensions-usage-system obor názvů do seznamu vyloučení zásad.
  7. 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 acstorpří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ů:

  1. 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ě.

  2. 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ů.

  3. Než budete pokračovat, potvrďte, že chcete použít Azure Container Storage ke správě místních datových disků výhradně.

  4. Zastavte a odeberte sady démonů nebo komponenty, které spravují místní datové disky.

  5. Přihlaste se ke každému uzlu, který má místní datové disky.

  6. Odeberte existující systémy souborů ze všech místních datových disků.

  7. 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
    
  8. 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_LRSStandard_LRS, Premium_ZRSa 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 acstormůž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 allexistují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-ephemeralvolumesvazku .

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á etcddistribuované 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.

Viz také