feat: deploy microservices through traefik
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources: []
|
||||
resources:
|
||||
- microservices
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: microservices
|
||||
namespace: microservices
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host(`apps.silverside-gopher.ts.net`) && PathPrefix(`/site-analyzer`)
|
||||
kind: Rule
|
||||
middlewares:
|
||||
- name: microservices-strip-prefix
|
||||
services:
|
||||
- name: site-analyzer
|
||||
port: 8090
|
||||
- match: Host(`apps.silverside-gopher.ts.net`) && PathPrefix(`/scraper`)
|
||||
kind: Rule
|
||||
middlewares:
|
||||
- name: microservices-strip-prefix
|
||||
services:
|
||||
- name: scraper
|
||||
port: 8080
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- webshare-api-externalsecret.yaml
|
||||
- site-analyzer-deployment.yaml
|
||||
- site-analyzer-service.yaml
|
||||
- scraper-deployment.yaml
|
||||
- scraper-service.yaml
|
||||
- traefik-middleware-strip-prefix.yaml
|
||||
- ingressroute-microservices.yaml
|
||||
@@ -0,0 +1,4 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: microservices
|
||||
@@ -0,0 +1,63 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: scraper
|
||||
namespace: microservices
|
||||
labels:
|
||||
app: scraper
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: scraper
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: scraper
|
||||
spec:
|
||||
containers:
|
||||
- name: scraper
|
||||
image: ghcr.io/openstaticfish/microservices/scraper:main
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
env:
|
||||
- name: PORT
|
||||
value: "8080"
|
||||
- name: WEBSHARE_API_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: webshare-api
|
||||
key: api-key
|
||||
optional: true
|
||||
- name: WEBSHARE_PROXY_USERNAME
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: webshare-api
|
||||
key: proxy-username
|
||||
optional: true
|
||||
- name: WEBSHARE_PROXY_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: webshare-api
|
||||
key: proxy-password
|
||||
optional: true
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 64Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 256Mi
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8080
|
||||
initialDelaySeconds: 2
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8080
|
||||
initialDelaySeconds: 2
|
||||
periodSeconds: 5
|
||||
@@ -0,0 +1,14 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: scraper
|
||||
namespace: microservices
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: scraper
|
||||
ports:
|
||||
- name: http
|
||||
protocol: TCP
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
@@ -0,0 +1,79 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: site-analyzer
|
||||
namespace: microservices
|
||||
labels:
|
||||
app: site-analyzer
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: site-analyzer
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxSurge: 1
|
||||
maxUnavailable: 0
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: site-analyzer
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 30
|
||||
containers:
|
||||
- name: site-analyzer
|
||||
image: ghcr.io/openstaticfish/microservices/site-analyzer:main
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 8090
|
||||
env:
|
||||
- name: PORT
|
||||
value: "8090"
|
||||
- name: MAX_CONCURRENT_ANALYSES
|
||||
value: "20"
|
||||
- name: ANALYSIS_TIMEOUT
|
||||
value: 15s
|
||||
- name: FETCH_TIMEOUT
|
||||
value: 10s
|
||||
- name: MAX_REQUEST_BYTES
|
||||
value: "4096"
|
||||
- name: MAX_RESPONSE_BYTES
|
||||
value: "2097152"
|
||||
- name: READ_HEADER_TIMEOUT
|
||||
value: 2s
|
||||
- name: READ_TIMEOUT
|
||||
value: 5s
|
||||
- name: WRITE_TIMEOUT
|
||||
value: 20s
|
||||
- name: IDLE_TIMEOUT
|
||||
value: 60s
|
||||
- name: SHUTDOWN_TIMEOUT
|
||||
value: 25s
|
||||
- name: MAX_IDLE_CONNS
|
||||
value: "200"
|
||||
- name: MAX_IDLE_CONNS_PER_HOST
|
||||
value: "20"
|
||||
resources:
|
||||
requests:
|
||||
cpu: 250m
|
||||
memory: 128Mi
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: 512Mi
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8090
|
||||
initialDelaySeconds: 2
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 1
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /ready
|
||||
port: 8090
|
||||
initialDelaySeconds: 2
|
||||
periodSeconds: 3
|
||||
timeoutSeconds: 1
|
||||
failureThreshold: 2
|
||||
@@ -0,0 +1,14 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: site-analyzer
|
||||
namespace: microservices
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: site-analyzer
|
||||
ports:
|
||||
- name: http
|
||||
protocol: TCP
|
||||
port: 8090
|
||||
targetPort: 8090
|
||||
@@ -0,0 +1,10 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: microservices-strip-prefix
|
||||
namespace: microservices
|
||||
spec:
|
||||
stripPrefix:
|
||||
prefixes:
|
||||
- /site-analyzer
|
||||
- /scraper
|
||||
@@ -0,0 +1,29 @@
|
||||
apiVersion: external-secrets.io/v1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: webshare-api
|
||||
namespace: microservices
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: doppler-openstaticfish-microservices
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: webshare-api
|
||||
creationPolicy: Owner
|
||||
template:
|
||||
type: Opaque
|
||||
data:
|
||||
api-key: "{{ .webshareApiKey }}"
|
||||
proxy-username: "{{ .webshareProxyUsername }}"
|
||||
proxy-password: "{{ .webshareProxyPassword }}"
|
||||
data:
|
||||
- secretKey: webshareApiKey
|
||||
remoteRef:
|
||||
key: WEBSHARE_API_KEY
|
||||
- secretKey: webshareProxyUsername
|
||||
remoteRef:
|
||||
key: WEBSHARE_PROXY_USERNAME
|
||||
- secretKey: webshareProxyPassword
|
||||
remoteRef:
|
||||
key: WEBSHARE_PROXY_PASSWORD
|
||||
Reference in New Issue
Block a user