# This is a configuration example for the node labeller which includes
# ClusterRole and ClusterRoleBinding definitions, as well as the
# DeamonSet configuration that deploys the actual node labeller
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cr-node-labeller
rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["watch", "get", "list", "update"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: labeller
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cr-node-labeller
subjects:
- kind: ServiceAccount
  name: node-labeller-sa
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: node-labeller-sa
  namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: amdgpu-labeller-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: amdgpu-lr-ds
  template:
    metadata:
      labels:
        name: amdgpu-lr-ds
    spec:
      serviceAccountName: node-labeller-sa
      nodeSelector:
        kubernetes.io/arch: amd64
      priorityClassName: system-node-critical
      tolerations:
      - key: CriticalAddonsOnly
        operator: Exists
      containers:
      - image: rocm/k8s-device-plugin:labeller-latest
        name: amdgpu-lr-cntr
        imagePullPolicy: Always
        workingDir: /root
        command: ["./k8s-node-labeller"]
        args: ["-vram", "-cu-count", "-simd-count", "-device-id", "-family", "-product-name"]
        env:
          - name: DS_NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
        securityContext:
          privileged: true #Needed for /dev
          capabilities:
            drop: ["ALL"]
        volumeMounts:
          - name: sys
            mountPath: /sys
            readOnly: true
          - name: dev
            mountPath: /dev
        resources: {}
          # limits:
          #   memory: 20Mi
          #   cpu: 100m
          # requests:
          #   memory: 30Mi
          #   cpu: 150m
      volumes:
        - name: sys
          hostPath:
            path: /sys
            type: Directory
        - name: dev
          hostPath:
            path: /dev
            type: Directory