diff --git a/k8s/client-cluster-ip-service.yml b/k8s/client-cluster-ip-service.yml new file mode 100644 index 0000000..f2ed779 --- /dev/null +++ b/k8s/client-cluster-ip-service.yml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: client-cluster-ip-service +spec: + type: ClusterIP + selector: + component: web + ports: + - port: 3000 + targetPort: 3000 diff --git a/k8s/client-deployment.yml b/k8s/client-deployment.yml new file mode 100644 index 0000000..571d828 --- /dev/null +++ b/k8s/client-deployment.yml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: client-deployment +spec: + replicas: 3 + selector: + matchLabels: + component: web + template: + metadata: + labels: + component: web + spec: + containers: + - name: client + image: anr35/multi-client + ports: + - containerPort: 3000 diff --git a/k8s/dash-admin-user.yml b/k8s/dash-admin-user.yml new file mode 100644 index 0000000..639a776 --- /dev/null +++ b/k8s/dash-admin-user.yml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: admin-user + namespace: kubernetes-dashboard + diff --git a/k8s/dash-clusterrole.yml b/k8s/dash-clusterrole.yml new file mode 100644 index 0000000..d88c871 --- /dev/null +++ b/k8s/dash-clusterrole.yml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: admin-user +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: + - kind: ServiceAccount + name: admin-user + namespace: kubernetes-dashboard diff --git a/k8s/database-persistent-volume-claim.yml b/k8s/database-persistent-volume-claim.yml new file mode 100644 index 0000000..9cba96c --- /dev/null +++ b/k8s/database-persistent-volume-claim.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: database-persistent-volume-claim +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi diff --git a/k8s/ingress-service.yml b/k8s/ingress-service.yml new file mode 100644 index 0000000..5056a37 --- /dev/null +++ b/k8s/ingress-service.yml @@ -0,0 +1,26 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress-service + annotations: + kubernetes.io/ingress.class: 'nginx' + nginx.ingress.kubernetes.io/use-regex: 'true' + nginx.ingress.kubernetes.io/rewrite-target: /$1 +spec: + rules: + - http: + paths: + - path: /?(.*) + pathType: Prefix + backend: + service: + name: client-cluster-ip-service + port: + number: 3000 + - path: /api/?(.*) + pathType: Prefix + backend: + service: + name: server-cluster-ip-service + port: + number: 5000 diff --git a/k8s/postgres-cluster-ip-service.yml b/k8s/postgres-cluster-ip-service.yml new file mode 100644 index 0000000..4708d89 --- /dev/null +++ b/k8s/postgres-cluster-ip-service.yml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: postgres-cluster-ip-service +spec: + type: ClusterIP + selector: + component: postgres + ports: + - port: 5432 + targetPort: 5432 diff --git a/k8s/postgres-deployment.yml b/k8s/postgres-deployment.yml new file mode 100644 index 0000000..6cc010d --- /dev/null +++ b/k8s/postgres-deployment.yml @@ -0,0 +1,33 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres-deployment +spec: + replicas: 1 + selector: + matchLabels: + component: postgres + template: + metadata: + labels: + component: postgres + spec: + volumes: + - name: postgres-storage + persistentVolumeClaim: + claimName: database-persistent-volume-claim + containers: + - name: postgres + image: postgres:alpine3.17 + ports: + - containerPort: 5432 + volumeMounts: + - name: postgres-storage + mountPath: /var/lib/postgresql/data + subPath: postgres + env: + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: pgpassword + key: POSTGRES_PASSWORD diff --git a/k8s/redis-cluster-ip-service.yml b/k8s/redis-cluster-ip-service.yml new file mode 100644 index 0000000..3bb2f2b --- /dev/null +++ b/k8s/redis-cluster-ip-service.yml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: redis-cluster-ip-service +spec: + type: ClusterIP + selector: + component: redis + ports: + - port: 6379 + targetPort: 6379 diff --git a/k8s/redis-deployment.yml b/k8s/redis-deployment.yml new file mode 100644 index 0000000..5dfd61f --- /dev/null +++ b/k8s/redis-deployment.yml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-deployment +spec: + replicas: 1 + selector: + matchLabels: + component: redis + template: + metadata: + labels: + component: redis + spec: + containers: + - name: redis + image: redis:6.2.11-alpine3.17 + ports: + - containerPort: 6379 diff --git a/k8s/server-cluster-ip-service.yml b/k8s/server-cluster-ip-service.yml new file mode 100644 index 0000000..ea79d01 --- /dev/null +++ b/k8s/server-cluster-ip-service.yml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: server-cluster-ip-service +spec: + type: ClusterIP + selector: + component: server + ports: + - port: 5000 + targetPort: 5000 diff --git a/k8s/server-deployment.yml b/k8s/server-deployment.yml new file mode 100644 index 0000000..64ff38d --- /dev/null +++ b/k8s/server-deployment.yml @@ -0,0 +1,37 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: server-deployment +spec: + replicas: 3 + selector: + matchLabels: + component: server + template: + metadata: + labels: + component: server + spec: + containers: + - name: server + image: anr35/multi-server + ports: + - containerPort: 5000 + env: + - name: REDIS_HOST + value: redis-cluster-ip-service + - name: REDIS_PORT + value: '6379' + - name: POSTGRES_USER + value: postgres + - name: PGHOST + value: postgres-cluster-ip-service + - name: PGPORT + value: '5432' + - name: POSTGRES_DB + value: postgres + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: pgpassword + key: POSTGRES_PASSWORD diff --git a/k8s/worker-deployment.yml b/k8s/worker-deployment.yml new file mode 100644 index 0000000..4e8c8b2 --- /dev/null +++ b/k8s/worker-deployment.yml @@ -0,0 +1,22 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: worker-deployment +spec: + replicas: 1 + selector: + matchLabels: + component: worker + template: + metadata: + labels: + component: worker + spec: + containers: + - name: worker + image: anr35/multi-worker + env: + - name: REDIS_HOST + value: redis-cluster-ip-service + - name: REDIS_PORT + value: '6379' diff --git a/nginx/Dockerfile b/nginx/Dockerfile deleted file mode 100644 index 6597d48..0000000 --- a/nginx/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM nginx - -COPY ./default.conf /etc/nginx/conf.d/default.conf \ No newline at end of file diff --git a/nginx/Dockerfile.dev b/nginx/Dockerfile.dev deleted file mode 100644 index 6597d48..0000000 --- a/nginx/Dockerfile.dev +++ /dev/null @@ -1,3 +0,0 @@ -FROM nginx - -COPY ./default.conf /etc/nginx/conf.d/default.conf \ No newline at end of file diff --git a/nginx/default.conf b/nginx/default.conf deleted file mode 100644 index 5602d79..0000000 --- a/nginx/default.conf +++ /dev/null @@ -1,27 +0,0 @@ -upstream client { - server client:3000; -} - -upstream api { - server api:5000; -} - -server { - listen 80; - - location / { - proxy_pass http://client; - } - - location /api { - rewrite /api/(.*) /$1 break; - proxy_pass http://api; - } - - location /sockjs-node { - proxy_pass http://client; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } -} \ No newline at end of file