diff --git a/deploy/addons/assets.go b/deploy/addons/assets.go index 39a95f3cdcab..0017c744dbf8 100644 --- a/deploy/addons/assets.go +++ b/deploy/addons/assets.go @@ -139,4 +139,8 @@ var ( // AliyunMirror assets for aliyun_mirror.json //go:embed aliyun_mirror.json AliyunMirror embed.FS + + // InAccelAssets assets for inaccel addon + //go:embed inaccel/fpga-operator.yaml.tmpl + InAccelAssets embed.FS ) diff --git a/deploy/addons/inaccel/README.md b/deploy/addons/inaccel/README.md new file mode 100644 index 000000000000..a8e24b3f9ec8 --- /dev/null +++ b/deploy/addons/inaccel/README.md @@ -0,0 +1,7 @@ +### Documentation + +For detailed usage instructions visit: [docs.inaccel.com](https://docs.inaccel.com) + +### Support + +For more product information contact: info@inaccel.com diff --git a/deploy/addons/inaccel/fpga-operator.yaml.tmpl b/deploy/addons/inaccel/fpga-operator.yaml.tmpl new file mode 100644 index 000000000000..bf12afdafaad --- /dev/null +++ b/deploy/addons/inaccel/fpga-operator.yaml.tmpl @@ -0,0 +1,336 @@ +--- +# Source: fpga-operator/templates/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator + namespace: kube-system +--- +# Source: fpga-operator/templates/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator + namespace: kube-system +stringData: +type: Opaque +--- +# Source: fpga-operator/templates/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator +rules: +- apiGroups: [""] + resources: ["nodes"] + verbs: ["patch"] +- apiGroups: ["admissionregistration.k8s.io"] + resources: ["mutatingwebhookconfigurations"] + verbs: ["get", "update"] +--- +# Source: fpga-operator/templates/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: fpga-operator +subjects: +- kind: ServiceAccount + name: fpga-operator + namespace: kube-system +--- +# Source: fpga-operator/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator + namespace: kube-system +spec: + ports: + - port: 443 + publishNotReadyAddresses: true + selector: + kind: Deployment + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel +--- +# Source: fpga-operator/templates/daemon-set.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator + namespace: kube-system +spec: + selector: + matchLabels: + kind: DaemonSet + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: coral + labels: + kind: DaemonSet + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + spec: + containers: + - env: + - name: LOG_LEVEL + value: info + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: {{ .CustomRegistries.coral | default .ImageRepository }}{{ .Images.coral }} + imagePullPolicy: Always + name: coral + ports: + - containerPort: 55677 + readinessProbe: + exec: + command: + - get + - coral + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/localtime + name: localtime + readOnly: true + - mountPath: /sys + name: sys + - mountPath: /var/lib/inaccel + mountPropagation: HostToContainer + name: state-root + - mountPath: /var/lib/kubelet/plugins_registry + name: kubelet + subPath: plugins_registry + - mountPath: /var/opt/inaccel/runtimes + name: data-root + readOnly: true + subPath: runtimes + - args: + - --debug=false + env: + - name: DOCKER + value: disabled + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: {{ .CustomRegistries.daemon | default .ImageRepository }}{{ .Images.daemon }} + name: daemon + securityContext: + privileged: true + volumeMounts: + - mountPath: /var/lib/inaccel + mountPropagation: Bidirectional + name: state-root + - mountPath: /var/lib/kubelet/plugins_registry + name: kubelet + subPath: plugins_registry + - mountPath: /var/lib/kubelet + mountPropagation: Bidirectional + name: kubelet + - image: {{ .CustomRegistries.monitor | default .ImageRepository }}{{ .Images.monitor }} + imagePullPolicy: Always + name: monitor + ports: + - containerPort: 19999 + hostAliases: + - hostnames: + - coral + - daemon + - monitor + ip: 127.0.0.1 + hostPID: true + initContainers: + - env: + - name: DRIVER_SYSROOT_DIR + value: /host + image: {{ .CustomRegistries.driver | default .ImageRepository }}{{ .Images.driver }} + name: driver + securityContext: + privileged: true + volumeMounts: + - mountPath: /host + name: host + - env: + - name: MKRT_CONFIG_PATH + value: /etc/inaccel/runtimes + - name: MKRT_SYSROOT_DIR + value: /host + image: {{ .CustomRegistries.mkrt | default .ImageRepository }}{{ .Images.mkrt }} + name: mkrt + volumeMounts: + - mountPath: /host + name: host + readOnly: true + - mountPath: /var/opt/inaccel/runtimes + name: data-root + subPath: runtimes + priorityClassName: system-node-critical + serviceAccountName: fpga-operator + volumes: + - emptyDir: {} + name: data-root + - hostPath: + path: / + name: host + - hostPath: + path: /var/lib/kubelet + name: kubelet + - hostPath: + path: /etc/localtime + name: localtime + - hostPath: + path: /var/lib/inaccel + type: DirectoryOrCreate + name: state-root + - hostPath: + path: /sys + name: sys +--- +# Source: fpga-operator/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator + namespace: kube-system +spec: + replicas: 1 + selector: + matchLabels: + kind: Deployment + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: reef + labels: + kind: Deployment + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + spec: + containers: + - args: + - --debug=false + image: {{ .CustomRegistries.reef | default .ImageRepository }}{{ .Images.reef }} + name: reef + volumeMounts: + - mountPath: /etc/inaccel + name: config-root + readOnly: true + hostAliases: + - hostnames: + - reef + ip: 127.0.0.1 + initContainers: + - args: + - init + env: + - name: MUTATING_WEBHOOK_CONFIGURATION_NAME + value: fpga-operator + image: {{ .CustomRegistries.reef | default .ImageRepository }}{{ .Images.reef }} + name: reef-init + volumeMounts: + - mountPath: /etc/inaccel + name: config-root + priorityClassName: system-cluster-critical + serviceAccountName: fpga-operator + volumes: + - emptyDir: {} + name: config-root +--- +# Source: fpga-operator/templates/csi-driver.yaml +apiVersion: storage.k8s.io/v1 +kind: CSIDriver +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: inaccel +spec: + attachRequired: false + volumeLifecycleModes: + - Ephemeral +--- +# Source: fpga-operator/templates/mutating-webhook-configuration.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + labels: + helm.sh/chart: fpga-operator-2.5.4 + app.kubernetes.io/name: fpga-operator + app.kubernetes.io/instance: inaccel + app.kubernetes.io/version: "2.1" + app.kubernetes.io/managed-by: Minikube + name: fpga-operator +webhooks: +- admissionReviewVersions: ["v1"] + clientConfig: + service: + name: fpga-operator + namespace: kube-system + name: reef.inaccel.com + objectSelector: + matchLabels: + inaccel/fpga: enabled + sideEffects: None diff --git a/pkg/addons/config.go b/pkg/addons/config.go index 7562156cbd0b..4865374b946c 100644 --- a/pkg/addons/config.go +++ b/pkg/addons/config.go @@ -192,4 +192,9 @@ var Addons = []*Addon{ set: SetBool, callbacks: []setFn{EnableOrDisableAddon}, }, + { + name: "inaccel", + set: SetBool, + callbacks: []setFn{EnableOrDisableAddon}, + }, } diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index 4c0fe3fae3ab..a232e6806cdd 100755 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -674,6 +674,20 @@ var Addons = map[string]*Addon{ "portainer.yaml", "0640"), }, false, "portainer", "portainer.io", nil, nil), + "inaccel": NewAddon([]*BinAsset{ + MustBinAsset(addons.InAccelAssets, + "inaccel/fpga-operator.yaml.tmpl", + vmpath.GuestAddonsDir, + "fpga-operator.yaml", + "0640"), + }, false, "inaccel", "InAccel ", map[string]string{ + "coral": "inaccel/coral:2.1", + "daemon": "inaccel/daemon:latest", + "driver": "inaccel/driver:latest", + "mkrt": "inaccel/mkrt:latest", + "monitor": "inaccel/monitor:2.1", + "reef": "inaccel/reef:latest", + }, nil), } // parseMapString creates a map based on `str` which is encoded as =,=,...