diff --git a/ansible/playbooks/saas/roles/milvus/README.md b/ansible/playbooks/saas/roles/milvus/README.md new file mode 100644 index 00000000..680a4325 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/README.md @@ -0,0 +1 @@ +# Role: `milvus` diff --git a/ansible/playbooks/saas/roles/milvus/defaults/main.yml b/ansible/playbooks/saas/roles/milvus/defaults/main.yml new file mode 100644 index 00000000..ed97d539 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/defaults/main.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/playbooks/saas/roles/milvus/tasks/backup.yml b/ansible/playbooks/saas/roles/milvus/tasks/backup.yml new file mode 100644 index 00000000..ed97d539 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/tasks/backup.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/playbooks/saas/roles/milvus/tasks/build.yml b/ansible/playbooks/saas/roles/milvus/tasks/build.yml new file mode 100644 index 00000000..68406697 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/tasks/build.yml @@ -0,0 +1,14 @@ +--- +- name: Include upstream variables + ansible.builtin.include_vars: upstream.yml + +- name: Set custom variables + ansible.builtin.set_fact: + image_version: "{{ latest_version }}" + image_name: "{{ image.name }}" + image_labels: "{{ image.labels }}" + image_build: "{{ image.build }}" + +- name: End playbook if no new version + ansible.builtin.meta: end_host + when: softwares[image.name] is defined and softwares[image.name].version == image_version diff --git a/ansible/playbooks/saas/roles/milvus/tasks/destroy.yml b/ansible/playbooks/saas/roles/milvus/tasks/destroy.yml new file mode 100644 index 00000000..e00b7de1 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/tasks/destroy.yml @@ -0,0 +1,11 @@ +--- +- name: Stop nomad job + ansible.builtin.include_role: + name: nomad + tasks_from: job_stop.yml + +- name: Remove software directory + ansible.builtin.file: + path: "{{ software_path }}" + state: absent + delegate_to: "{{ software.instance }}" \ No newline at end of file diff --git a/ansible/playbooks/saas/roles/milvus/tasks/main.yml b/ansible/playbooks/saas/roles/milvus/tasks/main.yml new file mode 100644 index 00000000..00e286c9 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/tasks/main.yml @@ -0,0 +1,39 @@ +--- +- name: Create default directory + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: root + group: root + mode: "0755" + loop: + - "{{ software_path }}/milvus/config" + delegate_to: "{{ software.instance }}" + +- name: Copy configuration files + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ software_path }}/{{ item.dest }}" + owner: root + group: root + mode: '0644' + loop: + - src: milvus.yaml.j2 + dest: milvus/config/embedEtcd.yaml + - src: user.yaml.j2 + dest: milvus/config/user.yaml + delegate_to: "{{ software.instance }}" + +- name: Copy nomad job + ansible.builtin.template: + src: nomad.hcl + dest: "/var/tmp/{{ domain }}.nomad" + owner: root + group: root + mode: '0600' + become: true + +- name: Run nomad job + ansible.builtin.include_role: + name: nomad + tasks_from: job_run.yml diff --git a/ansible/playbooks/saas/roles/milvus/tasks/restore.yml b/ansible/playbooks/saas/roles/milvus/tasks/restore.yml new file mode 100644 index 00000000..ed97d539 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/tasks/restore.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/playbooks/saas/roles/milvus/templates/milvus.yaml.j2 b/ansible/playbooks/saas/roles/milvus/templates/milvus.yaml.j2 new file mode 100644 index 00000000..e69de29b diff --git a/ansible/playbooks/saas/roles/milvus/templates/nomad.hcl b/ansible/playbooks/saas/roles/milvus/templates/nomad.hcl new file mode 100644 index 00000000..c449b59b --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/templates/nomad.hcl @@ -0,0 +1,93 @@ +job "{{ domain }}" { + region = "{{ fact_instance.region }}" + datacenters = ["{{ fact_instance.datacenter }}"] + type = "service" + +{% if software.constraints is defined and software.constraints.location is defined %} + constraint { + attribute = "${meta.location}" + set_contains = "{{ software.constraints.location }}" + } +{% endif %} + + constraint { + attribute = "${meta.instance}" + set_contains = "{{ software.instance }}" + } + + group "{{ domain }}" { + count = 1 + + network { + port "milvus_19530" { + to = 19530 +{% if software.static_port is defined %} + static = {{ software.static_port }} +{% endif %} + } + port "milvus_9091" { + to = 9091 + } + port "milvus_2379" { + to = 2379 + } + } + + service { + name = "{{ service_name }}-milvus" + port = "milvus_19530" + provider = "nomad" + } + + service { + name = "{{ service_name }}-webui" + port = "milvus_9091" + provider = "nomad" + tags = [ + {{ lookup('template', '../../traefik/templates/traefik_tag.j2') | indent(8) }} + ] + check { + type = "http" + path = "/healthz" + interval = "30s" + timeout = "20s" + } + } + + task "{{ domain }}-milvus" { + driver = "docker" + + config { + image = "milvusdb/milvus:v{{ softwares.milvus.version }}" + security_opt = [ + "seccomp=unconfined" + ] + volumes = [ + "{{ software_path }}/var/lib/milvus:/var/lib/milvus:rw", + "{{ software_path }}/milvus/config:/milvus/config:rw" + ] + ports = ["milvus_19530", "milvus_9091", "milvus_2379"] + command = "milvus" + args = [ + "run", "standalone" + ] + } + + env { + TZ = "Europe/Paris" + MILVUS_LOG_LEVEL = "info" + ETCD_USE_EMBED = "true" + ETCD_DATA_DIR = "/var/lib/milvus/etcd" + ETCD_CONFIG_PATH = "/milvus/config/embedEtcd.yaml" + COMMON_STORAGETYPE = "local" + DEPLOY_MODE = "STANDALONE" + } + + resources { + cpu = {{ size[software.size].cpu }} + memory = {{ size[software.size].memory }} + memory_max = {{ size[software.size].memory * 2 }} + } + } + } +} diff --git a/ansible/playbooks/saas/roles/milvus/templates/user.yaml.j2 b/ansible/playbooks/saas/roles/milvus/templates/user.yaml.j2 new file mode 100644 index 00000000..db77cc8b --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/templates/user.yaml.j2 @@ -0,0 +1,3 @@ +# Extra config to override default milvus.yaml +proxy: + healthCheckTimeout: 1000 # ms, the interval that to do component healthy check \ No newline at end of file diff --git a/ansible/playbooks/saas/roles/milvus/vars/main.yml b/ansible/playbooks/saas/roles/milvus/vars/main.yml new file mode 100644 index 00000000..dc15db50 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/vars/main.yml @@ -0,0 +1,13 @@ +--- +image: + build: false + upstream: + source: github + user: milvus-io + repo: milvus + type: releases + format: deb + file: milvus_VERSION_ARCH.FORMAT + os: linux + labels: {} + name: milvus \ No newline at end of file diff --git a/ansible/playbooks/saas/roles/milvus/vars/upstream.yml b/ansible/playbooks/saas/roles/milvus/vars/upstream.yml new file mode 100644 index 00000000..fa90cda8 --- /dev/null +++ b/ansible/playbooks/saas/roles/milvus/vars/upstream.yml @@ -0,0 +1,3 @@ +--- +upstream_versions: "{{ (lookup('url', 'https://api.github.com/repos/' + image.upstream.user + '/' + image.upstream.repo + '/tags', headers={'Accept': 'application/vnd.github+json', 'Authorization': 'Bearer ' + lookup('ansible.builtin.env', 'GITHUB_API_TOKEN') })) }}" +latest_version: "{{ upstream_versions | community.general.json_query('[].name') | select('match', '^(v|r)?\\d{1,4}(\\.\\d{1,4})(\\.\\d{1,4})$') | community.general.version_sort | last | replace('v', '') }}" diff --git a/ui/public/img/milvus.png b/ui/public/img/milvus.png new file mode 100644 index 00000000..91e8d4b8 Binary files /dev/null and b/ui/public/img/milvus.png differ