Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Imposta Oracle Cloud Infrastructure Container Engine for Kubernetes con tre nodi di lavoro
Introduzione
In questa esercitazione verrà spiegato come impostare un cluster Kubernetes costituito dal piano di controllo Kubernetes e dal piano dati (pool di nodi) utilizzando Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE). Inoltre, implementeremo ed elimineremo due applicazioni di esempio sulla piattaforma Kubernetes per dimostrare che funziona. Questa esercitazione preparerà il terreno per future esercitazioni che approfondiranno i servizi di rete offerti all'interno di Kubernetes per le applicazioni ospitate in container.
Di seguito sono riportati i modelli di distribuzione OKE di esempio.
-
Esempio 1: cluster con plugin CNI Flannel, endpoint dell'API Kubernetes pubblico, nodi di lavoro privati e load balancer pubblici.
-
Esempio 2: cluster con plugin CNI Flannel, endpoint dell'API Kubernetes privato, nodi di lavoro privati e load balancer pubblici.
-
Esempio 3: cluster con plugin CNI OCI, endpoint API Kubernetes pubblico, nodi di lavoro privati e load balancer pubblici.
-
Esempio 4: cluster con plugin CNI OCI, endpoint API Kubernetes privato, nodi di lavoro privati e load balancer pubblici.
Per ulteriori informazioni sui diversi modelli di distribuzione OKE che è possibile scegliere, vedere Esempio di configurazioni delle risorse di rete.
In questa esercitazione verrà implementato il modello di distribuzione Esempio 3.
Obiettivi
- Distribuiremo un cluster di controllo Kubernetes e nodi di lavoro completamente distribuiti e configurati all'interno di Oracle Cloud Infrastructure (OCI). Questo è ciò che chiamiamo Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE). Distribuiremo due applicazioni di esempio in due diversi spazi di nomi in cui un'applicazione verrà distribuita utilizzando un grafico Helm in un nuovo spazio di nomi. Alla fine, ripuliremo le applicazioni o i pod. Non distribuiremo alcun servizio di rete per applicazioni o pod gestiti da Kubernetes.
Task 1: creare un nuovo cluster Kubernetes e verificare i componenti
-
Fare clic sul menu hamburger.
- Fare clic su Servizi per sviluppatori.
- Fare clic su Cluster Kubernetes (OKE).
-
Fare clic su Crea cluster.
- Selezionare Creazione rapida.
- Fare clic su Sottometti.
-
Nella pagina Crea cluster (rapida), immettere le informazioni riportate di seguito.
- Immettere un nome di cluster.
- Selezionare un compartimento.
- Selezionare la versione Kubernetes.
- Selezionare l'endpoint API Kubernetes come endpoint pubblico.
- Selezionare il tipo di nodo da gestire.
- Scorri in basso.
- Selezionare i nodi di lavoro Kubernetes da lavoratori privati.
- Scorri in basso.
- Mantenere il valore predefinito Numero nodi (nodi lavoratore) 3.
- Fare clic su Avanti.
- Rivedere i parametri del cluster.
- Scorri in basso.
- Rivedere i parametri dei pool di nodi.
- Scorri in basso.
- Non selezionare la casella di controllo Crea un cluster di base.
- Fare clic su Crea cluster.
-
Rivedere lo stato dei diversi componenti creati.
- Assicurati che tutto abbia un assegno verde.
- Fare clic su Chiudi.
- Verificare che lo stato sia CREATING.
- Scorri in basso.
-
Rivedere lo stato di creazione del cluster e del pool di nodi. Il cluster di controllo Kubernetes è in fase di creazione e il pool di nodi di lavoro verrà creato in seguito.
-
Dopo alcuni minuti, il cluster di controllo Kubernetes viene creato correttamente.
-
Il pool di nodi di lavoro verrà creato.
-
Dopo alcuni minuti, il pool di nodi di lavoro viene creato correttamente.
- Fare clic su Pool di nodi.
- Si noti che i nodi di lavoro nel pool sono ancora in fase di creazione.
- Fare clic su 3 dei nodi di lavoro.
-
Si noti che lo stato di tutti i nodi è Non pronto.
-
Dopo alcuni minuti saranno pronti.
Il cluster di controllo Kubernetes e i nodi di lavoro sono completamente distribuiti e configurati all'interno di Oracle Cloud Infrastructure (OCI). Questo è ciò che chiamiamo Oracle Cloud Infrastructure Container Engine for Kubernetes.
Task 2: verificare i componenti cluster Kubernetes distribuiti nella console OCI
Quando utilizziamo OKE per creare un cluster Kubernetes, alcune risorse verranno create all'interno di OCI per supportare questa distribuzione.
La prima e più importante risorsa è la rete cloud virtuale (VCN). Poiché è stata scelta l'opzione Creazione rapida, è stata creata una nuova VCN dedicata a OKE.
-
Eseguire il login alla console OCI e passare a Networking, Reti cloud virtuali (VCN). Verrà visualizzata la nuova VCN creata. Fare clic sulla VCN.
All'interno della VCN verranno visualizzate tre subnet, una privata e due subnet pubbliche per supportare la distribuzione di OKE.
-
Verificare le risorse.
- Fare clic su Blocchi/ prefissi CIDR per esaminare il CIDR della VCN.
- Si noti che
10.0.0.0/16
è stato assegnato da OCI.
- Fare clic su Tabelle di instradamento per esaminare le tabelle di routing.
- Si noti che sono state create due tabelle di instradamento: instradamento a subnet private e instradamento a subnet pubbliche.
- Fare clic su Gateway Internet per esaminare il gateway Internet che fornirà la connettività Internet utilizzando le subnet pubbliche da e verso Internet.
- Si noti che esiste un solo gateway Internet.
- Fare clic su Elenchi di sicurezza per esaminare le liste di sicurezza che possono essere regole in entrata o in uscita per proteggere la connettività tra le subnet.
- Tieni presente che esistono tre liste di sicurezza, una utilizzata per la protezione della connettività dei nodi di lavoro Kubernetes, l'altra per la protezione degli endpoint API Kubernetes e l'altra per la protezione dei servizi Kubernetes.
- Fare clic su Gateway NAT per esaminare il gateway NAT che fornirà la connettività Internet utilizzando le subnet private a Internet.
- Si noti che esiste un solo gateway NAT.
- Fare clic su Gateway di servizio per esaminare il gateway di servizi che fornirà l'accesso privato a servizi Oracle specifici, senza esporre i dati a un gateway Internet o NAT.
- Si noti che esiste un solo gateway di servizi.
- Aprire la console OCI, fare clic sul menu hamburger e andare a Computazione, Istanze.
- Si noti che vengono create tre istanze che verranno utilizzate come tre nodi di lavoro Kubernetes specificati durante la distribuzione.
- Aprire la console OCI, fare clic sul menu hamburger e passare a Gestione IP, IP pubblici riservati.
- Si noti che esiste un indirizzo IP pubblico che termina con
.166
, riservato per l'endpoint API pubblico Kubernetes.
Se mettiamo ogni informazione che abbiamo appena raccolto e lo inseriamo in un diagramma, il diagramma apparirà come mostrato nella seguente immagine.
-
Tabelle con dettagli di configurazione per distribuire OKE
-
VCN:
Risorsa Nome VCN • Nome: oke-vcn-quick-IH-OKE-CLUSTER-af593850a
• Blocco CIDR: 10.0.0.0/16
• Risoluzione DNS: SelezionatoGateway Internet • Nome: oke-igw-quick-IH-OKE-CLUSTER-af593850a Gateway NAT • Nome: oke-ngw-quick-IH-OKE-CLUSTER-af593850a Gateway di servizi • Nome: oke-sgw-quick-IH-OKE-CLUSTER-af593850a
• Servizi: Tutti i servizi regionali in Oracle Services NetworkOpzioni DHCP • Tipo DNS impostato su Internet e Resolver VCN -
Subnet:
Risorsa Esempio Subnet pubblica per l'endpoint API Kubernetes Scopo: endpoint dell'API Kubernetes con le seguenti proprietà:
• Tipo: regionale
• Blocco CIDR: 10.0.0/28
• Tabella di instradamento: oke-public-routetable-IH-OKE-CLUSTER-af593850a
• Accesso subnet: pubblico
• Risoluzione DNS: selezionato
• Opzioni DHCP: predefinito
• Lista di sicurezza: oke-k8sApiEndpoint-quick-IH-OKE-CLUSTER-af593850aSubnet privata per i nodi di lavoro Scopo: workernode con le seguenti proprietà:
• Tipo: Regionale
• Blocco CIDR: 10.0.10.0/24
• Tabella di instradamento: N/A
• Accesso subnet: Privato
• Risoluzione DNS: Selezionato
• Opzioni DHCP: Predefinito
• Lista di sicurezza: oke-nodeseclist-quick-IH-OKE-CLUSTER-af593850aSubnet privata per i pod Scopo: pod con le seguenti proprietà:
• Tipo: Regionale
• Blocco CIDR: 10.96.0.0/16
• Tabella di instradamento: oke-private-routetable-IH-OKE-CLUSTER-af593850a
• Accesso subnet: Privato
• Risoluzione DNS: Selezionato
• Opzioni DHCP: Predefinito
• Lista di sicurezza: N/ASubnet pubblica per i load balancer dei servizi Scopo: Load balancer con le seguenti proprietà:
• Tipo: Regionale
• Blocco CIDR: 10.0.20.0/24
• Tabella di instradamento: oke-private-routetable-IH-OKE-CLUSTER-af593850a
• Accesso subnet: Pubblico
• Risoluzione DNS: Selezionata
• Opzioni DHCP: Predefinita
• Lista di sicurezza: oke-svclbseclist-quick-IH-OKE-CLUSTER-af593850a -
Tabelle di instradamento:
Risorsa Esempio Tabella di instradamento per la subnet API Kubernetes pubblica Scopo: endpoint API instradabile-Kubernetes, con una regola di instradamento definita come segue:
• Blocco CIDR di destinazione: 0.0.0.0/0
• Tipo di destinazione: gateway Internet
• Destinazione: oke-igw-quick-IH-OKE-CLUSTER-af593850aTabella di instradamento per subnet pod privati Scopo: routetable-pods, con due regole di instradamento definite come segue:
• Regola per il traffico verso Internet:
◦ Blocco CIDR di destinazione: 0.0.0.0/0
◦ Tipo di destinazione: gateway NAT
◦ Destinazione: oke-ngw-quick-IH-OKE-CLUSTER-af593850a
• Regola per il traffico verso i servizi OCI:
◦ Destinazione: tutti i servizi dell'area in Oracle Services Network
◦ Tipo di destinazione: gateway del servizio
◦ Destinazione: oke-sgw-quick-IH-OKE-CLUSTER-af593850aTabella di instradamento per la subnet dei load balancer pubblici Scopo: instradabile-serviceloadbalancers, con una regola di instradamento definita come segue:
• Blocco CIDR di destinazione: 0.0.0.0/0
• Tipo di destinazione: gateway Internet
• Destinazione: oke-igw-quick-IH-OKE-CLUSTER-af593850a
-
-
Regole della lista di sicurezza per la subnet dell'endpoint API Kubernetes pubblico
La lista di sicurezza
oke-k8sApiEndpoint-quick-IH-OKE-CLUSTER-af593850a
include le regole di entrata e uscita, come illustrato nelle tabelle riportate di seguito.-
Regole in entrata:
Senza conservazione dello stato Origine Protocollo IP Intervallo porte di origine Intervallo di porte di destinazione Tipo e codice Consente Descrizione N. 0/0 TCP Tutti 6.443 Traffico TCP per le porte: 6443 Accesso esterno all'endpoint API Kubernetes N. 10/24 TCP Tutti 6.443 Traffico TCP per le porte: 6443 Comunicazione da lavoratore Kubernetes a endpoint API Kubernetes N. 10/24 TCP Tutti 12.250 Traffico TCP per le porte: 12250 Lavoratore Kubernetes per controllare la comunicazione sul piano N. 10/24 ICMP 3 4 Traffico ICMP per: 3, 4 Destinazione non raggiungibile: è necessaria la frammentazione, ma l'opzione Non frammentare è impostata Ricerca automatica percorso -
Regole di uscita:
Senza conservazione dello stato Obiettivo Protocollo IP Intervallo porte di origine Intervallo di porte di destinazione Tipo e codice Consente Descrizione N. Tutti i servizi AMS in Oracle Services Network TCP Tutti 443 Traffico TCP per le porte: 443 HTTPS Consenti al piano di controllo Kubernetes di comunicare con OKE N. 10/24 TCP Tutti Tutti Traffico TCP per le porte: tutte Tutto il traffico verso i nodi di lavoro N. 10/24 ICMP 3 4 Traffico ICMP per: 3, 4 Destinazione non raggiungibile: è necessaria la frammentazione, ma l'opzione Non frammentare è impostata Ricerca automatica percorso
-
-
Regole della lista di sicurezza per la subnet dei nodi di lavoro privati
La lista di sicurezza
oke-nodeseclist-quick-IH-OKE-CLUSTER-af593850a
include le regole di entrata e uscita, come illustrato nelle tabelle riportate di seguito.Regole in entrata:
Senza conservazione dello stato Origine Protocollo IP Intervallo porte di origine Intervallo di porte di destinazione Tipo e codice Consente Descrizione N. 10/24 Tutti i protocolli Tutto il traffico per tutte le porte Consenti ai pod su un nodo di lavoro di comunicare con i pod su altri nodi di lavoro N. 10/28 ICMP 3 4 Traffico ICMP per: 3, 4 Destinazione non raggiungibile: è necessaria la frammentazione, ma l'opzione Non frammentare è impostata Ricerca automatica percorso N. 10/28 TCP Tutti Tutti Traffico TCP per le porte: tutte Accesso TCP dal piano di controllo Kubernetes N. 0/0 TCP Tutti 22 Traffico TCP per le porte: 22 Protocollo di login remoto SSH Traffico SSH in entrata nei nodi di lavoro N. 10/24 TCP Tutti 32.291 Traffico TCP per le porte: 32291 N. 10/24 TCP Tutti 10.256 Traffico TCP per le porte: 10256 N. 10/24 TCP Tutti 31.265 Traffico TCP per le porte: 31265 Regole di uscita:
Senza conservazione dello stato Obiettivo Protocollo IP Intervallo porte di origine Intervallo di porte di destinazione Tipo e codice Consente Descrizione N. 10/24 Tutti i protocolli Tutto il traffico per tutte le porte Consenti ai pod su un nodo di lavoro di comunicare con i pod su altri nodi di lavoro N. 10/28 TCP Tutti 6.443 Traffico TCP per le porte: 6443 Accesso all'endpoint API Kubernetes N. 10/28 TCP Tutti 12.250 Traffico TCP per le porte: 12250 Lavoratore Kubernetes per controllare la comunicazione sul piano N. 10/28 ICMP 3 4 Traffico ICMP per: 3, 4 Destinazione non raggiungibile: è necessaria la frammentazione, ma l'opzione Non frammentare è impostata Ricerca automatica percorso N. Tutti i servizi AMS in Oracle Services Network TCP Tutti 443 Traffico TCP per le porte: 443 HTTPS Consentire ai nodi di comunicare con OKE per garantire il corretto avvio e il funzionamento continuo N. 0/0 ICMP 3 4 Traffico ICMP per: 3, 4 Destinazione non raggiungibile: è necessaria la frammentazione, ma l'opzione Non frammentare è impostata Accesso ICMP dal piano di controllo Kubernetes N. 0/0 Tutti i protocolli Tutto il traffico per tutte le porte Accesso dei nodi di lavoro a Internet -
Regole della lista di sicurezza per la subnet pubblica del load balancer
La lista di sicurezza
oke-svclbseclist-quick-IH-OKE-CLUSTER-af593850a
include le regole di entrata e uscita, come illustrato nelle tabelle riportate di seguito.-
Regole in entrata:
Senza conservazione dello stato Origine Protocollo IP Intervallo porte di origine Intervallo di porte di destinazione Tipo e codice Consente Descrizione N. 0/0 TCP Tutti 80 Traffico TCP per le porte: 80 -
Regole di uscita:
Senza conservazione dello stato Obiettivo Protocollo IP Intervallo porte di origine Intervallo di porte di destinazione Tipo e codice Consente Descrizione N. 10/24 TCP Tutti 32.291 Traffico TCP per le porte: 32291 N. 10/24 TCP Tutti 10.256 Traffico TCP per le porte: 10256 N. 10/24 TCP Tutti 31.265 Traffico TCP per le porte: 31265
-
Task 3: verificare che il cluster Kubernetes sia in esecuzione utilizzando l'interfaccia CLI
-
Aprire la console OCI, fare clic sul menu hamburger e passare a Servizi per sviluppatori, Cluster Kubernetes (OKE). Fare clic sul cluster Kubernetes creato nel task 1.
- Scorri in basso.
- Fare clic su Avvio rapido.
-
Fare clic su Accedi a cluster.
- Selezionare Accesso a Cloud Shell.
- Fare clic su Copia per copiare il comando e consentire l'accesso al cluster Kubernetes.
- Fare clic su Avvia Cloud Shell.
Il diagramma riportato di seguito mostra come verrà stabilita la connessione per eseguire la gestione sul cluster OKE utilizzando OCI Cloud Shell.
-
Verrà avviata OCI Cloud Shell.
Alcuni messaggi informativi verranno mostrati su ciò che sta accadendo in background.
In questo caso, è possibile consentire l'esecuzione di OCI Cloud Shell su architetture CPU diverse.
-
Fare clic su Chiudi per chiudere questo messaggio informativo.
-
Siamo pronti a utilizzare OCI Cloud Shell per accedere al cluster Kubernetes.
-
Incollare il comando copiato sopra in questo task.
-
Eseguire il comando riportato di seguito per ottenere informazioni sul cluster Kubernetes.
kubectl cluster-info
-
Eseguire il comando seguente per ottenere informazioni sui nodi di lavoro.
kubectl get nodes
-
Eseguire il comando seguente per ottenere ulteriori informazioni sui nodi di lavoro.
kubectl get nodes -o wide
-
Eseguire il comando seguente per cancellare lo schermo e iniziare con una nuova schermata.
clear
- Si noti che l'output precedente è stato cancellato ma è ancora accessibile quando si scorre verso l'alto.
- Fare clic sull'icona Riduci per ridurre al minimo la finestra OCI Cloud Shell.
-
Fare clic su Chiudi per chiudere la finestra Accedi al cluster.
La connessione viene eseguita per eseguire la gestione sul cluster OKE utilizzando OCI Cloud Shell.
Task 4: Distribuire un'applicazione Nginx di esempio utilizzando kubectl
-
Eseguire i comandi riportati di seguito.
- Prendere nota del comando per ottenere la versione di Kubernetes.
- Prendere nota del comando per distribuire un'applicazione di esempio.
- Fare clic su Ripristina per ripristinare la finestra OCI Cloud Shell.
-
Eseguire il comando riportato di seguito per ottenere la versione di Kubernetes.
kubectl version
-
Eseguire il comando riportato di seguito per verificare i pod o le applicazioni correnti distribuiti.
kubectl get pods
Si noti che non sono state trovate risorse.
-
Eseguire il comando seguente per distribuire una nuova applicazione di esempio.
kubectl create -f https://k8s.io/examples/application/deployment.yaml
-
Eseguire il comando riportato di seguito per verificare i pod o le applicazioni correnti distribuiti.
kubectl get pods
-
Si noti che lo stato dei pod è RUNNING. Ciò significa che l'applicazione appena distribuita è in esecuzione.
-
Eseguire il comando riportato di seguito per ottenere gli indirizzi IP per accedere all'applicazione.
kubectl get deploy,svc
-
Si noti che all'applicazione appena distribuita non sono assegnati indirizzi IP e che solo il cluster Kubernetes dispone di un servizio IP cluster collegato con un indirizzo IP interno.
-
Eseguire il comando seguente per esaminare in modo specifico i servizi (di rete) collegati per l'applicazione appena distribuita.
kubectl get svc ngnix
-
Si noti che non esistono servizi (di rete) distribuiti o collegati per l'applicazione Nginx distribuita. Per questo motivo, non saremo in grado di accedere all'applicazione da un'altra applicazione o utilizzare il browser Web per accedere alla pagina Web nel server Web Nginx. Ne parleremo in un altro tutorial.
Task 5: distribuire un'applicazione MySQL di esempio utilizzando il grafico Helm
-
Un grafico Helm è un pacchetto che contiene tutte le risorse necessarie per distribuire un'applicazione in un cluster Kubernetes. Eseguire i comandi seguenti per:
-
Aggiungere il repository Bitnami per il database MySQL.
helm repo add bitnami https://charts.bitnami.com/bitnami
-
Distribuisci un database MySQL sui nodi di lavoro Kubernetes e crea anche un nuovo spazio di nomi mysql.
helm install mysql bitnami/mysql -–namespace mysql --create-namespace
-
-
Per ottenere le applicazioni distribuite, eseguire il comando seguente. Questo comando visualizzerà solo le applicazioni distribuite nello spazio di nomi corrente (predefinito).
kubectl get pods
-
Si noti che solo l'applicazione Nginx viene visualizzata nello spazio di nomi corrente (predefinito). Questo comando ora visualizzerà le applicazioni distribuite a livello di cluster (tutti gli spazi di nomi).
kubectl get pods -A -w
- Si noti che l'applicazione Nginx è in esecuzione nello spazio di nomi predefinito.
- Si noti che l'applicazione MySQL è in esecuzione nel nuovo spazio di nomi mysql.
Task 6: Pulire i pod e gli spazi di nomi
Abbiamo distribuito un'applicazione nello spazio di nomi predefinito (Nginx) e un'altra applicazione in un nuovo spazio di nomi (MySQL). Utilizzando i grafici Helm, ripuliamo l'ambiente in modo da poter iniziare da zero ogni volta che ne abbiamo bisogno.
-
Utilizzare il comando seguente per ottenere tutti i nodi di lavoro (a livello di cluster).
kubectl get nodes -o wide
-
Utilizzare il comando seguente per ottenere tutti i pod in esecuzione nello spazio di nomi corrente (predefinito).
kubectl get pods -o wide
-
Eseguire il comando seguente per ottenere tutti gli spazi di nomi.
kubectl get namespaces
-
Eseguire il comando seguente per ottenere tutti i pod in esecuzione nello spazio di nomi corrente (predefinito).
kubectl get pods --namespace=default
-
Eseguire il comando seguente per ottenere in modo specifico tutti i pod in esecuzione nello spazio di nomi MySQL.
kubectl get pods --namespace=mysql
-
Eseguire il comando seguente per eliminare tutte le distribuzioni o tutti i pod nello spazio di nomi predefinito.
kubectl delete --all deployments --namespace=default
-
Utilizzare il seguente comando per verificare se le distribuzioni o i pod vengono eliminati.
kubectl get pods --namespace=default
-
Utilizzare il comando seguente per ottenere in modo specifico tutti i pod in esecuzione nello spazio di nomi MySQL. Verifica se esiste ancora.
kubectl get pods --namespace=mysql
-
Eseguire il comando seguente per eliminare tutte le distribuzioni o tutti i pod e lo spazio di nomi MySQL completo.
kubectl delete namespace mysql
-
Utilizzare questo comando per raccogliere tutti gli spazi di nomi e verificare se lo spazio di nomi MySQL viene eliminato.
kubectl get namespaces
Conferme
- Autore - Iwan Hoogendoorn (esperto di rete OCI)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Set up Oracle Cloud Infrastructure Container Engine for Kubernetes with Three Worker Nodes
F95674-01
March 2024