Implementare un'applicazione Web basata sui container con Amazon EKS
GUIDA ALLE OPERAZIONI DI BASE
Modulo 3: Creare la tua implementazione
In questo modulo, creerai un'implementazione tramite l'uso e l'avvio della tua applicazione
Introduzione
In questo modulo, creerai configurazioni di servizi e implementazioni per la tua applicazione utilizzando AWS CDK8s. In AWS CDK8s, gli oggetti delle API Kubernetes sono rappresentati come costrutti. Possiamo utilizzare quest'ultimi per definire servizi e implementazioni. L'output generato da CDK8s è un file config Kubernetes. Userai l'output di questo modulo e lo integrerai con il codice AWS CDK dei moduli precedenti per implementare la tua applicazione.
Cosa imparerai
- Utilizzo dei costrutti CDK8s per definire gli oggetti delle API Kubernetes
- Definizione dei servizi e delle implementazioni tramite CDK8s
- Generazione di config Kubernetes tramite CDK8s
Tempo richiesto per il completamento
5 minuti
Prerequisiti del modulo
- Account AWS con accesso da amministratore**
- Browser consigliato: l'ultima versione di Chrome o Firefox
[**]Gli account creati nelle ultime 24 ore potrebbero non avere ancora accesso a tutti servizi richiesti per questo tutorial.
Implementazione
Definizione dell'applicazione
Da questo passaggio modificheremo main.py per definire l'applicazione CDK8s. Dovrebbe avere questo aspetto dopo l'inizializzazione:
#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart
class MyChart(Chart):
def __init__(self, scope: Construct, id: str):
super().__init__(scope, id)
# define resources here
app = App()
MyChart(app, "cdk8s")
app.synth()
Per implementare la tua applicazione, sono 4 i passaggi da seguire:
- Importa la libreria k8s per aiutare a generare le stringhe per il file config Yaml.
- Definisci il set di etichette da applicare ai pod per utilizzarle nella ricerca dei servizi.
- Definisci un'implementazione - il container sul cluster si avvierà, ma non verrà configurato per ricevere il traffico dal bilanciatore del carico.
- Definisci un servizio per esporre l'implementazione al bilanciatore del carico.
Le etichette sono coppie chiave/valore allegate agli oggetti Kubernetes. Aggiungerai tag ai pod come parte dell'implementazione per eseguirli, e il ReplicationController farà uso delle stesse etichette per selezionare i pod durante la creazione del servizio per esporli al bilanciatore del carico. Per fare ciò, utilizza il codice etichetta = {"app": "cdk8s"}.
Userai quindi queste etichette per l'implementazione. Un'implementazione in Kubernetes è una dichiarazione esplicita sulle unità di implementazione e lo stato desiderato. Questa guida farà uso di un'applicazione esemplificativa ospitata sulla galleria pubblica di Amazon ECR. L'URL per l'immagine del container che andremo a estrarre è public.ecr.aws/s9u7u6x1/sample app 001:no-db.
Per creare l'implementazione e il servizio, aggiorna main.py aggiungendo from imports import k8s all'inizio del file sotto le altre importazioni, e incollando il seguente codice qui sotto # define resources here. Il tuo file dovrebbe ora avere questo aspetto:
#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart
from imports import k8s
class MyChart(Chart):
def __init__(self, scope: Construct, id: str):
super().__init__(scope, f"{id}-deployment")
# define resources here
# Label used for tagging pods to link in the service
label = {"app": "cdk8s"}
# Creates the deployment to spin up pods with your container
k8s.KubeDeployment(self, 'deployment',
spec=k8s.DeploymentSpec(
replicas=2,
selector=k8s.LabelSelector(match_labels=label),
template=k8s.PodTemplateSpec(
metadata=k8s.ObjectMeta(labels=label),
spec=k8s.PodSpec(containers=[
k8s.Container(
name='cdk8s',
image='public.ecr.aws/s9u7u6x1/sample_app_001:no-db',
ports=[k8s.ContainerPort(container_port=80)])]))))
# Creates the service to expose the pods to traffic from the loadbalancer
super().__init__(scope, f"{id}-service")
k8s.KubeService(self, 'service',
spec=k8s.ServiceSpec(
type='LoadBalancer',
ports=[k8s.ServicePort(port=80, target_port=k8s.IntOrString.from_number(80))],
selector=label))
app = App()
MyChart(app, "cdk8s")
app.synth()
Noterai che in questo metodo viene effettuata due volte una chiamata a super(). Questo crea il file Yaml con il nome specificato e aggiunge eventuali config generate dopo quel punto chiamando il costruttore della classe genitore da cui questa classe eredita. Questo genererà un file per la config del servizio e un secondo file per l'implementazione.
Ora puoi eseguire cdk8s synth per generare i file config. L'ouput avrà questo aspetto:
cdk8s synth
dist/cdk8s-deployment.k8s.yaml
dist/cdk8s-service.k8s.yaml
Conclusione
In questo modulo, hai imparato come generare file di configurazione di Kubernetes tramite CDK8s. La tua applicazione è divisa in un'implementazione e in un servizio, ognuno con il proprio file config.
Ora sei pronto ad aggiornare il progetto CDK per fare riferimento a questi file e usare kubectl per implementarli nel cluster EKS.
A seguire: Implementazione con CDK