From 316f546f04c90e419fe68c5a8381a6c7529a29e0 Mon Sep 17 00:00:00 2001 From: Serguei Bezverkhi Date: Mon, 22 Aug 2016 20:25:47 -0400 Subject: [PATCH] Getting NOVA pieces together to launch VM This PS gets NOVA related pieces together in order to be able to launch a VM. It builds upon the work done by wirehead. Partially-Implements: blueprint nova-kubernetes Change-Id: I528fc5d84e790bd739c8cb900a9ee14ba7bec9fb --- etc/kolla-kubernetes/kolla-kubernetes.yml | 8 + .../nova/nova-compute-bootstrap-job.yml.j2 | 2 + services/nova/nova-compute-pod.yml.j2 | 183 ++++++++++-------- services/nova/nova-control-api-pod.yml.j2 | 45 ++++- ...ol-bootstrap-job-create-nova-api-db.yml.j2 | 41 ++++ ...ontrol-bootstrap-job-create-nova-db.yml.j2 | 84 ++++++++ ...ootstrap-job-create-nova-endpoints.yml.j2} | 78 ++------ .../nova/nova-control-conductor-pod.yml.j2 | 43 +++- .../nova/nova-control-scheduler-pod.yml.j2 | 49 ++++- services/nova/nova-libvirt-pod.yml.j2 | 102 ++++++++++ 10 files changed, 467 insertions(+), 168 deletions(-) create mode 100644 services/nova/nova-control-bootstrap-job-create-nova-api-db.yml.j2 create mode 100644 services/nova/nova-control-bootstrap-job-create-nova-db.yml.j2 rename services/nova/{nova-control-bootstrap-job.yml.j2 => nova-control-bootstrap-job-create-nova-endpoints.yml.j2} (51%) create mode 100644 services/nova/nova-libvirt-pod.yml.j2 diff --git a/etc/kolla-kubernetes/kolla-kubernetes.yml b/etc/kolla-kubernetes/kolla-kubernetes.yml index 7a371dcb4..1cd2f0ba4 100644 --- a/etc/kolla-kubernetes/kolla-kubernetes.yml +++ b/etc/kolla-kubernetes/kolla-kubernetes.yml @@ -117,3 +117,11 @@ keystone_admin_url: "{{ admin_protocol }}://keystone-admin:{{ keystone_admin_por keystone_internal_url: "{{ internal_protocol }}://keystone-internal:{{ keystone_public_port }}/v3" keystone_public_url: "{{ public_protocol }}://{{ kolla_kubernetes_external_vip }}:{{ keystone_public_port }}/v3" keystone_database_address: "mariadb" + +######################## +# NOVA variables +######################## +openstack_nova_auth: "{'auth_url':'{{ keystone_auth_url }}','username':'{{ openstack_auth.username }}','password':'$KEYSTONE_ADMIN_PASSWORD','project_name':'{{ openstack_auth.project_name }}','domain_name':'default'}" +nova_admin_endpoint: "http://nova-api:{{ nova_api_port }}/v2/%(tenant_id)s" +nova_public_endpoint: "http://{{ kolla_kubernetes_external_vip }}:{{ nova_api_port }}/v2/%(tenant_id)s" +nova_internal_endpoint: "http://nova-api:{{ nova_api_port }}/v2/%(tenant_id)s" diff --git a/services/nova/nova-compute-bootstrap-job.yml.j2 b/services/nova/nova-compute-bootstrap-job.yml.j2 index 010001dab..3101d3572 100644 --- a/services/nova/nova-compute-bootstrap-job.yml.j2 +++ b/services/nova/nova-compute-bootstrap-job.yml.j2 @@ -1,6 +1,8 @@ apiVersion: batch/v1 kind: Job spec: + parallelism: 1 + completions: 1 template: metadata: name: nova-compute-generate diff --git a/services/nova/nova-compute-pod.yml.j2 b/services/nova/nova-compute-pod.yml.j2 index 2dc6ed546..18e36e218 100644 --- a/services/nova/nova-compute-pod.yml.j2 +++ b/services/nova/nova-compute-pod.yml.j2 @@ -1,88 +1,101 @@ -apiVersion: v1 -kind: Pod +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: nova-compute + labels: + component: nova + system: nova-compute + namespace: default spec: - hostNetwork: True - hostPID: True - containers: - - name: nova-compute - image: "{{ nova_compute_image_full }}" - securityContext: - privileged: true - volumeMounts: - - mountPath: {{ container_config_directory }} - name: nova-compute-config - - mountPath: /var/lib/nova - name: nova-compute-persistent-storage - - mountPath: /etc/localtime - name: etc-localtime - - mountPath: /lib/modules - name: lib-modules - - mountPath: /run - name: run - - mountPath: /dev - name: dev - - mountPath: /sys/fs/cgroup - name: sys-fs-cgroup - - mountPath: /var/log/kolla - name: kolla-logs - env: - - name: KOLLA_CONFIG_STRATEGY - value: {{ config_strategy }} - - name: nova-libvirt - image: "{{ nova_libvirt_image_full }}" - securityContext: - privileged: true - volumeMounts: - - mountPath: {{ container_config_directory }} - name: nova-libvirt-config - - mountPath: /var/lib/libvirt - name: nova-libvirt-persistent-storage - - mountPath: /var/lib/nova - name: nova-compute-persistent-storage - - mountPath: /etc/localtime - name: etc-localtime - - mountPath: /lib/modules - name: lib-modules - - mountPath: /run - name: run - - mountPath: /dev - name: dev - - mountPath: /sys/fs/cgroup - name: sys-fs-cgroup - - mountPath: /var/log/kolla - name: kolla-logs - env: - - name: KOLLA_CONFIG_STRATEGY - value: {{ config_strategy }} - volumes: - - name: nova-compute-config - configMap: - name: nova-compute-configmap - - name: nova-libvirt-config - configMap: - name: nova-libvirt-configmap - - name: nova-compute-persistent-storage - hostPath: - path: /var/lib/nova - - name: nova-libvirt-persistent-storage - hostPath: - path: /var/lib/libvirt - - name: etc-localtime - hostPath: - path: /etc/localtime - - name: lib-modules - hostPath: - path: /lib/modules - - name: run - hostPath: - path: /run - - name: dev - hostPath: - path: /dev - - name: sys-fs-cgroup - hostPath: - path: /sys/fs/cgroup - - name: kolla-logs - emptyDir: {} + template: + metadata: + name: nova-compute + labels: + component: nova + system: nova-compute + namespace: default + annotations: + pod.alpha.kubernetes.io/init-containers: '[ + { + "name": "initialize-nova-compute", + "image": "{{ nova_compute_image_full }}", + "command": [ + "sh", + "-c", + "cp -a /config/..data/* /nova/; + ip=$(ip addr show dev {{ tunnel_interface }} | grep -G ''inet '' | awk ''{print $2}''); + sed -i ''s|^my_ip.*=.*|my_ip=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_host.*=.*|novncproxy_host=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_listen.*=.*|vncserver_listen=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_proxyclient_address.*=.*|vncserver_proxyclient_address=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_base_url.*=.*|novncproxy_base_url=http://''${ip%/*}'':6080/vnc_auto.html|g'' /nova/nova.conf; + sed -i ''s|^connection_uri.*=.*|connection_uri=\"qemu+tcp://''${ip%/*}''/system\"|g'' /nova/nova.conf;"], + "volumeMounts": [ + { + "name": "nova-compute-config", + "mountPath": "/config/" + }, + { + "name": "nova-config", + "mountPath": "/nova/" + } + ] + } + ]' + spec: + hostNetwork: True + containers: + - name: nova-compute + image: "{{ nova_compute_image_full }}" + securityContext: + privileged: true + volumeMounts: + - mountPath: {{ container_config_directory }} + name: nova-config + - mountPath: /var/lib/nova + name: nova-compute-persistent-storage + - mountPath: /etc/localtime + name: etc-localtime + - mountPath: /lib/modules + name: lib-modules + - mountPath: /run + name: run + - mountPath: /dev + name: dev + - mountPath: /sys/fs/cgroup + name: sys-fs-cgroup + - mountPath: /nova + name: nova-config + - mountPath: /var/log/kolla + name: kolla-logs + env: + - name: KOLLA_CONFIG_STRATEGY + value: {{ config_strategy }} + volumes: + - name: nova-compute-config + configMap: + name: nova-compute-configmap + - name: nova-compute-persistent-storage + hostPath: + path: /var/lib/nova + - name: etc-localtime + hostPath: + path: /etc/localtime + - name: lib-modules + hostPath: + path: /lib/modules + - name: run + hostPath: + path: /run + - name: dev + hostPath: + path: /dev + - name: sys-fs-cgroup + hostPath: + path: /sys/fs/cgroup + - name: nova-config + emptyDir: {} + - name: kolla-logs + emptyDir: {} metadata: name: nova-compute diff --git a/services/nova/nova-control-api-pod.yml.j2 b/services/nova/nova-control-api-pod.yml.j2 index 3f5ed1a39..ecd887648 100644 --- a/services/nova/nova-control-api-pod.yml.j2 +++ b/services/nova/nova-control-api-pod.yml.j2 @@ -1,26 +1,55 @@ -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1alpha1 +kind: PetSet spec: + serviceName: "nova" replicas: {{ nova_api_replicas }} - selector: - service: nova - type: api template: metadata: labels: service: nova type: api + annotations: + pod.alpha.kubernetes.io/initialized: "true" + pod.alpha.kubernetes.io/init-containers: '[ + { + "name": "initialize-nova-api", + "image": "{{ nova_api_image_full }}", + "command": [ + "sh", + "-c", + "cp -a /config/..data/* /nova/; + ip=$(ip addr show dev {{ tunnel_interface }} | grep -G ''inet '' | awk ''{print $2}''); + sed -i ''s|^my_ip.*=.*|my_ip=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_host.*=.*|novncproxy_host=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_listen.*=.*|vncserver_listen=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_proxyclient_address.*=.*|vncserver_proxyclient_address=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_base_url.*=.*|novncproxy_base_url=http://''${ip%/*}'':6080/vnc_auto.html|g'' /nova/nova.conf; + sed -i ''s|^connection_uri.*=.*|connection_uri=qemu+tcp://''${ip%/*}''/system|g'' /nova/nova.conf;" ], + "volumeMounts": [ + { + "name": "nova-api-config", + "mountPath": "/config/" + }, + { + "name": "nova-config", + "mountPath": "/nova/" + } + ] + } + ]' spec: containers: - name: nova-api image: "{{ nova_api_image_full }}" volumeMounts: - mountPath: {{ container_config_directory }} - name: nova-api-config + name: nova-config - mountPath: /etc/localtime name: etc-localtime - mountPath: /lib/modules name: lib-modules + - mountPath: /nova + name: nova-config - mountPath: /var/log/kolla name: kolla-logs env: @@ -43,7 +72,9 @@ spec: - name: lib-modules hostPath: path: /lib/modules + - name: nova-config + emptyDir: {} - name: kolla-logs emptyDir: {} metadata: - name: nova-api \ No newline at end of file + name: nova-api diff --git a/services/nova/nova-control-bootstrap-job-create-nova-api-db.yml.j2 b/services/nova/nova-control-bootstrap-job-create-nova-api-db.yml.j2 new file mode 100644 index 000000000..95b90900a --- /dev/null +++ b/services/nova/nova-control-bootstrap-job-create-nova-api-db.yml.j2 @@ -0,0 +1,41 @@ +apiVersion: batch/v1 +kind: Job +spec: + parallelism: 1 + completions: 1 + template: + metadata: + name: nova-control-database-upgrade + spec: + containers: + - image: "{{ nova_api_image_full }}" + name: nova-control-database-upgrade + volumeMounts: + - mountPath: {{ container_config_directory }} + name: nova-api-config + - mountPath: /etc/localtime + name: etc-localtime + - mountPath: /lib/modules + name: lib-modules + - mountPath: /var/log/kolla + name: kolla-logs + env: + - name: KOLLA_BOOTSTRAP + value: "" + - name: KOLLA_CONFIG_STRATEGY + value: {{ config_strategy }} + volumes: + - name: nova-api-config + configMap: + name: nova-api-configmap + - name: etc-localtime + hostPath: + path: /etc/localtime + - name: lib-modules + hostPath: + path: /lib/modules + - name: kolla-logs + emptyDir: {} + restartPolicy: OnFailure +metadata: + name: nova-control-databse-upgrade diff --git a/services/nova/nova-control-bootstrap-job-create-nova-db.yml.j2 b/services/nova/nova-control-bootstrap-job-create-nova-db.yml.j2 new file mode 100644 index 000000000..6f50d8cbc --- /dev/null +++ b/services/nova/nova-control-bootstrap-job-create-nova-db.yml.j2 @@ -0,0 +1,84 @@ +apiVersion: batch/v1 +kind: Job +spec: + parallelism: 1 + completions: 1 + template: + metadata: + name: nova-control-bootstrap-create-nova-db + spec: + containers: + - image: "{{ kolla_toolbox_image_full }}" + name: creating-nova-database-and-users + command: ["sh", "-c"] + args: + - ansible localhost -m mysql_db -a + "login_host=mariadb + login_port='{{ mariadb_port }}' + login_user='{{ database_user }}' + login_password='$DATABASE_PASSWORD' + name='{{ nova_database_name }}'" && + ansible localhost -m mysql_db -a + "login_host=mariadb + login_port='{{ mariadb_port }}' + login_user='{{ database_user }}' + login_password='$DATABASE_PASSWORD' + name='{{ nova_api_database_name }}'" && + ansible localhost -m mysql_user -a + "login_host=mariadb + login_port='{{ mariadb_port }}' + login_user='{{ database_user }}' + login_password='$DATABASE_PASSWORD' + name='{{ nova_database_name }}' + password='$NOVA_DATABASE_PASSWORD' + host='%' + priv='{{ nova_database_name }}.*:ALL' + append_privs='yes'" && + ansible localhost -m mysql_user -a + "login_host=mariadb + login_port='{{ mariadb_port }}' + login_user='{{ database_user }}' + login_password='$DATABASE_PASSWORD' + name='{{ nova_api_database_name }}' + password='$NOVA_API_DATABASE_PASSWORD' + host='%' + priv='{{ nova_api_database_name }}.*:ALL' + append_privs='yes'" + volumeMounts: + - mountPath: /var/log/kolla + name: kolla-logs + env: + - name: ANSIBLE_NOCOLOR + value: "1" + - name: ANSIBLE_LIBRARY + value: "/usr/share/ansible" + - name: DATABASE_PASSWORD + valueFrom: + secretKeyRef: + name: database-password + key: password + - name: NOVA_DATABASE_PASSWORD + valueFrom: + secretKeyRef: + name: nova-database-password + key: password + - name: NOVA_API_DATABASE_PASSWORD + valueFrom: + secretKeyRef: + name: nova-api-database-password + key: password + volumes: + - name: nova-api-config + configMap: + name: nova-api-configmap + - name: etc-localtime + hostPath: + path: /etc/localtime + - name: lib-modules + hostPath: + path: /lib/modules + - name: kolla-logs + emptyDir: {} + restartPolicy: OnFailure +metadata: + name: nova-control-bootstrap-create-nova-db diff --git a/services/nova/nova-control-bootstrap-job.yml.j2 b/services/nova/nova-control-bootstrap-job-create-nova-endpoints.yml.j2 similarity index 51% rename from services/nova/nova-control-bootstrap-job.yml.j2 rename to services/nova/nova-control-bootstrap-job-create-nova-endpoints.yml.j2 index 0c906eadb..d03231070 100644 --- a/services/nova/nova-control-bootstrap-job.yml.j2 +++ b/services/nova/nova-control-bootstrap-job-create-nova-endpoints.yml.j2 @@ -1,71 +1,13 @@ apiVersion: batch/v1 kind: Job spec: + parallelism: 1 + completions: 1 template: metadata: - name: nova-compute-generate + name: nova-control-bootstrap-create-endpoints spec: containers: - - image: "{{ kolla_toolbox_image_full }}" - name: creating-nova-database-and-users - command: ["sh", "-c"] - args: - - ansible localhost -vvvv -m mysql_db -a - "login_host={{ nova_database_address }} - login_port='{{ mariadb_port }}' - login_user='{{ database_user }}' - login_password='{{ database_password }}' - name='{{ nova_database_name }}'" && - ansible localhost -vvvv -m mysql_db -a - "login_host={{ nova_api_database_address }} - login_port='{{ mariadb_port }}' - login_user='{{ database_user }}' - login_password='{{ database_password }}' - name='{{ nova_api_database_name }}'" && - ansible localhost -m mysql_user -a - "login_host={{ nova_database_address }} - login_port='{{ mariadb_port }}' - login_user='{{ database_user }}' - login_password='{{ database_password }}' - name='{{ nova_database_name }}' - password='{{ nova_database_password }}' - host='%' - priv='{{ nova_database_name }}.*:ALL' - append_privs='yes'" && - ansible localhost -m mysql_user -a - "login_host={{ nova_api_database_address }} - login_port='{{ mariadb_port }}' - login_user='{{ database_user }}' - login_password='{{ database_password }}' - name='{{ nova_api_database_name }}' - password='{{ nova_api_database_password }}' - host='%' - priv='{{ nova_api_database_name }}.*:ALL' - append_privs='yes'" - volumeMounts: - - mountPath: /var/log/kolla - name: kolla-logs - env: - - name: ANSIBLE_NOCOLOR - value: "1" - - name: ANSIBLE_LIBRARY - value: "/usr/share/ansible" - - image: "{{ nova_api_image_full }}" - name: nova-api - volumeMounts: - - mountPath: {{ container_config_directory }} - name: nova-api-config - - mountPath: /etc/localtime - name: etc-localtime - - mountPath: /lib/modules - name: lib-modules - - mountPath: /var/log/kolla - name: kolla-logs - env: - - name: KOLLA_BOOTSTRAP - value: "" - - name: KOLLA_CONFIG_STRATEGY - value: {{ config_strategy }} - image: "{{ kolla_toolbox_image_full }}" name: creating-nova-endpoints command: ["sh", "-c"] @@ -104,7 +46,7 @@ spec: -m kolla_keystone_user -a "project=service user=nova - password={{ nova_keystone_password }} + password=$NOVA_KEYSTONE_PASSWORD role=admin region_name={{ openstack_region_name }} auth={{ '{{ openstack_nova_auth }}' }}" @@ -117,6 +59,16 @@ spec: value: "1" - name: ANSIBLE_LIBRARY value: "/usr/share/ansible" + - name: KEYSTONE_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: keystone-admin-password + key: password + - name: NOVA_KEYSTONE_PASSWORD + valueFrom: + secretKeyRef: + name: nova-keystone-password + key: password volumes: - name: nova-api-config configMap: @@ -131,4 +83,4 @@ spec: emptyDir: {} restartPolicy: OnFailure metadata: - name: nova-control-bootstrap + name: nova-control-bootstrap-create-endpoints diff --git a/services/nova/nova-control-conductor-pod.yml.j2 b/services/nova/nova-control-conductor-pod.yml.j2 index f33a7be73..517cd264f 100644 --- a/services/nova/nova-control-conductor-pod.yml.j2 +++ b/services/nova/nova-control-conductor-pod.yml.j2 @@ -1,24 +1,53 @@ -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1alpha1 +kind: PetSet spec: + serviceName: "nova" replicas: {{ nova_conductor_replicas }} - selector: - service: nova - type: conductor template: metadata: labels: service: nova type: conductor + annotations: + pod.alpha.kubernetes.io/initialized: "true" + pod.alpha.kubernetes.io/init-containers: '[ + { + "name": "initialize-nova-conductor", + "image": "{{ nova_conductor_image_full }}", + "command": [ + "sh", + "-c", + "cp -a /config/..data/* /nova/; + ip=$(ip addr show dev {{ tunnel_interface }} | grep -G ''inet '' | awk ''{print $2}''); + sed -i ''s|^my_ip.*=.*|my_ip=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_host.*=.*|novncproxy_host=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_listen.*=.*|vncserver_listen=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_proxyclient_address.*=.*|vncserver_proxyclient_address=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_base_url.*=.*|novncproxy_base_url=http://''${ip%/*}'':6080/vnc_auto.html|g'' /nova/nova.conf; + sed -i ''s|^connection_uri.*=.*|connection_uri=qemu+tcp://''${ip%/*}''/system|g'' /nova/nova.conf;" ], + "volumeMounts": [ + { + "name": "nova-conductor-config", + "mountPath": "/config/" + }, + { + "name": "nova-config", + "mountPath": "/nova/" + } + ] + } + ]' spec: containers: - name: nova-conductor image: "{{ nova_conductor_image_full }}" volumeMounts: - mountPath: {{ container_config_directory }} - name: nova-conductor-config + name: nova-config - mountPath: /etc/localtime name: etc-localtime + - mountPath: /nova + name: nova-config - mountPath: /var/log/kolla name: kolla-logs env: @@ -34,6 +63,8 @@ spec: - name: lib-modules hostPath: path: /lib/modules + - name: nova-config + emptyDir: {} - name: kolla-logs emptyDir: {} metadata: diff --git a/services/nova/nova-control-scheduler-pod.yml.j2 b/services/nova/nova-control-scheduler-pod.yml.j2 index 2f6e65948..e9087ac20 100644 --- a/services/nova/nova-control-scheduler-pod.yml.j2 +++ b/services/nova/nova-control-scheduler-pod.yml.j2 @@ -1,29 +1,62 @@ -apiVersion: v1 -kind: ReplicationController +apiVersion: apps/v1alpha1 +kind: PetSet spec: + serviceName: "nova" replicas: {{ nova_scheduler_replicas }} - selector: - service: nova - type: scheduler template: metadata: labels: service: nova - type: scheduler + type: scheduler + annotations: + pod.alpha.kubernetes.io/initialized: "true" + pod.alpha.kubernetes.io/init-containers: '[ + { + "name": "initialize-nova-scheduler", + "image": "{{ nova_scheduler_image_full }}", + "command": [ + "sh", + "-c", + "cp -a /config/..data/* /nova/; + ip=$(ip addr show dev {{ tunnel_interface }} | grep -G ''inet '' | awk ''{print $2}''); + sed -i ''s|^my_ip.*=.*|my_ip=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_host.*=.*|novncproxy_host=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_listen.*=.*|vncserver_listen=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^vncserver_proxyclient_address.*=.*|vncserver_proxyclient_address=''${ip%/*}''|g'' /nova/nova.conf; + sed -i ''s|^novncproxy_base_url.*=.*|novncproxy_base_url=http://''${ip%/*}'':6080/vnc_auto.html|g'' /nova/nova.conf; + sed -i ''s|^connection_uri.*=.*|connection_uri=qemu+tcp://''${ip%/*}''/system|g'' /nova/nova.conf;" ], + "volumeMounts": [ + { + "name": "nova-scheduler-config", + "mountPath": "/config/" + }, + { + "name": "nova-config", + "mountPath": "/nova/" + } + ] + } + ]' spec: containers: - name: nova-scheduler image: "{{ nova_scheduler_image_full }}" volumeMounts: - mountPath: {{ container_config_directory }} - name: nova-scheduler-config + name: nova-config - mountPath: /etc/localtime name: etc-localtime + - mountPath: /nova + name: nova-config - mountPath: /var/log/kolla name: kolla-logs env: - name: KOLLA_CONFIG_STRATEGY value: {{ config_strategy }} + securityContext: + privileged: true + command: ["sh", "-c"] + args: volumes: - name: nova-scheduler-config configMap: @@ -34,6 +67,8 @@ spec: - name: lib-modules hostPath: path: /lib/modules + - name: nova-config + emptyDir: {} - name: kolla-logs emptyDir: {} metadata: diff --git a/services/nova/nova-libvirt-pod.yml.j2 b/services/nova/nova-libvirt-pod.yml.j2 new file mode 100644 index 000000000..d57bc1c73 --- /dev/null +++ b/services/nova/nova-libvirt-pod.yml.j2 @@ -0,0 +1,102 @@ +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: nova-libvirt + labels: + component: nova + system: nova-libvirt + namespace: default +spec: + template: + metadata: + name: nova-libvirt + labels: + component: nova + system: nova-libvirt + namespace: default + annotations: + pod.alpha.kubernetes.io/init-containers: '[ + { + "name": "initialize-nova-libvirt", + "image": "{{ nova_libvirt_image_full }}", + "command": [ + "sh", + "-c", + "cp -a /config/..data/* /nova/; + ip=$(ip addr show dev {{ tunnel_interface }} | grep -G ''inet '' | awk ''{print $2}''); + sed -i ''s|^listen_addr.*=.*|listen_addr=\"''${ip%/*}''\"|g'' /nova/libvirtd.conf;"], + "volumeMounts": [ + { + "name": "nova-libvirt-config", + "mountPath": "/config/" + }, + { + "name": "nova-config", + "mountPath": "/nova/" + } + ] + } + ]' + spec: + hostNetwork: True + hostPID: True + containers: + - name: nova-libvirt + image: "{{ nova_libvirt_image_full }}" + securityContext: + privileged: true + volumeMounts: + - mountPath: {{ container_config_directory }} + name: nova-config + - mountPath: /var/lib/libvirt + name: nova-libvirt-persistent-storage + - mountPath: /var/lib/nova + name: nova-compute-persistent-storage + - mountPath: /etc/localtime + name: etc-localtime + - mountPath: /lib/modules + name: lib-modules + - mountPath: /run + name: run + - mountPath: /dev + name: dev + - mountPath: /sys/fs/cgroup + name: sys-fs-cgroup + - mountPath: /nova + name: nova-config + - mountPath: /var/log/kolla + name: kolla-logs + env: + - name: KOLLA_CONFIG_STRATEGY + value: {{ config_strategy }} + volumes: + - name: nova-compute-persistent-storage + hostPath: + path: /var/lib/nova + - name: nova-libvirt-config + configMap: + name: nova-libvirt-configmap + - name: nova-libvirt-persistent-storage + hostPath: + path: /var/lib/libvirt + - name: etc-localtime + hostPath: + path: /etc/localtime + - name: lib-modules + hostPath: + path: /lib/modules + - name: run + hostPath: + path: /run + - name: dev + hostPath: + path: /dev + - name: sys-fs-cgroup + hostPath: + path: /sys/fs/cgroup + - name: nova-config + emptyDir: {} + - name: kolla-logs + emptyDir: {} +metadata: + name: nova-libvirt