Skip to main content

Command Palette

Search for a command to run...

gitops task

Published
2 min readView as Markdown
S

I am Shradha Arsewar working as Associate software Engineer used to work as a Intern in Product Company (PTC). Likes to share knowledge

11 Initialize Git Repository & Project Structure:

2 Navigate to project directory:

cd ~/gitops-microservices

3 git init

4 Create folder structure for microservices and Kubernetes manifests

mkdir -p service-a

mkdir -p service-b

mkdir -p k8s/service-a

mkdir -p k8s/service-b

mkdir -p .github/workflows

2. Create Application Files for Both Services:

2.1 Created Python Flask apps

service-a/app.py

AS::::

from flask import Flask

app = Flask(__name__)

@app.route("/")

def home():

return "Hello from Service A"

if name == "__main__":

app.run(host="0.0.0.0", port=5000)

service-b/app.py

AS::::

from flask import Flask

app = Flask(__name__)

@app.route("/")

def home():

return "Hello from Service B"

if name == "__main__":

app.run(host="0.0.0.0", port=5001)

2.2 Created Dockerfiles

service-a/Dockerfile

AS::::

FROM python:3.10-slim

WORKDIR /app

COPY . .

RUN pip install flask

EXPOSE 5000

CMD ["python", "app.py"]

service-b/Dockerfile

AS::::

FROM python:3.10-slim

WORKDIR /app

COPY . .

RUN pip install flask

EXPOSE 5001

CMD ["python", "app.py"]

2.3 Created Kubernetes manifests

k8s/service-a/deployment.yaml

AS:::::

apiVersion: apps/v1

kind: Deployment

metadata:

name: service-a

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: service-a

template:

metadata:

labels:

app: service-a

spec:

containers:

  • name: service-a

    image: shradha91103/service-a:latest

    ports:

    • containerPort: 5000

k8s/service-a/service.yaml

as:::::

apiVersion: v1

kind: Service

metadata:

name: service-a

namespace: default

spec:

selector:

app: service-a

ports:

  • protocol: TCP

    port: 80

    targetPort: 5000

    type: ClusterIP

k8s/service-b/deployment.yaml

AS::::::::

apiVersion: apps/v1

kind: Deployment

metadata:

name: service-b

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: service-b

template:

metadata:

labels:

app: service-b

spec:

containers:

  • name: service-b

    image: shradha91103/service-b:latest

    ports:

    • containerPort: 5001

k8s/service-b/service.yaml

AS::::

apiVersion: apps/v1

kind: Deployment

metadata:

name: service-b

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: service-b

template:

metadata:

labels:

app: service-b

spec:

containers:

  • name: service-b

    image: shradha91103/service-b:latest

    ports:

    • containerPort: 5001

3. Build & Push Docker Images to Docker Hub:

3.1 Build Image for Service A

docker build -t service-a .

docker tag service-a shradha91103/service-a:latest

docker push shradha91103/service-a:latest

4. Login to Docker Hub

docker login

docker tag service-a shradha91103/service-a:latest

docker push shradha91103/service-a:latest

6. Install Argo CD on Kubernetes Cluster

6.1 Create namespace

kubectl create namespace argocd

6.2 Install ArgoCD using official manifest

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

7. Verify Argo CD Pods

kubectl get pods -n argocd

8. Port-Forward Argo CD UI:

kubectl port-forward svc/argocd-server -n argocd 8090:443

Argo CD UI becomes available at:

http://localhost:8090

9. Apply Kubernetes Manifests (Later Stage):

kubectl apply -f k8s/service-a

kubectl apply -f k8s/service-b

10. Verify Deployed Resources

kubectl get pods

services:

kubectl get svc

11. Access Microservices via Port Forward:

for service-a:

kubectl get svc

kubectl port-forward svc/service-a 8095:80

for service-b:

kubectl port-forward svc/service-b 8081:80

12. Test Microservices

curl http://localhost:8095

curl http://localhost:8081