diff --git a/k8s/kultmost.yaml b/k8s/kultmost.yaml new file mode 100644 index 0000000..d51087f --- /dev/null +++ b/k8s/kultmost.yaml @@ -0,0 +1,483 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kultmost-api + namespace: kultmost +spec: + replicas: 2 + selector: + matchLabels: + app: kultmost-api + template: + metadata: + labels: + app: kultmost-api + spec: + imagePullSecrets: + - name: regcred + containers: + - name: kultmost-api-container + image: registry.spiritofweb.ru/avtopost-api:latest + command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080","--workers","8"] + envFrom: + - secretRef: + name: kultmost + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 10 + periodSeconds: 2 + failureThreshold: 2 + readinessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: email-celery + namespace: kultmost +spec: + replicas: 1 + selector: + matchLabels: + app: email-celery + template: + metadata: + labels: + app: email-celery + spec: + imagePullSecrets: + - name: regcred + containers: + - name: email + image: registry.spiritofweb.ru/avtopost-api:latest + command: ["celery", "-A", "email_task.celery_app_email", "worker", "--loglevel=info"] + envFrom: + - secretRef: + name: kultmost +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vk-celery + namespace: kultmost +spec: + replicas: 1 + selector: + matchLabels: + app: vk-celery + template: + metadata: + labels: + app: vk-celery + spec: + imagePullSecrets: + - name: regcred + containers: + - name: vk + image: registry.spiritofweb.ru/avtopost-api:latest + command: ["celery", "-A", "vk.celery_app_vk", "worker", "--loglevel=info"] + envFrom: + - secretRef: + name: kultmost +--- +apiVersion: v1 +kind: Service +metadata: + name: kultmost-api +spec: + type: NodePort + selector: + app: kultmost-api + ports: + - protocol: TCP + port: 80 + targetPort: 8080 + nodePort: 30080 +--- +kind: Ingress +apiVersion: networking.k8s.io/v1 +metadata: + name: kultmost + namespace: kultmost + annotations: + cert-manager.io/cluster-issuer: letsencrypt + nginx.ingress.kubernetes.io/proxy-body-size: "0" + nginx.ingress.kubernetes.io/proxy-read-timeout: "600" + nginx.ingress.kubernetes.io/proxy-send-timeout: "600" + # nginx.ingress.kubernetes.io/proxy-buffering: "on" + nginx.ingress.kubernetes.io/proxy-set-headers: | + Host: $http_host + X-Forwarded-For: $proxy_add_x_forwarded_for + X-Forwarded-Proto: $scheme + Upgrade: $http_upgrade + Connection: $connection_upgrade + nginx.ingress.kubernetes.io/proxy-buffering: "on" +spec: + ingressClassName: public + tls: + - hosts: + - kultmost.spiritofweb.ru + secretName: kultmost-tls-cert + rules: + - host: kultmost.spiritofweb.ru + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: kultmost-api + port: + number: 80 +# --- +# kind: Ingress +# apiVersion: networking.k8s.io/v1 +# metadata: +# name: kultmost +# namespace: kultmost +# annotations: +# cert-manager.io/cluster-issuer: letsencrypt +# nginx.ingress.kubernetes.io/proxy-body-size: "0" +# nginx.ingress.kubernetes.io/proxy-read-timeout: "600" +# nginx.ingress.kubernetes.io/proxy-send-timeout: "600" +# # nginx.ingress.kubernetes.io/proxy-buffering: "on" +# nginx.ingress.kubernetes.io/proxy-set-headers: | +# Host: $http_host +# X-Forwarded-For: $proxy_add_x_forwarded_for +# X-Forwarded-Proto: $scheme +# Upgrade: $http_upgrade +# Connection: $connection_upgrade +# nginx.ingress.kubernetes.io/proxy-buffering: "on" +# spec: +# ingressClassName: public +# tls: +# - hosts: +# - avtopost.kultmost.ru +# secretName: kultmost-tls-cert +# rules: +# - host: avtopost.kultmost.ru +# http: +# paths: +# - path: / +# pathType: Prefix +# backend: +# service: +# name: kultmost-api +# port: +# number: 80 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: redis-kultmost-pvc + namespace: kultmost +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: redis-kultmost-pv +# namespace: kultmost +# spec: +# capacity: +# storage: 50Gi +# accessModes: +# - ReadWriteOnce +# persistentVolumeReclaimPolicy: Retain +# storageClassName: manual +# hostPath: +# path: /mnt/nfs/storage/db/redis-kultmost +# --- +# apiVersion: v1 +# kind: PersistentVolumeClaim +# metadata: +# name: redis-kultmost-pvc +# namespace: kultmost +# spec: +# accessModes: +# - ReadWriteOnce +# resources: +# requests: +# storage: 50Gi +# storageClassName: manual +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: redis + namespace: kultmost +spec: + replicas: 1 + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + spec: + containers: + - name: redis + image: redis:latest + ports: + - containerPort: 6379 + volumeMounts: + - name: redis-data + mountPath: /data + livenessProbe: + tcpSocket: + port: 6379 + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + tcpSocket: + port: 6379 + initialDelaySeconds: 5 + periodSeconds: 5 + volumes: + - name: redis-data + persistentVolumeClaim: + claimName: redis-kultmost-pvc +--- +apiVersion: v1 +kind: Service +metadata: + name: redis + namespace: kultmost +spec: + selector: + app: ssh-reverse-tunnel + ports: + - name: redis-tcp + protocol: TCP + port: 6379 + targetPort: 6379 + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + name: redis-stage + namespace: kultmost +spec: + selector: + app: redis + ports: + - name: redis + port: 6379 + targetPort: 6379 + nodePort: 30003 + type: NodePort +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mongodb-kultmost-pvc + namespace: kultmost +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Gi + +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: mongo-kultmost-pv +# namespace: kultmost +# spec: +# capacity: +# storage: 50Gi +# accessModes: +# - ReadWriteOnce +# persistentVolumeReclaimPolicy: Retain +# storageClassName: manual +# hostPath: +# path: /mnt/nfs/storage/db/mongodb-kultmost +# --- +# apiVersion: v1 +# kind: PersistentVolumeClaim +# metadata: +# name: mongodb-kultmost-pvc +# namespace: kultmost +# spec: +# accessModes: +# - ReadWriteOnce +# resources: +# requests: +# storage: 50Gi +# storageClassName: manual +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mongodb + namespace: kultmost +spec: + selector: + matchLabels: + app: mongodb + replicas: 1 + template: + metadata: + labels: + app: mongodb + spec: + imagePullSecrets: + - name: regcred + containers: + - name: mongodb + image: registry.spiritofweb.ru/mongo:latest + ports: + - containerPort: 27017 + env: + - name: MONGO_INITDB_ROOT_USERNAME + value: admin + - name: MONGO_INITDB_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: kultmost + key: MONGO_INITDB_ROOT_PASSWORD + volumeMounts: + - name: mongodb-persistent-storage + mountPath: /data/db + livenessProbe: + tcpSocket: + port: 27017 + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + tcpSocket: + port: 27017 + initialDelaySeconds: 5 + periodSeconds: 5 + volumes: + - name: mongodb-persistent-storage + persistentVolumeClaim: + claimName: mongodb-kultmost-pvc +--- +apiVersion: v1 +kind: Service +metadata: + name: mongodb + namespace: kultmost +spec: + selector: + app: ssh-reverse-tunnel + ports: + - name: mongo-tcp + protocol: TCP + port: 27017 + targetPort: 27017 + nodePort: 30670 + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + name: mongodb-stage + namespace: kultmost +spec: + selector: + app: mongodb + ports: + - name: mongodb + port: 27017 + targetPort: 27017 + nodePort: 30002 + type: NodePort +--- +apiVersion: v1 +kind: Secret +metadata: + name: kultmost + namespace: kultmost +type: Opaque +stringData: + MONGO_INITDB_ROOT_PASSWORD: $MONGO_INITDB_ROOT_PASSWORD + SECRET_KEY: $SECRET_KEY + FROM_EMAIL: $FROM_EMAIL + RABBITMQ_PASS: $RABBITMQ_PASS + RABBITMQ_HOST: $RABBITMQ_HOST + EMAIL_PASS: $EMAIL_PASS + ENC_KEY_B64: $ENC_KEY_B64 + EMAIL_SMTP_SERVER: $EMAIL_SMTP_SERVER + EMAIL_SMTP_PORT: "$EMAIL_SMTP_PORT" + FULL_PATH_DOMAIN: $FULL_PATH_DOMAIN + ATOKEN: "$ATOKEN" + WEB_CONCURRENCY: "8" + BOT_TOKEN: "$BOT_TOKEN" +--- +apiVersion: v1 +kind: Secret +metadata: + name: ssh-creds + namespace: kultmost +type: Opaque +stringData: + username: "root" + password: "$ROOT_PASS" + remote_host: "$REMOTE_HOST" +--- +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cron-day + namespace: kultmost +spec: + schedule: "0 0 * * *" # every day + jobTemplate: + spec: + template: + spec: + imagePullSecrets: + - name: regcred + restartPolicy: OnFailure + containers: + - name: cron-day + image: registry.spiritofweb.ru/alpine/curl + command: ["sh","-c","curl -sS http://kultmost-api.kultmost/cron/day -H \"Authorization: Bearer ${ATOKEN}\""] + env: + - name: ATOKEN + valueFrom: + secretKeyRef: + name: kultmost + key: ATOKEN +--- +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cron-five-minutes + namespace: kultmost +spec: + schedule: "*/5 * * * *" # every 5 min + jobTemplate: + spec: + template: + spec: + imagePullSecrets: + - name: regcred + restartPolicy: OnFailure + containers: + - name: cron-five + image: registry.spiritofweb.ru/alpine/curl + command: ["sh","-c","curl -sS http://kultmost-api.kultmost/cron/5 -H \"Authorization: Bearer ${ATOKEN}\""] + env: + - name: ATOKEN + valueFrom: + secretKeyRef: + name: kultmost + key: ATOKEN +