Concetti Kubernetes - Amazon EKS

Aiutaci a migliorare questa pagina

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Concetti Kubernetes

Amazon Elastic Kubernetes Service (EKSAmazon) AWS è un servizio gestito basato sul progetto open source. Kubernetes Sebbene ci siano cose che devi sapere su come il EKS servizio Amazon si integra con il AWS cloud (in particolare quando crei per la prima volta un EKS cluster Amazon), una volta che è attivo e funzionante, puoi utilizzare il tuo EKS cluster Amazon più o meno allo stesso modo di qualsiasi altro Kubernetes cluster. Quindi, per iniziare a gestire Kubernetes i cluster e distribuire carichi di lavoro, è necessaria almeno una conoscenza di base dei concetti. Kubernetes

Questa pagina divide Kubernetes i concetti in tre sezioni:Perché Kubernetes?, e. Cluster Carichi di lavoro La prima sezione descrive il valore dell'esecuzione di un Kubernetes servizio, in particolare come servizio gestito come AmazonEKS. La sezione Carichi di lavoro illustra come Kubernetes le applicazioni vengono create, archiviate, eseguite e gestite. La sezione Cluster illustra i diversi componenti che compongono i Kubernetes cluster e le responsabilità dell'utente per la creazione e la manutenzione dei cluster. Kubernetes

Durante la lettura di questo contenuto, i link ti condurranno a ulteriori descrizioni dei Kubernetes concetti sia in Amazon EKS che nella Kubernetes documentazione, nel caso in cui desideri approfondire uno degli argomenti che trattiamo qui. Per dettagli su come Amazon EKS implementa il piano di Kubernetes controllo e le funzionalità di calcolo, consulta. EKSArchitettura Amazon

Perché Kubernetes?

Kubernetesè stato progettato per migliorare la disponibilità e la scalabilità durante l'esecuzione di applicazioni containerizzate di importanza critica e di qualità produttiva. Anziché essere eseguito solo Kubernetes su una singola macchina (sebbene ciò sia possibile), Kubernetes raggiunge questi obiettivi consentendoti di eseguire applicazioni su set di computer che possono espandersi o contrarsi per soddisfare la domanda. Kubernetesinclude funzionalità che semplificano le seguenti operazioni:

  • Distribuisci le applicazioni su più macchine (utilizzando contenitori distribuiti nei pod)

  • Monitora lo stato dei container e riavvia i container guasti

  • Aumenta e riduci i contenitori in base al carico

  • Aggiorna i contenitori con nuove versioni

  • Alloca le risorse tra i contenitori

  • Bilancia il traffico tra le macchine

L'Kubernetesautomazione di questi tipi di attività complesse consente a uno sviluppatore di applicazioni di concentrarsi sulla creazione e sul miglioramento dei carichi di lavoro delle applicazioni, anziché preoccuparsi dell'infrastruttura. Lo sviluppatore in genere crea file di configurazione, formattati come YAML file, che descrivono lo stato desiderato dell'applicazione. Ciò potrebbe includere i contenitori da eseguire, i limiti delle risorse, il numero di repliche dei Pod, l'allocazione di CPU /memoria, le regole di affinità e altro ancora.

Attributi di Kubernetes

Per raggiungere i suoi obiettivi, Kubernetes ha le seguenti caratteristiche:

  • Containerizzato: Kubernetes è uno strumento di orchestrazione dei container. Per utilizzarloKubernetes, devi prima avere le tue applicazioni containerizzate. A seconda del tipo di applicazione, potrebbe trattarsi di un insieme di microservizi, di processi in batch o in altre forme. Le applicazioni possono quindi trarre vantaggio da un Kubernetes flusso di lavoro che comprende un enorme ecosistema di strumenti, in cui i contenitori possono essere archiviati come immagini in un registro di contenitori, distribuiti in un Kubernetescluster ed eseguiti su un nodo disponibile. È possibile creare e testare singoli contenitori sul computer locale utilizzando Docker o un altro container runtime, prima di distribuirli nel cluster. Kubernetes

  • Scalabile: se la richiesta delle applicazioni supera la capacità delle istanze in esecuzione di tali applicazioni, Kubernetes è in grado di scalare verso l'alto. Se necessario, Kubernetes è in grado di stabilire se le applicazioni richiedono più CPU memoria e rispondere espandendo automaticamente la capacità disponibile o utilizzando una maggiore capacità esistente. La scalabilità può essere eseguita a livello di Pod, se è disponibile una quantità di calcolo sufficiente per eseguire solo più istanze dell'applicazione (scalabilità automatica orizzontale dei Pod), oppure a livello di nodo, se è necessario attivare più nodi per gestire l'aumento della capacità (Cluster Autoscaler o Karpenter). Poiché la capacità non è più necessaria, questi servizi possono eliminare i Pod non necessari e chiudere i nodi non necessari.

  • Disponibile: se un'applicazione o un nodo non sono integri o non sono disponibili, Kubernetes possono spostare i carichi di lavoro in esecuzione su un altro nodo disponibile. Puoi forzare il problema semplicemente eliminando un'istanza in esecuzione di un carico di lavoro o di un nodo che esegue i tuoi carichi di lavoro. La conclusione è che i carichi di lavoro possono essere trasferiti in altre posizioni se non possono più essere eseguiti dove si trovano.

  • Dichiarativo: Kubernetes utilizza la riconciliazione attiva per verificare costantemente che lo stato dichiarato per il cluster corrisponda allo stato effettivo. Applicando Kubernetesoggetti a un cluster, in genere tramite file YAML di configurazione formattati, puoi, ad esempio, chiedere di avviare i carichi di lavoro che desideri eseguire sul cluster. Successivamente puoi modificare le configurazioni per fare qualcosa come utilizzare una versione successiva di un contenitore o allocare più memoria. Kubernetesfarà ciò che deve fare per stabilire lo stato desiderato. Ciò può includere l'attivazione o la disattivazione dei nodi, l'arresto e il riavvio dei carichi di lavoro o l'estrazione di contenitori aggiornati.

  • Componibile: poiché un'applicazione è in genere composta da più componenti, è necessario essere in grado di gestire insieme un insieme di questi componenti (spesso rappresentati da più contenitori). Sebbene Docker Compose offra un modo per farlo direttamente conDocker, il comando Kubernetes Kompose può aiutarti a farlo con. Kubernetes Vedi Translate a Docker Compose File to Kubernetes Resources per un esempio di come eseguire questa operazione.

  • Estensibile: a differenza del software proprietario, il Kubernetes progetto open source è progettato per essere aperto all'utente e può essere esteso in Kubernetes qualsiasi modo si desideri per soddisfare le proprie esigenze. APIse i file di configurazione sono suscettibili di modifiche dirette. Le terze parti sono incoraggiate a scrivere i propri controller, per estendere sia l'infrastruttura che le funzionalità dell'utente finale. Kubernetes I webhook consentono di configurare le regole dei cluster per applicare le politiche e adattarsi alle mutevoli condizioni. Per altre idee su come estendere i Kubernetes cluster, consulta Extending. Kubernetes

  • Portatile: molte organizzazioni hanno standardizzato le proprie operazioni Kubernetes perché ciò consente loro di gestire tutte le esigenze applicative nello stesso modo. Gli sviluppatori possono utilizzare le stesse pipeline per creare e archiviare applicazioni containerizzate. Queste applicazioni possono quindi essere distribuite in Kubernetes cluster in esecuzione in locale, nel cloud, sui point-of-sales terminali dei ristoranti o su IOT dispositivi distribuiti tra i siti remoti dell'azienda. La sua natura open source consente alle persone di sviluppare queste Kubernetes distribuzioni speciali, insieme agli strumenti necessari per gestirle.

Gestione di Kubernetes

Kubernetesil codice sorgente è disponibile gratuitamente, quindi con le proprie apparecchiature è possibile installarlo e gestirlo Kubernetes autonomamente. Tuttavia, l'autogestione Kubernetes richiede una profonda esperienza operativa e richiede tempo e impegno per la manutenzione. Per questi motivi, la maggior parte delle persone che implementano carichi di lavoro di produzione sceglie un provider cloud (come AmazonEKS) o un provider locale (come Amazon EKS Anywhere) con la propria Kubernetes distribuzione testata e il supporto di esperti. Kubernetes Ciò consente di alleggerire gran parte del carico di lavoro indifferenziato necessario per la manutenzione dei cluster, tra cui:

  • Hardware: se non disponi di hardware disponibile Kubernetes per l'esecuzione in base alle tue esigenze, un provider di servizi cloud come AWS Amazon EKS può farti risparmiare sui costi iniziali. Con AmazonEKS, ciò significa che puoi utilizzare le migliori risorse cloud offerte da AWS, tra cui istanze di computer (Amazon Elastic Compute Cloud), il tuo ambiente privato (AmazonVPC), la gestione centralizzata di identità e autorizzazioni (IAM) e lo storage (Amazon). EBS AWS gestisce i computer, le reti, i data center e tutti gli altri componenti fisici necessari per l'esecuzione. Kubernetes Allo stesso modo, non è necessario pianificare il data center per gestire la capacità massima nei giorni di maggiore richiesta. Per Amazon EKS Anywhere o altri Kubernetes cluster locali, sei responsabile della gestione dell'infrastruttura utilizzata nelle tue Kubernetes distribuzioni, ma puoi comunque contare su di te AWS per tenerti Kubernetes aggiornato.

  • Gestione del piano di controllo: Amazon EKS gestisce la sicurezza e la disponibilità del piano di Kubernetes controllo AWS ospitato, che è responsabile della pianificazione dei container, della gestione della disponibilità delle applicazioni e di altre attività chiave, in modo che tu possa concentrarti sui carichi di lavoro delle applicazioni. In caso di guasto del cluster, AWS dovresti disporre dei mezzi per ripristinarlo in uno stato di esecuzione. Per Amazon EKS Anywhere, gestiresti tu stesso il piano di controllo.

  • Upgrade testati: quando aggiorni i tuoi cluster, puoi fare affidamento su Amazon o EKS Amazon EKS Anywhere per fornire versioni testate delle loro Kubernetes distribuzioni.

  • Componenti aggiuntivi: esistono centinaia di progetti progettati per estenderli e utilizzarli, Kubernetes che puoi aggiungere all'infrastruttura del cluster o utilizzare per facilitare l'esecuzione dei tuoi carichi di lavoro. Invece di creare e gestire autonomamente questi componenti aggiuntivi, AWS fornisce EKScomponenti aggiuntivi Amazon che puoi utilizzare con i tuoi cluster. Amazon EKS Anywhere fornisce pacchetti curati che includono versioni di molti progetti open source popolari. Quindi non è necessario creare il software da soli o gestire patch di sicurezza, correzioni di bug o aggiornamenti critici. Allo stesso modo, se le impostazioni predefinite soddisfano le vostre esigenze, è normale che sia necessaria una configurazione minima di tali componenti aggiuntivi. Vedi Extend Clusters per i dettagli sull'estensione del cluster con componenti aggiuntivi.

Kubernetesin azione

Il diagramma seguente mostra le attività chiave che potresti svolgere come Kubernetes amministratore o sviluppatore di applicazioni per creare e utilizzare un Kubernetes cluster. Nel processo, illustra come i Kubernetes componenti interagiscono tra loro, utilizzando il AWS cloud come esempio del provider cloud sottostante.

Un Kubernetes cluster in azione.

Un Kubernetes amministratore crea il Kubernetes cluster utilizzando uno strumento specifico per il tipo di provider su cui verrà creato il cluster. Questo esempio utilizza il AWS cloud come provider, che offre il Kubernetes servizio gestito chiamato AmazonEKS. Il servizio gestito alloca automaticamente le risorse necessarie per creare il cluster, inclusa la creazione di due nuovi Virtual Private Cloud (AmazonVPCs) per il cluster, la configurazione della rete, la mappatura Kubernetes delle autorizzazioni per la gestione degli asset nel cloud, la verifica che i servizi del piano di controllo abbiano aree in cui eseguire e l'allocazione di zero o più EC2 istanze Amazon come Kubernetes nodi per l'esecuzione dei carichi di lavoro. AWS gestisce un Amazon VPC stesso per il piano di controllo, mentre l'altro Amazon VPC contiene i nodi cliente che eseguono i carichi di lavoro.

Molte delle attività future dell'Kubernetesamministratore vengono eseguite utilizzando Kubernetes strumenti comekubectl. Questo strumento invia le richieste di servizi direttamente al piano di controllo del cluster. I modi in cui le interrogazioni e le modifiche vengono apportate al cluster sono quindi molto simili a quelli in cui le eseguiresti su qualsiasi Kubernetes cluster.

Uno sviluppatore di applicazioni che desidera distribuire carichi di lavoro in questo cluster può eseguire diverse attività. Lo sviluppatore deve creare l'applicazione in una o più immagini di container, quindi inviarle a un registro di container accessibile al cluster. Kubernetes AWS offre l'Amazon Elastic Container Registry (AmazonECR) a tale scopo.

Per eseguire l'applicazione, lo sviluppatore può creare file YAML di configurazione in formato standard che indicano al cluster come eseguire l'applicazione, inclusi i contenitori da estrarre dal registro e come avvolgerli in Pods. Il piano di controllo (scheduler) pianifica i contenitori su uno o più nodi e il runtime del contenitore su ciascun nodo recupera ed esegue effettivamente i contenitori necessari. Lo sviluppatore può anche configurare un sistema di bilanciamento del carico delle applicazioni per bilanciare il traffico verso i container disponibili in esecuzione su ciascun nodo ed esporre l'applicazione al mondo esterno in modo che sia disponibile su una rete pubblica. Fatto ciò, qualcuno che desidera utilizzare l'applicazione può connettersi all'endpoint dell'applicazione per accedervi.

La sezione seguente illustra i dettagli di ciascuna di queste funzionalità, dal punto di vista dei Kubernetes cluster e dei carichi di lavoro.

Cluster

Se il tuo compito è avviare e gestire Kubernetes i cluster, dovresti sapere come i Kubernetes cluster vengono creati, migliorati, gestiti ed eliminati. È inoltre necessario sapere quali sono i componenti che costituiscono un cluster e cosa è necessario fare per mantenerli.

Gli strumenti per la gestione dei cluster gestiscono la sovrapposizione tra i Kubernetes servizi e il provider hardware sottostante. Per questo motivo, l'automazione di queste attività tende ad essere eseguita dal Kubernetes provider (come Amazon EKS o Amazon EKS Anywhere) utilizzando strumenti specifici per il provider. Ad esempio, puoi usare per avviare un EKS cluster Amazoneksctl create cluster, mentre per Amazon EKS Anywhere puoi usarloeksctl anywhere create cluster. Tieni presente che, sebbene questi comandi creino un Kubernetes cluster, sono specifici del provider e non fanno parte del Kubernetes progetto stesso.

Strumenti per la creazione e la gestione dei cluster

Il Kubernetes progetto offre strumenti per la creazione manuale di un Kubernetes cluster. Quindi, se desideri eseguire l'installazione Kubernetes su una singola macchina o eseguire il piano di controllo su una macchina e aggiungere nodi manualmente, puoi usare CLI strumenti come kind, minikube o kubeadm elencati in Strumenti di installazione. Kubernetes Per semplificare e automatizzare l'intero ciclo di vita della creazione e della gestione dei cluster, è molto più semplice utilizzare strumenti supportati da un Kubernetes provider affermato, come Amazon o EKS Amazon Anywhere. EKS

Nel AWS cloud, puoi creare EKS cluster Amazon utilizzando CLI strumenti come eksctl o strumenti più dichiarativi, come Terraform (vedi EKSAmazon Blueprints for Terraform). Puoi anche creare un cluster dalla console di gestione. AWS Consulta EKSle funzionalità di Amazon per un elenco di ciò che ottieni con AmazonEKS. Kubernetesle responsabilità che Amazon EKS si assume per te includono:

Per eseguire i cluster su computer e reti locali, Amazon offre Amazon EKS Anywhere. Invece che il AWS Cloud sia il provider, puoi scegliere di eseguire Amazon EKS Anywhere su VMWarevSpherepiattaforme bare metal (provider Tinkerbell) CloudStack, Snow o Nutanix utilizzando le tue apparecchiature.

Amazon EKS Anywhere si basa sullo stesso software Amazon EKS Distro utilizzato da AmazonEKS. Tuttavia, Amazon EKS Anywhere si affida a diverse implementazioni dell'interfaccia KubernetesCluster API (CAPI) per gestire l'intero ciclo di vita delle macchine in un cluster Amazon EKS Anywhere (ad esempio for e CAPVfor vSphere ). CAPC CloudStack Poiché l'intero cluster funziona sulle vostre apparecchiature, vi assumete la responsabilità aggiuntiva della gestione del piano di controllo e del backup dei dati (vedi etcd più avanti in questo documento).

Componenti del cluster

Kubernetesi componenti del cluster sono suddivisi in due aree principali: piano di controllo e nodi di lavoro. I componenti Control Plane gestiscono il cluster e forniscono l'accesso al relativoAPIs. I nodi di lavoro (a volte denominati semplicemente nodi) forniscono i luoghi in cui vengono eseguiti i carichi di lavoro effettivi. I componenti del nodo sono costituiti da servizi eseguiti su ciascun nodo per comunicare con il piano di controllo ed eseguire i contenitori. Il set di nodi di lavoro per il cluster è denominato Data Plane.

Piano di controllo (control-plane)

Il piano di controllo è costituito da un insieme di servizi che gestiscono il cluster. Questi servizi possono essere eseguiti tutti su un singolo computer o possono essere distribuiti su più computer. Internamente, queste sono denominate Control Plane Instances ()CPIs. La modalità di CPIs esecuzione dipende dalle dimensioni del cluster e dai requisiti di elevata disponibilità. Con l'aumento della domanda nel cluster, un servizio del piano di controllo può scalare per fornire più istanze di quel servizio, con il bilanciamento del carico delle richieste tra le istanze.

Le attività eseguite dai componenti del piano di Kubernetes controllo includono:

  • Comunicazione con i componenti del cluster (APIserver): il API server (kube-apiserver) espone il sistema in Kubernetes API modo che le richieste al cluster possano essere effettuate sia dall'interno che dall'esterno del cluster. In altre parole, le richieste di aggiunta o modifica degli oggetti di un cluster (Pods, Services, Nodes e così via) possono provenire da comandi esterni, come le richieste di esecuzione di un Pod. kubectl Allo stesso modo, è possibile effettuare richieste dal API server ai componenti all'interno del cluster, ad esempio una richiesta al kubelet servizio per lo stato di un Pod.

  • Archivia dati sul cluster (etcdkey value store): il etcd servizio svolge il ruolo fondamentale di tenere traccia dello stato attuale del cluster. Se il etcd servizio diventasse inaccessibile, non sarebbe possibile aggiornare o interrogare lo stato del cluster, anche se i carichi di lavoro continuerebbero a funzionare per un po'. Per questo motivo, i cluster critici in genere dispongono di più istanze del etcd servizio con bilanciamento del carico in esecuzione contemporaneamente ed eseguono backup periodici del etcd Key Value Store in caso di perdita o danneggiamento dei dati. Tieni presente che, in AmazonEKS, tutto questo viene gestito automaticamente per te per impostazione predefinita. Amazon EKS Anywhere fornisce istruzioni per il backup e il ripristino di etcd. Consulta il modello di etcd dati per scoprire come etcd gestisce i dati.

  • Schedule Pods to nodes (Scheduler): le richieste di avvio o arresto di un Pod in Kubernetes vengono indirizzate allo KubernetesScheduler (kube-scheduler). Poiché un cluster può avere più nodi in grado di eseguire il Pod, spetta allo Scheduler scegliere su quale nodo (o nodi, nel caso delle repliche) eseguire il Pod. Se la capacità disponibile non è sufficiente per eseguire il Pod richiesto su un nodo esistente, la richiesta avrà esito negativo, a meno che non siano state prese altre disposizioni. Tali disposizioni potrebbero includere l'abilitazione di servizi come Managed Node Groups o Karpenter in grado di avviare automaticamente nuovi nodi per gestire i carichi di lavoro.

  • Mantieni i componenti nello stato desiderato (Controller Manager): Kubernetes Controller Manager viene eseguito come processo daemon (kube-controller-manager) per monitorare lo stato del cluster e apportare modifiche al cluster per ristabilire gli stati previsti. In particolare, esistono diversi controller che controllano diversi Kubernetes oggetti, tra cui astatefulset-controller, endpoint-controllercronjob-controller, node-controller e altri.

  • Gestione delle risorse cloud (Cloud Controller Manager): le interazioni tra Kubernetes e il provider cloud che esegue le richieste per le risorse del data center sottostanti vengono gestite da Cloud Controller Manager () cloud-controller-manager. I controller gestiti da Cloud Controller Manager possono includere un controller di percorso (per configurare i percorsi di rete cloud), un controller di servizio (per l'utilizzo dei servizi di bilanciamento del carico nel cloud) e un controller del ciclo di vita dei nodi (per mantenere i nodi sincronizzati con Kubernetes per tutto il loro ciclo di vita).

Worker Nodes (piano dati)

Per un Kubernetes cluster a nodo singolo, i carichi di lavoro vengono eseguiti sulla stessa macchina del piano di controllo. Tuttavia, una configurazione più normale consiste nell'avere uno o più sistemi informatici separati (nodi) dedicati all'esecuzione Kubernetes dei carichi di lavoro.

Quando si crea un Kubernetes cluster per la prima volta, alcuni strumenti per la creazione di cluster consentono di configurare un certo numero di nodi da aggiungere al cluster (identificando i sistemi informatici esistenti o chiedendo al provider di crearne di nuovi). Prima di aggiungere qualsiasi carico di lavoro a tali sistemi, vengono aggiunti servizi a ciascun nodo per implementare queste funzionalità:

  • Gestisci ogni nodo (kubelet): il API server comunica con il servizio kubelet in esecuzione su ciascun nodo per assicurarsi che il nodo sia registrato correttamente e che i Pod richiesti dallo Scheduler siano in esecuzione. Il kubelet può leggere i manifest dei Pod e configurare volumi di archiviazione o altre funzionalità necessarie ai Pod sul sistema locale. Può anche verificare lo stato dei container in esecuzione localmente.

  • Esegui contenitori su un nodo (runtime del contenitore): il Container Runtime su ciascun nodo gestisce i contenitori richiesti per ogni Pod assegnato al nodo. Ciò significa che può estrarre le immagini del contenitore dal registro appropriato, eseguire il contenitore, interromperlo e rispondere alle domande sul contenitore. Il runtime predefinito del contenitore è containerd. A partire dalla Kubernetes 1.24, la speciale integrazione di Docker (dockershim) che poteva essere utilizzata come runtime del contenitore è stata eliminata. Kubernetes Sebbene sia ancora possibile Docker utilizzarlo per testare ed eseguire contenitori sul sistema locale, per utilizzarlo Docker con ora Kubernetes è necessario installare Docker Engine su ciascun nodo con Kubernetes cui utilizzarlo.

  • Gestione della rete tra contenitori (kube-proxy): per poter supportare la comunicazione tra Pod tramite i Servizi, era Kubernetes necessario un modo per configurare le reti Pod per tenere traccia degli indirizzi IP e delle porte associate a tali Pod. Il servizio kube-proxy funziona su ogni nodo per consentire la comunicazione tra i Pod.

Estendi i cluster

È possibile aggiungere alcuni servizi per Kubernetes supportare il cluster, ma non vengono eseguiti nel piano di controllo. Questi servizi spesso vengono eseguiti direttamente sui nodi dello spazio dei nomi del sistema kube o nel relativo spazio dei nomi (come spesso accade con fornitori di servizi di terze parti). Un esempio comune è il DNS servizio Core, che fornisce servizi al cluster. DNS Fai riferimento a Discovering builtin services per informazioni su come vedere quali servizi cluster sono in esecuzione nel sistema kube sul tuo cluster.

Esistono diversi tipi di componenti aggiuntivi che puoi considerare di aggiungere ai tuoi cluster. Per mantenere integri i cluster, puoi aggiungere funzionalità di osservabilità che ti consentono di eseguire operazioni come la registrazione, il controllo e le metriche. Con queste informazioni, puoi risolvere i problemi che si verificano, spesso tramite le stesse interfacce di osservabilità. Esempi di questi tipi di servizi includono Amazon GuardDuty CloudWatch, AWS Distro forOpenTelemetry, Amazon VPC CNI plugin for e KubernetesGrafana Kubernetes Monitoring. Per lo storage, i componenti aggiuntivi di Amazon EKS includono Amazon Elastic Block Store CSI Driver (per aggiungere dispositivi di storage a blocchi), Amazon Elastic File System CSI Driver (per aggiungere storage sul file system) e diversi componenti aggiuntivi di storage di terze parti (come Amazon FSx for NetApp ONTAP CSI driver).

Per un elenco più completo dei EKS componenti aggiuntivi Amazon disponibili, consultaEKSComponenti aggiuntivi Amazon.

Carichi di lavoro

Kubernetesdefinisce un carico di lavoro come «un'applicazione in esecuzione». Kubernetes Tale applicazione può essere costituita da un set di microservizi eseguiti come Containers in Pods oppure può essere eseguita come processo batch o altro tipo di applicazioni. Il compito di Kubernetes è assicurarsi che le richieste effettuate per la configurazione o la distribuzione di tali oggetti vengano eseguite. Chi distribuisce applicazioni dovrebbe imparare come vengono creati i container, come vengono definiti i Pod e quali metodi è possibile utilizzare per distribuirli.

Container

L'elemento più basilare del carico di lavoro di un'applicazione in cui distribuire e gestire è un Pod. Kubernetes Un Pod rappresenta un modo per contenere i componenti di un'applicazione e per definire le specifiche che descrivono gli attributi del Pod. Confrontalo con qualcosa come un pacchetto RPM o Deb, che raggruppa il software per un sistema Linux, ma non funziona di per sé come un'entità.

Poiché il Pod è l'unità dispiegabile più piccola, in genere contiene un singolo contenitore. Tuttavia, in un Pod possono essere presenti più contenitori nei casi in cui i contenitori siano strettamente collegati. Ad esempio, un contenitore di server Web potrebbe essere impacchettato in un Pod con un tipo di contenitore secondario che può fornire la registrazione, il monitoraggio o altri servizi strettamente legati al contenitore del server Web. In questo caso, la presenza nello stesso Pod garantisce che per ogni istanza in esecuzione del Pod, entrambi i contenitori vengano sempre eseguiti sullo stesso nodo. Allo stesso modo, tutti i contenitori in un Pod condividono lo stesso ambiente, con i contenitori in un Pod che funzionano come se si trovassero nello stesso host isolato. L'effetto di ciò è che i contenitori condividono un unico indirizzo IP che fornisce l'accesso al Pod e possono comunicare tra loro come se fossero in esecuzione sul proprio localhost.

Le specifiche del Pod (PodSpec) definiscono lo stato desiderato del Pod. Puoi distribuire un singolo Pod o più Pod utilizzando le risorse del carico di lavoro per gestire i modelli Pod. Le risorse del carico di lavoro includono le implementazioni (per gestire più repliche di pod), StatefulSets(per distribuire pod che devono essere unici, come i pod del database) e DaemonSets(dove un pod deve funzionare continuamente su ogni nodo). Ne parleremo più avanti.

Sebbene un Pod sia l'unità più piccola che installi, un container è l'unità più piccola che costruisci e gestisci.

Contenitori da costruzione

Il Pod è in realtà solo una struttura attorno a uno o più contenitori, con ogni contenitore stesso che contiene il file system, gli eseguibili, i file di configurazione, le librerie e altri componenti per eseguire effettivamente l'applicazione. Poiché una società chiamata Docker Inc. ha reso popolari i contenitori per la prima volta, alcune persone li chiamano Containers. Docker Tuttavia, da allora l'Open Container Initiative ha definito i tempi di esecuzione, le immagini e i metodi di distribuzione dei container per il settore. Aggiungete a ciò il fatto che i container sono stati creati a partire da molte funzionalità Linux esistenti, altri spesso si riferiscono ai OCI contenitori come Containers, Linux Containers o semplicemente Containers.

Quando si crea un contenitore, in genere si inizia con un Docker file (chiamato letteralmente così). All'interno di quel Dockerfile, identifichi:

  • Un'immagine di base: un'immagine contenitore di base è un contenitore che viene in genere creato da una versione minima del file system di un sistema operativo (come Red Hat Enterprise Linux o Ubuntu) o da un sistema minimale migliorato per fornire software per eseguire tipi specifici di applicazioni (come nodejs o app python).

  • Software applicativo: puoi aggiungere il tuo software applicativo al tuo contenitore più o meno nello stesso modo in cui lo aggiungeresti a un sistema Linux. Ad esempio, nel tuo Dockerfile puoi eseguire npm e yarn installare un'applicazione Java o yum dnf installare RPM pacchetti. In altre parole, utilizzando un RUN comando in un Dockerfile, è possibile eseguire qualsiasi comando disponibile nel file system dell'immagine di base per installare software o configurare software all'interno dell'immagine contenitore risultante.

  • Istruzioni: il riferimento a Dockerfile descrive le istruzioni che è possibile aggiungere a un Dockerfile durante la configurazione. Queste includono le istruzioni utilizzate per creare ciò che è contenuto nel contenitore stesso (ADDo nei COPY file dal sistema locale), identificare i comandi da eseguire quando il contenitore viene eseguito (CMDoENTRYPOINT) e connettere il contenitore al sistema su cui viene eseguito (identificando il contenitore da USER eseguire, un locale da montare o le VOLUME porte su cui eseguire). EXPOSE

Sebbene il docker comando e il servizio siano stati tradizionalmente utilizzati per creare contenitori (docker build), altri strumenti disponibili per creare immagini di contenitori includono podmane nerdctl. Vedi Building Better Container Images o Build with Docker per ulteriori informazioni sulla creazione di contenitori.

Conservazione dei contenitori

Dopo aver creato l'immagine del contenitore, puoi archiviarla in un registro di distribuzione dei container sulla tua workstation o in un registro pubblico dei container. L'esecuzione di un registro privato dei contenitori sulla workstation consente di archiviare le immagini dei contenitori localmente, rendendole immediatamente disponibili.

Per archiviare le immagini dei contenitori in modo più pubblico, puoi inviarle a un registro di contenitori pubblico. I registri pubblici dei container forniscono una posizione centrale per l'archiviazione e la distribuzione delle immagini dei container. Esempi di registri di container pubblici includono Amazon Elastic Container Registry, Red Hat Quay registry e Docker Hub registry.

Quando esegui carichi di lavoro containerizzati su Amazon Elastic Kubernetes Service EKS (Amazon), consigliamo di Docker estrarre copie delle immagini ufficiali archiviate in Amazon Elastic Container Registry. AWS Amazon ECR archivia queste immagini dal 2021. Puoi cercare le immagini dei container più popolari nella Amazon ECR Public Gallery e, in particolare, per le immagini Docker Hub, puoi cercare nella Amazon ECR Docker Gallery.

Contenitori funzionanti

Poiché i contenitori sono creati in un formato standard, un contenitore può essere eseguito su qualsiasi macchina in grado di eseguire un runtime di container (ad esempioDocker) e il cui contenuto corrisponda all'architettura della macchina locale (ad esempio x86_64 oarm). Per testare un contenitore o semplicemente eseguirlo sul desktop locale, puoi utilizzare podman run i comandi docker run or per avviare un contenitore sul localhost. TuttaviaKubernetes, ogni nodo di lavoro ha un container runtime distribuito ed è compito di richiedere che un nodo Kubernetes esegua un container.

Una volta che un contenitore è stato assegnato per l'esecuzione su un nodo, il nodo verifica se la versione richiesta dell'immagine del contenitore esiste già sul nodo. In caso contrario, Kubernetes indica al runtime del contenitore di estrarre quel contenitore dal registro dei contenitori appropriato, quindi di eseguirlo localmente. Tieni presente che l'immagine del contenitore si riferisce al pacchetto software che viene spostato tra il laptop, il registro del contenitore e Kubernetes i nodi. Un contenitore si riferisce a un'istanza in esecuzione di quell'immagine.

Cialde

Una volta che i contenitori sono pronti, l'utilizzo dei pod include la configurazione, la distribuzione e l'accessibilità dei pod.

Configurazione dei pod

Quando definisci un Pod, gli assegni una serie di attributi. Questi attributi devono includere almeno il nome del Pod e l'immagine del contenitore da eseguire. Tuttavia, ci sono anche molte altre cose che vuoi configurare con le definizioni dei tuoi Pod (consulta la PodSpecpagina per i dettagli su cosa può essere inserito in un Pod). Ciò include:

  • Archiviazione: quando un contenitore in esecuzione viene interrotto ed eliminato, l'archiviazione dei dati in quel contenitore scompare, a meno che non si configuri uno spazio di archiviazione più permanente. Kubernetessupporta molti tipi di storage diversi e li riassume sotto l'egida di Volumes. I tipi di storage includono CephFS NFS, i e altri. SCSI È anche possibile utilizzare un dispositivo a blocchi locale dal computer locale. Con uno di questi tipi di archiviazione disponibili nel cluster, è possibile montare il volume di archiviazione su un punto di montaggio selezionato nel file system del contenitore. Un volume persistente è quello che continua a esistere dopo l'eliminazione del Pod, mentre un volume temporaneo viene eliminato quando il Pod viene eliminato. Se l'amministratore del cluster ne ha creati diversi StorageClassesper il cluster, potreste avere la possibilità di scegliere gli attributi dello storage da utilizzare, ad esempio se il volume viene eliminato o recuperato dopo l'uso, se si espanderà se è necessario più spazio e anche se soddisfa determinati requisiti di prestazioni.

  • Segreti: rendendo disponibili Secrets ai contenitori nelle specifiche di Pod, puoi fornire le autorizzazioni necessarie a tali contenitori per accedere a file system, database o altre risorse protette. Chiavi, password e token sono tra gli elementi che possono essere archiviati come segreti. L'uso dei segreti consente di non dover memorizzare queste informazioni nelle immagini dei contenitori, ma è sufficiente rendere i segreti disponibili ai contenitori in esecuzione. Simili a Secrets lo sono ConfigMaps. A ConfigMap tende a contenere informazioni meno critiche, come coppie chiave-valore per la configurazione di un servizio.

  • Risorse del contenitore: gli oggetti per un'ulteriore configurazione dei contenitori possono assumere la forma di configurazione delle risorse. Per ogni contenitore, puoi richiedere la quantità di memoria CPU che può utilizzare, nonché porre limiti alla quantità totale di tali risorse che il contenitore può utilizzare. Vedi Gestione delle risorse per pod e contenitori per esempi.

  • Interruzioni: i pod possono essere interrotti involontariamente (un nodo non funziona) o volontariamente (è necessario un aggiornamento). Configurando un budget per le interruzioni dei Pod, puoi esercitare un certo controllo sulla disponibilità dell'applicazione in caso di interruzioni. Per alcuni esempi, vedi Specificazione di un budget per le interruzioni per la tua applicazione.

  • Namespace: Kubernetes offre diversi modi per isolare Kubernetes componenti e carichi di lavoro l'uno dall'altro. L'esecuzione di tutti i Pod per una particolare applicazione nello stesso namespace è un modo comune per proteggere e gestire tali Pod insieme. È possibile creare spazi dei nomi personalizzati da utilizzare o scegliere di non indicare uno spazio dei nomi (il che comporta l'utilizzo dello spazio dei nomi). Kubernetes default Kubernetesi componenti del piano di controllo in genere vengono eseguiti nello spazio dei nomi. kube-system

La configurazione appena descritta viene in genere raccolta in un YAML file da applicare al Kubernetes cluster. Per Kubernetes i cluster personali, è sufficiente archiviare questi YAML file sul sistema locale. Tuttavia, con cluster e carichi di lavoro più critici, GitOpsè un modo popolare per automatizzare lo storage e gli aggiornamenti sia del carico di lavoro che delle risorse dell'infrastruttura. Kubernetes

Gli oggetti utilizzati per raccogliere e distribuire le informazioni sui Pod sono definiti da uno dei seguenti metodi di distribuzione.

Implementazione di pod

Il metodo da scegliere per distribuire i Pod dipende dal tipo di applicazione che intendi eseguire con tali Pod. Ecco alcune delle tue scelte:

  • Applicazioni stateless: un'applicazione stateless non salva i dati della sessione di un client, quindi un'altra sessione non deve fare riferimento a ciò che è accaduto a una sessione precedente. In questo modo è più semplice sostituire i Pod con altri nuovi se non funzionano bene o spostarli senza salvarne lo stato. Se stai eseguendo un'applicazione stateless (come un server web), puoi utilizzare un Deployment per distribuire Pods e. ReplicaSets A ReplicaSet definisce quante istanze di un Pod vuoi che vengano eseguite contemporaneamente. Sebbene sia possibile eseguire ReplicaSet direttamente un Pod, è normale eseguire le repliche direttamente all'interno di un Deployment, per definire quante repliche di un Pod devono essere eseguite contemporaneamente.

  • Applicazioni con stato: un'applicazione con stato è un'applicazione in cui l'identità del Pod e l'ordine in cui i Pod vengono avviati sono importanti. Queste applicazioni necessitano di uno storage persistente che sia stabile e che debba essere distribuito e scalato in modo coerente. Per distribuire un'applicazione stateful inKubernetes, puoi usare. StatefulSets Un esempio di applicazione che in genere viene eseguita come un database StatefulSet . All'interno di a StatefulSet, è possibile definire le repliche, il Pod e i relativi contenitori, i volumi di archiviazione da montare e le posizioni nel contenitore in cui vengono archiviati i dati. Vedi Run a Replicated Stateful Application per un esempio di database distribuito come. ReplicaSet

  • Applicazioni per nodo: a volte è necessario eseguire un'applicazione su ogni nodo del cluster. Kubernetes Ad esempio, il data center potrebbe richiedere che ogni computer esegua un'applicazione di monitoraggio o un particolare servizio di accesso remoto. Ad Kubernetes esempio, è possibile utilizzare DaemonSeta per garantire che l'applicazione selezionata venga eseguita su ogni nodo del cluster.

  • Le applicazioni vengono eseguite fino al completamento: ci sono alcune applicazioni che si desidera eseguire per completare una determinata attività. Ciò potrebbe includere uno che esegue report mensili sullo stato o elimina i vecchi dati. Un oggetto Job può essere utilizzato per configurare un'applicazione per l'avvio e l'esecuzione, quindi uscire al termine dell'attività. Un CronJoboggetto consente di configurare un'applicazione in modo che venga eseguita a un'ora, un minuto, un giorno del mese, del mese o del giorno della settimana specifici, utilizzando una struttura definita dal crontabformato Linux.

Rendere le applicazioni accessibili dalla rete

Poiché le applicazioni venivano spesso distribuite come un insieme di microservizi che si spostavano in luoghi diversi, Kubernetes era necessario trovare un modo per consentire a tali microservizi di trovarsi l'un l'altro. Inoltre, per consentire ad altri utenti di accedere a un'applicazione esterna al Kubernetes cluster, Kubernetes era necessario un modo per esporre tale applicazione su indirizzi e porte esterni. Queste funzionalità relative alla rete vengono eseguite rispettivamente con oggetti Service e Ingress:

  • Servizi: poiché un Pod può spostarsi su nodi e indirizzi diversi, un altro Pod che deve comunicare con il primo Pod potrebbe avere difficoltà a trovare dove si trova. Per risolvere questo problema, Kubernetes consente di rappresentare un'applicazione come servizio. Con un servizio, è possibile identificare un Pod o un set di Pod con un nome particolare, quindi indicare quale porta espone il servizio di quell'applicazione dal Pod e quali porte potrebbe utilizzare un'altra applicazione per contattare quel servizio. Un altro Pod all'interno di un cluster può semplicemente richiedere un servizio per nome e Kubernetes indirizzare la richiesta alla porta appropriata per un'istanza del Pod che esegue quel servizio.

  • Ingress: Ingress è ciò che può rendere disponibili le applicazioni rappresentate dai Kubernetes Servizi ai client che si trovano all'esterno del cluster. Le funzionalità di base di Ingress includono un bilanciamento del carico (gestito da Ingress), il controller Ingress e regole per il routing delle richieste dal controller al Servizio. Esistono diversi controller di ingresso tra cui scegliere. Kubernetes

Passaggi successivi

Comprendere Kubernetes i concetti di base e il modo in cui si relazionano ad Amazon ti EKS aiuterà a navigare nella EKS documentazione e nella Kubernetesdocumentazione di Amazon per trovare le informazioni necessarie per gestire EKS i cluster Amazon e distribuire carichi di lavoro su tali cluster. Per iniziare a utilizzare AmazonEKS, scegli tra le seguenti opzioni: