gitops task
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:
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
