| {%- from "kubernetes/map.jinja" import common with context -%} |
| {%- from "kubernetes/map.jinja" import master with context -%} |
| --- |
| apiVersion: extensions/v1beta1 |
| kind: DaemonSet |
| metadata: |
| name: virtlet |
| namespace: {{ common.addons.virtlet.namespace }} |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |
| spec: |
| template: |
| metadata: |
| name: virtlet |
| labels: |
| runtime: virtlet |
| spec: |
| hostNetwork: true |
| {%- if master.network.engine != "opencontrail" %} |
| dnsPolicy: ClusterFirstWithHostNet |
| {%- endif %} |
| # hostPID is true to (1) enable VMs to survive virtlet container restart |
| # (to be checked) and (2) to enable the use of nsenter in init container |
| hostPID: true |
| # bootstrap procedure needs to create a configmap in kube-system namespace |
| serviceAccountName: virtlet |
| |
| # only run Virtlet pods on the nodes with extraRuntime=virtlet label |
| affinity: |
| nodeAffinity: |
| requiredDuringSchedulingIgnoredDuringExecution: |
| nodeSelectorTerms: |
| - matchExpressions: |
| - key: extraRuntime |
| operator: In |
| values: |
| - virtlet |
| |
| initContainers: |
| # The init container first copies virtlet's flexvolume driver |
| # to the default kubelet plugin dir to have it in the proper place by the |
| # time kubelet is restarted by CRI proxy bootstrap procedure. |
| # After that it checks if there's already saved kubelet config |
| # and considers that CRI proxy bootstrap is already done if it exists. |
| # If it doesn't, it drops criproxy binary into /opt/criproxy/bin |
| # if it's not already there and then starts criproxy installation. |
| # The possibility to put criproxy binary in advance into |
| # /opt/criproxy/bin may be helpful for the purpose of |
| # debugging criproxy |
| # At the end it ensures that /var/lib/libvirt/images exists on node. |
| - name: prepare-node |
| image: {{ common.addons.virtlet.image }} |
| imagePullPolicy: IfNotPresent |
| command: |
| - /prepare-node.sh |
| volumeMounts: |
| - name: k8s-flexvolume-plugins-dir |
| mountPath: /kubelet-volume-plugins |
| - name: criproxybin |
| mountPath: /opt/criproxy/bin |
| - name: run |
| mountPath: /run |
| - name: dockersock |
| mountPath: /var/run/docker.sock |
| - name: criproxyconf |
| mountPath: /etc/criproxy |
| - name: log |
| mountPath: /hostlog |
| # for ensuring that /var/lib/libvirt/images exists on node |
| - name: var-lib |
| mountPath: /host-var-lib |
| securityContext: |
| privileged: true |
| |
| containers: |
| - name: libvirt |
| image: {{ common.addons.virtlet.image }} |
| # In case we inject local virtlet image we want to use it not officially available one |
| imagePullPolicy: IfNotPresent |
| command: |
| - /libvirt.sh |
| volumeMounts: |
| - mountPath: /sys/fs/cgroup |
| name: cgroup |
| - mountPath: /lib/modules |
| name: modules |
| readOnly: true |
| - mountPath: /boot |
| name: boot |
| readOnly: true |
| - mountPath: /run |
| name: run |
| - mountPath: /var/lib/virtlet |
| name: virtlet |
| - mountPath: /var/lib/libvirt |
| name: libvirt |
| - mountPath: /var/run/libvirt |
| name: libvirt-sockets |
| # the log dir is needed here because otherwise libvirt will produce errors |
| # like this: |
| # Unable to pre-create chardev file '/var/log/vms/afd75bbb-8e97-11e7-9561-02420ac00002/cirros-vm_0.log': No such file or directory |
| - name: vms-log |
| mountPath: /var/log/vms |
| - name: dev |
| mountPath: /dev |
| securityContext: |
| privileged: true |
| env: |
| - name: VIRTLET_DISABLE_KVM |
| valueFrom: |
| configMapKeyRef: |
| name: virtlet-config |
| key: disable_kvm |
| optional: true |
| - name: virtlet |
| image: {{ common.addons.virtlet.image }} |
| # In case we inject local virtlet image we want to use it not officially available one |
| imagePullPolicy: IfNotPresent |
| volumeMounts: |
| - mountPath: /var/lib/etcd |
| name: etcd |
| - mountPath: /run |
| name: run |
| # /boot and /lib/modules are required by supermin |
| - mountPath: /lib/modules |
| name: modules |
| readOnly: true |
| - mountPath: /boot |
| name: boot |
| readOnly: true |
| - mountPath: /var/lib/virtlet |
| name: virtlet |
| - mountPath: /var/lib/libvirt |
| name: libvirt |
| - mountPath: /etc/kubernetes |
| name: kubernetes |
| - mountPath: /etc/cni |
| name: cniconf |
| - mountPath: /opt/cni/bin |
| name: cnibin |
| - mountPath: /var/run/libvirt |
| name: libvirt-sockets |
| - mountPath: /var/lib/cni |
| name: cnidata |
| - mountPath: /usr/libexec/kubernetes/kubelet-plugins/volume/exec |
| name: k8s-flexvolume-plugins-dir |
| # below `:shared` is unofficial way to pass this option docker |
| # which then will allow virtlet to see what kubelet mounts in |
| # underlaying directories, after virtlet container is created |
| - mountPath: /var/lib/kubelet/pods:shared |
| name: k8s-pods-dir |
| - name: vms-log |
| mountPath: /var/log/vms |
| {%- if master.network.engine == "opencontrail" %} |
| - name: contrail-log |
| mountPath: /var/log/contrail |
| - name: contrail-data |
| mountPath: /var/lib/contrail |
| {%- endif %} |
| - mountPath: /etc/virtlet/images |
| name: image-name-translations |
| - name: pods-log |
| mountPath: /kubernetes-log |
| securityContext: |
| privileged: true |
| env: |
| - name: VIRTLET_DISABLE_KVM |
| valueFrom: |
| configMapKeyRef: |
| name: virtlet-config |
| key: disable_kvm |
| optional: true |
| - name: VIRTLET_DOWNLOAD_PROTOCOL |
| valueFrom: |
| configMapKeyRef: |
| name: virtlet-config |
| key: download_protocol |
| optional: true |
| - name: VIRTLET_LOGLEVEL |
| valueFrom: |
| configMapKeyRef: |
| name: virtlet-config |
| key: loglevel |
| optional: true |
| - name: VIRTLET_CALICO_SUBNET |
| valueFrom: |
| configMapKeyRef: |
| name: virtlet-config |
| key: calico-subnet |
| optional: true |
| - name: IMAGE_REGEXP_TRANSLATION |
| valueFrom: |
| configMapKeyRef: |
| name: virtlet-config |
| key: image_regexp_translation |
| optional: true |
| - name: IMAGE_TRANSLATIONS_DIR |
| value: /etc/virtlet/images |
| - name: KUBERNETES_POD_LOGS |
| value: "/kubernetes-log" |
| # TODO: should we rename it? |
| - name: VIRTLET_VM_LOG_LOCATION |
| value: "1" |
| - name: vms |
| image: {{ common.addons.virtlet.image }} |
| imagePullPolicy: IfNotPresent |
| command: |
| - /vms.sh |
| volumeMounts: |
| - mountPath: /var/lib/virtlet |
| name: virtlet |
| - mountPath: /var/lib/libvirt |
| name: libvirt |
| - name: vms-log |
| mountPath: /var/log/vms |
| - name: dev |
| mountPath: /dev |
| volumes: |
| # /dev is needed for host raw device access |
| - hostPath: |
| path: /dev |
| name: dev |
| - hostPath: |
| path: /etc/kubernetes |
| name: kubernetes |
| - hostPath: |
| path: /var/lib/etcd |
| name: etcd |
| - hostPath: |
| path: /sys/fs/cgroup |
| name: cgroup |
| - hostPath: |
| path: /lib/modules |
| name: modules |
| - hostPath: |
| path: /boot |
| name: boot |
| - hostPath: |
| path: /run |
| name: run |
| # TODO: don't hardcode docker socket location here |
| # This will require CRI proxy installation to run |
| # in host mount namespace. |
| - hostPath: |
| path: /var/run/docker.sock |
| name: dockersock |
| - hostPath: |
| path: /var/lib/virtlet |
| name: virtlet |
| - hostPath: |
| path: /var/lib/libvirt |
| name: libvirt |
| - hostPath: |
| path: /etc/cni |
| name: cniconf |
| - hostPath: |
| path: /opt/cni/bin |
| name: cnibin |
| - hostPath: |
| path: /var/lib/cni |
| name: cnidata |
| - hostPath: |
| path: /opt/criproxy/bin |
| name: criproxybin |
| - hostPath: |
| path: /etc/criproxy |
| name: criproxyconf |
| - hostPath: |
| path: /var/log |
| name: log |
| - hostPath: |
| path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec |
| name: k8s-flexvolume-plugins-dir |
| - hostPath: |
| path: /var/lib/kubelet/pods |
| name: k8s-pods-dir |
| - hostPath: |
| path: /var/lib |
| name: var-lib |
| - hostPath: |
| path: /var/log/virtlet/vms |
| name: vms-log |
| - hostPath: |
| path: /var/run/libvirt |
| name: libvirt-sockets |
| - hostPath: |
| path: /var/log/pods |
| name: pods-log |
| - configMap: |
| name: virtlet-image-translations |
| name: image-name-translations |
| {%- if master.network.engine == "opencontrail" %} |
| - hostPath: |
| path: /var/log/contrail |
| name: contrail-log |
| - hostPath: |
| path: /var/lib/contrail |
| name: contrail-data |
| - hostPath: |
| path: /virtlet |
| name: virtlet-bin |
| {%- endif %} |
| --- |
| apiVersion: rbac.authorization.k8s.io/v1beta1 |
| kind: ClusterRole |
| metadata: |
| name: configmap-reader |
| namespace: {{ common.addons.virtlet.namespace }} |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |
| rules: |
| - apiGroups: |
| - "" |
| resources: |
| - configmaps |
| verbs: |
| - get |
| - list |
| - watch |
| --- |
| apiVersion: rbac.authorization.k8s.io/v1beta1 |
| kind: ClusterRoleBinding |
| metadata: |
| name: kubelet-node-binding |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |
| roleRef: |
| apiGroup: rbac.authorization.k8s.io |
| kind: ClusterRole |
| name: configmap-reader |
| subjects: |
| - apiGroup: rbac.authorization.k8s.io |
| kind: Group |
| name: system:nodes |
| namespace: {{ common.addons.virtlet.namespace }} |
| --- |
| kind: ClusterRole |
| apiVersion: rbac.authorization.k8s.io/v1beta1 |
| metadata: |
| name: virtlet-crd |
| namespace: {{ common.addons.virtlet.namespace }} |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |
| rules: |
| - apiGroups: |
| - "apiextensions.k8s.io" |
| resources: |
| - customresourcedefinitions |
| verbs: |
| - create |
| - apiGroups: |
| - "virtlet.k8s" |
| resources: |
| - virtletimagemappings |
| verbs: |
| - list |
| - get |
| --- |
| apiVersion: rbac.authorization.k8s.io/v1beta1 |
| kind: ClusterRoleBinding |
| metadata: |
| name: virtlet-crd |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |
| roleRef: |
| apiGroup: rbac.authorization.k8s.io |
| kind: ClusterRole |
| name: virtlet-crd |
| subjects: |
| - kind: ServiceAccount |
| name: virtlet |
| namespace: {{ common.addons.virtlet.namespace }} |
| --- |
| apiVersion: v1 |
| kind: ServiceAccount |
| metadata: |
| name: virtlet |
| namespace: {{ common.addons.virtlet.namespace }} |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |
| --- |
| apiVersion: v1 |
| data: |
| images.yml: | |
| translations: |
| - name: cirros |
| url: https://github.com/mirantis/virtlet/releases/download/v0.8.2/cirros.img |
| kind: ConfigMap |
| metadata: |
| name: virtlet-image-translations |
| namespace: {{ common.addons.virtlet.namespace }} |
| labels: |
| addonmanager.kubernetes.io/mode: Reconcile |