| --- |
| # Copyright 2018-present Open Networking Foundation |
| # Copyright 2018 Intel Corporation |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| --- |
| apiVersion: apiextensions.k8s.io/v1beta1 |
| kind: CustomResourceDefinition |
| metadata: |
| # name must match the spec fields below, and be in the form: <plural>.<group> |
| name: network-attachment-definitions.k8s.cni.cncf.io |
| annotations: |
| "helm.sh/hook": "crd-install" |
| "helm.sh/hook-delete-policy": "before-hook-creation" |
| spec: |
| # group name to use for REST API: /apis/<group>/<version> |
| group: k8s.cni.cncf.io |
| # version name to use for REST API: /apis/<group>/<version> |
| version: v1 |
| # either Namespaced or Cluster |
| scope: Namespaced |
| names: |
| # plural name to be used in the URL: /apis/<group>/<version>/<plural> |
| plural: network-attachment-definitions |
| # singular name to be used as an alias on the CLI and for display |
| singular: network-attachment-definition |
| # kind is normally the CamelCased singular type. Your resource manifests use this. |
| kind: NetworkAttachmentDefinition |
| # shortNames allow shorter string to match your resource on the CLI |
| shortNames: |
| - net-attach-def |
| --- |
| apiVersion: v1 |
| kind: ServiceAccount |
| metadata: |
| name: multus-sa |
| namespace: kube-system |
| annotations: |
| "helm.sh/hook": "pre-install" |
| "helm.sh/hook-delete-policy": "before-hook-creation" |
| --- |
| apiVersion: v1 |
| kind: Secret |
| metadata: |
| name: multus-sa-secret |
| namespace: kube-system |
| annotations: |
| kubernetes.io/service-account.name: multus-sa |
| type: kubernetes.io/service-account-token |
| --- |
| kind: ClusterRole |
| apiVersion: rbac.authorization.k8s.io/v1 |
| metadata: |
| name: multus-pod-networks-lister |
| rules: |
| - apiGroups: [""] |
| resources: ["pods"] |
| verbs: ["get"] |
| - apiGroups: [""] |
| resources: ["pods/status"] |
| verbs: ["update"] |
| - apiGroups: ["k8s.cni.cncf.io"] |
| resources: ["*"] |
| verbs: ["get"] |
| --- |
| kind: ConfigMap |
| apiVersion: v1 |
| metadata: |
| name: multus-scripts |
| namespace: kube-system |
| data: |
| install-certs.sh: | |
| # Copied from Calico |
| # https://github.com/projectcalico/cni-plugin/blob/master/k8s-install/scripts/install-cni.sh |
| touch /host/etc/cni/net.d/multus-kubeconfig |
| chmod 600 /host/etc/cni/net.d/multus-kubeconfig |
| SERVICE_ACCOUNT_PATH=/var/run/secrets/multus/serviceaccount |
| KUBE_CA_FILE=$SERVICE_ACCOUNT_PATH/ca.crt |
| TLS_CFG="certificate-authority-data: $(cat $KUBE_CA_FILE | base64 | tr -d '\n')" |
| SERVICEACCOUNT_TOKEN=$(cat $SERVICE_ACCOUNT_PATH/token) |
| cat > /host/etc/cni/net.d/multus-kubeconfig <<EOF |
| # Kubeconfig file for Multus CNI plugin. |
| apiVersion: v1 |
| kind: Config |
| clusters: |
| - name: local |
| cluster: |
| server: https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT} |
| $TLS_CFG |
| users: |
| - name: multus |
| user: |
| token: "${SERVICEACCOUNT_TOKEN}" |
| contexts: |
| - name: multus-context |
| context: |
| cluster: local |
| user: multus |
| current-context: multus-context |
| EOF |
| install-multus-conf.sh: | |
| # copied from https://github.com/intel/multus-cni/blob/master/images/entrypoint.sh |
| rm -f /host/etc/cni/net.d/00-multus.conf |
| MASTER_PLUGIN="$(ls /host/etc/cni/net.d | grep -E '\.conf(list)?$' | head -1)" |
| MASTER_PLUGIN_JSON="$(cat /host/etc/cni/net.d/$MASTER_PLUGIN)" |
| cat > /host/etc/cni/net.d/00-multus.conf <<EOF |
| { |
| "name": "multus-cni-network", |
| "type": "multus", |
| "logFile": "/var/log/multus.log", |
| "logLevel": "debug", |
| "kubeconfig": "/etc/cni/net.d/multus-kubeconfig", |
| "delegates": [ |
| $MASTER_PLUGIN_JSON |
| ] |
| } |
| EOF |
| --- |
| kind: ClusterRoleBinding |
| apiVersion: rbac.authorization.k8s.io/v1 |
| metadata: |
| name: multus-rb |
| roleRef: |
| apiGroup: rbac.authorization.k8s.io |
| kind: ClusterRole |
| name: multus-pod-networks-lister |
| subjects: |
| - kind: ServiceAccount |
| name: multus-sa |
| namespace: kube-system |
| --- |
| apiVersion: apps/v1 |
| kind: DaemonSet |
| metadata: |
| name: sriov-device-plugin |
| namespace: kube-system |
| spec: |
| selector: |
| matchLabels: |
| name: sriov-device-plugin |
| template: |
| metadata: |
| labels: |
| name: sriov-device-plugin |
| spec: |
| initContainers: |
| - name: init-sriovds |
| image: {{ .Values.sriovds.initimage }} |
| command: [ "bash", "-c" ] |
| args: |
| - cp /tmp/cni/bin/{multus,sriov,vfioveth,centralip,jq} /host/opt/cni/bin/; |
| /tmp/multus/install-multus-conf.sh; |
| /tmp/multus/install-certs.sh; |
| systemctl stop kubelet; |
| echo "Restarting crio/containerd, kubelet"; |
| systemctl restart containerd; |
| systemctl restart crio; |
| systemctl restart kubelet; |
| volumeMounts: |
| - name: usr-bin |
| mountPath: /host/usr/bin |
| - name: cni-bin |
| mountPath: /host/opt/cni/bin |
| - name: multus-sa |
| mountPath: /var/run/secrets/multus/serviceaccount |
| - name: multus-scripts |
| mountPath: /tmp/multus |
| - name: cni-conf |
| mountPath: /host/etc/cni/net.d |
| - name: dbus |
| mountPath: /var/run/dbus |
| - name: systemd |
| mountPath: /run/systemd |
| containers: |
| - name: sriovds |
| image: {{ .Values.sriovds.image }} |
| command: [ "sh", "-c" ] |
| args: |
| - /usr/bin/sriovdp --logtostderr -v 10; |
| sleep infinity; |
| volumeMounts: |
| - name: net |
| mountPath: /sys/class/net |
| readOnly: true |
| - name: dp-sock |
| mountPath: /var/lib/kubelet/device-plugins/ |
| readOnly: false |
| - mountPath: /etc/pcidp |
| name: sriov-config |
| readOnly: false |
| volumes: |
| - name: sriov-config |
| configMap: |
| name: sriov-config |
| - name: usr-bin |
| hostPath: |
| path: /usr/bin |
| - name: cni-bin |
| hostPath: |
| path: /opt/cni/bin |
| - name: multus-sa |
| secret: |
| secretName: multus-sa-secret |
| - name: multus-scripts |
| configMap: |
| defaultMode: 511 |
| name: multus-scripts |
| - name: cni-conf |
| hostPath: |
| path: /etc/cni/net.d |
| - name: dbus |
| hostPath: |
| path: /var/run/dbus |
| - name: systemd |
| hostPath: |
| path: /run/systemd |
| - name: net |
| hostPath: |
| path: /sys/class/net |
| - name: dp-sock |
| hostPath: |
| path: /var/lib/kubelet/device-plugins/ |
| hostNetwork: true |
| hostPID: true |