apiVersion: apps/v1 kind: Deployment metadata: name: badger labels: tags.datadoghq.com/env: "prod" tags.datadoghq.com/service: "badger" tags.datadoghq.com/version: "{{IMAGE_VERSION}}" spec: selector: matchLabels: app: badger replicas: 1 template: metadata: labels: app: badger tags.datadoghq.com/env: "prod" tags.datadoghq.com/service: "badger" tags.datadoghq.com/version: "{{IMAGE_VERSION}}" spec: containers: - name: badger image: "ghcr.io/wahyd4/badger/badger:{{IMAGE_VERSION}}" securityContext: runAsUser: 1000 imagePullPolicy: Always env: - name: DD_AGENT_HOST valueFrom: fieldRef: fieldPath: status.hostIP - name: DD_ENV valueFrom: fieldRef: fieldPath: metadata.labels['tags.datadoghq.com/env'] - name: DD_SERVICE valueFrom: fieldRef: fieldPath: metadata.labels['tags.datadoghq.com/service'] - name: DD_VERSION valueFrom: fieldRef: fieldPath: metadata.labels['tags.datadoghq.com/version'] - name: DB_HOST value: 192.168.1.2 - name: PROMETHEUS_URL value: http://prometheus-kube-prometheus-prometheus.prometheus.svc.cluster.local:9090 - name: DB_NAME value: badges - name: DB_USERNAME value: postgres - name: DB_PASSWORD valueFrom: { secretKeyRef: { name: database-credentials, key: password } } - name: DB_PORT value: "5432" - name: GIN_MODE value: release - name: SENTRY_DSN valueFrom: { secretKeyRef: { name: sentry-credentials, key: dsn } } ports: - containerPort: 8080 name: badger-port protocol: TCP - containerPort: 9090 name: metrics-port protocol: TCP resources: requests: cpu: 20m memory: 32Mi limits: cpu: 50m memory: 64Mi imagePullSecrets: - name: github-image-pull-secret --- apiVersion: v1 kind: Service metadata: name: badger labels: app: badger spec: type: ClusterIP ports: - port: 80 targetPort: badger-port protocol: TCP name: web - port: 9090 targetPort: metrics-port protocol: TCP name: metrics-port selector: app: badger --- apiVersion: apps/v1 kind: Deployment metadata: name: badger-ui spec: selector: matchLabels: app: badger-ui replicas: 1 template: metadata: labels: app: badger-ui spec: containers: - name: badger-ui image: "ghcr.io/wahyd4/badger/ui:{{IMAGE_VERSION}}" securityContext: runAsUser: 0 imagePullPolicy: Always env: - name: BASE_URL value: "https://badges.toozhao.com" - name: GITHUB_CLIENT_ID valueFrom: { secretKeyRef: { name: github-credentials, key: clientId } } - name: GITHUB_CLIENT_SECRET valueFrom: { secretKeyRef: { name: github-credentials, key: clientSecret }, } ports: - containerPort: 3000 name: ui-port protocol: TCP resources: requests: cpu: 100m memory: 100Mi limits: cpu: 200m memory: 256Mi imagePullSecrets: - name: github-image-pull-secret --- apiVersion: v1 kind: Service metadata: name: badger-ui labels: app: badger-ui spec: type: ClusterIP ports: - port: 80 targetPort: ui-port protocol: TCP name: ui selector: app: badger-ui --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: badger-ingress annotations: kubernetes.io/ingress.class: "nginx" kubernetes.io/tls-acme: "true" cert-manager.io/cluster-issuer: "letsencrypt-prod" # nginx.ingress.kubernetes.io/global-rate-limit-window: 1m # nginx.ingress.kubernetes.io/global-rate-limit: "15" nginx.ingress.kubernetes.io/limit-rpm: "15" spec: tls: - hosts: - badges.toozhao.com secretName: badges-2-tls rules: - host: badges.toozhao.com http: paths: - path: / pathType: Prefix backend: service: name: badger-ui port: number: 80 - path: /badges pathType: Exact backend: service: name: badger-ui port: number: 80 - path: /stats pathType: Prefix backend: service: name: badger-ui port: number: 80 - path: /login pathType: Prefix backend: service: name: badger-ui port: number: 80 - path: /_auth pathType: Prefix backend: service: name: badger-ui port: number: 80 - path: /callback pathType: Prefix backend: service: name: badger-ui port: number: 80 - path: /badges pathType: Prefix backend: service: name: badger port: number: 80 - path: /svg pathType: Prefix backend: service: name: badger port: number: 80 - path: /val pathType: Prefix backend: service: name: badger port: number: 80 - path: /api pathType: Prefix backend: service: name: badger port: number: 80 - path: /ping pathType: Prefix backend: service: name: badger port: number: 80 --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: badger labels: app: badger release: prometheus # this can make the service monitor be discovered by prometheus spec: namespaceSelector: matchNames: - apps selector: matchLabels: app: badger endpoints: - port: metrics-port interval: 30s