POPC Infrastructure

as GitOps Implementation

GitOps​

GIT

Infrastructure as a Code  ​

Terraform ​

Ansible ​

Infrastructure as a Code    ​

resource "azurerm_resource_group" "dtm-dev" {
  name      = "dtm-dev"
  location  = "West Europe"
}

resource "azurerm_virtual_network" "dtm-dev" {
  name                = "dtm-dev"
  location            = azurerm_resource_group.dtm-dev.location
  resource_group_name = azurerm_resource_group.dtm-dev.name
  address_space       = ["10.1.0.0/16"]
}

VM

LB

Resource Group

DevOps

Plan

GIT

push

apply

Container Management    ​

Kubernetes ​

OpenShift ​

Rancher

Cloud Foundary

PKS

Container Management    ​

Master

Node

Node

apiVersion: apps/v1
kind: Deployment
metadata:
  name: notifications-gateway
  labels:
    app: notifications-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: notifications-gateway
  strategy:
    type: RollingUpdate
    
.....

apply

Node

Deployment

ReplikaSet

POD

K8S (AKS) Deployment    ​

DevOps

GIT

push

apply

node

node

node

LB

LB

VPN Gateway

AppUser

Dev

internal access

internal access

external access

AKS Plan

Manage K8S Resources

ArgoCD ​

FluxCD ​

Terraform ​

Ansible ​

Jenkins X​

Manage K8S Resources

DevOps

GIT

node

K8s Resources

push

pull

node

node

synchronize

service

pod

secret

Manage K8S Resources

Manage K8S Resources

ArgoCD Deployment    ​

DevOps

GIT

push

apply

node

node

node

LB

LB

VPN Gateway

access to ArgoCD

ArgoCD Plan

Logs  ​

GrayLog

EFK ​(Elasticsearch Logstash Kibana)

ELK​ ​(Elasticsearch FluentD Kibana) 

Data Dog

Logs  ​

app

fluentD

elastic

kibana

app

fluentD

DevOps

logging

logging

query logs

Logs  ​

Metrics

Prometheus

Graphite

Zabbix

Grafana (UI)

Metrics

app

prometheus

grafana

DevOps

query metrics

app

svc

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/path: '/actuator/prometheus'
    prometheus.io/port: '8081'
    prometheus.io/scheme: 'http'
  labels:
    app: notifications-gateway
  name: notifications-gateway
spec:
....

scrape metrics

app

app

svc

scrape metrics

Metrics

GIT

push

Board Def

DevOps

grafana

board

puller

pull

node

Metrics

Secrets

Vault

Consule

SealedSecrets

Secrets

sealed controller

node

argoCD

sealed secret

GIT

Secret

DevOps

kind: Secret
metadata:
  name: rabbitmq
  namespace: rabbitmq
data:
  password: dmVylY3JldA==
  username: cmFml0
kind: SealedSecret
metadata:
  name: rabbitmq
  namespace: rabbitmq
spec:
  encryptedData:
    password: AgBd6Kf...
    username: AgA0KuM7...
  template:
    metadata:
      name: rabbitmq
...

kubeseal

SealedSecret

secret

pull

create

notify

unseale

push

Secrets

node

Vault

DevOps

get secret

init

app

secrets

put secret

Secrets

node

apiVersion: apps/v1
kind: Deployment
metadata:
  name: notifications-gateway
  labels:
    app: notifications-gateway
spec:
  template:
    metadata:
      annotations:
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-secret-smsapi: kube-dev/data/smsapi
        vault.hashicorp.com/agent-inject-secret-application.properties: kube-dev/data/rabbitmq
        vault.hashicorp.com/agent-inject-template-application.properties: |
          {{- with secret "kube-dev/data/rabbitmq" -}}
            spring.rabbitmq.username={{ .Data.data.username }}
            spring.rabbitmq.password={{ .Data.data.password }}{{ "\n" }}
          {{- end -}}
          {{- with secret "kube-dev/data/smsapi" -}}
            notifications.sms.provider.token={{ .Data.data.token }}
          {{- end -}}
        vault.hashicorp.com/role: internal-app
Vault configuration:

CICD

node

Jenkins

Tekton

CircleCi

Jenkins X

Jenkins Configuration as a Code

node

GIT

push

Configuration

DevOps

argoCD

cofig map

pull

create

mount

jenkins

jenkins pod

Jenkins Pipelines as a Code

node

GIT

push

Pipelines

DevOps

pull

jenkins

seed-job

CICD

node

GIT

push

code

Dev

trigger

jenkins

worker

creates

clone

build

unit tests

integration tests

check style

archunits

app:1.0

app:master

app

Image Registry

Thank You

DevOps

By andipansa

DevOps

  • 119