Fase 4: distribuire l'applicazione su Amazon EKS e scrivere dati nella tabella - Amazon Keyspaces (per Apache Cassandra)

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à.

Fase 4: distribuire l'applicazione su Amazon EKS e scrivere dati nella tabella

In questa fase del tutorial, configuri la distribuzione di Amazon EKS per la tua applicazione e confermi che l'applicazione è in esecuzione e può connettersi ad Amazon Keyspaces.

Per distribuire un'applicazione su Amazon EKS, devi configurare tutte le impostazioni pertinenti in un file chiamatodeployment.yaml. Questo file viene quindi utilizzato da Amazon EKS per distribuire l'applicazione. I metadati del file devono contenere le seguenti informazioni:

  • Nome dell'applicazione: il nome dell'applicazione. Per questo tutorial, usiamomy-keyspaces-app.

  • Namespace Kubernetes, lo spazio dei nomi del cluster Amazon EKS. Per questo tutorial, utilizziamo. my-eks-namespace

  • Account del servizio Amazon EKS: nome dell'account del servizio Amazon EKS. Per questo tutorial, utilizziamomy-eks-serviceaccount.

  • image name il nome dell'immagine dell'applicazione. Per questo tutorial, usiamomy-keyspaces-app.

  • URI dell'immagine: l'URI dell'immagine Docker di Amazon ECR.

  • AWS account ID il tuo ID AWS account.

  • Ruolo IAM ARN l'ARN del ruolo IAM creato per l'account di servizio da assumere. Per questo tutorial, utilizziamo. my-iam-role

  • Regione AWS del cluster Amazon EKS in Regione AWS cui hai creato il cluster Amazon EKS.

In questa fase, distribuisci ed esegui l'applicazione che si connette ad Amazon Keyspaces e scrive i dati nella tabella.

  1. Configura il file deployment.yaml. È necessario sostituire i seguenti valori:

    • name

    • namespace

    • serviceAccountName

    • image

    • AWS_ROLE_ARN value

    • Il Regione AWS pin CASSANDRA_HOST

    • AWS_REGION

    È possibile utilizzare il seguente file come esempio.

    apiVersion: apps/v1 kind: Deployment metadata: name: my-keyspaces-app namespace: my-eks-namespace spec: replicas: 1 selector: matchLabels: app: my-keyspaces-app template: metadata: labels: app: my-keyspaces-app spec: serviceAccountName: my-eks-serviceaccount containers: - name: my-keyspaces-app image: 111122223333.dkr.ecr.aws-region.amazonaws.com/my-ecr-repository:latest ports: - containerPort: 8080 env: - name: CASSANDRA_HOST value: "cassandra.aws-region.amazonaws.com:9142" - name: CASSANDRA_DC value: "aws-region" - name: AWS_WEB_IDENTITY_TOKEN_FILE value: /var/run/secrets/eks.amazonaws.com/serviceaccount/token - name: AWS_ROLE_ARN value: "arn:aws:iam::111122223333:role/my-iam-role" - name: AWS_REGION value: "aws-region"
  2. Implementa deployment.yaml.

    kubectl apply -f deployment.yaml

    L'output dovrebbe essere simile a questo.

    deployment.apps/my-keyspaces-app created
  3. Verifica lo stato del Pod nel tuo namespace del cluster Amazon EKS.

    kubectl get pods -n my-eks-namespace

    L'output dovrebbe essere simile a quello di questo esempio.

    NAME READY STATUS RESTARTS AGE my-keyspaces-app-123abcde4f-g5hij 1/1 Running 0 75s

    Per ulteriori dettagli, è possibile utilizzare il seguente comando.

    kubectl describe pod my-keyspaces-app-123abcde4f-g5hij -n my-eks-namespace
    Name: my-keyspaces-app-123abcde4f-g5hij Namespace: my-eks-namespace Priority: 2000001000 Priority Class Name: system-node-critical Service Account: my-eks-serviceaccount Node: fargate-ip-192-168-102-209.ec2.internal/192.168.102.209 Start Time: Thu, 23 Nov 2023 12:15:43 +0000 Labels: app=my-keyspaces-app eks.amazonaws.com/fargate-profile=my-fargate-profile pod-template-hash=6c56fccc56 Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND Status: Running IP: 192.168.102.209 IPs: IP: 192.168.102.209 Controlled By: ReplicaSet/my-keyspaces-app-6c56fccc56 Containers: my-keyspaces-app: Container ID: containerd://41ff7811d33ae4bc398755800abcdc132335d51d74f218ba81da0700a6f8c67b Image: 111122223333.dkr.ecr.aws-region.amazonaws.com/my_eks_repository:latest Image ID: 111122223333.dkr.ecr.aws-region.amazonaws.com/my_eks_repository@sha256:fd3c6430fc5251661efce99741c72c1b4b03061474940200d0524b84a951439c Port: 8080/TCP Host Port: 0/TCP State: Running Started: Thu, 23 Nov 2023 12:15:19 +0000 Finished: Thu, 23 Nov 2023 12:16:17 +0000 Ready: True Restart Count: 1 Environment: CASSANDRA_HOST: cassandra.aws-region.amazonaws.com:9142 CASSANDRA_DC: aws-region AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN: arn:aws:iam::111122223333:role/my-iam-role AWS_REGION: aws-region AWS_STS_REGIONAL_ENDPOINTS: regional Mounts: /var/run/secrets/eks.amazonaws.com/serviceaccount from aws-iam-token (ro) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-fssbf (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: aws-iam-token: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 86400 kube-api-access-fssbf: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled 2m13s fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found Normal Scheduled 89s fargate-scheduler Successfully assigned my-eks-namespace/my-keyspaces-app-6c56fccc56-mgs2m to fargate-ip-192-168-102-209.ec2.internal Normal Pulled 75s kubelet Successfully pulled image "111122223333.dkr.ecr.aws-region.amazonaws.com/my_eks_repository:latest" in 13.027s (13.027s including waiting) Normal Pulling 54s (x2 over 88s) kubelet Pulling image "111122223333.dkr.ecr.aws-region.amazonaws.com/my_eks_repository:latest" Normal Created 54s (x2 over 75s) kubelet Created container my-keyspaces-app Normal Pulled 54s kubelet Successfully pulled image "111122223333.dkr.ecr.aws-region.amazonaws.com/my_eks_repository:latest" in 222ms (222ms including waiting) Normal Started 53s (x2 over 75s) kubelet Started container my-keyspaces-app
  4. Controlla i log del Pod per confermare che l'applicazione è in esecuzione e può connettersi alla tabella Amazon Keyspaces. Puoi farlo con il seguente comando. Assicurati di sostituire il nome della tua distribuzione.

    kubectl logs -f my-keyspaces-app-123abcde4f-g5hij -n my-eks-namespace

    Dovresti essere in grado di visualizzare le voci di registro dell'applicazione che confermano la connessione ad Amazon Keyspaces come nell'esempio seguente.

    2:47:20.553 [s0-admin-0] DEBUG c.d.o.d.i.c.metadata.MetadataManager - [s0] Adding initial contact points [Node(endPoint=cassandra.aws-region.amazonaws.com/1.222.333.44:9142, hostId=null, hashCode=e750d92)] 22:47:20.562 [s0-admin-1] DEBUG c.d.o.d.i.c.c.ControlConnection - [s0] Initializing with event types [SCHEMA_CHANGE, STATUS_CHANGE, TOPOLOGY_CHANGE] 22:47:20.564 [s0-admin-1] DEBUG c.d.o.d.i.core.context.EventBus - [s0] Registering com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper$$Lambda$812/0x0000000801105e88@769afb95 for class com.datastax.oss.driver.internal.core.metadata.NodeStateEvent 22:47:20.566 [s0-admin-1] DEBUG c.d.o.d.i.c.c.ControlConnection - [s0] Trying to establish a connection to Node(endPoint=cassandra.us-east-1.amazonaws.com/1.222.333.44:9142, hostId=null, hashCode=e750d92)
  5. Esegui la seguente query CQL sulla tabella Amazon Keyspaces per confermare che una riga di dati sia stata scritta nella tabella:

    SELECT * from aws.user;

    Verrà visualizzato l'output seguente:

    fname | lname | username | last_update_date ----------+-------+----------+----------------------------- random | k | test | 2023-12-07 13:58:31.57+0000