Perché i miei contenitori non iniziano?
Si notano uno o più dei seguenti problemi:
-
I nodi di lavoro non sono in grado di creare nuovi pod. I pod vengono distribuiti correttamente ai nodi di lavoro, ma i contenitori sono bloccati nello stato
ContainerCreating. -
Quando esegui
oc describe pod <pod>per un pod nello statoContainerCreating, vedi un evento simile a uno dei seguenti eventi.Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "XXX": failed to request 1 IPv4 addresses. IPAM allocated only 0desc = failed to create pod network sandbox ... error adding container to network "k8s-pod-network": cannot allocate new block due to per host block limit -
Quando immetti il seguente comando, uno o più pod
calico-nodenon riescono ad avviarsi su un nodo di lavoro e si trovano nello statoCrashLoopBackOff.oc logs -n calico-system <calico-node_pod>Le ultime righe dei log contengono il seguente messaggio:
Unable to autoassign an address - pools are likely exhausted. type="ipipTunnelAddress"
Se non vedi nessuno dei messaggi relativi all'indirizzo IP elencati nei sintomi, i tuoi contenitori potrebbero non avviarsi perché è stata raggiunta la quota di registro.
Se visualizzi uno dei messaggi relativi all'indirizzo IP elencati nei sintomi, i tuoi contenitori potrebbero non avviarsi perché IPAM (IP Address Manager) per il plug-in Calico rileva in modo non corretto che tutti gli indirizzi IP del pod nel cluster sono in uso. Poiché l'IPAM Calico non rileva alcun indirizzo IP disponibile, non assegna gli indirizzi IP a nuovi pod nel cluster e i pod non possono essere avviati.
Correzione dei problemi relativi alla quota del registro
Cloud privato virtuale Infrastruttura classica
Per risolvere i problemi relativi alla quota di registro, liberare spazio di archiviazione in IBM Cloud Container Registry.
Risoluzione dei problemi relativi all'indirizzo IP
Cloud privato virtuale Infrastruttura classica
Per risolvere i problemi relativi agli indirizzi IP, rilascia gli indirizzi IP singoli e i blocchi di indirizzi IP che non sono stati rimossi correttamente dai record Calico IPAM, in modo che possano essere riutilizzati dai pod nel tuo cluster.
Il cluster deve eseguire una versione supportata. Se il tuo cluster esegue una versione obsoleta o non supportata, per prima cosa aggiorna il tuo cluster.
Passo 1: rilascio di singoli indirizzi IP
In primo luogo, controlla e rilascia i singoli indirizzi IP che non sono stati rimossi correttamente dai record Calico IPAM, in modo che possano essere riutilizzati dai pod nel tuo cluster.
-
Attieniti alla procedura in Installazione e configurazione della CLI Calico per scaricare la versione 3.18 o successiva del client
calicoctl, utilizza la corretta configurazione Calico per il tuo cluster e verifica che la configurazione Calico stia funzionando correttamente per il tuo cluster di destinazione. Tieni presente che anche se il tuo cluster esegue una versione precedente di Calico, puoi ancora utilizzare lacalicoctlversione 3.18 per eseguire i comandi nei seguenti passi. -
Controlla eventuali indirizzi IP rilevati in modo non corretto come in uso dall'IPAM Calico.
calicoctl ipam check -
Nell'output, cercare la sezione che contiene la linea
Scanning for IPs that are allocated but not actually in use.... Se gli indirizzi IP sono assegnati in IPAM ma non sono effettivamente in uso, continuare con il passo successivo per rilasciarli. In questo output di esempio, è possibile rilasciare 181 indirizzi IP.... Scanning for IPs that are allocated but not actually in use... Found 181 IPs that are allocated in IPAM but not actually in use. Scanning for IPs that are in use by a workload or node but not allocated in IPAM... Found 0 in-use IPs that are not in active IP pools. Found 0 in-use IPs that are in active IP pools but have no corresponding IPAM allocation. Check complete; found 181 problems. -
Rilascia gli indirizzi IP dall'IPAM Calico precedentemente assegnati a un endpoint pod. Nota che dopo aver bloccato l'archivio dati nei seguenti passi, i pod esistenti continuano l'esecuzione, ma tutti i pod creati rimangono nello stato
ContainerCreatinge non possono essere avviati fino a quando non sblocchi l'archivio dati. Questo blocco dell'archivio dati garantisce che i record IPAM non vengano modificati durante il rilascio degli indirizzi IP. Per ulteriori informazioni, vedi la documentazione open source diCalico.- Blocca l'archivio dati per i record IPAM Calico.
calicoctl datastore migrate lock ``` 2. Salvare i risultati del controllo IPAM. ```sh {: pre} calicoctl ipam check -o report.json ``` 3. Rilasciare gli indirizzi IP non utilizzati. Questo processo può essere eseguito per un massimo di 20 minuti a seconda del numero di indirizzi IP che devono essere rilasciati. ```sh {: pre} calicoctl ipam release --from-report=report.json ``` 4. Sbloccare l'archivio dati. ```sh {: pre} calicoctl datastore migrate unlock ``` 5. Verificare che tutti gli indirizzi IP inutilizzati siano stati rilasciati. ```sh {: pre} calicoctl ipam check ``` Output di esempio ```sh {: screen} Check complete; found 0 problems. ``` -
Facoltativo: per verificare che l'archivio dati sia stato sbloccato correttamente e che gli indirizzi IP siano ora disponibili per l'assegnazione, creare un pod e verificare che venga avviato correttamente.
- Ad esempio, crea un semplice pod " NGINX ".
oc run test --image=nginx --generator=run-pod/v1 ``` 2. Verifica che il pod abbia un indirizzo IP e che sia in esecuzione correttamente. ```sh {: pre} oc get po test ``` 3. Elimina il pod di test. ```sh {: pre} oc delete pod test ``` -
Continuare con la sezione successiva per verificare la presenza di blocchi di indirizzi IP non utilizzati.
Passo 2: rilascio dei blocchi di indirizzi IP
Successivamente, controlla e ripulisci interi blocchi di indirizzi IP assegnati a un nodo di lavoro ma non utilizzati da tale nodo.
A volte, quando a un nodo di lavoro viene assegnato un secondo o un terzo blocco di indirizzi IP, interi blocchi di indirizzi IP precedentemente utilizzati dal nodo di lavoro potrebbero essere completamente inutilizzati. Inoltre, quando rimuovi
o sostituisci un nodo di lavoro, la ripulitura del blocco di indirizzi IP da parte dell'IPAM Calico potrebbe avere esito negativo a causa della mancanza di un nodo di lavoro per l'esecuzione temporanea di calico-kube-controllers o a causa di problemi con il plug-in CNI o il runtime containerd quando il nodo di lavoro viene rimosso o sostituito.
Assicurarsi che i blocchi IP siano liberi è particolarmente importante per tutti i cluster classici che eseguono Kubernetes versione 1.19 o successiva e tutti i cluster VPC. In questi cluster, l'impostazione strictAffinity Calico
viene impostata su true, che forza un nodo di lavoro a utilizzare gli indirizzi IP che provengono solo dai suoi blocchi IP assegnati, invece di utilizzare gli indirizzi IP dai blocchi assegnati ad altri nodi di lavoro. Nel tempo,
i blocchi assegnati ai nodi ma non utilizzati possono accumulare fino a quando non è possibile assegnare ulteriori blocchi di indirizzi IP ai nodi di lavoro.
-
Attieniti alla procedura per rilasciare singoli indirizzi IP.
-
Scegliere se bloccare l'archivio dati per i record IPAM Calico.
- Se blocchi l'archivio dati, i pod esistenti continuano l'esecuzione, ma tutti i pod creati rimangono nello stato
ContainerCreatinge non possono essere avviati finché non sblocchi l'archivio dati. Questo blocco dell'archivio dati garantisce che i pod non possano essere creati dopo aver controllato i blocchi inutilizzati, ma prima di rilasciare i blocchi. - Se non blocchi l'archivio dati, devi immediatamente verificare che nessun nuovo pod abbia utilizzato gli indirizzi IP da un blocco rilasciato che hai eliminato.
calicoctl datastore migrate lock - Se blocchi l'archivio dati, i pod esistenti continuano l'esecuzione, ma tutti i pod creati rimangono nello stato
-
Elenca i record IPAM Calico. Nell'output, cerca i blocchi che hanno 0
IPS IN USE, che indica che il blocco non viene utilizzato dal suo nodo di lavoro assegnato.calicoctl ipam show --show-blocksIn questo output di esempio, il blocco
172.24.10.64/26non ha indirizzi IP in uso.... Block | 172.24.10.64/26 | 64 | 0 (0%) | 64 (100%) | ... -
Per ciascuno di questi blocchi, completare la seguente procedura per rilasciare il blocco.
- Verifica che nessun pod attualmente utilizzi un indirizzo IP dal blocco.
oc get pods -A ``` 2. Ottieni il `BlockAffinity` per il blocco. Sostituire i punti e le barre nel blocco con trattini (-). Ad esempio, per il blocco `172.24.10.64/26`, il formato per il comando seguente è `172-24-10-64-26`. ```sh {: pre} oc get blockaffinity | grep <block> ``` 3. Eliminare il `BlockAffinity`. ```sh {: pre} oc delete blockaffinity <block_affinity> ``` 4. Ottieni il `IPAMBlock` per il blocco. Sostituire i punti e le barre nel blocco con trattini (-). Ad esempio, per il blocco `172.24.10.64/26`, il formato per il comando seguente è `172-24-10-64-26`. ```sh {: pre} oc get ipamblock | grep <block> ``` 5. Eliminare il `IPAMBlock`. ```sh {: pre} oc delete ipamblock <ipam_block> ``` 6. Se non hai bloccato l'archivio dati nel passo 2: controlla che nessun pod sia stato creato direttamente prima di eliminare `BlockAffinity` e `IPAMBlock`. Se i pod sono stati creati, devi eliminare nuovamente `BlockAffinity` e `IPAMBlock` per questo blocco. Quindi, elimina tutti i pod che utilizzano un indirizzo IP in questo blocco eseguendo `oc delete pod <pod>` in modo che il pod venga ricreato con un indirizzo IP da un blocco diverso. ```sh {: pre} oc get pods -A ``` 7. Ripeti questi passaggi per tutti gli altri blocchi che presentano un valore pari a 0 `IPS IN USE`. -
Se l'archivio dati è stato bloccato nel passo 2: sbloccare l'archivio dati.
calicoctl datastore migrate unlock