--- apiVersion: v1 kind: PersistentVolume metadata: name: echo-app-pv spec: capacity: storage: 10Gi volumeMode: Filesystem storageClassName: standard accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain hostPath: path: /data/EchoAppData --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: echo-app-pv-claim namespace: echo-app-ns spec: accessModes: - ReadWriteOnce storageClassName: standard resources: requests: storage: 3Gi --- apiVersion: v1 kind: ConfigMap metadata: name: echo-app-cfg namespace: echo-app-ns data: echo-api-server: echo-api-svc:8080 --- apiVersion: v1 data: connString: U2VydmVyPWVjaG8tZGItc3ZjLDE0MzM7SW5pdGlhbCBDYXRhbG9nPWVjaG8tbG9nO1VzZXIgSUQ9U0E7UGFzc3dvcmQ9UEBzc3cwcmQ7 dbpass: UEBzc3cwcmQ= kind: Secret metadata: creationTimestamp: null name: echo-api-db-secret namespace: echo-app-ns --- apiVersion: apps/v1 kind: Deployment metadata: name: echo-api-dep namespace: echo-app-ns spec: replicas: 1 selector: matchLabels: app: echo-app tier: back template: metadata: labels: app: echo-app tier: back spec: containers: - name: echo-api image: tasb/echo-api:k8s-v2 ports: - containerPort: 80 imagePullPolicy: Always env: - name: ConnectionStrings__DefaultConnection valueFrom: secretKeyRef: name: echo-api-db-secret key: connString --- apiVersion: apps/v1 kind: Deployment metadata: name: echo-webapp-dep namespace: echo-app-ns spec: replicas: 1 selector: matchLabels: app: echo-app tier: front template: metadata: labels: app: echo-app tier: front spec: containers: - name: echo-webapp image: tasb/echo-webapp:k8s-v2 ports: - containerPort: 80 imagePullPolicy: Always env: - name: EchoAPIServer valueFrom: configMapKeyRef: name: echo-app-cfg key: echo-api-server --- apiVersion: apps/v1 kind: Deployment metadata: name: echo-db-dep namespace: echo-app-ns spec: replicas: 1 selector: matchLabels: app: echo-app tier: db template: metadata: labels: app: echo-app tier: db spec: containers: - name: echo-db image: mcr.microsoft.com/mssql/server:2017-latest ports: - containerPort: 80 env: - name: ACCEPT_EULA value: "Y" - name: SA_PASSWORD valueFrom: secretKeyRef: name: echo-api-db-secret key: dbpass volumeMounts: - mountPath: "/var/opt/mssql/data" name: db-storage volumes: - name: db-storage persistentVolumeClaim: claimName: echo-app-pv-claim --- apiVersion: v1 kind: Service metadata: namespace: echo-app-ns name: echo-db-svc spec: ports: - port: 1433 targetPort: 1433 name: db selector: app: echo-app tier: db type: ClusterIP --- apiVersion: v1 kind: Service metadata: namespace: echo-app-ns name: echo-api-svc spec: ports: - port: 8080 targetPort: 80 name: api selector: app: echo-app tier: back type: ClusterIP --- apiVersion: v1 kind: Service metadata: namespace: echo-app-ns name: echo-webapp-svc spec: ports: - port: 9000 targetPort: 80 name: web selector: app: echo-app tier: front type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: echo-app-ns name: echo-app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: echo-app.ingress.test http: paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: echo-webapp-svc port: number: 9000 - path: /api/(.*) pathType: ImplementationSpecific backend: service: name: echo-api-svc port: number: 8080