From ec8e6f6c10a799d0b6589580a0cfcc57d3128e24 Mon Sep 17 00:00:00 2001 From: Boris Manojlovic Date: Wed, 24 May 2023 12:59:05 +0200 Subject: [PATCH] add minikube use case --- kubernetes/Makefile | 6 ++++- kubernetes/README.md | 23 ++++++++++++++++ kubernetes/minikube/p2p-deployment.yaml | 35 +++++++++++++++++++++++++ kubernetes/minikube/p2p-ingress.yaml | 18 +++++++++++++ kubernetes/minikube/p2p-service.yaml | 16 +++++++++++ 5 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 kubernetes/minikube/p2p-deployment.yaml create mode 100644 kubernetes/minikube/p2p-ingress.yaml create mode 100644 kubernetes/minikube/p2p-service.yaml diff --git a/kubernetes/Makefile b/kubernetes/Makefile index 0384e36c..d2061ece 100644 --- a/kubernetes/Makefile +++ b/kubernetes/Makefile @@ -6,6 +6,10 @@ prepare: @mkdir -p output sed -e "s@__DOMAIN_NAME__@$(DOMAIN_NAME)@g;s@__DOMAIN_NAME_DASHED__@$(DOMAIN_NAME_DASHED)@g" *.yaml > output/mirotalk-k8s.yaml +prepare-minikube: + @mkdir -p output + sed -e "s@__DOMAIN_NAME__@$(DOMAIN_NAME)@g;s@__DOMAIN_NAME_DASHED__@$(DOMAIN_NAME_DASHED)@g" minikube/*.yaml > output/mirotalk-k8s.yaml + deploy: kubectl delete configmap p2p || echo "ignore error" kubectl create configmap p2p --from-file=.env=env.txt @@ -15,7 +19,7 @@ env.txt: @test -f env.txt || cp -v ../.env.template env.txt uninstall: - kubectl delete configmap p2p + kubectl delete configmap p2p || : kubectl delete -f output/mirotalk-k8s.yaml rm -rf env.txt output \ No newline at end of file diff --git a/kubernetes/README.md b/kubernetes/README.md index 8235239b..758a87de 100644 --- a/kubernetes/README.md +++ b/kubernetes/README.md @@ -5,6 +5,8 @@ make sed -i s/localhost/myshinydomain.tld/g env.txt make prepare +# or make prepare-minikube +# for testing purposes make deploy ``` @@ -13,6 +15,7 @@ If you would like to deploy Mirotalk to kubernetes this set of files can help you in that task Bellow is explanation of files in this folder which will form one output file in `output` folder + ## ../.env.template and your file env.txt that you should prepare Configuration file that is for now used to configure deployment you should copy `../.env.template` to current directory as `env.txt` and edit values inside to your liking @@ -29,10 +32,13 @@ Main deployment file where you change image file if you would like to use yours ## p2p-cert.yaml This file represent definition of certificate (request) when using [Cert Manager](cert-manager.io) to generate letsencrypt or private certificates for your domain will be pulled out from `env.txt` + ## p2p-ingress.yaml This is generic ingress object in kubernetes that is responsible to route external traffic to mirotalk deployed application and if used in conjuction with p2p-cert.yaml (default) will provide TLS enabled access to your mirotalk instance + ## p2p-service.yaml Service required for ingress to be able to know how to access deployment + ## Makefile Helper file that allows running it to configure application how you would like @@ -47,3 +53,20 @@ make make prepare make deploy ``` + +# MiniKube considerations +``` +minikube start +minikube addons enable ingress +minikube ip +make +sed -i "s/localhost/p2p.$(minikube ip|sed -e 's/[.]/-/g').nip.io/g" env.txt +make prepare-minikube +make deploy +echo "You should be able to open $(echo https://p2p.$(minikube ip|sed -e 's/[.]/-/g').nip.io)` in your browser" +``` +You should be able to open `p2p.$(minikube ip|sed -e 's/[.]/-/g').nip.io` - if as for me this does not work 100% of times in that case: + +So it is "working for you", as for me it is "meh almost works" + + diff --git a/kubernetes/minikube/p2p-deployment.yaml b/kubernetes/minikube/p2p-deployment.yaml new file mode 100644 index 00000000..ac7e5db0 --- /dev/null +++ b/kubernetes/minikube/p2p-deployment.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: p2p + name: p2p +spec: + replicas: 1 + selector: + matchLabels: + app: p2p + strategy: {} + template: + metadata: + labels: + app: p2p + spec: + containers: + - image: mirotalk/p2p:latest + name: mirotalk + ports: + - containerPort: 3000 + volumeMounts: + - name: p2p-env + mountPath: /src/.env + subPath: .env + resources: {} + volumes: + - name: p2p-env + configMap: + name: p2p + defaultMode: 0644 + restartPolicy: Always +status: {} diff --git a/kubernetes/minikube/p2p-ingress.yaml b/kubernetes/minikube/p2p-ingress.yaml new file mode 100644 index 00000000..84195398 --- /dev/null +++ b/kubernetes/minikube/p2p-ingress.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: p2p-ingress +spec: + rules: + - host: __DOMAIN_NAME__ + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: p2p + port: + number: 3000 + ingressClassName: nginx diff --git a/kubernetes/minikube/p2p-service.yaml b/kubernetes/minikube/p2p-service.yaml new file mode 100644 index 00000000..ba3e7601 --- /dev/null +++ b/kubernetes/minikube/p2p-service.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: p2p + name: p2p +spec: + ports: + - port: 3000 + protocol: TCP + targetPort: 3000 + selector: + app: p2p + type: NodePort +status: