From 822f05f0b68fb2b1ab8ce4c76cb882f8c14a7774 Mon Sep 17 00:00:00 2001 From: Kasper Jensen Date: Tue, 28 Jun 2022 13:13:16 +0200 Subject: [PATCH 1/4] Add suggestion for extension of the application with minikube --- .gitignore | 1 + Makefile | 8 +++++++ README.md | 11 +++++++++ kubernetes/deployments/client-deployment.yml | 3 ++- kubernetes/deployments/server-deployment.yml | 4 +++- kubernetes/deployments/worker-deployment.yml | 3 ++- pre-run.sh | 25 ++++++++++++++++++++ 7 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 Makefile create mode 100755 pre-run.sh diff --git a/.gitignore b/.gitignore index c47c9fc..12a4f17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea .vscode **node_modules +config.json diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f606949 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +start: + chmod +x pre-run.sh + ./pre-run.sh + +clean: + echo Deletes all local Kubernetes cluster. This command deletes the VM, and removes all associated files. + minikube stop + minikube delete --all diff --git a/README.md b/README.md index 8259a99..3dd0259 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,17 @@ docker build -t hakimixx/docker-infra-client:v1 client docker push hakimixx/docker-infra-client:v1 ``` +### Minikube +To run the entire application with minikube on mac use: +```shell +make start +``` + +To clean up run: +```shell +make clean +``` + ### Terraform Terraform allows us to manage infrastructure as code (IaC) rather than using a graphical user interface. It allows us to manage the infrastructure in a safe, consistent and diff --git a/kubernetes/deployments/client-deployment.yml b/kubernetes/deployments/client-deployment.yml index a62e028..b0d8d0a 100644 --- a/kubernetes/deployments/client-deployment.yml +++ b/kubernetes/deployments/client-deployment.yml @@ -14,6 +14,7 @@ spec: spec: containers: - name: client - image: hakimixx/docker-infra-client:v1.1 + image: nginx-web-app/docker-infra-client:latest + imagePullPolicy: Never ports: - containerPort: 3000 diff --git a/kubernetes/deployments/server-deployment.yml b/kubernetes/deployments/server-deployment.yml index ed014d0..8b410de 100644 --- a/kubernetes/deployments/server-deployment.yml +++ b/kubernetes/deployments/server-deployment.yml @@ -14,9 +14,10 @@ spec: spec: containers: - name: server - image: hakimixx/docker-infra-server + image: nginx-web-app/docker-infra-server:latest ports: - containerPort: 5000 + imagePullPolicy: Never env: - name: PORT value: '5000' @@ -37,3 +38,4 @@ spec: secretKeyRef: name: pgpassword # name of secret key: PGPASSWORD # secret key (secret is stored as key-value-pair) + diff --git a/kubernetes/deployments/worker-deployment.yml b/kubernetes/deployments/worker-deployment.yml index f0e834b..a6c1324 100644 --- a/kubernetes/deployments/worker-deployment.yml +++ b/kubernetes/deployments/worker-deployment.yml @@ -14,11 +14,12 @@ spec: spec: containers: - name: worker - image: hakimixx/docker-infra-worker + image: nginx-web-app/docker-infra-worker:latest env: - name: REDIS_HOST value: redis-cluster-ip-service # name of service here - name: REDIS_PORT value: '6379' # default redis port + imagePullPolicy: Never diff --git a/pre-run.sh b/pre-run.sh new file mode 100755 index 0000000..7a119c6 --- /dev/null +++ b/pre-run.sh @@ -0,0 +1,25 @@ +#!/bin/bash +minikube start +minikube addons enable ingress +CURRENT_PATH=$PWD +eval $(minikube docker-env) +kubectl create secret generic pgpassword --from-literal PGPASSWORD=postgres +echo $CURRENT_PATH +echo $CURRENT_PATH | rev | cut -d "/" -f1 | rev +FILES=(client-deployment.yml server-deployment.yml worker-deployment.yml) +PATH_OF_DOCKERFILES=$(echo $CURRENT_PATH | rev | cut -d "/" -f1 | rev) +docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-client:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-client:latest -f ./client/Dockerfile ./client +docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-server:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-server:latest -f ./server/Dockerfile ./server +docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-worker:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-worker:latest -f ./worker/Dockerfile ./worker +cd $CURRENT_PATH/kubernetes/deployments + +# Use local images in minikube - this probably won't work on ubuntu +for key in ${!FILES[@]}; do + sed -i "" "/^\([[:space:]]*imagePullPolicy: \).*/s//\1Never/" ${FILES[${key}]} +done + +cd $CURRENT_PATH + +./scripts/apply-resources.sh +# create tunnel at the end +minikube tunnel From 7796537e0fd99c248154e5472a6fe84ad9c8d83c Mon Sep 17 00:00:00 2001 From: Kasper Jensen Date: Tue, 28 Jun 2022 13:20:54 +0200 Subject: [PATCH 2/4] update script + default values --- kubernetes/deployments/client-deployment.yml | 2 +- kubernetes/deployments/server-deployment.yml | 2 +- kubernetes/deployments/worker-deployment.yml | 2 +- pre-run.sh | 7 +++++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/kubernetes/deployments/client-deployment.yml b/kubernetes/deployments/client-deployment.yml index b0d8d0a..90a21e0 100644 --- a/kubernetes/deployments/client-deployment.yml +++ b/kubernetes/deployments/client-deployment.yml @@ -15,6 +15,6 @@ spec: containers: - name: client image: nginx-web-app/docker-infra-client:latest - imagePullPolicy: Never + imagePullPolicy: Always ports: - containerPort: 3000 diff --git a/kubernetes/deployments/server-deployment.yml b/kubernetes/deployments/server-deployment.yml index 8b410de..098049a 100644 --- a/kubernetes/deployments/server-deployment.yml +++ b/kubernetes/deployments/server-deployment.yml @@ -17,7 +17,7 @@ spec: image: nginx-web-app/docker-infra-server:latest ports: - containerPort: 5000 - imagePullPolicy: Never + imagePullPolicy: Always env: - name: PORT value: '5000' diff --git a/kubernetes/deployments/worker-deployment.yml b/kubernetes/deployments/worker-deployment.yml index a6c1324..9fb0577 100644 --- a/kubernetes/deployments/worker-deployment.yml +++ b/kubernetes/deployments/worker-deployment.yml @@ -20,6 +20,6 @@ spec: value: redis-cluster-ip-service # name of service here - name: REDIS_PORT value: '6379' # default redis port - imagePullPolicy: Never + imagePullPolicy: Always diff --git a/pre-run.sh b/pre-run.sh index 7a119c6..d2518de 100755 --- a/pre-run.sh +++ b/pre-run.sh @@ -21,5 +21,12 @@ done cd $CURRENT_PATH ./scripts/apply-resources.sh + +# Resetting values changed. +for key in ${!FILES[@]}; do + sed -i "" "/^\([[:space:]]*imagePullPolicy: \).*/s//\1Always/" ${FILES[${key}]} +done + +cd $CURRENT_PATH # create tunnel at the end minikube tunnel From e18ca4224b7489092ae1a87e3e615b6482ab4682 Mon Sep 17 00:00:00 2001 From: Kasper Jensen Date: Tue, 28 Jun 2022 13:21:40 +0200 Subject: [PATCH 3/4] revert some changes that was for local use --- kubernetes/deployments/client-deployment.yml | 2 +- kubernetes/deployments/server-deployment.yml | 2 +- kubernetes/deployments/worker-deployment.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kubernetes/deployments/client-deployment.yml b/kubernetes/deployments/client-deployment.yml index 90a21e0..94f6753 100644 --- a/kubernetes/deployments/client-deployment.yml +++ b/kubernetes/deployments/client-deployment.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: client - image: nginx-web-app/docker-infra-client:latest + image: hakimixx/docker-infra-client:latest imagePullPolicy: Always ports: - containerPort: 3000 diff --git a/kubernetes/deployments/server-deployment.yml b/kubernetes/deployments/server-deployment.yml index 098049a..59e07a1 100644 --- a/kubernetes/deployments/server-deployment.yml +++ b/kubernetes/deployments/server-deployment.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: server - image: nginx-web-app/docker-infra-server:latest + image: hakimixx/docker-infra-server:latest ports: - containerPort: 5000 imagePullPolicy: Always diff --git a/kubernetes/deployments/worker-deployment.yml b/kubernetes/deployments/worker-deployment.yml index 9fb0577..252c318 100644 --- a/kubernetes/deployments/worker-deployment.yml +++ b/kubernetes/deployments/worker-deployment.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: worker - image: nginx-web-app/docker-infra-worker:latest + image: hakimixx/docker-infra-worker:latest env: - name: REDIS_HOST value: redis-cluster-ip-service # name of service here From 7ac93f2f6d70b47c48711f0951aac5a75b3f32c4 Mon Sep 17 00:00:00 2001 From: Kasper Jensen Date: Wed, 29 Jun 2022 10:47:58 +0200 Subject: [PATCH 4/4] update script to enable faster reloads --- Makefile | 4 ++++ pre-run.sh | 27 ++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index f606949..250dd88 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +build: + chmod +x pre-run.sh + ./pre-run.sh first_deploy + start: chmod +x pre-run.sh ./pre-run.sh diff --git a/pre-run.sh b/pre-run.sh index d2518de..04dcc03 100755 --- a/pre-run.sh +++ b/pre-run.sh @@ -1,32 +1,45 @@ #!/bin/bash -minikube start -minikube addons enable ingress CURRENT_PATH=$PWD eval $(minikube docker-env) -kubectl create secret generic pgpassword --from-literal PGPASSWORD=postgres echo $CURRENT_PATH echo $CURRENT_PATH | rev | cut -d "/" -f1 | rev FILES=(client-deployment.yml server-deployment.yml worker-deployment.yml) PATH_OF_DOCKERFILES=$(echo $CURRENT_PATH | rev | cut -d "/" -f1 | rev) + +first_deploy() { + minikube start + minikube addons enable ingress + eval $(minikube docker-env) + kubectl create secret generic pgpassword --from-literal PGPASSWORD=postgres +} + +if [[ ! -z "$1" ]]; then first_deploy; fi + docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-client:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-client:latest -f ./client/Dockerfile ./client docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-server:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-server:latest -f ./server/Dockerfile ./server docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-worker:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-worker:latest -f ./worker/Dockerfile ./worker -cd $CURRENT_PATH/kubernetes/deployments +cd $CURRENT_PATH/kubernetes/deployments # Use local images in minikube - this probably won't work on ubuntu for key in ${!FILES[@]}; do sed -i "" "/^\([[:space:]]*imagePullPolicy: \).*/s//\1Never/" ${FILES[${key}]} done - cd $CURRENT_PATH ./scripts/apply-resources.sh +kubectl rollout restart deployment client-deployment +kubectl rollout restart deployment server-deployment +kubectl rollout restart deployment worker-deployment +cd $CURRENT_PATH/kubernetes/deployments # Resetting values changed. for key in ${!FILES[@]}; do sed -i "" "/^\([[:space:]]*imagePullPolicy: \).*/s//\1Always/" ${FILES[${key}]} done - cd $CURRENT_PATH -# create tunnel at the end +echo +echo +echo +echo sometimes it gets stuck just do ctrl + c on it, do verify by refreshing website. +minikube -p minikube docker-env minikube tunnel