What Is Open Policy Agent and How It Works

Open Policy Agent is an open-source engine that provides a way of declaratively writing policies as code and then using those policies as part of a decision-making process. It uses a policy language called Rego, allowing you to write policies for different services using the same language.

OPA can be used for a number of purposes, including:

Kubernetes Cloud Autoscalar in Terraform – Part 1

Cluster Autoscaler - It is a component that automatically adjusts the size of a Kubernetes Cluster so that all pods have a place to run and there are no unneeded nodes. It can be created by using the YAML file, Helm Chart, or Terraform. The following example creates the Cloud Autoscalar deployment using Terraform dynamic Modules.

Corresponding to https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
Resource kubernetes_deployment:-
Plain Text
 




xxxxxxxxxx
1
75


 
1
cluster-autoscaler.tf:-
2
resource "kubernetes_deployment" "cluster-autoscaler" {
3
  metadata {
4
    name      = var.cluster-autoscaler-data["cluster-autoscaler-name"]
5
    namespace = var.cluster-autoscaler-data["namespace"]
6
    labels = {
7
      "app" = var.cluster-autoscaler-data["cluster-autoscaler-label"]
8
    }
9
  }
10
 
          
11
  spec {
12
    replicas = 1
13
    selector {
14
      match_labels = {
15
        "app" = var.cluster-autoscaler-data["cluster-autoscaler-label"]
16
      }
17
    }
18
 
          
19
    template {
20
      metadata {
21
        labels = {
22
          "app" = var.cluster-autoscaler-data["cluster-autoscaler-label"]
23
        }
24
        annotations = {
25
          "prometheus.io/port"   = "8085"
26
          "prometheus.io/scrape" = "true"
27
        }
28
      }
29
 
          
30
      spec {
31
        automount_service_account_token  = true
32
        termination_grace_period_seconds = 300
33
        service_account_name             = var.service-account-name
34
 
          
35
        container {
36
          image = var.cluster-autoscaler-data["image_name"]
37
          name  = "cluster-autoscaler"
38
          command = ["./cluster-autoscaler",
39
            "--v=4",
40
            " --stderrthreshold=info",
41
            "--cloud-provider=aws",
42
            "--skip-nodes-with-local-storage=false",
43
            "--expander=least-waste",
44
            "--node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/${var.eks_cluster_name}"
45
          ]
46
          resources {
47
            limits {
48
              cpu    = "100m"
49
              memory = "300Mi"
50
            }
51
            requests {
52
              cpu    = "100m"
53
              memory = "300Mi"
54
            }
55
          }
56
          volume_mount {
57
            name       = "ssl-certs"
58
            mount_path = "/etc/ssl/certs/ca-certificates.crt"
59
            read_only  = "true"
60
          }
61
        }
62
        volume {
63
          name = "ssl-certs"
64
          host_path {
65
            path = "/etc/ssl/certs/ca-bundle.crt"
66
          }
67
        }
68
      }
69
    }
70
  }
71
}
72
variable.tf :-
73
variable "cluster-autoscaler-data" {}
74
variable "service-account-name" {}
75
variable "eks_cluster_name" {}


Service Account Module:-

Provisioning Servers in the Cloud With Terraform

Today there are many tools for the provisioning of infrastructure: Vagrant, CloudFormation, OpenStack Heat, and many others. This article speaks about Terraform: the best software tool for provisioning in the cloud under various important aspects.

Terraform is an open source infrastructure as code tool created by Hashicorp and written in Go. With Terraform, you can describe your infrastructure as code, define the provider,  and deploy and update your app. It is important to mention that the Terraform is not a configuration management tool.