Abilitazione dell'isolamento del computing

Il deployment di Kf Apps può avvenire su nodi dedicati nel cluster. Questa funzionalità è obbligatoria se ritieni di dover avere un maggiore controllo su un nodo in cui viene eseguito un pod di app. Ad esempio:

  • Se condividi lo stesso cluster per app diverse ma vuoi una piattaforma nodi per una particolare app.
  • Se vuoi nodi dedicati per una determinata organizzazione (spazio Kf).
  • Se vuoi scegliere come target un sistema operativo specifico, ad esempio Windows.
  • Se vuoi collocare in modo co-localizzato i pod di due servizi diversi che si comunicano frequentemente.

Per abilitare l'isolamento del calcolo, Kf utilizza nodeSelector di Kubernetes. A usa questa funzionalità, aggiungi prima etichette sui nodi o sui pool di nodi in cui i tuoi pod di app per arrivare e poi aggiungere le stesse etichette di qualificazione su Kf Space. Tutte le app installate in questo spazio si trovano quindi sui nodi con etichette corrispondenti.

Kf crea un pod Kubernetes per eseguire ogni build Kf. La funzionalità buildNodeSelector può essere utilizzata per isolare le risorse di calcolo in modo da eseguire solo i pod di build. Un caso d'uso è isolare i pod Build in modo che vengano eseguiti su nodi con SSD, mentre i pod dell'app vengono eseguiti su altri nodi. La funzionalità BuildNodeSelectors offre ottimizzazione e flessibilità delle risorse di calcolo nel cluster. Fai riferimento al capitolo "Configura BuildNodeSelectors e un pool di nodi di compilazione" in questa pagina.

Configurare nodeSelector in un cluster Kf

Per impostazione predefinita, l'isolamento del calcolo è disattivato. Utilizza la seguente procedura per configurare le etichette e nodeSelector.

  1. Aggiungi un'etichetta (distype=ssd) sul nodo in cui vuoi che vengano inseriti i pod dell'applicazione terra.

    kubectl label nodes nodeid disktype=ssd
  2. Aggiungi la stessa etichetta allo spazio Kf. Tutte le app di cui è stato eseguito il deployment in questo spazio verranno quindi caricate sui nodi idonei.

    kf configure-space set-nodeselector space-name disktype ssd

    Puoi aggiungere più etichette eseguendo di nuovo lo stesso comando.

  3. Verifica che l'etichetta sia configurata.

    kf configure-space get-nodeselector space-name
  4. Elimina l'etichetta dallo spazio.

    kf configure-space unset-nodeselector space-name disktype

Sostituisci nodeSelector per gli stack Kf

Il deployment delle app Kf può essere ulteriormente scelto come target in base allo stack (buildpack) utilizzato per compilare e pacchettizzare l'app. Ad esempio, se vuoi che le applicazioni create con spaceStacksV2 vengano caricate su nodi con il kernel Linux 4.4.1, I valori nodeSelector in uno stack sostituiscono il valore i valori configurati sullo spazio.

Per configurare nodeSelector in una serie:

  1. Modifica config-defaults del cluster Kf e aggiungi le etichette.

    $ kubectl -n kf edit configmaps config-defaults
    
  2. Aggiungi nodeSelector alla definizione degli stack.

    .....
    .....
    spaceStacksV2: |
    - name:  cflinuxfs3
            image: cloudfoundry/cflinuxfs3
            nodeSelector:
                  OS_KERNEL: LINUX_4.4.1 
    .....
    .....
    

configura BuildNodeSelectors e un pool di nodi Build

I selettori dei nodi build sono efficaci solo per eseguire l'override dei selettori dei nodi per i pod Build e non influiscono sui pod dell'app. Ad esempio, se specifichi entrambi i selettori di nodi sullo spazio e i selettori dei nodi Build in Kfsystem, i pod dell'app avranno i selettori dei nodi Space, mentre i pod Build avranno i selettori dei nodi Build di Kfsystem. Se i selettori di nodi vengono specificati solo nello spazio, i pod App e Build avranno il selettore di nodi dello spazio.

  1. Aggiungi etichette (ad esempio disktype:ssd) ai nodi a cui vuoi assegnare i pod della build.

    kubectl label nodes nodeid disktype=ssd
  2. Aggiungi/aggiorna i selettori dei nodi Build (nel formato di coppie key:value) applicando le patch a KfSystem CR.

    kubectl patch kfsystem kfsystem --type='json' -p='[{'op': 'replace', 'path': '/spec/kf/config/buildNodeSelectors', 'value': {<key>:<value>}}]'

    Ad esempio, per aggiungere disktype=ssd come selettore dei nodi di build:

    kubectl patch kfsystem kfsystem --type='json' -p='[{'op': 'replace', 'path': '/spec/kf/config/buildNodeSelectors', 'value': {"disktype":"ssd"}}]'