NSX Node Agent は、各ポッドで 2 つのコンテナを実行する DaemonSet です。1 つのコンテナは、NSX Node Agent を実行し、主にコンテナのネットワーク インターフェイスを管理します。そして、CNI プラグインや Kubernetes API サーバと通信を行います。もう 1 つのコンテナは、NSX kube-proxy を実行し、クラスタの IP アドレスをポッドの IP アドレスに変換することで Kubernetes サービスの抽象化を実装します。これは、アップストリームの kube-proxy と同じ機能です。

手順

  1. NCP Docker イメージをダウンロードします。
    ファイル名は nsx-ncp-xxxxxxx.tar です。 xxxxxxx はビルド番号です。
  2. NSX Node Agent の DaemonSet yaml テンプレートをダウンロードします。
    ファイル名は nsx-node-agent-ds.yml です。このファイルを編集することも、独自のテンプレート ファイルの例として使用することもできます。
  3. NCP Docker イメージをイメージ レジストリにロードします。
        docker load -i <tar file>
  4. nsx-node-agent-ds.yml を編集します。
    ロードされているイメージの名前を変更します。

    Ubuntu の場合、yaml ファイルは AppArmor が有効になっていることを前提とします。AppArmor が有効かどうかは、/sys/module/apparmor/parameters/enabled ファイルで確認します。AppArmor が有効でない場合には、次のように変更します。

    • 次の行を削除するか、コメント行にします。
      container.apparmor.security.beta.kubernetes.io/nsx-node-agent: localhost/node-agent-apparmor
    • nsx-node-agent コンテナと nsx-kube-proxy コンテナの securityContext の下に行 privileged:true を追加します。次はその例です。
      securityContext:
          privileged:true
    注: hyperkube イメージを使用するコンテナ内で kubelet を実行すると、実際の状態に関係なく、kubelet が AppArmor の状態を常に無効とレポートする問題が確認されています。yaml ファイルでも、同様の変更を行う必要があります。
    注: yaml ファイルで、 ncp.ini に生成された ConfigMap を読み取り専用ボリュームとしてマウントするように指定する必要があります。ダウンロードした yaml ファイルには、この指定がすでに行われています。この設定は変更できません。
  5. 次のコマンドを使用して、NSX Node Agent の DaemonSet を作成します。
        kubectl apply -f nsx-node-agent-ds.yml