prashantbabar002 / mb_emt

0 stars 0 forks source link

Define/Document Process for setting up service in dev k8s #17

Closed prashantbabar002 closed 2 months ago

prashantbabar002 commented 2 months ago

As a SA I need documented process with ex. for setting up server in mk8s in dev So that services can be deployed

Acceptance Criteria

  1. Document is provided with all details
  2. Also document initial setup created

Notes

TESTS

prashantbabar002 commented 2 months ago

We will be deploying mb-users-api with this.

One time setup :

Create Directory apps

mkdir apps
cd apps

Create new Directory for creating model files

mkdir models
cd models/

Create new model file for service deployment and service

nano rc_service.yaml

Put below yaml data

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: {APP_NAME}controller
spec:
  replicas: 1
  selector:
    app: {APP_NAME}
  template:
    metadata:
      name: {APP_NAME}
      labels:
        app: {APP_NAME}
    spec:
      containers:
      - name: {APP_NAME}
        image: {APP_NAME}:local
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: {APP_NAME}service
spec:
  selector:
    app: {APP_NAME}
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  type: NodePort

Create Template Dockerfile

nano Dockerfile

Put content

FROM openjdk:17-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Create ingress file

nano ingress.yaml

put content

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mbingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /mbusers(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: mbusersservice
            port:
              number: 8080

enable ingress

sudo microk8s enable ingress

apply ingress

microk8s kubectl apply -f ingress.yaml create directory for new services we want to deploy

cd ~
cd apps
mkdir services

At this point we have ingress enabled for mbusers path as we have put that in ingress.yaml file

prashantbabar002 commented 2 months ago

ADDING NEW Service

Assume we are deploying mbusers

  1. create directory for new service we want to deploy

    cd ~/apps/services
    mkdir mbusers
    cd mbusers/
  2. import Dokerfile and rc_service

    cp ../../models/Dockerfile .
    cp ../../models/rc_service.yaml .
  3. upload jar file for docker image creation in this directory. Make Sure structure is like below ~/apps/services/mbusers$ ls -lrt

    total 45972
    -rw-rw-r-- 1 prashant prashant      178 Aug 16 14:45 Dockerfile
    -rw-rw-r-- 1 prashant prashant      547 Aug 16 14:48 rc_service.yaml
    -rw-rw-r-- 1 prashant prashant 47064367 Aug 16 15:07 mb-users-api-0.0.1-SNAPSHOT.jar
  4. create docker image with local tag docker build . -t mbusers:local

  5. Save docker image (remove if existing) docker save mbusers > mbusers.tar

  6. Import to mk8s microk8s ctr image import mbusers.tar

  7. update rc_service to replace APP_NAME with mbusers nano rc_service.yaml

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: mbuserscontroller
spec:
  replicas: 1
  selector:
    app: mbusers
  template:
    metadata:
      name: mbusers
      labels:
        app: mbusers
    spec:
      containers:
      - name: mbusers
        image: mbusers:local
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: mbusersservice
spec:
  selector:
    app: mbusers
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  type: NodePort
  1. create deployment ~/apps/services/mbusers$ microk8s kubectl apply -f rc_service.yaml Output will be
    
    replicationcontroller/mbuserscontroller created
    service/mbusersservice created
9. Add path for service in ingress.yaml if its not already defined
ex