booking-microservices/deployments/kubernetes/booking-microservices.yml

1245 lines
26 KiB
YAML

## ref: https://kompose.io
#######################################################
# Network
#######################################################
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: booking
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/booking: "true"
podSelector:
matchLabels:
io.kompose.network/booking: "true"
---
#######################################################
# ElasticSearch
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
env:
- name: discovery.type
value: "single-node"
- name: cluster.name
value: "docker-cluster"
- name: node.name
value: "docker-node"
- name: ES_JAVA_OPTS
value: "-Xms512m -Xmx512m"
- name: xpack.security.enabled
value: "false"
- name: xpack.security.http.ssl.enabled
value: "false"
- name: xpack.security.transport.ssl.enabled
value: "false"
- name: network.host
value: "0.0.0.0"
- name: http.port
value: "9200"
- name: transport.host
value: "localhost"
- name: bootstrap.memory_lock
value: "true"
- name: cluster.routing.allocation.disk.threshold_enabled
value: "false"
ports:
- containerPort: 9200
- containerPort: 9300
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: elastic-data
volumes:
- name: elastic-data
persistentVolumeClaim:
claimName: elasticsearch-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
spec:
selector:
app: elasticsearch
ports:
- port: 9200
targetPort: 9200
- port: 9300
targetPort: 9300
type: ClusterIP
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
#######################################################
# Kibana
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
containers:
- name: kibana
image: docker.elastic.co/kibana/kibana:8.17.0
env:
- name: ELASTICSEARCH_HOSTS
value: "http://elasticsearch:9200"
ports:
- containerPort: 5601
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: kibana
spec:
selector:
app: kibana
ports:
- port: 5601
targetPort: 5601
type: ClusterIP
---
#######################################################
# Tempo
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: tempo
spec:
replicas: 1
selector:
matchLabels:
app: tempo
template:
metadata:
labels:
app: tempo
spec:
containers:
- name: tempo
image: grafana/tempo:latest
args:
- "-config.file=/etc/tempo.yaml"
ports:
- containerPort: 3200
- containerPort: 4317
- containerPort: 4318
volumeMounts:
- mountPath: /etc/tempo.yaml
name: tempo-config
subPath: tempo.yaml
volumes:
- name: tempo-config
configMap:
name: tempo-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: tempo-config
data:
tempo.yaml: |
# Your Tempo configuration here
---
apiVersion: v1
kind: Service
metadata:
name: tempo
spec:
selector:
app: tempo
ports:
- port: 3200
targetPort: 3200
- port: 4317
targetPort: 4317
- port: 4318
targetPort: 4318
type: ClusterIP
---
#######################################################
# Looki
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: loki
spec:
replicas: 1
selector:
matchLabels:
app: loki
template:
metadata:
labels:
app: loki
spec:
containers:
- name: loki
image: grafana/loki:latest
args:
- "-config.file=/etc/loki/local-config.yaml"
ports:
- containerPort: 3100
volumeMounts:
- mountPath: /etc/loki/local-config.yaml
name: loki-config
subPath: local-config.yaml
volumes:
- name: loki-config
configMap:
name: loki-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: loki-config
data:
local-config.yaml: |
# Your Loki configuration here
---
apiVersion: v1
kind: Service
metadata:
name: loki
spec:
selector:
app: loki
ports:
- port: 3100
targetPort: 3100
type: ClusterIP
---
#######################################################
# Event Store
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: eventstore
spec:
replicas: 1
selector:
matchLabels:
app: eventstore
template:
metadata:
labels:
app: eventstore
spec:
containers:
- name: eventstore
image: eventstore/eventstore:latest
env:
- name: EVENTSTORE_CLUSTER_SIZE
value: "1"
- name: EVENTSTORE_RUN_PROJECTIONS
value: "All"
- name: EVENTSTORE_START_STANDARD_PROJECTIONS
value: "True"
- name: EVENTSTORE_HTTP_PORT
value: "2113"
- name: EVENTSTORE_INSECURE
value: "True"
- name: EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP
value: "True"
ports:
- containerPort: 2113
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: eventstore
spec:
selector:
app: eventstore
ports:
- port: 2113
targetPort: 2113
type: ClusterIP
---
#######################################################
# Jaeger
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: jaeger
spec:
replicas: 1
selector:
matchLabels:
app: jaeger
template:
metadata:
labels:
app: jaeger
spec:
containers:
- name: jaeger
image: jaegertracing/all-in-one:latest
ports:
- containerPort: 6831
protocol: UDP
- containerPort: 16686
- containerPort: 14268
- containerPort: 4317
- containerPort: 4318
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: jaeger
spec:
selector:
app: jaeger
ports:
- port: 6831
targetPort: 6831
protocol: UDP
- port: 16686
targetPort: 16686
- port: 14268
targetPort: 14268
- port: 4317
targetPort: 4317
- port: 4318
targetPort: 4318
type: ClusterIP
---
#######################################################
# Zipkin
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: zipkin
spec:
replicas: 1
selector:
matchLabels:
app: zipkin
template:
metadata:
labels:
app: zipkin
spec:
containers:
- name: zipkin
image: openzipkin/zipkin:latest
ports:
- containerPort: 9411
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: zipkin
spec:
selector:
app: zipkin
ports:
- port: 9411
targetPort: 9411
type: ClusterIP
---
#######################################################
# OpenTelemetry Collector
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: otel-collector
spec:
replicas: 1
selector:
matchLabels:
app: otel-collector
template:
metadata:
labels:
app: otel-collector
spec:
containers:
- name: otel-collector
image: otel/opentelemetry-collector-contrib:latest
args: ["--config=/etc/otelcol-contrib/config.yaml"]
ports:
- containerPort: 11888
- containerPort: 8888
- containerPort: 8889
- containerPort: 13133
- containerPort: 4317
- containerPort: 4318
- containerPort: 55679
volumeMounts:
- mountPath: /etc/otelcol-contrib/config.yaml
name: otel-config
subPath: config.yaml
volumes:
- name: otel-config
configMap:
name: otel-collector-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-config
data:
config.yaml: |
# Your OpenTelemetry Collector configuration here
---
apiVersion: v1
kind: Service
metadata:
name: otel-collector
spec:
selector:
app: otel-collector
ports:
- port: 11888
targetPort: 11888
- port: 8888
targetPort: 8888
- port: 8889
targetPort: 8889
- port: 13133
targetPort: 13133
- port: 4317
targetPort: 4317
- port: 4318
targetPort: 4318
- port: 55679
targetPort: 55679
type: ClusterIP
---
#######################################################
# Prometheus
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
args:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
- "--web.enable-remote-write-receiver"
ports:
- containerPort: 9090
volumeMounts:
- mountPath: /etc/prometheus/prometheus.yml
name: prometheus-config
subPath: prometheus.yml
volumes:
- name: prometheus-config
configMap:
name: prometheus-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
data:
prometheus.yml: |
# Your Prometheus configuration here
---
apiVersion: v1
kind: Service
metadata:
name: prometheus
spec:
selector:
app: prometheus
ports:
- port: 9090
targetPort: 9090
type: ClusterIP
---
#######################################################
# Grafana
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
env:
- name: GF_INSTALL_PLUGINS
value: "grafana-clock-panel,grafana-simple-json-datasource"
- name: GF_SECURITY_ADMIN_USER
value: "admin"
- name: GF_SECURITY_ADMIN_PASSWORD
value: "admin"
- name: GF_FEATURE_TOGGLES_ENABLE
value: "traceqlEditor"
ports:
- containerPort: 3000
volumeMounts:
- mountPath: /etc/grafana/provisioning
name: grafana-provisioning
- mountPath: /var/lib/grafana/dashboards
name: grafana-dashboards
volumes:
- name: grafana-provisioning
configMap:
name: grafana-provisioning
- name: grafana-dashboards
configMap:
name: grafana-dashboards
---
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-provisioning
data:
# Your Grafana provisioning configuration here
---
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-dashboards
data:
# Your Grafana dashboards configuration here
---
apiVersion: v1
kind: Service
metadata:
name: grafana
spec:
selector:
app: grafana
ports:
- port: 3000
targetPort: 3000
type: ClusterIP
---
#######################################################
# Node Exporter
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-exporter
spec:
replicas: 1
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:latest
args:
- "--path.procfs=/host/proc"
- "--path.rootfs=/rootfs"
- "--path.sysfs=/host/sys"
ports:
- containerPort: 9100
volumeMounts:
- mountPath: /host/proc
name: proc
readOnly: true
- mountPath: /host/sys
name: sys
readOnly: true
- mountPath: /rootfs
name: rootfs
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
---
apiVersion: v1
kind: Service
metadata:
name: node-exporter
spec:
selector:
app: node-exporter
ports:
- port: 9100
targetPort: 9100
type: ClusterIP
---
#######################################################
# Cadvisor
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: cadvisor
spec:
replicas: 1
selector:
matchLabels:
app: cadvisor
template:
metadata:
labels:
app: cadvisor
spec:
containers:
- name: cadvisor
image: gcr.io/cadvisor/cadvisor:latest
ports:
- containerPort: 8080
volumeMounts:
- mountPath: /rootfs
name: rootfs
readOnly: true
- mountPath: /var/run
name: var-run
readOnly: true
- mountPath: /sys
name: sys
readOnly: true
- mountPath: /var/lib/docker
name: var-lib-docker
readOnly: true
- mountPath: /dev/disk
name: dev-disk
readOnly: true
volumes:
- name: rootfs
hostPath:
path: /
- name: var-run
hostPath:
path: /var/run
- name: sys
hostPath:
path: /sys
- name: var-lib-docker
hostPath:
path: /var/lib/docker
- name: dev-disk
hostPath:
path: /dev/disk
---
apiVersion: v1
kind: Service
metadata:
name: cadvisor
spec:
selector:
app: cadvisor
ports:
- port: 8080
targetPort: 8080
type: ClusterIP
---
#######################################################
# Mongo
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo:latest
ports:
- containerPort: 27017
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
selector:
app: mongo
ports:
- port: 27017
targetPort: 27017
type: ClusterIP
---
#######################################################
# Postgres
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:latest
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: postgres
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-data
volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: postgres-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
type: ClusterIP
---
#######################################################
# Rabbitmq
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: rabbitmq:management
ports:
- containerPort: 5672
- containerPort: 15672
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
spec:
selector:
app: rabbitmq
ports:
- port: 5672
targetPort: 5672
- port: 15672
targetPort: 15672
type: ClusterIP
---
#######################################################
# Redis
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
type: ClusterIP
---
#######################################################
# ConfigMap AppSettings
#######################################################
apiVersion: v1
kind: ConfigMap
metadata:
name: appsettings
data:
appsettings.json: |-
{
.Files.Get "settings/appsettings.docker.json"
}
#ref: https://www.mrjamiebowman.com/software-development/dotnet/kubernetes-configmaps-with-net-core/
---
#######################################################
# Flight
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: flight-deployment
labels:
app: flight
spec:
replicas: 1
selector:
matchLabels:
app: flight
template:
metadata:
labels:
app: flight
spec:
containers:
- image: meysamh66/booking-microservices-flight:v1.6.7
name: flight
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
value: docker
- name: ASPNETCORE_URLS
value: http://+
volumeMounts:
- name: appsettings-volume
mountPath: /app/Settings
volumes:
- name: appsettings-volume
configMap:
name: appsettings
---
apiVersion: v1
kind: Service
metadata:
name: flight
spec:
selector:
app: flight
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
---
#######################################################
# Identity
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: identity-deployment
labels:
app: identity
spec:
replicas: 1
selector:
matchLabels:
app: identity
template:
metadata:
labels:
app: identity
spec:
containers:
- image: meysamh66/booking-microservices-identity:v1.6.7
name: identity
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
value: docker
- name: ASPNETCORE_URLS
value: http://+
volumeMounts:
- name: appsettings-volume
mountPath: /app/Settings
volumes:
- name: appsettings-volume
configMap:
name: appsettings
---
apiVersion: v1
kind: Service
metadata:
name: identity
spec:
selector:
app: identity
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
---
#######################################################
# Booking
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: booking-deployment
labels:
app: booking
spec:
replicas: 1
selector:
matchLabels:
app: booking
template:
metadata:
labels:
app: booking
spec:
containers:
- image: meysamh66/booking-microservices-booking:v1.6.7
name: booking
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
value: docker
- name: ASPNETCORE_URLS
value: http://+
volumeMounts:
- name: appsettings-volume
mountPath: /app/Settings
volumes:
- name: appsettings-volume
configMap:
name: appsettings
---
apiVersion: v1
kind: Service
metadata:
name: booking
spec:
selector:
app: booking
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
---
#######################################################
# Passenger
#######################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: passenger-deployment
labels:
app: passenger
spec:
replicas: 1
selector:
matchLabels:
app: passenger
template:
metadata:
labels:
app: passenger
spec:
containers:
- image: meysamh66/booking-microservices-passenger:v1.6.7
name: passenger
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
value: docker
- name: ASPNETCORE_URLS
value: http://+
volumeMounts:
- name: appsettings-volume
mountPath: /app/Settings
volumes:
- name: appsettings-volume
configMap:
name: appsettings
---
#######################################################
# Ingress Controller
#######################################################
apiVersion: v1
kind: Service
metadata:
name: passenger
spec:
selector:
app: passenger
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: booking-microservies
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
cert-manager.io/cluster-issuer: "letsencrypt-staging"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"
nginx.ingress.kubernetes.io/proxy-buffers: "4 256k"
nginx.ingress.kubernetes.io/proxy-busy-buffers-size: "256k"
nginx.ingress.kubernetes.io/client-header-buffer-size: "64k"
nginx.ingress.kubernetes.io/http2-max-field-size: "16k"
nginx.ingress.kubernetes.io/http2-max-header-size: "128k"
nginx.ingress.kubernetes.io/large-client-header-buffers: "8 64k"
spec:
ingressClassName: nginx
tls:
- hosts:
- booking-microservices.com
secretName: letsencrypt-staging
rules:
- host: booking-microservices.com
http:
paths:
- path: /identity
pathType: Prefix
backend:
service:
name: flight
port:
number: 80
- path: /identity/(.*)
pathType: Prefix
backend:
service:
name: identity
port:
number: 80
- path: /flight
pathType: Prefix
backend:
service:
name: flight
port:
number: 80
- path: /flight/(.*)
pathType: Prefix
backend:
service:
name: flight
port:
number: 80
- path: /passenger
pathType: Prefix
backend:
service:
name: passenger
port:
number: 80
- path: /passenger/(.*)
pathType: Prefix
backend:
service:
name: passenger
port:
number: 80
- path: /booking
pathType: Prefix
backend:
service:
name: booking
port:
number: 80
- path: /booking/(.*)
pathType: Prefix
backend:
service:
name: booking
port:
number: 80