Abilitazione dell'isolamento del computing

È possibile eseguire il deployment di Kf Apps su nodi dedicati nel cluster. Questa funzionalità è obbligatoria nelle circostanze in cui potresti volere un maggiore controllo su un nodo su cui arriva un pod di app. Ad esempio:

  • Se condividi lo stesso cluster per app diverse, ma vuoi nodi dedicati per una determinata app.
  • Se vuoi nodi dedicati per una determinata organizzazione (Kf Space).
  • Se vuoi scegliere come target un sistema operativo specifico, come Windows.
  • se vuoi collocare i pod di due servizi diversi che comunicano di frequente.

Per abilitare l'isolamento dei calcoli, Kf utilizza nodeSelector di Kubernetes. Per utilizzare questa funzionalità, aggiungi prima le etichette sui nodi o i pool di nodi in cui vuoi che vengano indirizzati i tuoi pod dell'app, quindi aggiungi le stesse etichette idonee nello spazio Kf. Tutte le app installate in questo spazio vengono quindi inviate ai 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 compilazione. Un caso d'uso è isolare i pod di build in modo che vengano eseguiti su nodi con SSD, durante l'esecuzione dei pod dell'app su altri nodi. La funzionalità BuildNodeSelectors offre ottimizzazione delle risorse di calcolo e flessibilità nel cluster. Fai riferimento al capitolo "Configurare BuildNodeSelectors e un pool di nodi di build" in questa pagina.

Configurazione di nodeSelector in un cluster Kf

L'isolamento per il calcolo è disattivato per impostazione predefinita. Utilizza la procedura seguente per configurare etichette e nodeSelector.

  1. Aggiungi un'etichetta (distype=ssd) sul nodo in cui vuoi posizionare i pod delle applicazioni.

    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 atterranno quindi 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
    

Esegui l'override di nodeSelector per gli stack Kf

Il deployment delle app Kf può essere ulteriormente targetizzato in base allo stack (buildpack) utilizzato per creare e pacchettizzare l'app. Ad esempio, se vuoi che le tue applicazioni create con spaceStacksV2 abbiano come target nodi con kernel Linux 4.4.1, I valori nodeSelector in uno stack sostituiscono i valori configurati nello spazio.

Per configurare nodeSelector su uno stack:

  1. Modifica il config-defaults del tuo 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 di build

I selettori dei nodi di build sono efficaci solo per l'override dei selettori dei nodi per i pod della build, non influiscono sui pod dell'app. Ad esempio, se specifichi sia i selettori dei nodi nello spazio sia i selettori del nodo Build in Kfsystem, i pod dell'app avranno i selettori del nodo Spazio, mentre i pod di build avranno i selettori dei nodi Build di Kfsystem. Se i selettori dei nodi sono specificati solo nello spazio, i pod dell'app e della build avranno il selettore di nodi dello spazio.

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

    kubectl label nodes nodeid disktype=ssd
    
  2. Aggiungi/aggiorna i selettori del nodo di build (nel formato key:value coppie) applicando la 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 del nodo di build:

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