Concetti su Kubernetes Engine (OKE) e Kubernetes

Scopri i concetti chiave che devi comprendere prima di utilizzare Kubernetes Engine (OKE).

Questo argomento descrive i concetti chiave che è necessario comprendere quando si utilizza OKE.

Motore Kubernetes (OKE)

OKE è un servizio completamente gestito, scalabile e ad alta disponibilità per la distribuzione di applicazioni containerizzate nel cloud utilizzando Kubernetes. Utilizza OKE quando il tuo team di sviluppo desidera creare, distribuire e gestire in modo affidabile applicazioni cloud native. Puoi scegliere di eseguire le applicazioni su nodi virtuali, nodi gestiti o nodi autogestiti e OKE le esegue il provisioning in una tenancy OCI esistente.

OKE utilizza versioni di Kubernetes certificate come conformi da Cloud Native Computing Foundation (CNCF). OKE è conforme allo standard ISO (ISO-IEC 27001, 27017, 27018).

Kubernetes

Kubernetes è il sistema open source per automatizzare l'implementazione, la scalabilità e la gestione di applicazioni containerizzate tra cluster di host. Gli host (o i nodi) in un cluster lavorano insieme per eseguire carichi di lavoro containerizzati.

Kubernetes gestisce e pianifica i container su questi nodi. Organizza i container in unità logiche chiamate pod, che vengono implementate e ridimensionate in base ai requisiti dell'applicazione. I pod semplificano la gestione, il networking e la ricerca automatica dei servizi, semplificando la creazione e la gestione di applicazioni complesse e distribuite con Kubernetes.

Cluster Kubernetes

Un cluster Kubernetes è un gruppo di nodi (macchine che eseguono applicazioni). Ogni nodo può essere una macchina fisica o una macchina virtuale. La capacità del nodo (numero di CPU e quantità di memoria) viene definita quando il nodo viene creato. Un cluster comprende:

  • Nodi del piano di controllo (precedentemente denominati "nodi principali"). In genere, ci saranno tre nodi del piano di controllo per l'alta disponibilità.
  • Nodi di lavoro organizzati in pool di nodi.

Quando si crea un cluster utilizzando OKE, è possibile creare il nuovo cluster come cluster di base o come cluster avanzato.

Cluster e cluster di base avanzati

Quando si crea un nuovo cluster con OKE, si specifica il tipo di cluster da creare. È possibile specificare quanto riportato di seguito.

  • Cluster avanzato: i cluster avanzati supportano tutte le funzioni disponibili, tra cui nodi virtuali, gestione dei componenti aggiuntivi del cluster, identità del carico di lavoro e nodi di lavoro aggiuntivi per cluster. I cluster migliorati sono dotati di un accordo sul livello di servizio (SLA) sostenuto finanziariamente.
  • Cluster di base: i cluster di base supportano tutte le funzionalità di base fornite da Kubernetes e OKE. I cluster di base sono dotati di un obiettivo del livello di servizio (SLO), ma non di un accordo sul livello di servizio (SLA) sostenuto finanziariamente.

La tabella seguente riassume le somiglianze e le differenze tra cluster avanzati e cluster di base:

Caratteristica/capacità Cluster avanzato Cluster di base
Supporta tutte le funzionalità principali di Kubernetes e OKE
Pool di nodi gestiti supportati
Pool di nodi virtuali supportati N
Nodi autogestiti supportati N
Ciclo dei nodi (cordonatura automatica, drenaggio e sostituzione dei nodi) per aggiornamenti/aggiornamenti N
Configurazione sicurezza contenitore Cloud Guard N
Componenti aggiuntivi per cluster flessibili e gestiti N
Distribuzione/configurazione di componenti aggiuntivi con filtro N
Può gestire componenti aggiuntivi essenziali e opzionali nella console e in altre interfacce N
Selezione della versione del componente aggiuntivo e aggiornamenti automatici N
Componenti aggiuntivi gestiti dall'utente possibili
Identità del carico di lavoro (IAM OCI con filtro per pod/container) N
Autorizzazioni basate su criteri utente/istanza
Può richiedere un aumento per il numero di cluster o il numero di nodi per cluster N
Limiti dei nodi di lavoro superiori N
SLA con supporto finanziario N
Solo obiettivo livello di servizio (SLO) N
Può eseguire l'upgrade al cluster avanzato N/D Sì (il cluster deve essere nativo per la VCN)
Tipo di creazione predefinito (console) No (a meno che non sia selezionato)
Tipo di creazione predefinito (CLI/API) No (a meno che non sia selezionato)

Per un confronto più dettagliato, vedere Confronto di cluster avanzati con cluster di base.

Tenere presente quanto riportato di seguito durante la creazione dei cluster.

  • Quando si utilizza la console per creare un cluster, se non si selezionano funzioni avanzate durante la creazione del cluster, è possibile creare il nuovo cluster come cluster di base. Un nuovo cluster viene creato come cluster avanzato per impostazione predefinita, a meno che non si scelga esplicitamente di creare un cluster di base.
  • Quando si utilizza l'interfaccia CLI o l'API per creare un cluster, è possibile specificare se creare un cluster di base o avanzato. Se non si specifica in modo esplicito il tipo di cluster da creare, per impostazione predefinita viene creato un nuovo cluster come cluster di base.

La creazione di un nuovo cluster come cluster avanzato consente di aggiungere facilmente funzionalità avanzate in un secondo momento, anche se inizialmente non è stata selezionata alcuna funzione avanzata. Se si sceglie di creare un nuovo cluster come cluster di base, è comunque possibile scegliere di aggiornare il cluster di base a un cluster avanzato in un secondo momento. Non è tuttavia possibile eseguire il downgrade di un cluster avanzato a un cluster di base.

Si noti che tutti i riferimenti ai 'cluster' nella documentazione di OKE si riferiscono sia ai cluster avanzati che ai cluster di base, a meno che non sia esplicitamente indicato diversamente.

Piano di controllo cluster Kubernetes e API Kubernetes

Il piano di controllo del cluster Kubernetes implementa la funzionalità Kubernetes di base. Viene eseguita sulle istanze di computazione (noti come 'nodi del piano di controllo') nella tenancy del servizio OKE. Il piano di controllo del cluster è completamente gestito da Oracle.

Il piano di controllo cluster esegue una serie di processi, tra cui:

  • kube-apiserver per supportare le operazioni API Kubernetes richieste dallo strumento della riga di comando Kubernetes (kubectl) e da altri strumenti della riga di comando, nonché da chiamate REST dirette. Il kube-apiserver include controller di ammissione necessari per le operazioni Kubernetes avanzate.
  • kube-controller-manager per gestire diversi componenti Kubernetes (ad esempio, controller di replica, controller degli endpoint, controller dello spazio di nomi e controller di serviceaccounts)
  • kube-scheduler per controllare dove nel cluster eseguire i job
  • etcd per memorizzare i dati di configurazione del cluster
  • cloud-controller-manager consente di aggiornare ed eliminare i nodi di lavoro (utilizzando il controller del nodo), di creare load balancer quando vengono creati i servizi Kubernetes di type: LoadBalancer (utilizzando il controller del servizio) e di impostare gli instradamenti di rete (utilizzando il controller di instradamento). OCI-cloud-controller-manager implementa anche un container-storage-interface, un driver flexvolume e un provisioninger flexvolume (per ulteriori informazioni, consultare la documentazione di OCI Cloud Controller Manager (CCM) su GitHub).

L'API Kubernetes consente agli utenti finali di eseguire query e manipolare le risorse Kubernetes (ad esempio pod, spazi di nomi, mappe di configurazione ed eventi).

Puoi accedere all'API Kubernetes sul piano di controllo del cluster tramite un endpoint ospitato in una subnet della tua VCN. Questa subnet dell'endpoint API Kubernetes può essere una subnet privata o pubblica. Se si specifica una subnet pubblica per l'endpoint API Kubernetes, è possibile esporre facoltativamente l'endpoint a Internet assegnando un indirizzo IP pubblico all'endpoint (così come l'indirizzo IP privato). Puoi controllare l'accesso alla subnet dell'endpoint API Kubernetes utilizzando le regole di sicurezza definite per i gruppi di sicurezza di rete (consigliato) o le liste di sicurezza.

L'accesso all'API Kubernetes è regolato da più livelli di sicurezza. Utilizzare i criteri IAM OCI per controllare chi può utilizzare OKE per gestire i cluster e ottenere l'accesso al piano di controllo del cluster stesso. All'interno del cluster, utilizzi Kubernetes RBAC per controllare cosa possono fare gli utenti e gli account di servizio autenticati con l'API Kubernetes (ad esempio, quando si utilizza kubectl).

Nota

Nelle release precedenti, il provisioning dei cluster era stato eseguito con endpoint API Kubernetes pubblici non integrati nella VCN.

È possibile continuare a creare tali cluster utilizzando l'interfaccia CLI o l'API, ma non la console. Tenere presente che è possibile creare questi cluster solo come cluster di base e non come cluster avanzati.

Nodi di lavoro Kubernetes, pool di nodi e piano dati cluster

I nodi di lavoro costituiscono il piano dati del cluster. I nodi di lavoro consentono di eseguire le applicazioni distribuite in un cluster.

Ogni nodo di lavoro esegue una serie di processi, tra cui:

  • kubelet per comunicare con il piano di controllo cluster
  • kube-proxy per gestire le regole di rete

I processi del piano di controllo cluster monitorano e registrano lo stato dei nodi di lavoro e distribuiscono le operazioni richieste tra di essi.

Un pool di nodi è un subset di nodi di lavoro all'interno di un cluster che hanno tutti la stessa configurazione. I pool di nodi consentono di creare pool di computer all'interno di un cluster con configurazioni diverse. Ad esempio, è possibile creare un pool di nodi in un cluster come virtual machine e un altro pool di nodi come computer Bare Metal. Un cluster deve avere almeno un pool di nodi, ma un pool di nodi non deve contenere nodi di lavoro.

I nodi di lavoro in un pool di nodi sono connessi a una subnet di nodi di lavoro nella VCN.

Quando si crea un pool di nodi, è necessario specificare che i nodi di lavoro nel pool di nodi vengano creati tutti come nodi virtuali o tutti come nodi gestiti.

Nodi virtuali e nodi gestiti

Quando si crea un pool di nodi con OKE, si specifica che i nodi di lavoro nel pool di nodi devono essere creati come uno o altri dei seguenti elementi:

  • Nodi virtuali, completamente gestiti da Oracle. I nodi virtuali offrono un'esperienza Kubernetes 'serverless', che ti consente di eseguire applicazioni containerizzate su larga scala senza il sovraccarico operativo derivante dall'upgrade dell'infrastruttura del piano dati e dalla gestione della capacità dei cluster. È possibile creare solo nodi virtuali nei cluster avanzati.
  • Nodi gestiti, in esecuzione su istanze di computazione (bare metal o virtual machine) nella tenancy e almeno in parte gestiti dall'utente. Poiché sei responsabile della gestione dei nodi gestiti, hai la flessibilità di configurarli per soddisfare i tuoi requisiti specifici. Sei responsabile dell'upgrade di Kubernetes sui nodi gestiti e della gestione della capacità del cluster. È possibile creare nodi gestiti sia nei cluster di base che nei cluster avanzati.

Vedere Confronto di nodi virtuali con nodi gestiti.

Si noti che tutti i riferimenti a 'nodi' e 'nodi di lavoro' nella documentazione OKE si riferiscono sia ai nodi virtuali che ai nodi gestiti, a meno che non sia esplicitamente indicato diversamente.

Nodi autogestiti

Un nodo autogestito è un nodo di lavoro ospitato su un'istanza di computazione (o pool di istanze) che hai creato tu stesso nel servizio di computazione, piuttosto che su un'istanza di computazione creata automaticamente da OKE. I nodi autogestiti vengono spesso definiti BYON (Bring Your Own Nodes). A differenza dei nodi gestiti e dei nodi virtuali, raggruppati rispettivamente in pool di nodi gestiti e pool di nodi virtuali, i nodi autogestiti non vengono raggruppati in pool di nodi.

Il servizio di computazione viene utilizzato per creare le istanze di computazione su cui ospitare i nodi autogestiti. L'uso del servizio di computazione consente di configurare le istanze di computazione per carichi di lavoro specializzati, incluse le combinazioni di forme e immagini di computazione non disponibili per i nodi gestiti e i nodi virtuali. Ad esempio, potresti volere istanze con forme progettate per carichi di lavoro accelerati dall'hardware (come le forme GPU) o forme progettate per carichi di lavoro HPC (High-Performance Computing) che richiedono core del processore ad alta frequenza (come le forme HPC e Optimized). Potresti voler connettere molte di queste istanze con una rete a banda larga e a bassissima latenza per formare una rete cluster Oracle Cloud Infrastructure (vedere Uso delle reti cluster RDMA).

Se desideri semplificare l'amministrazione e gestire più nodi autogestiti come gruppo, utilizza il servizio di computazione per creare un pool di istanze di computazione per ospitare uno o più nodi autogestiti.

Quando si crea un'istanza di computazione (o un pool di istanze) per ospitare un nodo autogestito, è necessario specificare il cluster Kubernetes a cui aggiungere l'istanza. È possibile aggiungere solo nodi autogestiti ai cluster avanzati.

Per ulteriori informazioni, vedere Utilizzo dei nodi autogestiti.

Si noti che tutti i riferimenti a 'nodi' e 'nodi di lavoro' nella documentazione OKE coprono i nodi autogestiti, a meno che non sia esplicitamente indicato diversamente.

Pod

Quando un'applicazione in esecuzione su un nodo di lavoro comprende più container, Kubernetes raggruppa i container in un'unica unità logica denominata pod per semplificare la gestione e la ricerca automatica. I contenitori nel pod condividono lo stesso spazio di nomi di rete e lo stesso spazio di storage e possono essere gestiti come un singolo oggetto dal piano di controllo del cluster. Un certo numero di pod che forniscono la stessa funzionalità possono essere raggruppati in un singolo set logico noto come servizio.

I cluster Kubernetes utilizzano i plugin CNI (Container Network Interface) per implementare la connettività di rete per i pod in esecuzione sui nodi di lavoro. I plugin CNI configurano le interfacce di rete, eseguono il provisioning degli indirizzi IP e mantengono la connettività.

Per ulteriori informazioni sui pod, consultare la documentazione di Kubernetes.

servizi

In Kubernetes, un servizio è un'astrazione che definisce un set logico di pod e un criterio mediante il quale accedervi. Il set di pod mirati da un servizio è in genere determinato da un selettore.

Per alcune parti di un'applicazione, ad esempio i frontend, è possibile esporre un servizio su un indirizzo IP esterno a un cluster.

Kubernetes ServiceTypes ti consente di specificare il tipo di servizio che desideri esporre. Un elemento LoadBalancer ServiceType crea un load balancer OCI nelle subnet del load balancer nella tua VCN.

Per ulteriori informazioni sui servizi in generale, consulta la documentazione di Kubernetes. Per ulteriori informazioni sulla creazione dei servizi del load balancer con OKE, vedere Definizione dei servizi Kubernetes di tipo LoadBalancer.

Plugin CNI (Container Network Interface)

Kubernetes ha adottato la specifica CNI (Container Network Interface) per la gestione delle risorse di rete. Il CNI è costituito da una specifica e librerie per la scrittura di plugin per configurare interfacce di rete in contenitori Linux, insieme a una serie di plugin supportati.

I cluster Kubernetes utilizzano i plugin CNI (Container Network Interface) per implementare la connettività di rete per i pod in esecuzione sui nodi di lavoro. I plugin CNI configurano le interfacce di rete, eseguono il provisioning degli indirizzi IP e mantengono la connettività.

Per ulteriori informazioni, vedere la documentazione CNI su GitHub.

File manifesto (o specifiche pod)

Un file manifesto Kubernetes comprende istruzioni in un file yaml o json che specificano come distribuire un'applicazione sul nodo o sui nodi in un cluster Kubernetes. Le istruzioni includono informazioni sulla distribuzione di Kubernetes, sul servizio Kubernetes e su altri oggetti Kubernetes da creare nel cluster. Il file manifesto viene comunemente indicato anche come specifica pod o come file deployment.yaml (anche se sono consentiti altri nomi di file). I parametri da includere in un file manifest Kubernetes sono descritti nella documentazione di Kubernetes.

Controller ammissione

Un controller di ammissione Kubernetes intercetta le richieste autenticate e autorizzate al server API Kubernetes prima di ammettere un oggetto (ad esempio un pod) al cluster. Un controller di ammissione può convalidare un oggetto, modificarlo o entrambi. Molte funzioni avanzate in Kubernetes richiedono un controller di ammissione abilitato. Per ulteriori informazioni, consulta la documentazione di Kubernetes.

La versione di Kubernetes selezionata quando si crea un cluster utilizzando OKE determina i controller di ammissione supportati da tale cluster. Per conoscere i controller di ammissione supportati, l'ordine in cui vengono eseguiti nel server API Kubernetes e le versioni Kubernetes in cui sono supportati, vedere Controller di ammissione supportati.

Spazi di nomi

Un cluster Kubernetes può essere organizzato in spazi dei nomi per dividere le risorse del cluster tra più utenti. Inizialmente, un cluster dispone dei seguenti spazi di nomi:

  • predefinito per le risorse senza altri spazi di nomi
  • kube-system, per le risorse create dal sistema Kubernetes
  • kube-node-lease, per un oggetto di leasing per nodo per determinare la disponibilità del nodo
  • kube-pubblico, di solito utilizzato per le risorse che devono essere accessibili in tutto il cluster

Per ulteriori informazioni sugli spazi di nomi, consultare la documentazione di Kubernetes.