diff --git a/Dockerfile.search b/Dockerfile.search new file mode 100644 index 0000000..3feba7b --- /dev/null +++ b/Dockerfile.search @@ -0,0 +1,7 @@ +ARG BASE + +FROM $BASE + +COPY swh-search /app/swh-search + +RUN pip install /app/swh-search diff --git a/kubernetes/55-search.yml b/kubernetes/55-search.yml new file mode 100644 index 0000000..d88f396 --- /dev/null +++ b/kubernetes/55-search.yml @@ -0,0 +1,148 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: search +data: + config.yml: | + search: + cls: elasticsearch + hosts: + - elasticsearch:9200 + entrypoint-init.sh: | + #!/bin/bash + + set -e + + wait-for-it elasticsearch:9200 -s --timeout=0 + + echo "Waiting for ElasticSearch cluster to be up" + cat << EOF | python3 + import elasticsearch + es = elasticsearch.Elasticsearch(['elasticsearch:9200']) + es.cluster.health(wait_for_status='yellow') + EOF + + echo "Initialize elasticsearch index" + swh search -C $SWH_CONFIG_FILENAME initialize + + entrypoint.sh: | + #!/bin/bash + + set -e + + exec gunicorn --bind 0.0.0.0:5010 \ + --reload \ + --threads 4 \ + --workers 2 \ + --log-level DEBUG \ + --timeout 3600 \ + --config 'python:swh.core.api.gunicorn_config' \ + 'swh.search.api.server:make_app_from_configfile()' + ;; +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: search + labels: + app: search +spec: + replicas: 1 + selector: + matchLabels: + app: search + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + template: + metadata: + labels: + app: search + spec: + initContainers: + - name: search-init + image: swh/search:latest + imagePullPolicy: Always + command: + - /entrypoint.sh + env: + - name: SWH_CONFIG_FILENAME + value: /etc/softwareheritage/config.yml + volumeMounts: + - name: config + mountPath: /etc/softwareheritage/config.yml + subPath: config.yml + readOnly: true + - name: config + mountPath: /entrypoint.sh + subPath: entrypoint-init.sh + readOnly: true + containers: + - name: search + image: swh/search:latest + imagePullPolicy: Always + command: + - /entrypoint.sh + ports: + - containerPort: 5010 + env: + - name: PORT + value: "5010" + - name: STATSD_HOST + value: "prometheus-statsd-exporter" + - name: STATSD_PORT + value: "9125" + - name: SWH_CONFIG_FILENAME + value: /etc/softwareheritage/config.yml + volumeMounts: + - name: config + mountPath: /etc/softwareheritage/config.yml + subPath: config.yml + readOnly: true + - name: config + mountPath: /entrypoint.sh + subPath: entrypoint.sh + readOnly: true + resources: + requests: + memory: "512Mi" + cpu: "250m" + limits: + memory: "1024Mi" + cpu: "500m" + volumes: + - name: config + configMap: + name: search + defaultMode: 0777 +--- +apiVersion: v1 +kind: Service +metadata: + name: search +spec: + type: ClusterIP + selector: + app: search + ports: + - port: 5010 + targetPort: 5010 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: search +spec: + rules: + - host: search.default + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: search + port: + number: 5010 diff --git a/skaffold.yaml b/skaffold.yaml index 16b2548..97617a6 100644 --- a/skaffold.yaml +++ b/skaffold.yaml @@ -1,58 +1,65 @@ apiVersion: skaffold/v2beta13 kind: Config metadata: name: swh-environment build: artifacts: - image: swh/stack-base docker: dockerfile: Dockerfile - image: swh/objstorage docker: dockerfile: Dockerfile.objstorage requires: - image: swh/stack-base alias: BASE - image: swh/storage docker: dockerfile: Dockerfile.storage requires: - image: swh/stack-base alias: BASE - image: swh/scheduler docker: dockerfile: Dockerfile.scheduler requires: - image: swh/stack-base alias: BASE - image: swh/webapp docker: dockerfile: Dockerfile.webapp requires: - image: swh/stack-base alias: BASE - image: swh/loaders docker: dockerfile: Dockerfile.loaders requires: - image: swh/stack-base alias: BASE - image: swh/grafana docker: dockerfile: Dockerfile.grafana + - image: swh/search + docker: + dockerfile: Dockerfile.search + requires: + - image: swh/stack-base + alias: BASE deploy: kubectl: manifests: - kubernetes/01-journal.yml - kubernetes/02-monitoring.yml - kubernetes/05-storage-db.yml - kubernetes/10-objstorage.yml - kubernetes/11-storage.yml - kubernetes/15-scheduler-db.yml - kubernetes/16-rabbitmq.yml - kubernetes/20-scheduler.yml - kubernetes/21-scheduler-runner.yml - kubernetes/29-web-db.yml - kubernetes/30-webapp.yml - kubernetes/40-loaders.yml - kubernetes/50-elasticsearch.yml + - kubernetes/55-search.yml