コンピューティングの分離を有効にする

Kf アプリは、クラスタ内の専用ノードにデプロイできます。アプリ Pod が存在するノードでよりきめ細かい管理が必要な場合、この機能が必要になります。例:

  • 異なるアプリ間で同じクラスタを共有していても、特定のアプリで専用ノードが必要な場合。
  • 特定の組織(Kf Space)に専用のノードが必要な場合。
  • Windows などの特定のオペレーティング システムをターゲットにする場合。
  • 頻繁に通信を行う 2 つの異なるサービスの Pod を共存させる場合。

コンピューティングの分離を実現するため、Kf は Kubernetes nodeSelector を使用します。この機能を使用するには、まず、アプリ Pod を配置するノードまたはノードプールにラベルを追加し、同じ条件ラベルを Kf Space に追加します。この Space にインストールされているすべてのアプリが、一致するラベルを持つノードに配置されます。

Kf は各 Kf Build を実行する Kubernetes Pod を作成します。buildNodeSelector 機能を使用してコンピューティング リソースを分離し、Build Pod のみを実行できます。ユースケースの 1 つは、SSD を使用するノードでビルドするように Build Pod を分離し、他のノードで App Pod を実行することです。BuildNodeSelector 機能は、クラスタ内でのコンピューティング リソースの最適化と柔軟性を提供します。このページの「BuildNodeSelector と Build ノードプールの構成」をご覧ください。

Kf クラスタで nodeSelector を構成する

デフォルトでは、コンピューティングの分離は無効になっています。次の手順でラベルと nodeSelector を構成します。

  1. アプリケーション Pod を配置するノードにラベル(distype=ssd)を追加します。

    kubectl label nodes nodeid disktype=ssd
  2. Kf Space に同じラベルを追加します。この Space にデプロイされているすべてのアプリが、該当するノードに配置されます。

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

    複数のラベルを追加するには、同じコマンドを繰り返し実行します。

  3. ラベルが構成されていることを確認します。

    kf configure-space get-nodeselector space-name
  4. Space からラベルを削除します。

    kf configure-space unset-nodeselector space-name disktype

kf Stack の nodeSelector をオーバーライドする

アプリのビルドやパッケージ化にどの Stack(ビルドパック)を使用しているのかによって、Kf アプリのデプロイ先を限定できます。たとえば、spaceStacksV2 でビルドされたアプリケーションを Linux カーネル 4.4.1 のノードに配置できます。Stack の nodeSelector 値は、Space で構成された値をオーバーライドします。

Stack で nodeSelector を構成するには:

  1. Kf クラスタの config-defaults を編集して、ラベルを追加します。

    $ kubectl -n kf edit configmaps config-defaults
    
  2. nodeSelector を Stack の定義に追加します。

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

BuildNodeSelector と Build ノードプールを構成する

ビルドノード セレクタは、Build Pod のノードセレクタをオーバーライドする場合にのみ有効です。App Pod には影響しません。たとえば、Space のノードセレクタと Kfsystem の Build ノードセレクタの両方を指定した場合、App Pod には Space ノードセレクタがあり、Buid Pod には Kfsystem の Build ノードセレクタがあります。ノードセレクタが Space のみで指定されている場合、App Pod と Build Pod の両方に Space からのノードセレクタが含まれます。

  1. Build Pod を割り当てるノードにラベル(disktype:ssd など)を追加します。

    kubectl label nodes nodeid disktype=ssd
  2. KfSystem CR にパッチを適用することで、Build ノードセレクタ(key:value ペアの形式)を追加 / 更新します。

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

    たとえば、disktype=ssd を Build ノードセレクタとして追加するには、次のようにします。

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