aminfelah / devops-automation-deployement-project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

devops-automation-deployement-project

THIS A PROJECT FOR DEVOPS DEPLOYEMENT AND AUTOMATION

MICROSERVICES USED

  • LOGIN MICROSERVICE (nodejs ---> to assure auth with jwt)
  • SONG API MICROSERVICE (nodejs ---> will send the music info like the image and song title)
  • MUSIC FRONTEND (frontend exposed to the internet as ui for all users)

ARCHITECTURE

image

THE DATABASE IS EXTERNAL (MONGO DB ATLAS)

image

ALL THE MICROSERVICES ARE DOCKERIZED

  • There is images for tests environments
  • There is images for dev environments
  • There is images for prod environments

image


INFRASTRUCTURE

WORKED ON AZURE AS WELL AS ON KIND (locally) image image

LOCALLY THERE IS THE CONFIGURATION FOR THE CLUSTER USING KIND

.main/infrastructure/cluster-config

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP

DEVOPS TOOLS (METRICS - TRACES - LOGS)

METRICS ( HOST METRICS : SEMATEXT AGENT )

image image image image image

METRICS ( APP METRICS : PROMETHEUS + GRAFANA (PULL BASED) COUNTERS )

WE CAN PORTFORAWRD TO THE PROMETHEUS BY CREATING A TUNNEL (IF WE FOLLOW THE GOOD PRACTICIES WE MUST ENABLE RBAC OR SET PERMISSION KEY ) image image

GRAFANA VISUALISATION FOR PROMETHEUS

image image

LOGS ( AGENT DATADOG ) + (WINSTON FROM THE APPLICATION CLIENT)

image STRUCTURE OF LOGS image

image

TRACES ( DATADOG and OPENTELEMETRY ) auto instrumented

image

HELM SHARDS

WE USED 3 HELM SHARDS :

  • MUSIC APP
  • PROMETHEUS ( to SET OUR VALUES WHEN INSTALLING PROMETHEUS HELM + SAVED THE OUTPUT )
  • DATADOGS ( to SET OUR VALUES WHEN INSTALLING DATA DOG ) image

WE USE ALSO HELM SHARDS TO CHANGE BETWEEN DIFFERENT ENVIRONMENTS:

  • DEV
  • TEST
  • PROD

WE ALSO USE SHARDS VALUE TO PICK BETWEEN BETWEEN BLUE AND GREEN AS LABELS image

BECAUSE USED BLUE GREEN ROLL OUT ALL AT ONCE (TRIED argoproj.io/v1alpha1)

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollout-bluegreen
spec:
[...] # this part of the template is identical to a regular Deployment
  strategy:
    blueGreen: 
      activeService: rollout-bluegreen-active
      previewService: rollout-bluegreen-preview
      autoPromotionEnabled: false ```

THE BLUE GREEN DEPLOYEMENT DIDN'T WORK OUT

AUTOMATIC PROVISIONING

TERRAFORM MICRO STACKS (2 stacks to create cluster and to install helm sharts in the clusters itself)

image

WE ALSO AUTOMATED THE PROVISION OF A STAND ALONE VIRTUAL MACHINE THAT'S SUPPOSED TO RUN A PYTHON SCRIPT TO SCRAPE ALL SONGS DATA (NAME ARTIST IMAGE)

WE ALSO AUTOMATED THE CONFIGURATION OF THAT MACHIBE USING ANSIBLE PLAYBOOK TO INSTALL ALL DEPENDANCIES FOR PYTHON AND RUNNING THE SCRIPT

- name: WebserverPlaybook
  hosts: webserver
  become: true
  tasks:
    - name: Install BeautifulSoup python package
      ansible.builtin.pip:
        name: beautifulsoup4
    - name: Install pandas python package
      ansible.builtin.pip:
        name: pandas
    - name: Install request python package
      ansible.builtin.pip:
        name: requests
    - name: Copy the script
      template:
        src: ./server/scrape-script.py
        dest: /home/{{ ansible_user }}/scrape-script.py
    - name: launch script  
      ansible.builtin.command: python3 /home/{{ ansible_user }}/scrape-script.py
    - name: log script  
      ansible.builtin.command: echo "this script has finished"
      ```

About


Languages

Language:JavaScript 32.1%Language:TypeScript 31.2%Language:CSS 23.7%Language:HCL 9.6%Language:Python 2.4%Language:Dockerfile 0.6%Language:Shell 0.4%