# Własna warstwa danych i logiki dla astroklienta (PR 5). # # OSOBNY UDZIAŁ, nie osobny katalog na wspólnym. Pule kont izolują klientów od # siebie w każdym wariancie, ale to jest izolacja PROGRAMOWA — opiera się na # poprawności mechanizmu pul. Granica na poziomie systemu plików nie zależy od # tego, czy w kodzie niczego nie przeoczono, i dlatego pliki klientów nie leżą # ani przy bazach produkcyjnych, ani przy danych demonstracyjnych. # # Przy sprzątaniu demo nie da się przez pomyłkę skasować cudzych danych, bo są # gdzie indziej. --- apiVersion: apps/v1 kind: Deployment metadata: name: data-astroklient namespace: astrololo spec: replicas: 1 selector: matchLabels: { app: data-astroklient } template: metadata: labels: { app: data-astroklient } spec: # Warstwa danych ciągnie pandas, a przez nią NumPy budowane z bazą # x86-64-v2. Węzeł bez tych rozszerzeń nie uruchomi kontenera, a komunikat # mówi o „baseline optimizations", nie o węźle. Etykieta jest wymagana, # więc nowy, nieoznaczony węzeł daje czytelny Pending zamiast pętli # restartów (patrz README.md, „Wymóg węzłów: rozszerzenia procesora"). affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: astrololo.czernobog.pl/cpu-x86-64-v2 operator: In values: ["true"] automountServiceAccountToken: false imagePullSecrets: [{ name: gitea-registry }] containers: - name: data image: gitea.czernobog.pl/gitea/astrololo-data:latest ports: [{ containerPort: 8002 }] env: - name: DATA_PROVIDER value: "excel" - name: EXCEL_DIR value: "/app/data_files" - name: CACHE_DIR value: "/app/.cache" - name: INTERNAL_TOKEN valueFrom: secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN } - name: LINK_KEY_LOGIC_DATA valueFrom: secretKeyRef: { name: astrololo-link, key: LINK_KEY_LOGIC_DATA } - name: LINK_ENCRYPTION_REQUIRED value: "true" volumeMounts: - name: cache mountPath: /app/.cache - name: klient mountPath: /app/data_files resources: requests: { cpu: "100m", memory: "256Mi" } limits: { cpu: "500m", memory: "512Mi" } volumes: - name: cache emptyDir: {} - name: klient nfs: server: 192.168.1.34 path: /mnt/Tank1/astrololo-klient --- apiVersion: v1 kind: Service metadata: name: data-astroklient namespace: astrololo spec: type: ClusterIP selector: { app: data-astroklient } ports: [{ port: 8002, targetPort: 8002 }] --- apiVersion: apps/v1 kind: Deployment metadata: name: logic-astroklient namespace: astrololo spec: replicas: 1 selector: matchLabels: { app: logic-astroklient } template: metadata: labels: { app: logic-astroklient } spec: automountServiceAccountToken: false imagePullSecrets: [{ name: gitea-registry }] containers: - name: logic image: gitea.czernobog.pl/gitea/astrololo-logic:latest ports: [{ containerPort: 8001 }] env: - name: DATA_URL value: "http://data-astroklient:8002" # Silnik własny, permisywny. Silnik B (Swiss Ephemeris, AGPL) nie # wchodzi do produktu oddawanego klientom. - name: EPHEMERIS_ENGINE value: "own" - name: INTERNAL_TOKEN valueFrom: secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN } - name: LINK_KEY_PRESENTATION_LOGIC valueFrom: secretKeyRef: { name: astrololo-link, key: LINK_KEY_PRESENTATION_LOGIC } - name: LINK_KEY_LOGIC_DATA valueFrom: secretKeyRef: { name: astrololo-link, key: LINK_KEY_LOGIC_DATA } - name: LINK_ENCRYPTION_REQUIRED value: "true" resources: requests: { cpu: "100m", memory: "128Mi" } limits: { cpu: "500m", memory: "512Mi" } --- apiVersion: v1 kind: Service metadata: name: logic-astroklient namespace: astrololo spec: type: ClusterIP selector: { app: logic-astroklient } ports: [{ port: 8001, targetPort: 8001 }]