You must install and set up the following FPGA plugin modules for correct operation:
$ mkdir -p $GOPATH/src/github.com/intel/
$ cd $GOPATH/src/github.com/intel/
$ git clone https://github.com/intel/intel-device-plugins-for-kubernetes.git
$ cd $GOPATH/src/github.com/intel/intel-device-plugins-for-kubernetes
$ make fpga_plugin
$ ls /var/lib/kubelet/device-plugins/kubelet.sock
/var/lib/kubelet/device-plugins/kubelet.sock
You can run the FPGA device plugin in either af
or region
mode.
In af
mode, the device plugin exposes accelerator functions
programmed onto the device as resources. Accelerator functions identified
by the same AFU ID are translated to resources of the same type.
In region
mode, the device plugin exposes partial reconfiguration regions
as consumable resources. Regions with the same interface ID are
translated to resources of the same type.
- Run FPGA device plugin as administrator:
$ export KUBE_CONF=/var/run/kubernetes/admin.kubeconfig # path to kubeconfig with admin's credentials
$ export NODE_NAME="<node name>" # if the node's name was overridden and differs from hostname
$ sudo -E $GOPATH/src/github.com/intel/intel-device-plugins-for-kubernetes/cmd/fpga_plugin/fpga_plugin -mode af -kubeconfig $KUBE_CONF
FPGA device plugin started in af mode
device-plugin start server at: /var/lib/kubelet/device-plugins/fpga.intel.com-af-f7df405cbd7acf7222f144b0b93acd18.sock
device-plugin registered
- Check if FPGA device plugin is registered on master:
$ kubectl describe node <node name> | grep fpga.intel.com
fpga.intel.com/af-f7df405cbd7acf7222f144b0b93acd18: 1
fpga.intel.com/af-f7df405cbd7acf7222f144b0b93acd18: 1
- Run FPGA device plugin as administrator:
$ export KUBE_CONF=/var/run/kubernetes/admin.kubeconfig # path to kubeconfig with admin's credentials
$ export NODE_NAME="<node name>" # if the node's name was overridden and differs from hostname
$ sudo -E $GOPATH/src/github.com/intel/intel-device-plugins-for-kubernetes/cmd/fpga_plugin/fpga_plugin -mode region -kubeconfig $KUBE_CONF
FPGA device plugin started in region mode
device-plugin start server at: /var/lib/kubelet/device-plugins/fpga.intel.com-region-ce48969398f05f33946d560708be108a.sock
device-plugin registered
- Check if FPGA device plugin is registered on master:
$ kubectl describe node <node name> | grep fpga.intel.com
fpga.intel.com/region-ce48969398f05f33946d560708be108a: 1
fpga.intel.com/region-ce48969398f05f33946d560708be108a: 1
-
To deploy the plugin in a production cluster, create a service account for the plugin:
$ kubectl create -f deployments/fpga_plugin/fpga_plugin_service_account.yaml serviceaccount/intel-fpga-plugin-controller created clusterrole.rbac.authorization.k8s.io/node-getter created clusterrolebinding.rbac.authorization.k8s.io/get-nodes created
-
Create the DaemonSet:
$ kubectl create -f deployments/fpga_plugin/fpga_plugin.yaml daemonset.apps/intel-fpga-plugin created
-
Build an image from sources:
$ make intel-fpga-plugin
This image launches
fpga_plugin
inaf
mode by default.You can override the mode on a per-node basis using this annotation:
$ kubectl annotate node mynode "fpga.intel.com/device-plugin-mode=region"
To use your own container image, modify the
deployments/fpga_plugin/fpga_plugin.yaml
file.
Continue with FPGA admission controller webhook.