Nota:

Esegui Kubernetes su Oracle Linux

Introduzione

Kubernetes è greco per pilota o elmista - in altre parole, la persona che segue comandi e guida una nave verso il suo obiettivo finale (anziché essere il capitano che dà ordini). A tal fine, Kubernetes è una piattaforma open source estendibile per la distribuzione, la gestione e la scalabilità delle applicazioni gestite in container. Raggiunge questo risultato utilizzando diversi strumenti della riga di comando. In questo laboratorio viene utilizzato uno di quelli denominati kubectl insieme ai file YAML per definire gli attributi richiesti per l'organizzazione che distribuisce l'applicazione e capire come impostare e gestire l'applicazione una volta completata la distribuzione.

Tutte le distribuzioni in un cluster Kubernetes vengono rappresentate come oggetti. Questi oggetti distribuiti utilizzano file YAML basati su testo per fornire i dettagli dello stato richiesto di qualsiasi applicazione distribuita nel cluster. Questi file YAML possono descrivere quanto segue:

Questo terzo punto, anche se importante, è complicato senza comprendere le basi. Pertanto, ci fermeremo per ora e gestiremo questo argomento in futuri tutorial.

Questa esercitazione funziona con Kubernetes in esecuzione in un Oracle Cloud Native Environment compatto su Oracle Linux. L'intento non è quello di essere un "sportello unico" per tutto il necessario per amministrare un'installazione di produzione. Presenta invece le competenze necessarie per distribuire un'applicazione campione funzionante.

Obiettivi

Prerequisiti

Un sistema Oracle Linux 8 o versione successiva con la seguente configurazione:

Configura ambiente Lab

Nota: quando si utilizza l'ambiente di laboratorio gratuito, vedere Oracle Linux Lab Basics per le connessioni e altre istruzioni d'uso.

Informazioni: l'ambiente di laboratorio gratuito distribuisce Oracle Cloud Native Environment sul nodo fornito, pronto per la creazione di ambienti. Il completamento di questa distribuzione richiede circa 8-10 minuti dopo l'avvio. Pertanto, potrebbe essere necessario uscire durante l'esecuzione e tornare a completare il laboratorio.

  1. Se non è già connesso, aprire un terminale e connettersi tramite ssh al sistema ocne-node01.

    ssh oracle@<ip_address_of_ol_node>
    
  2. Verificare che l'ambiente sia pronto.

    kubectl get pods -A
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get pods -A
    NAMESPACE                      NAME                                             READY   STATUS    RESTARTS   AGE
    externalip-validation-system   externalip-validation-webhook-7988bff847-8ws2v   1/1     Running   0          3m18s
    kube-system                    coredns-7cbc77dbc7-qxqth                         1/1     Running   0          3m18s
    kube-system                    coredns-7cbc77dbc7-r9bgj                         1/1     Running   0          3m18s
    kube-system                    etcd-ocne-node01                                 1/1     Running   0          3m37s
    kube-system                    kube-apiserver-ocne-node01                       1/1     Running   0          3m37s
    kube-system                    kube-controller-manager-ocne-node01              1/1     Running   0          3m37s
    kube-system                    kube-flannel-ds-vcwzn                            1/1     Running   0          3m18s
    kube-system                    kube-proxy-7lx59                                 1/1     Running   0          3m18s
    kube-system                    kube-scheduler-ocne-node01                       1/1     Running   0          3m37s
    kubernetes-dashboard           kubernetes-dashboard-5d5d4947b5-7pffh            1/1     Running   0          3m18s
    

Creare una distribuzione su un pod e i dettagli delle richieste

In Kubernetes, deployment è un termine tecnico che si riferisce a un file che disciplina il comportamento e le caratteristiche di un pod. Gli amministratori utilizzano le distribuzioni per indicare all'applicazione cosa fare e Kubernetes esegue il task per raggiungere tale stato.

Gli esempi utilizzano un'immagine che contiene un piccolo server Web nginx che riporta l'IP di origine delle richieste ricevute tramite un'intestazione HTTP.

  1. Creare una distribuzione di echoserver.

    kubectl create deployment test --image=k8s.gcr.io/echoserver:1.4
    
  2. Elencare tutti i pod nel cluster.

    kubectl get pods
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get pods
    NAME                    READY   STATUS    RESTARTS   AGE
    test-6c486b6d76-467p7   1/1     Running   0          53s
    

    Nota: il nome pod contiene un valore suffisso che varia ogni volta che si distribuisce il pod.

  3. Utilizzare JSONPath per assegnare il nome pod a una variabile.

    TESTPOD=$(kubectl get pods -o jsonpath='{ $.items[*].metadata.name }')
    
  4. Eseguire il test dell'assegnazione della variabile.

    Il comando kubectl get pods consente anche di passare un nome pod come parametro per visualizzare solo le informazioni per il pod specifico.

    kubectl get pods $TESTPOD
    
  5. Richiedi le informazioni selezionate sul pod.

    kubectl get pod $TESTPOD --output custom-columns=NAME:metadata.name,NODE_IP:status.hostIP,POD_IP:status.podIP
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get pod $TESTPOD --output custom-columns=NAME:metadata.name,NODE_IP:status.hostIP,POD_IP:status.podIP
    NAME                    NODE_IP      POD_IP
    test-6c486b6d76-467p7   10.0.0.140   10.244.0.7
    
  6. Recupera i dettagli del pod.

    kubectl describe pod $TESTPOD
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl describe pod test-6c486b6d76-467p7
    Name:         test-6c486b6d76-467p7
    Namespace:    default
    Priority:     0
    Node:         ocne-node01/10.0.0.140
    Start Time:   Tue, 28 Jun 2022 19:21:27 +0000
    Labels:       app=test
                  pod-template-hash=6c486b6d76
    Annotations:  <none>
    Status:       Running
    IP:           10.244.0.7
    IPs:
      IP:           10.244.0.7
    Controlled By:  ReplicaSet/test-6c486b6d76
    Containers:
      echoserver:
        Container ID:   cri-o://5b7866a27722ec0998cd9fe74945fb82b4dd9ed4c5c80671d9e8aa239c7008a4
        Image:          k8s.gcr.io/echoserver:1.4
        Image ID:       k8s.gcr.io/echoserver@sha256:5d99aa1120524c801bc8c1a7077e8f5ec122ba16b6dda1a5d3826057f67b9bcb
        Port:           <none>
        Host Port:      <none>
        State:          Running
          Started:      Tue, 28 Jun 2022 19:21:30 +0000
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-d67ph (ro)
    Conditions:
      Type              Status
      Initialized       True 
      Ready             True 
      ContainersReady   True 
      PodScheduled      True 
    Volumes:
      kube-api-access-d67ph:
        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
      ----    ------     ----  ----               -------
      Normal  Scheduled  21m   default-scheduler  Successfully assigned default/test-6c486b6d76-467p7 to ocne-node01
      Normal  Pulling    21m   kubelet            Pulling image "k8s.gcr.io/echoserver:1.4"
      Normal  Pulled     21m   kubelet            Successfully pulled image "k8s.gcr.io/echoserver:1.4" in 3.102843235s
      Normal  Created    21m   kubelet            Created container echoserver
      Normal  Started    21m   kubelet            Started container echoserver
    

Creare una distribuzione con un file YAML

L'uso dei file manifesto di distribuzione Kubernetes definisce come distribuire un'applicazione nel cluster Kubernetes e fornisce l'accesso ad altre funzionalità Kubernetes quali la self-healing, la scalabilità, il controllo delle versioni e gli aggiornamenti in sequenza. Questo laboratorio non affronterà questa funzionalità più complessa fornita in Kubernetes. Viene invece illustrato come utilizzare un file manifesto di base per distribuire un'applicazione.

Un file manifest di distribuzione viene scritto in formato JSON o YAML. Sebbene sia possibile utilizzare JSON, YAML è molto più diffuso a causa della sua flessibilità, leggibilità e capacità di includere commenti descrittivi per chiarire gli aspetti della distribuzione finale.

Quando si esegue una distribuzione, un pod viene aggiornato mediante una serie di aggiornamenti dichiarativi per raggiungere lo stato desiderato per l'applicazione in esecuzione.

Sebbene tutti i dettagli di deployment.yaml siano essenziali per consentire a Kubernetes di attivare la richiesta di distribuzione, in questi casi vengono evidenziati alcuni dei componenti più importanti:

Per ulteriori informazioni su questi altri campi, consultare la documentazione relativa alle distribuzioni a monte.

  1. Creare il file di distribuzione.

    cat << 'EOF' | tee mydeployment.yaml > /dev/null
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: echo1
    spec:
     selector:
       matchLabels: 
         app: echo1
     template:
       metadata:
         labels:
           app: echo1
       spec:
         containers:
         - name: echoserver
           image: k8s.gcr.io/echoserver:1.4
    EOF
    
  2. Distribuire l'applicazione su un pod utilizzando il file manifest di distribuzione.

    kubectl apply -f mydeployment.yaml
    

    Output di esempio:

    [[oracle@ocne-node01 ~]$ kubectl apply -f mydeployment.yaml
    deployment.apps/echo1 created
    
  3. Elencare il pod gestito dalla distribuzione.

    kubectl get pods -l app=echo1
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get pods -l app=echo1
    NAME                     READY   STATUS    RESTARTS   AGE
    echo1-7cbf6dfb96-4cgq7   1/1     Running   0          24s
    
    • L'opzione -l o --selector= fornisce un selettore (interrogazione etichetta) su cui applicare il filtro. Questa opzione supporta '=', '==' e '!='.(ad esempio, -l key1=value1,key2=value2)

    Nota: promemoria per ricordare che il nome pod contiene un valore suffisso che varia ogni volta che si distribuisce il pod.

  4. Verifica della distribuzione riuscita.

    kubectl get deploy echo1
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get deploy echo1
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    echo1   1/1     1            1           16m
    
    • L'opzione deploy è di breve durata per deployments. Il comando kubectl consente di utilizzare una sintassi abbreviata per molte delle relative opzioni. Per ulteriori dettagli, eseguire kubectl --help.
  5. Restituire informazioni più dettagliate per una distribuzione.

    kubectl describe deploy echo1
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl describe deploy echo1
    Name:                   echo1
    Namespace:              default
    CreationTimestamp:      Tue, 28 Jun 2022 20:20:40 +0000
    Labels:                 <none>
    Annotations:            deployment.kubernetes.io/revision: 1
    Selector:               app=echo1
    Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=echo1
      Containers:
       echoserver:
        Image:        k8s.gcr.io/echoserver:1.4
        Port:         <none>
        Host Port:    <none>
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   echo1-7cbf6dfb96 (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  23m   deployment-controller  Scaled up replica set echo1-7cbf6dfb96 to 1
    

Utilizza il servizio ClusterIP

Nonostante la corretta distribuzione della echo1 distribuzione in un pod, non è molto utile se gli utenti finali non possono accedervi internamente o in rete. Tale accesso è utile quando un servizio espone una distribuzione alla rete.

Il tipo di servizio Kubernetes predefinito è ClusterIP. Tuttavia, non puoi accedere a un servizio ClusterIP da Internet, ma puoi utilizzare il proxy Kubernetes. Per ulteriori informazioni sulle proxy, consulta la documentazione a monte.

Questa sezione espone echo1 e crea una comunicazione tra servizi all'interno del cluster utilizzando un pod Oracle Linux, dimostrando la comunicazione tra i componenti front-end e back-end dell'applicazione.

  1. Recupera una lista di nodi.

    kubectl get nodes
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get nodes
    NAME          STATUS   ROLES    AGE     VERSION
    ocne-node01   Ready    <none>   4h27m   v1.22.8+1.el8
    

    I nodi sono sistemi fisici o Virtual Machine per la distribuzione di pod.

  2. Eseguire una query sulla modalità kube-proxy.

    L'esecuzione di kube-proxy in modalità iptables determina che i pacchetti inviati a un servizio ClusterIP non devono mai essere di origine NAT.

    curl -w "\n" http://localhost:10249/proxyMode
    
    • kube-proxy ascolta sulla porta 10249 sul nodo in cui è in esecuzione.
  3. Creare il servizio ClusterIP.

    kubectl expose deployment echo1 --name=clusterip-service --port=80 --target-port=8080
    
  4. Recupera l'indirizzo IP assegnato al cluster.

    kubectl get svc clusterip-service
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get svc clusterip-service
    NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    clusterip-service   ClusterIP   10.108.107.54   <none>        80/TCP    13s
    

    Prendere nota dell'indirizzo CLUSTER-IP nell'output.

  5. Creare un pod nello stesso cluster per accedere al servizio ClusterIP.

    kubectl run ol -it --image=oraclelinux:8 --restart=Never --rm
    

    Questo comando creerà un pod che eseguirà un contenitore Oracle Linux 8 in modalità interattiva e mostrerà un prompt di comando.

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl run ol -it --image=oraclelinux:8 --restart=Never --rm
    If you don't see a command prompt, try pressing enter.
    [root@ol /]#
    
  6. Ottieni l'indirizzo IP del contenitore Oracle Linux.

    ip -br a
    

    Output di esempio:

    [root@ol /]# ip -br a
    lo               UNKNOWN        127.0.0.1/8 ::1/128 
    eth0@if12        UP             10.244.0.9/24 fe80::146f:2cff:fe73:b528/64
    
  7. Verificare il server Web nginx in echo1.

    curl -w "\n" <CLUSTER-IP_ADDRESS>
    

    Utilizzare l'indirizzo CLUSTER-IP dell'output precedente.

    Output di esempio:

    [root@ol /]# curl -w "\n" 10.108.107.54
    CLIENT VALUES:
    client_address=10.244.0.9
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://10.108.107.54:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=10.108.107.54
    user-agent=curl/7.61.1
    BODY:
    -no body in request-
    

    L'output mostra la richiesta di Oracle Linux e viene gestito dal servizio ClusterIP utilizzando la distribuzione echo1.

  8. Uscire dal contenitore.

    exit
    

    Output di esempio:

    [root@ol /]# exit
    exit
    pod "ol" deleted
    

Utilizza il servizio NodePort con un file YAML

In precedenza la distribuzione echo1 è stata esposta utilizzando il comando kubectl expose ed è stato eseguito l'accesso interno utilizzando ClusterIP. Ora verrà utilizzato un servizio NodePort, che rappresenta l'approccio di uno sviluppatore per avere l'accesso esterno di echo1 sulla rete.

Il servizio NodePort apre una porta specifica su tutti i nodi e inoltra qualsiasi traffico verso tale porta al servizio.

La procedura standard Nota non consiglia di utilizzare NodePort per i sistemi di produzione per diversi motivi, in particolare:

  1. Definire un file di servizio.

    cat << 'EOF' | tee myservice.yaml > /dev/null
    apiVersion: v1
    kind: Service
    metadata:
      name: echo1-nodeport
      namespace: default
    spec:
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - nodePort: 32387
        port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: echo1
      sessionAffinity: None
      type: NodePort
    status:
      loadBalancer: {}
    EOF
    
    • type: rende il servizio disponibile per le richieste di rete da client esterni. I valori validi sono nodePort, LooadBalancer.
    • nodePort: la porta esterna utilizzata per accedere al servizio.
    • porta: numero di porta esposto all'interno del cluster.
    • targetPort: la porta su cui è in ascolto il contenitore.
  2. Creare il servizio.

    kubectl apply -f myservice.yaml
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl apply -f myservice.yaml 
    service/echo1 created
    

    Nota: è comune che le definizioni di distribuzione e servizio siano incluse nello stesso file YAML per semplificare la gestione di un'applicazione. L'utilizzo di file separati in questi passaggi è solo a scopo di formazione. Quando vengono combinati in un singolo file, utilizzare la sintassi YAML --- per separarli.

  3. Visualizza in che modo Kubernetes memorizza il servizio appena creato.

    kubectl get service echo1-nodeport -o yaml
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get service echo1-nodeport -o yaml
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"echo1-nodeport","namespace":"default"},"spec":{"ipFamilies":["IPv4"],"ipFamilyPolicy":"SingleStack","ports":[{"nodePort":32387,"port":80,"protocol":"TCP","targetPort":8080}],"selector":{"app":"echo1"},"sessionAffinity":"None","type":"NodePort"},"status":{"loadBalancer":{}}}
      creationTimestamp: "2022-06-29T00:14:30Z"
      name: echo1-nodeport
      namespace: default
      resourceVersion: "6242"
      uid: 3171dda6-05b8-45b8-a0ba-457eab6e4f71
    spec:
      clusterIP: 10.100.17.53
      clusterIPs:
      - 10.100.17.53
      externalTrafficPolicy: Cluster
      internalTrafficPolicy: Cluster
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - nodePort: 32387
        port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: echo1
      sessionAffinity: None
      type: NodePort
    status:
      loadBalancer: {}
    
  4. Descrivere il servizio Pods.

    kubectl describe svc echo1-nodeport
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl describe svc echo1-nodeport
    Name:                     echo1-nodeport
    Namespace:                default
    Labels:                   <none>
    Annotations:              <none>
    Selector:                 app=echo1
    Type:                     NodePort
    IP Family Policy:         SingleStack
    IP Families:              IPv4
    IP:                       10.100.17.53
    IPs:                      10.100.17.53
    Port:                     <unset>  80/TCP
    TargetPort:               8080/TCP
    NodePort:                 <unset>  32387/TCP
    Endpoints:                10.244.0.7:8080
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>
    
  5. Recupera gli endpoint dell'oggetto.

    Gli endpoint tengono traccia degli indirizzi IP dei pod ai quali il servizio invia il traffico.

    kubectl get endpoints echo1-nodeport
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get endpoints echo1-nodeport
    NAME             ENDPOINTS         AGE
    echo1-nodeport   10.244.0.7:8080   8m39s
    
  6. Elencare i pod che eseguono l'applicazione.

    kubectl get pods --output=wide
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get pods -o wide
    NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE          NOMINATED NODE   READINESS GATES
    echo1-7cbf6dfb96-mlds4   1/1     Running   0          80m   10.244.0.7   ocne-node01   <none>           <none>
    test-6c486b6d76-v4htj    1/1     Running   0          83m   10.244.0.6   ocne-node01   <none>           <none>
    

    L'indirizzo IP in questa lista per echo1 deve corrispondere al valore visualizzato nel passo precedente per gli endpoint, che è l'indirizzo IP del pod in esecuzione sul nodo specificato.

  7. Elencare i servizi.

    kubectl get svc -o wide
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ kubectl get svc -o wide
    NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE   SELECTOR
    clusterip-service   ClusterIP   10.107.31.75   <none>        80/TCP         78m   app=echo1
    echo1-nodeport      NodePort    10.100.17.53   <none>        80:32387/TCP   10m   app=echo1
    kubernetes          ClusterIP   10.96.0.1      <none>        443/TCP        88m   <none>
    

    Questo comando utilizzava l'opzione alternativa di -o wide anziché --output=wide.

    Prendere nota di NodePort, impostato su 32387 per il servizio echo1-nodeport.

  8. Recupera l'indirizzo IP del nodo.

    L'ambiente di laboratorio gratuito viene eseguito su un singolo nodo ocne-node01.

    ip -br a
    

    Nell'ambiente di laboratorio gratuito, l'indirizzo IP deve restituire l'indirizzo IP privato dell'istanza 10.0.0.140 assegnato all'interfaccia ens3.

  9. Utilizzare JSONPath per assegnare la variabile NodePort.

    NODEPORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services echo1-nodeport)
    
  10. Utilizzare JSONPath per assegnare l'IP del nodo a una variabile.

    NODES=$(kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }')
    
  11. Creare una regola firewall.

    Questa regola consente il traffico su node:nodeport, dove node è l'indirizzo IP host del sistema o della virtual machine su cui è in esecuzione il pod.

    sudo firewall-cmd --permanent --add-port=$NODEPORT/tcp
    sudo firewall-cmd --reload
    

    Dopo --reload, il daemon firewall ricarica la configurazione, che include iptables. Poiché kube-proxy dipende da iptables, ci sarà un ritardo nella risposta da Servizi.

  12. Utilizzare l'indirizzo del nodo e la porta del nodo per verificare l'applicazione.

    curl -s $NODES:$NODEPORT
    

    Output di esempio:

    [oracle@ocne-node01 ~]$ curl -s $NODES:NODEPORT
    CLIENT VALUES:
    client_address=10.244.0.1
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://10.0.0.140:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=10.0.0.140:32387
    user-agent=curl/7.61.1
    BODY:
    

    L'output mostra la richiesta dall'instradamento del nodo locale tramite il servizio NodePort, tramite kube-proxy e il pod che esegue la distribuzione echo1.

    Nota: se l'output sembra rimanere in sospeso, ciò è dovuto alla ricarica precedente del firewall. Digitare Ctrl-C e riprovare.

Rimuovi distribuzioni e servizi

Una volta eseguiti i servizi o la distribuzione, rimuoverli da Kubernetes.

  1. Rimuovi servizi.

    kubectl delete svc clusterip-service echo1-nodeport
    
  2. Rimuovi distribuzioni.

    kubectl delete deployments echo1
    kubectl delete deploy test
    

La rimozione degli oggetti può essere eseguita singolarmente o in gruppi. Per ulteriori informazioni, consultare il manuale di riferimento di Kubernetes.

Riepilogo

Questo laboratorio offre solo la sintesi più breve delle presentazioni alla funzionalità che l'utilizzo di un servizio di orchestrazione cloud nativo come Kubernetes garantisce a qualsiasi organizzazione che utilizzi Kubernetes per gestire le distribuzioni dei container. Questi esercizi forniscono il primo passo su quello che sarà probabilmente un lungo viaggio nella flessibilità che l'uso di Kubernetes può offrire.

Per ulteriori informazioni

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi ad altri contenuti per la formazione gratuita sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione sul prodotto, visitare Oracle Help Center.