Ativar o isolamento de computação

Os aplicativos Kf podem ser implantados em nós dedicados no cluster. Esse recurso é obrigatório se você tiver circunstâncias em que queira ter mais controle sobre um nó que recebe um pod de aplicativo. Exemplo:

  • Se você estiver compartilhando o mesmo cluster para apps diferentes, mas quiser nós dedicados para um app específico.
  • Se você quiser nós dedicados a uma determinada organização (Kf Space).
  • Se você quiser segmentar um sistema operacional específico, como o Windows.
  • Se você quiser colocar os pods de dois serviços diferentes que se comunicam com frequência.

Para ativar o isolamento de computação, o Kf usa o nodeSelector do Kubernetes. Para usar esse recurso, primeiro adicione rótulos aos nós ou pools de nós que você quer que os pods de aplicativos acessem e adicione os mesmos rótulos qualificados ao Kf Space. Todos os aplicativos instalados nesse Space serão colocados nos nós com rótulos correspondentes.

O Kf cria um pod do Kubernetes para executar cada build do Kf. O recurso buildNodeSelector pode ser usado para isolar recursos de computação e executar somente os pods de build. Um caso de uso é isolar os pods de build para execução em nós com SSD enquanto executa os pods de apps em outros nós. O recurso BuildNodeSelectors otimiza recursos de computação e aumenta a flexibilidade no cluster. Consulte o capítulo "Configurar BuildNodeSelectors e um pool de nós de build" nesta página.

Configurar o nodeSelector em um cluster do Kf

Por padrão, o isolamento de computação fica desativado. Use o procedimento a seguir para configurar rótulos e o nodeSelector.

  1. Adicione um rótulo (distype=ssd) ao nó que você quer que os pods do aplicativo acessem.

    kubectl label nodes nodeid disktype=ssd
    
  2. Adicione o mesmo rótulo ao Kf Space. Todos os aplicativos implantados nesse Space são acessados nos nós qualificados.

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

    Adicione vários rótulos executando o mesmo comando novamente.

  3. Verifique se o rótulo está configurado.

    kf configure-space get-nodeselector space-name
    
  4. Exclua o rótulo do Space.

    kf configure-space unset-nodeselector space-name disktype
    

Substituir nodeSelector para kf Stacks

A implantação de aplicativos Kf pode ser ainda mais fundamentada com base no Stack (buildpack) que está sendo usado para compilar e empacotar o aplicativo. Por exemplo, se você quiser que os aplicativos criados com spaceStacksV2 acessem nós com o kernel do Linux 4.4.1. Os valores nodeSelector em um Stack substituirão os valores configurados no Space.

Para configurar o nodeSelector em uma pilha:

  1. Edite o config-defaults do cluster do Kf e adicione os rótulos.

    $ kubectl -n kf edit configmaps config-defaults
    
  2. Adicione nodeSelector à definição das pilhas.

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

Configurar o BuildNodeSelectors e um pool de nós do build

Os seletores de nó de build só são eficazes para substituir os seletores de nós dos pods de build. Eles não afetam os pods de apps. Por exemplo, se você especificar os seletores de nó no Space e os seletores de nó de build no Kfsystem, os pods de apps terão os seletores de nó do Space, enquanto os pods de build terão os seletores de nó de build do Kfsystem. Se os seletores de nó forem especificados apenas no Space, os pods de apps e de build terão o seletor de nós do Space.

  1. Adicione rótulos (disktype:ssd, por exemplo) aos nós a que você quer atribuir os pods de build.

    kubectl label nodes nodeid disktype=ssd
    
  2. Adicione/atualize os seletores de nó do build (no formato de pares de key:value) corrigindo a resposta automática KfSystem.

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

    Por exemplo, para adicionar disktype=ssd como o seletor do nó do build:

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