Nota:
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriversi a un account gratuito, vedere Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del tuo ambiente cloud.
Inizia a utilizzare i cluster Kubernetes basati su Arm in Oracle Cloud Infrastructure
Questa esercitazione spiega come creare cluster Kubernetes basati su braccio che utilizzano la piattaforma di calcolo Ampere A1 in Oracle Cloud Infrastructure(OCI). Inoltre, distribuisci il contenitore Web più diffuso, Apache Tomcat nel cluster kubernetes. Utilizzando i metodi descritti in questa esercitazione, è possibile creare distribuzioni di applicazioni portatili tra i cluster kubernetes basati su Arm e i cluster basati su x86(Intel e AMD).
Introduzione
Obiettivi
In questa esercitazione:
- Crea un cluster Kubernetes (OKE) basato sulla computazione Ampere A1.
- Distribuire Apache Tomcat nel cluster.
- Crea distribuzioni facilmente trasportabili nei cluster kubernetes basati su braccio e x86.
- Distribuire applicazioni Java e microservizi nel contenitore Web Tomcat.
Cos'è la piattaforma di calcolo Ampere A1
La piattaforma di calcolo Ampere A1 basata sulle CPU Ampere Altra rappresenta un cambiamento generazionale per le aziende e gli sviluppatori di applicazioni che stanno creando carichi di lavoro scalabili dai dispositivi perimetrali ai data center cloud. La progettazione esclusiva di questa piattaforma garantisce prestazioni coerenti e prevedibili, in quanto non vi sono conflitti di risorse all'interno di una memoria di computazione e offre maggiore isolamento e sicurezza. Questa nuova classe di forme di computazione su Oracle Cloud Infrastructure offre una piattaforma ineguagliabile che unisce la potenza delle CPU Altra alla sicurezza, alla scalabilità e all'ecosistema dei servizi su OCI.
Presentazione dell'architettura braccio nell'ambiente
Quando si introduce l'architettura Arm al processo di sviluppo delle applicazioni, nella maggior parte dei casi i flussi di lavoro di sviluppo rimangono gli stessi. Gli strumenti e il processo attualmente in uso continueranno a essere trasferiti senza problemi e la configurazione della workstation di sviluppo rimarrà invariata. L'eccezione generale è rappresentata dalle applicazioni di sistema di basso livello destinate a funzioni CPU specifiche mediante strumenti altamente specializzati. Nella maggior parte dei casi, per supportare l'architettura Arm, è possibile che si verifichino lievi modifiche ai passi di costruzione o di packaging nel flusso di lavoro. Iniziare analizzando il flusso di lavoro esistente per identificare se si dispone di passi di build o di packaging specifici della piattaforma.
- I passi di build specifici della piattaforma possono essere opzioni di compilatore, nel caso di lingue compilate come C/C++, Go e Rust. In questi casi, in genere, si aggiunge un passo di build per compilare l'applicazione per Arm insieme alla versione x86 dell'applicazione. Se si utilizza un linguaggio bytecode, un linguaggio compilato Just-In-Time (JIT) o un linguaggio interpretato come Java, JavaScript, TypeScript, Python o Ruby, in genere non esistono flag o opzioni di tempo di compilazione. Queste lingue non producono file binari eseguibili specifici della piattaforma, ma utilizzano un runtime specifico della piattaforma, ad esempio il runtime Java o Node.js per Arm, che esegue lo stesso codice sorgente su più piattaforme.
- Il packaging specifico della piattaforma include la creazione di package delle applicazioni sotto forma di immagini Docker, immagini delle VM personalizzate o artifact di distribuzione specifici della piattaforma. In questi casi, si desidera modificare il processo di creazione con un passo aggiuntivo per produrre il pacchetto di applicazioni specifico Arm. Nel caso delle immagini dei container, ad esempio, si desidera disporre di una versione dell'immagine dell'applicazione destinata alla distribuzione su un sistema Arm. I formati delle immagini del container supportano più architetture, in modo che i runtime dei container di ogni piattaforma possano semplicemente recuperare l'immagine appropriata ed eseguire l'applicazione. Consulta il blog Docker per saperne di più sulle immagini a più gerarchie e sul come costruirle.
Creare un cluster Kubernetes basato su Arm
Container Engine for Kubernetes è facile da usare e, insieme a OCI Cloud Shell, puoi avere il controllo completo senza dover impostare un ambiente locale. Per iniziare, crea un nuovo cluster Kubernetes nell'infrastruttura OCI.
-
Nel menu di navigazione della console di Oracle Cloud andare a Servizi per gli sviluppatori e fare clic su Cluster Kubernetes.
-
Fare clic su Crea cluster. È possibile utilizzare l'opzione Creazione rapida per utilizzare i valori predefiniti o l'opzione Creazione personalizzata per specificare le impostazioni avanzate. In quest'area viene utilizzata la creazione rapida in quanto le impostazioni predefinite scelte sono un ottimo inizio.
-
Nella pagina Crea cluster, scegliere alcune opzioni di configurazione di base, ad esempio la versione di Kubernetes che si desidera eseguire e il numero e la forma dei nodi per il cluster. Per questa esercitazione, scegliere la forma Ampere A1 per i nodi.
Nota Scegliere la forma
VM.Standard.A1.Flex
per i nodi come mostrato.Descrizione dell'illustrazione creazione del workflow
È anche possibile specificare un nome e un compartimento per il cluster. Il tipo di visibilità indica se i nodi nel cluster sono raggiungibili da Internet, ad esempio tramite SSH. È più comune mantenerli su una rete privata e utilizzare host bastion o jump sulla rete pubblica per fornire percorsi di accesso. Qui scegliamo l'impostazione predefinita per mantenere i nodi privati.
-
Fare clic su Crea cluster. Il workflow avvia la creazione di tutte le risorse necessarie e del cluster stesso.
Dopo aver creato le risorse di supporto, viene visualizzata la pagina dei dettagli del cluster. Il cluster viene creato e attivato nel giro di pochi minuti.
-
Dopo che lo stato del cluster è Attivo, fare clic sul pulsante Accedi al cluster per visualizzare le modalità di accesso al cluster.
-
Scegliere l'opzione Cloud Shell. Cloud Shell è un ambiente di terminale online completo di funzionalità integrato nella console. Cloud Shell dispone di tutti gli strumenti necessari per interagire con il cluster Kubernetes ed è la soluzione più rapida per iniziare senza configurare un ambiente di sviluppo locale.
Descrizione dell'accesso alla figura nel cloudshell
È possibile avviare Cloud Shell direttamente dalla pagina. Tenere presente che l'accesso a Cloud Shell è sempre disponibile nella parte superiore della console per un accesso rapido.
La pagina include anche un comando da eseguire all'interno di Cloud Shell. Questo comando utilizza l'interfaccia CLI OCI per creare il file kubeconfig. I client Kubernetes come
kubectl
possono utilizzare un file di configurazione che facilita l'accesso al cluster. Tale file è generalmente denominato file kubeconfig. In genere, questo file di configurazione si trova in ~/.kube. Un singolo file di configurazione può contenere la configurazione dell'accesso per più cluster.Nota L'interfaccia CLI OCI è già installata e configurata per l'utente nell'ambiente Cloud Shell.
-
Avviare Cloud Shell, quindi copiare il comando e incollarlo in Cloud Shell per eseguirlo. Il client della riga di comando standard per Kubernetes è kubectl ed è preinstallato nell'ambiente Cloud Shell.
Ora, controlliamo se possiamo interagire con il cluster e vedere i nodi del cluster.
-
Copiare il comando seguente in Cloud Shell ed eseguirlo.
kubectl get nodes -o wide
L'output dovrebbe essere simile all'esempio riportato di seguito, a seconda del numero di nodi nel cluster. La versione del kernel mostra che stiamo eseguendo Oracle Linux per l'architettura
aarch64
(Arm a 64 bit).NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 10.0.10.229 Ready node 3d7h v1.19.7 10.0.10.229 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11 10.0.10.29 Ready node 3d7h v1.19.7 10.0.10.29 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11 10.0.10.87 Ready node 3d7h v1.19.7 10.0.10.87 <none> Oracle Linux Server 7.9 5.4.17-2102.200.13.el7uek.aarch64 docker://19.3.11
Ora che hai un cluster Kubernetes completamente funzionante e hai configurato gli strumenti per interagire con esso, puoi distribuire qualsiasi carico di lavoro kubernetes su di esso.
Distribuzioni perfette per i cluster Kubernetes
Ora puoi distribuire i carichi di lavoro in container nel cluster kubernetes basato su Arm. Le immagini dei container vengono create per architetture specifiche. Gli strumenti per i container come Docker o Buildah offrono i metodi per gestire queste immagini e distribuirle in modo trasparente. In questo esempio verrà distribuito Apache Tomcat, il popolare contenitore Web Java nel cluster kubernetes. Il runtime del docker recupererà l'immagine arm64v8
durante l'esecuzione su Arm e l'immagine amd64
durante l'esecuzione sulle architetture x86. Questo ci consente di creare file manifesti di distribuzione di kubernetes portatili, purché si creino le immagini dell'applicazione per entrambe le architetture.
Iniziare creando un file manifesto di distribuzione neutro dall'architettura. Il file manifesto non deve fare riferimento ad alcun contenitore specifico dell'architettura, in quanto il runtime del contenitore è in grado di rilevare l'architettura corretta e ottenere l'immagine appropriata. Per creare il file manifesto, eseguire il comando indicato di seguito. Crea un nuovo file denominato tomcat.yaml
.
cat <<EOF > tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
labels:
app: tomcat
spec:
replicas: 3
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9
ports:
- containerPort: 8080
volumeMounts:
- name: app-volume
mountPath: /usr/local/tomcat/webapps/
volumes:
- name: app-volume
configMap:
name: app-bundle
---
apiVersion: v1
kind: Service
metadata:
name: tomcat
labels:
app: tomcat
spec:
ports:
- port: 80
name: http
targetPort: 8080
selector:
app: tomcat
type: LoadBalancer
EOF
Questo file manifesto contiene gli oggetti e le azioni seguenti:
- Oggetto di distribuzione denominato
tomcat
e etichettaapp: tomcat
. - La distribuzione ha 3 repliche.
- I pod nella distribuzione dispongono di un unico contenitore:
tomcat:9
. Il file manifesto non specifica l'architettura, rendendola valida in tutte le architetture. Docker estrae l'immagine che supporta l'architettura appropriata in fase di esecuzione. - Un oggetto Volume viene creato da ConfigMap e attivato nel contenitore. Questo ConfigMap verrà creato in un secondo momento e conterrà l'applicazione.
- Il file manifesto contiene anche un oggetto Service ed espone la distribuzione su un LoadBalancer.
-
Scaricare l'applicazione di esempio per Apache Tomcat e crearla come ConfigMap.
wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war kubectl create configmap app-bundle --from-file sample.war
Nota Questo metodo di attivazione di un'applicazione mediante ConfigMap è disponibile solo per comodità e non deve essere utilizzato nelle applicazioni di produzione.
-
Distribuire il file manifesto. In questo modo vengono creati gli oggetti kubernetes, inclusi la distribuzione e il servizio. Quando si crea la distribuzione, il runtime docker ne rileva l'esecuzione sull'architettura a braccio teh e sceglie automaticamente la variante Arm del contenitore Apache Tomcat. L'applicazione Java distribuita nel contenitore è neutrale della piattaforma, pertanto lo stesso file
.war
può essere distribuito in tutte le architetture.kubectl apply -f tomcat.yaml
-
Controllare lo stato della distribuzione
kubectl get deploy,svc
L'output dovrebbe essere simile a quello riportato di seguito
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tomcat 2/2 2 2 9s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d9h service/tomcat LoadBalancer 10.96.120.212 <pending> 80:32547/TCP 9s
Ciò dimostra che Tomcat è stato distribuito correttamente sul nostro cluster kubernetes basato su Armature e serve un'applicazione Web Java. Il file manifesto di distribuzione utilizzato non è collegato all'architettura e può essere utilizzato sia per x86 che per i cluster basati su braccio.
-
Facoltativamente, è possibile ottenere dettagli dettagliati a livello di nodo eseguendo
kubectl get nodes -o wide kubectl describe node <node_name>
Vengono visualizzate informazioni dettagliate sul nodo, inclusa l'architettura e i pod pianificati su tale nodo.
Quando l'indirizzo IP esterno per LoadBalancer è disponibile (l'operazione potrebbe richiedere alcuni minuti) è possibile visitare la distribuzione puntando il browser Web su
http://<your_loadbalancer_ip_address>/sample
Passi successivi
Esplora altri carichi di lavoro che puoi distribuire sul tuo cluster kubernetes basato su braccio visitando il repository dell'hub del docker delle immagini arm64v8
ufficiali qui
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di apprendimento gratuito sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare il sito Oracle Help Center.
Get started with Arm-based Kubernetes clusters in Oracle Cloud Infrastructure
F50323-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.