SKS Variant
This folder contains the variant to use when deploying in Exoscale using an SKS cluster.
Usage
This module can be declared by adding the following block on your Terraform configuration:
module "loki-stack" {
source = "git::https://github.com/camptocamp/devops-stack-module-loki-stack//sks?ref=<RELEASE>"
cluster_id = module.sks.cluster_id
argocd_namespace = module.argocd_bootstrap.argocd_namespace
logs_storage = {
bucket_name = resource.aws_s3_bucket.this["loki"].id
region = resource.aws_s3_bucket.this["loki"].region
access_key = resource.exoscale_iam_access_key.s3_iam_key["loki"].key
secret_key = resource.exoscale_iam_access_key.s3_iam_key["loki"].secret
}
dependency_ids = {
argocd = module.argocd_bootstrap.id
longhorn = module.longhorn.id
}
}
You are in charge of creating a S3 bucket for Loki to store the archived logs. We’ve decided to keep the creation of this bucket outside of this module, mainly because the persistence of the data should not be related to the instantiation of the module itself. |
Check the SKS deployment example to see how to create the S3 bucket and to better understand the values passed on the example above. |
If there is a need to configure something besides the common settings that we have provided, you can customize the chart’s values.yaml
by adding an Helm configuration as an HCL structure:
module "loki-stack" {
source = "git::https://github.com/camptocamp/devops-stack-module-loki-stack//sks?ref=<RELEASE>"
cluster_id = module.sks.cluster_id
argocd_namespace = module.argocd_bootstrap.argocd_namespace
logs_storage = {
bucket_name = resource.aws_s3_bucket.this["loki"].id
region = resource.aws_s3_bucket.this["loki"].region
access_key = resource.exoscale_iam_access_key.s3_iam_key["loki"].key
secret_key = resource.exoscale_iam_access_key.s3_iam_key["loki"].secret
}
helm_values = [{ # Note the curly brackets here
loki-distributed = {
map = {
string = "string"
bool = true
}
sequence = [
{
key1 = "value1"
key2 = "value2"
},
{
key1 = "value1"
key2 = "value2"
},
]
sequence2 = [
"string1",
"string2"
]
}
}]
dependency_ids = {
argocd = module.argocd_bootstrap.id
longhorn = module.longhorn.id
}
Technical Reference
Dependencies
Required Inputs
The following input variables are required:
logs_storage
Description: Exoscale SOS bucket configuration values for the bucket where the logs will be stored.
Type:
object({
bucket_name = string
region = string
access_key = string
secret_key = string
})
Optional Inputs
The following input variables are optional (have default values):
argocd_project
Description: Name of the Argo CD AppProject where the Application should be created. If not set, the Application will be created in a new AppProject only for this Application.
Type: string
Default: null
argocd_labels
Description: Labels to attach to the Argo CD Application resource.
Type: map(string)
Default: {}
destination_cluster
Description: Destination cluster where the application should be deployed.
Type: string
Default: "in-cluster"
target_revision
Description: Override of target revision of the application chart.
Type: string
Default: "v7.1.0"
helm_values
Description: Helm chart value overrides. They should be passed as a list of HCL structures.
Type: any
Default: []
app_autosync
Description: Automated sync options for the Argo CD Application resource.
Type:
object({
allow_empty = optional(bool)
prune = optional(bool)
self_heal = optional(bool)
})
Default:
{
"allow_empty": false,
"prune": true,
"self_heal": true
}
dependency_ids
Description: IDs of the other modules on which this module depends on.
Type: map(string)
Default: {}
resources
Description: Resource limits and requests for Loki’s components. Follow the style on official documentation to understand the format of the values.
These are not production values. You should always adjust them to your needs. |
Type:
object({
ingester = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
distributor = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
querier = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
query_frontend = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
query_scheduler = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
compactor = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "512Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "1Gi")
}), {})
}), {})
index_gateway = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "1Gi")
}), {})
}), {})
memcached_chunks = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
memcached_frontend = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
memcached_index_queries = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
memcached_index_writes = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
promtail = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "256Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "512Mi")
}), {})
}), {})
grafana_eventhandler = optional(object({
requests = optional(object({
cpu = optional(string, "100m")
memory = optional(string, "128Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})
})
Default: {}
ingress
Description: Loki frontend ingress configuration.
Type:
object({
hosts = list(string)
cluster_issuer = string
allowed_ips = optional(list(string), [])
})
Default: null
retention
Description: Logs retention period. To deactivate retention, pass 0s.
Type: string
Default: "30d"
Outputs
The following outputs are exported:
id
Description: ID to pass other modules in order to refer to this module as a dependency.
loki_credentials
Description: Credentials to access the Loki ingress, if activated.
Reference in table format
Show tables
= Requirements
Name | Version |
---|---|
>= 5 |
|
>= 1 |
|
>= 3 |
|
>= 3 |
|
>= 1 |
= Modules
Name | Source | Version |
---|---|---|
= Inputs
Name | Description | Type | Default | Required | ||
---|---|---|---|---|---|---|
ID of the SKS cluster. |
|
n/a |
yes |
|||
Exoscale SOS bucket configuration values for the bucket where the logs will be stored. |
|
n/a |
yes |
|||
Name of the Argo CD AppProject where the Application should be created. If not set, the Application will be created in a new AppProject only for this Application. |
|
|
no |
|||
Labels to attach to the Argo CD Application resource. |
|
|
no |
|||
Destination cluster where the application should be deployed. |
|
|
no |
|||
Override of target revision of the application chart. |
|
|
no |
|||
Helm chart value overrides. They should be passed as a list of HCL structures. |
|
|
no |
|||
Automated sync options for the Argo CD Application resource. |
|
|
no |
|||
IDs of the other modules on which this module depends on. |
|
|
no |
|||
Resource limits and requests for Loki’s components. Follow the style on official documentation to understand the format of the values.
|
|
|
no |
|||
Loki frontend ingress configuration. |
|
|
no |
|||
Logs retention period. To deactivate retention, pass 0s. |
|
|
no |
= Outputs
Name | Description |
---|---|
ID to pass other modules in order to refer to this module as a dependency. |
|
Credentials to access the Loki ingress, if activated. |