0% found this document useful (0 votes)
6 views

microservicesproject

Na

Uploaded by

Praveen Kandhala
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

microservicesproject

Na

Uploaded by

Praveen Kandhala
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 33

https://github.com/rohit23106/microservices-project.

git

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

3 unzip awscliv2.zip

4 sudo ./aws/install

5 vim .bashrc

6 source .bashrc

7 vim .bashrc

8 source .bashrc

9 vim .bashrc

10 source .bashrc

11 curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-


05/bin/linux/amd64/kubectl

12 chmod +x ./kubectl

13 sudo mv ./kubectl /usr/local/bin

14 kubectl version --short --client

15 curl --silent --location


"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname

16 s)_amd64.tar.gz" | tar xz -C /tmp

17 sudo mv /tmp/eksctl /usr/local/bin

18 curl --silent --location


"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname-s)_amd64.tar.gz" |
tar xz -C /tmp

19 sudo mv /tmp/eksctl /usr/local/bin

20 curl --silent --location


"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname

21 s)_amd64.tar.gz" | tar xz -C /tmp

22 sudo mv /tmp/eksctl /usr/local/bin

23 eksctl version

24 eksctl create cluster --name=EKS-1 --region=ap-south-1 --zones=ap-south-1a,ap-south-1b --without-


nodegroup

25 eksctl delete cluster --region=ap-south-1 --name=EKS-1


26 eksctl create cluster --name=EKS-23 --region=ap-south-1 --zones=ap-south-1a,ap-south-1b --
without-nodegroup

27 curl --silent --location


"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname-

28 s)_amd64.tar.gz" | tar xz -C /tmp

29 kubectl version

30 clear

31 curl --silent --location


"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname-

32 s)_amd64.tar.gz" | tar xz -C /tmp

33 sudo mv /tmp/eksctl /usr/local/bin

34 eksctl version

35 curl --silent --location


"https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" |
tar xz -C /tmp

36 sudo mv /tmp/eksctl /usr/local/bin

37 eksctl version

38 eksctl create cluster --name=EKS-1 --region=ap-south-1 --zones=ap-south-1a,ap-south-1b --without-


nodegroup

39 clear

40 eksctl create cluster --name=EKS-1 --region=ap-south-1 --zones=ap-south-1a,ap-south-1b --without-


nodegroup

41 eksctl utils associate-iam-oidc-provider --region ap-south-1 --cluster EKS-1 --approve

42 eksctl create nodegroup --cluster=EKS-1 --region=ap-south-1 --name=node2 --node-


type=t3.medium --nodes=3 --nodes-min=2 --nodes-max=4 --node-volume-size=20 --ssh-access --ssh-
public-key=keypair_rohit --managed --asg-access --external-dns-access --full-ecr-access --appmesh-
access --alb-ingress-access

43 yum install maven java-1.8.0-openjdk git -y

44 vim tools.sh

45 sh tools.sh

46 cat /var/lib/jenkins/secrets/initialAdminPassword

47 kubectl get po
48 kubectl create ns webapps

49 vim service.yml

50 kubectl create -f service.yml

51 kubectl get serviceaccount -n webapps

52 vim role.yml

53 kunectl create -f role.yml

54 kubectl create -f role.yml

55 vim role.yml

56 kubectl create -f role.yml

57 vim role.yml

58 kubectl create -f role.yml

59 vim role.yml

60 kubectl create -f role.yml

61 kubectl get role -n webapps

62 vim rolebinding.yml

63 kubectl create -f rolebinding.yml

64 vim rolebinding.yml

65 kubectl create -f rolebinding.yml

66 vim rolebinding.yml

67 kubectl create -f rolebinding.yml

68 vim rolebinding.yml

69 kubectl create -f rolebinding.yml

70 vim rolebinding.yml

71 kubectl create -f rolebinding.yml

72 vim rolebinding.yml

73 kubectl create -f rolebinding.yml

74 kubectl get rolebinding -n webapps

75 vim secret.yml

76 kubectl create -f service.yml


77 vim secret.yml

78 kubectl create -f service.yml

79 kubectl create -f secret.yml

80 vim secret.yml

81 kubectl create -f secret.yml

82 kubectl get secret -n webapps

83 kubectl get ns

84 vim secret.yml

85 kubectl create -f secret.yml

86 kubectl get secret -n webapps

87 kubectl describe secret secret mysecretname -n webapps

Serviceaccount.yml

apiVersion: v1

kind: ServiceAccount

metadata:

name: jenkins

namespace: webapps

Role.yml

apiVersion: rbac.authorization.k8s.io/v1

kind: Role

metadata:

name: app-role

namespace: webapps

rules:

- apiGroups:

- ""

- apps

- autoscaling
- batch

- extensions

- policy

- rbac.authorization.k8s.io

resources:

- pods

- componentstatuses

- configmaps

- daemonsets

- deployments

- events

- endpoints

- horizontalpodautoscalers

- ingress

- jobs

- limitranges

- namespaces

- nodes

- pods

- persistentvolumes

- persistentvolumeclaims

- resourcequotas

- replicasets

- replicationcontrollers

- serviceaccounts

- services

verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

RoleBinding.yml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding

metadata:

name: app-rolebinding

namespace: webapps

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: Role

name: app-role

subjects:- namespace: webapps

kind: ServiceAccount

name: Jenkins

Secret.yml

apiVersion: v1

kind: Secret

type: kubernetes.io/service-account-token

metadata:

name: mysecretname

annotations:

kubernetes.io/service-account.name: Jenkins

main branch

Jenkins file

pipeline {

agent any

stages {

stage('Deploy To Kubernetes') {

steps {
withKubeCredentials(kubectlCredentials: [[caCertificate: '', clusterName: 'EKS-1', contextName:
'', credentialsId: 'k8-token', namespace: 'webapps', serverUrl:
'https://44A557437091FAB6CA527221B5C07449.gr7.ap-south-1.eks.amazonaws.com']]) {

sh "kubectl apply -f deployment-service.yml"

stage('verify Deployment') {

steps {

withKubeCredentials(kubectlCredentials: [[caCertificate: '', clusterName: 'EKS-1', contextName:


'', credentialsId: 'k8-token', namespace: 'webapps', serverUrl:
'https://44A557437091FAB6CA527221B5C07449.gr7.ap-south-1.eks.amazonaws.com']]) {

sh "kubectl get svc -n webapps"

Deployment-service.yml

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: emailservice

spec:

selector:

matchLabels:

app: emailservice
template:

metadata:

labels:

app: emailservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

securityContext:

fsGroup: 1000

runAsGroup: 1000

runAsNonRoot: true

runAsUser: 1000

containers:

- name: server

securityContext:

allowPrivilegeEscalation: false

capabilities:

drop:

- ALL

privileged: false

readOnlyRootFilesystem: true

image: rohit630/emailservice:latest

ports:

- containerPort: 8080

env:

- name: PORT

value: "8080"

- name: DISABLE_PROFILER

value: "1"
readinessProbe:

periodSeconds: 5

exec:

command: ["/bin/grpc_health_probe", "-addr=:8080"]

livenessProbe:

periodSeconds: 5

exec:

command: ["/bin/grpc_health_probe", "-addr=:8080"]

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: emailservice

spec:

type: ClusterIP

selector:

app: emailservice

ports:

- name: grpc

port: 5000

targetPort: 8080

---
apiVersion: apps/v1

kind: Deployment

metadata:

name: checkoutservice

spec:

selector:

matchLabels:

app: checkoutservice

template:

metadata:

labels:

app: checkoutservice

spec:

serviceAccountName: default

containers:

- name: server

image: rohit630/checkoutservice:latest

ports:

- containerPort: 5050

readinessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:5050"]

livenessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:5050"]

env:

- name: PORT

value: "5050"

- name: PRODUCT_CATALOG_SERVICE_ADDR
value: "productcatalogservice:3550"

- name: SHIPPING_SERVICE_ADDR

value: "shippingservice:50051"

- name: PAYMENT_SERVICE_ADDR

value: "paymentservice:50051"

- name: EMAIL_SERVICE_ADDR

value: "emailservice:5000"

- name: CURRENCY_SERVICE_ADDR

value: "currencyservice:7000"

- name: CART_SERVICE_ADDR

value: "cartservice:7070"

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: checkoutservice

spec:

type: ClusterIP

selector:

app: checkoutservice

ports:

- name: grpc
port: 5050

targetPort: 5050

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: recommendationservice

spec:

selector:

matchLabels:

app: recommendationservice

template:

metadata:

labels:

app: recommendationservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

containers:

- name: server

image: rohit630/recommendationservice:latest

ports:

- containerPort: 8080

readinessProbe:

periodSeconds: 5

exec:

command: ["/bin/grpc_health_probe", "-addr=:8080"]

livenessProbe:

periodSeconds: 5
exec:

command: ["/bin/grpc_health_probe", "-addr=:8080"]

env:

- name: PORT

value: "8080"

- name: PRODUCT_CATALOG_SERVICE_ADDR

value: "productcatalogservice:3550"

- name: DISABLE_PROFILER

value: "1"

resources:

requests:

cpu: 100m

memory: 220Mi

limits:

cpu: 200m

memory: 450Mi

---

apiVersion: v1

kind: Service

metadata:

name: recommendationservice

spec:

type: ClusterIP

selector:

app: recommendationservice

ports:

- name: grpc

port: 8080

targetPort: 8080
---

apiVersion: apps/v1

kind: Deployment

metadata:

name: frontend

spec:

selector:

matchLabels:

app: frontend

template:

metadata:

labels:

app: frontend

annotations:

sidecar.istio.io/rewriteAppHTTPProbers: "true"

spec:

serviceAccountName: default

containers:

- name: server

image: rohit630/frontend:latest

ports:

- containerPort: 8080

readinessProbe:

initialDelaySeconds: 10

httpGet:

path: "/_healthz"

port: 8080

httpHeaders:

- name: "Cookie"
value: "shop_session-id=x-readiness-probe"

livenessProbe:

initialDelaySeconds: 10

httpGet:

path: "/_healthz"

port: 8080

httpHeaders:

- name: "Cookie"

value: "shop_session-id=x-liveness-probe"

env:

- name: PORT

value: "8080"

- name: PRODUCT_CATALOG_SERVICE_ADDR

value: "productcatalogservice:3550"

- name: CURRENCY_SERVICE_ADDR

value: "currencyservice:7000"

- name: CART_SERVICE_ADDR

value: "cartservice:7070"

- name: RECOMMENDATION_SERVICE_ADDR

value: "recommendationservice:8080"

- name: SHIPPING_SERVICE_ADDR

value: "shippingservice:50051"

- name: CHECKOUT_SERVICE_ADDR

value: "checkoutservice:5050"

- name: AD_SERVICE_ADDR

value: "adservice:9555"

# # ENV_PLATFORM: One of: local, gcp, aws, azure, onprem, alibaba

# # When not set, defaults to "local" unless running in GKE, otherwies auto-sets to gcp

# - name: ENV_PLATFORM
# value: "aws"

- name: ENABLE_PROFILER

value: "0"

# - name: CYMBAL_BRANDING

# value: "true"

# - name: FRONTEND_MESSAGE

# value: "Replace this with a message you want to display on all pages."

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: frontend

spec:

type: NodePort

selector:

app: frontend

ports:

- name: http

port: 80

targetPort: 8080

---

apiVersion: v1
kind: Service

metadata:

name: frontend-external

spec:

type: LoadBalancer

selector:

app: frontend

ports:

- name: http

port: 80

targetPort: 8080

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: paymentservice

spec:

selector:

matchLabels:

app: paymentservice

template:

metadata:

labels:

app: paymentservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

containers:

- name: server
image: rohit630/paymentservice:latest

ports:

- containerPort: 50051

env:

- name: PORT

value: "50051"

- name: DISABLE_PROFILER

value: "1"

readinessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:50051"]

livenessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:50051"]

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: paymentservice

spec:

type: ClusterIP

selector:
app: paymentservice

ports:

- name: grpc

port: 50051

targetPort: 50051

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: productcatalogservice

spec:

selector:

matchLabels:

app: productcatalogservice

template:

metadata:

labels:

app: productcatalogservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

containers:

- name: server

image: rohit630/productcatalogservice:latest

ports:

- containerPort: 3550

env:

- name: PORT

value: "3550"
- name: DISABLE_PROFILER

value: "1"

readinessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:3550"]

livenessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:3550"]

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: productcatalogservice

spec:

type: ClusterIP

selector:

app: productcatalogservice

ports:

- name: grpc

port: 3550

targetPort: 3550

---
apiVersion: apps/v1

kind: Deployment

metadata:

name: cartservice

spec:

selector:

matchLabels:

app: cartservice

template:

metadata:

labels:

app: cartservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

containers:

- name: server

image: rohit630/cartservice:latest

ports:

- containerPort: 7070

env:

- name: REDIS_ADDR

value: "redis-cart:6379"

resources:

requests:

cpu: 200m

memory: 64Mi

limits:

cpu: 300m
memory: 128Mi

readinessProbe:

initialDelaySeconds: 15

exec:

command: ["/bin/grpc_health_probe", "-addr=:7070", "-rpc-timeout=5s"]

livenessProbe:

initialDelaySeconds: 15

periodSeconds: 10

exec:

command: ["/bin/grpc_health_probe", "-addr=:7070", "-rpc-timeout=5s"]

---

apiVersion: v1

kind: Service

metadata:

name: cartservice

spec:

type: ClusterIP

selector:

app: cartservice

ports:

- name: grpc

port: 7070

targetPort: 7070

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: loadgenerator

spec:
selector:

matchLabels:

app: loadgenerator

replicas: 1

template:

metadata:

labels:

app: loadgenerator

annotations:

sidecar.istio.io/rewriteAppHTTPProbers: "true"

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

restartPolicy: Always

containers:

- name: main

securityContext:

allowPrivilegeEscalation: false

capabilities:

drop:

- ALL

privileged: false

readOnlyRootFilesystem: true

image: rohit630/loadgenerator:latest

env:

- name: FRONTEND_ADDR

value: "frontend:80"

- name: USERS

value: "10"
resources:

requests:

cpu: 300m

memory: 256Mi

limits:

cpu: 500m

memory: 512Mi

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: currencyservice

spec:

selector:

matchLabels:

app: currencyservice

template:

metadata:

labels:

app: currencyservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

containers:

- name: server

image: rohit630/currencyservice:latest

ports:

- name: grpc

containerPort: 7000
env:

- name: PORT

value: "7000"

- name: DISABLE_PROFILER

value: "1"

readinessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:7000"]

livenessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:7000"]

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: currencyservice

spec:

type: ClusterIP

selector:

app: currencyservice

ports:

- name: grpc
port: 7000

targetPort: 7000

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: shippingservice

spec:

selector:

matchLabels:

app: shippingservice

template:

metadata:

labels:

app: shippingservice

spec:

serviceAccountName: default

containers:

- name: server

image: rohit630/shippingservice:latest

ports:

- containerPort: 50051

env:

- name: PORT

value: "50051"

- name: DISABLE_PROFILER

value: "1"

readinessProbe:

periodSeconds: 5
exec:

command: ["/bin/grpc_health_probe", "-addr=:50051"]

livenessProbe:

exec:

command: ["/bin/grpc_health_probe", "-addr=:50051"]

resources:

requests:

cpu: 100m

memory: 64Mi

limits:

cpu: 200m

memory: 128Mi

---

apiVersion: v1

kind: Service

metadata:

name: shippingservice

spec:

type: ClusterIP

selector:

app: shippingservice

ports:

- name: grpc

port: 50051

targetPort: 50051

---

apiVersion: apps/v1

kind: Deployment

metadata:
name: redis-cart

spec:

selector:

matchLabels:

app: redis-cart

template:

metadata:

labels:

app: redis-cart

spec:

containers:

- name: redis

image: redis:alpine

ports:

- containerPort: 6379

readinessProbe:

periodSeconds: 5

tcpSocket:

port: 6379

livenessProbe:

periodSeconds: 5

tcpSocket:

port: 6379

volumeMounts:

- mountPath: /data

name: redis-data

resources:

limits:

memory: 256Mi
cpu: 125m

requests:

cpu: 70m

memory: 200Mi

volumes:

- name: redis-data

emptyDir: {}

---

apiVersion: v1

kind: Service

metadata:

name: redis-cart

spec:

type: ClusterIP

selector:

app: redis-cart

ports:

- name: tcp-redis

port: 6379

targetPort: 6379

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: adservice

spec:

selector:

matchLabels:

app: adservice
template:

metadata:

labels:

app: adservice

spec:

serviceAccountName: default

terminationGracePeriodSeconds: 5

containers:

- name: server

image: rohit630/adservice:latest

ports:

- containerPort: 9555

env:

- name: PORT

value: "9555"

resources:

requests:

cpu: 200m

memory: 180Mi

limits:

cpu: 300m

memory: 300Mi

readinessProbe:

initialDelaySeconds: 20

periodSeconds: 15

exec:

command: ["/bin/grpc_health_probe", "-addr=:9555"]

livenessProbe:

initialDelaySeconds: 20
periodSeconds: 15

exec:

command: ["/bin/grpc_health_probe", "-addr=:9555"]

---

apiVersion: v1

kind: Service

metadata:

name: adservice

spec:

type: ClusterIP

selector:

app: adservice

ports:

- name: grpc

port: 9555

targetPort: 9555

Jenkins file for all services

pipeline {

agent any

stages {

stage('Build') {

steps {

sh 'docker build -t rohit630/service:v1 .'

stage('Push Docker Image') {

steps {
script {

// This step should not normally be used in your script. Consult the inline help for details.

withDockerRegistry(credentialsId: 'docker-cred') {

sh 'docker push rohit630/service:v1'

}
Dockerhub: rohit630/service

You might also like