Informazioni sul provisioning di un cluster Kubernetes ARM su OCI e sulla distribuzione di un sito Web Nginx

Puoi eseguire il provisioning di un cluster Kubernetes ARM in OCI e poi distribuire un sito Web Nginx manualmente o automaticamente utilizzando uno script Terraform. Una volta distribuito, eseguire il test del sito Web è una semplice operazione di avvio nel browser locale.

Provisioning manuale di un cluster OKE con pool ARM

Puoi eseguire facilmente il provisioning di un cluster Kubernetes e creare un set di pool eterogenei in OCI, quindi distribuire un sito Web Nginx dalla console OCI. Questo approccio è utile se non si ha familiarità con l'automazione dell'infrastruttura e si desidera utilizzare la console.

Dalla console OCI, effettuare le operazioni riportate di seguito.
  1. In primo luogo, eseguire il provisioning del cluster OKE:
    1. Nella sezione Servizi per sviluppatori selezionare Cluster Kubernetes (OKE).

      Viene visualizzata la pagina Crea cluster.

    2. Selezionare Creazione rapida per eseguire il provisioning dell'infrastruttura cluster Kubernetes richiesta in modo rapido e sicuro.

      Viene visualizzata la pagina Creazione rapida.

    3. Selezionare la forma ARM (VM.Standard.A1.Flex) per i nodi di lavoro. Questa forma ti consente di configurare sia il numero di OCPU che la quantità di memoria allocata, permettendoti di ottimizzare le risorse (e in modo commisurato al prezzo) in base alle tue esigenze specifiche.

      Nota:

      Se si sta creando questo cluster per un sito Web HA (High Availability), mantenere al minimo le risorse. Se necessario, puoi eseguire lo scale-up del numero di nodi in un secondo momento.
    4. Una volta eseguito il provisioning del cluster, puoi aggiungere pool aggiuntivi con macchine per la specializzazione che, a loro volta, puoi associare a immagini specifiche nel tuo file di distribuzione; ad esempio, puoi impostare un pool di nodi con GPU per i task ML condotti dal sito Web (ad esempio, suggerimenti sui contenuti o un backend di riconoscimento facciale).

      Per aggiungere altri pool di nodi, è sufficiente aggiornare la forma della sezione Pool di nodi nella pagina dei dettagli del cluster.

      1. Andare al menu Risorse.
      2. Fare clic su Pool di nodi, quindi su Aggiungi nuovo pool.
      3. Modificare il pool in base alle esigenze aggiungendo/modificando le forme del nodo.
  2. A questo punto, utilizzare un file di distribuzione per accedere al cluster e avviare la distribuzione dell'ambiente Nginx:
    1. Passare al cluster e fare clic su Accedi al cluster.

      Viene visualizzata la schermata di accesso rapido. Eseguire i passi 1 e 2 (indicati sullo schermo) per continuare. Se si utilizza l'accesso cloud shell, non è necessario impostare e configurare l'ambiente kubectl sul computer. Questo processo avvia un emulatore di terminale Web e lo configura per l'ambiente in uso. Come indicato nel passo 2 della schermata, incollare il comando CLI OCI fornito in quel momento configurerà kubectl per accedere al nuovo cluster.

    2. Successivamente, verificare che sia stato eseguito il provisioning dei pod; immettere:

      Nota:

      Per comodità con tutti i comandi di questa guida, è possibile fare clic su Copia nell'esempio e incollare il comando direttamente al prompt.
      kubectl get nodes -o wide
      Dovresti vedere i due nodi e una forma del computer che indica che sono in esecuzione su ARM. Ad esempio:
      NAME        STATUS ROLES AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION                   CONTAINER-RUNTIME 
      10.0.10.129 Ready  node  3m57s   v.1.19.7  10.0.10.129   <none>        Oracle Linux Server   7.9 5.4.17-2102.el7uek.aarch64   docker://19.3.11 
      10.0.10.153 Ready  node  3m17s   v.1.19.7  10.0.10.153   <none>        Oracle Linux Server   7.9 5.4.17-2102.el7uek.aarch64   docker://19.3.11
      Se è necessario eseguire lo scale up del numero di nodi, nella schermata Pool di nodi fare clic su Scale e, in Numero di nodi, immettere il numero necessario di nodi. OCI eseguirà l'attivazione e la registrazione di tali attività.
  3. Infine, distribuisci il sito Web Nginx ed esponilo tramite un load balancer:
    1. Distribuire una distribuzione Nginx replica 2 con un set di ascolto del servizio sulla porta 80; immettere:
       kubectl apply -f https://k8s.io/examples/application/deployment.yaml 
    2. Verificare la distribuzione; immettere:
      kubectl describe deployment nginx-deployment
      Dovrebbe essere presente un output simile al seguente:
      ----
      kubectl describe deployment nginx-deployment
      
      Name:                   nginx-deployment
      Namespace:              default
      CreationTimestamp:      Tue, 03 Jan 2023 17:41:27 +0000
      Labels:                 <none>
      Annotations:            deployment.kubernetes.io/revision: 1
      Selector:               app=nginx
      Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
      StrategyType:           RollingUpdate
      MinReadySeconds:        0
      RollingUpdateStrategy:  25% max unavailable, 25% max surge
      Pod Template:
        Labels:  app=nginx
        Containers:
         nginx:
          Image:        nginx:1.14.2
          Port:         80/TCP
          Host Port:    0/TCP
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type           Status  Reason
        ----           ------  ------
        Available      True    MinimumReplicasAvailable
        Progressing    True    NewReplicaSetAvailable
      OldReplicaSets:  <none>
      NewReplicaSet:   nginx-deployment-6595874d85 (2/2 replicas created)
      Events:
        Type    Reason             Age   From                   Message
        ----    ------             ----  ----                   -------
        Normal  ScalingReplicaSet  15s   deployment-controller  Scaled up replica set nginx-deployment-6595874d85 to 2
      
      ----
      
    3. Esporre il servizio a Internet tramite un load balancer; immettere:
      kubectl expose deployment nginx-deployment --type=LoadBalancer --name=my-service 
    4. Verificare che il load balancer disponga di un indirizzo IP pubblico. Immettere:
      kubectl get services
      OCI attiverà il load balancer e assegnerà l'IP pubblico. Dopo alcuni istanti, dovresti vedere qualcosa come questo output:
      NAME        TYPE          CLUSTER-IP     EXTERNAL-IP    PORT(S)              AGE 
      kubernetes  ClusterIP     10.96.0.1      <none>         443/TCP, 12250/TCP   16m 
      nginx-lb    LoadBalancer  10.96.224.64   138.2.218.135  80:30343/TCP         3m1s

Provisioning e distribuzione di un cluster OKE con un pool ARM con Ampere A1

Puoi eseguire automaticamente il provisioning del cluster OKE con un pool ARM e poi distribuire un sito Web Nginx utilizzando uno script Terraform fornito su GitHub. Lo script eseguirà il provisioning di un cluster con due nodi (nello stesso dominio di disponibilità) su due OCPU. Il passo di configurazione mostra come modificare il numero di nodi e le OCPU. Lo script eseguirà quindi il provisioning di Nginx (2 pod) ed esporlo dietro un load balancer.
Per eseguire il provisioning del cluster e distribuire un sito Web, attenersi alla procedura riportata di seguito.
  1. In primo luogo, devi configurare il cluster.
    1. Assicurarsi di disporre di una tenancy OCI con un compartimento OCI.
    2. Eseguire il login alla console OCI, aprire una shell dei comandi ed eseguire i comandi riportati di seguito.
      git clone https://github.com/badr42/OKE_A1
      cd OKE_A1
      export TF_VAR_tenancy_ocid='tenancy-ocid'
      export TF_VAR_compartment_ocid='comparment-ocid'
      export TF_VAR_region='home-region'
      <optional>
      ### Select Availability Domain, zero based, if not set it defaults to 0, 
      ### this allows you to select an AD that has available A1 chips
      export TF_VAR_AD_number='0'
      
      ### Select number of nodes
      export TF_VAR_node_count='2'
      
      ### Set OCPU count per node
      export TF_VAR_ocpu_count='2'

    Utilizzare i valori specifici per tenancy-ocid, comparment-ocid e home-region.

  2. Creare il cluster; immettere:
    terraform init
    terraform plan
    terraform apply

    Dopo aver eseguito terraform apply, attendere circa 25 minuti per l'avvio del servizio.

  3. Dopo l'avvio del servizio, avviare il load balancer Nginx. Immettere:
    kubectl --kubeconfig kubeconfig get service
    Dovrebbe essere visualizzato un output del sistema simile al seguente:
    NAME        TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)              AGE
    kubernetes  ClusterIP      10.96.0.1       <none>           443/TCP, 12250/TCP   16m
    nginx-lb    LoadBalancer   10.96.224.64    138.2.218.135    80:30343/TCP       3m1s
  4. Al termine della distribuzione, terminare l'ambiente e immettere:
    terraform destroy

Esegui test della distribuzione

Per eseguire il test della distribuzione, aprire un browser Web e immettere l'indirizzo IP pubblico nella barra degli indirizzi. Se la distribuzione della pagina Web è riuscita, è possibile accedere alla nuova pagina iniziale del server Nginx.