github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/kube/terraform/main.tf (about)

     1  resource "kubernetes_namespace" "m3db_namespace" {
     2    metadata {
     3      name = "m3db"
     4    }
     5  }
     6  
     7  resource "kubernetes_service" "etcd_service" {
     8    metadata {
     9      name      = "etcd"
    10      namespace = "m3db"
    11      labels {
    12        app = "etcd"
    13      }
    14    }
    15    spec {
    16      port {
    17        name = "client"
    18        port = 2379
    19      }
    20      port {
    21        name = "peer"
    22        port = 2380
    23      }
    24      selector {
    25        app = "etcd"
    26      }
    27      cluster_ip = "None"
    28    }
    29  }
    30  
    31  resource "kubernetes_service" "etcd_cluster" {
    32    metadata {
    33      name      = "etcd-cluster"
    34      namespace = "m3db"
    35      labels {
    36        app = "etcd"
    37      }
    38    }
    39    spec {
    40      port {
    41        protocol = "TCP"
    42        port     = 2379
    43      }
    44      selector {
    45        app = "etcd"
    46      }
    47      type = "ClusterIP"
    48    }
    49  }
    50  
    51  resource "kubernetes_stateful_set" "etcd_stateful_set" {
    52    metadata {
    53      name      = "etcd"
    54      namespace = "m3db"
    55      labels {
    56        app = "etcd"
    57      }
    58    }
    59    spec {
    60      service_name = "etcd"
    61      replicas = 3
    62      selector {
    63        match_labels {
    64          app = "etcd"
    65        }
    66      }
    67      template {
    68        metadata {
    69          labels {
    70            app = "etcd"
    71          }
    72        }
    73        spec {
    74          container {
    75            name    = "etcd"
    76            image   = "quay.io/coreos/etcd:v3.4.3"
    77            command = ["etcd", "--name", "$(MY_POD_NAME)", "--listen-peer-urls", "http://$(MY_IP):2380", "--listen-client-urls", "http://$(MY_IP):2379,http://127.0.0.1:2379", "--advertise-client-urls", "http://$(MY_POD_NAME).etcd:2379", "--initial-cluster-token", "etcd-cluster-1", "--initial-advertise-peer-urls", "http://$(MY_POD_NAME).etcd:2380", "--initial-cluster", "etcd-0=http://etcd-0.etcd:2380,etcd-1=http://etcd-1.etcd:2380,etcd-2=http://etcd-2.etcd:2380", "--initial-cluster-state", "new", "--data-dir", "/var/lib/etcd"]
    78            port {
    79              name           = "client"
    80              container_port = 2379
    81            }
    82            port {
    83              name           = "peer"
    84              container_port = 2380
    85            }
    86            env {
    87              name = "MY_IP"
    88              value_from {
    89                field_ref {
    90                  field_path = "status.podIP"
    91                }
    92              }
    93            }
    94            env {
    95              name = "MY_POD_NAME"
    96              value_from {
    97                field_ref {
    98                  field_path = "metadata.name"
    99                }
   100              }
   101            }
   102            env {
   103              name  = "ETCDCTL_API"
   104              value = "3"
   105            }
   106            volume_mount {
   107              name       = "etcd-data"
   108              mount_path = "/var/lib/etcd"
   109            }
   110          }
   111        }
   112      }
   113      volume_claim_template {
   114        metadata {
   115          name = "etcd-data"
   116        }
   117        spec {
   118          access_modes = ["ReadWriteOnce"]
   119          resources {
   120            requests {
   121              storage = "50Gi"
   122            }
   123          }
   124          storage_class_name = "fast"
   125        }
   126      }
   127    }
   128  }
   129  
   130  resource "kubernetes_config_map" "m3dbnode_config" {
   131    metadata {
   132      name      = "m3dbnode-config"
   133      namespace = "m3db"
   134    }
   135    data {
   136      m3dbnode.yml = "coordinator:\n  listenAddress: \"0.0.0.0:7201\"\n  metrics:\n    scope:\n      prefix: \"coordinator\"\n    prometheus:\n      handlerPath: /metrics\n      listenAddress: 0.0.0.0:7203\n    sanitization: prometheus\n    samplingRate: 1.0\n    extended: none\n  tagOptions:\n    idScheme: quoted\n\ndb:\n  logging:\n    level: info\n\n  metrics:\n    prometheus:\n      handlerPath: /metrics\n    sanitization: prometheus\n    samplingRate: 1.0\n    extended: detailed\n\n  listenAddress: 0.0.0.0:9000\n  clusterListenAddress: 0.0.0.0:9001\n  httpNodeListenAddress: 0.0.0.0:9002\n  httpClusterListenAddress: 0.0.0.0:9003\n  debugListenAddress: 0.0.0.0:9004\n\n  hostID:\n    resolver: hostname\n\n  client:\n    writeConsistencyLevel: majority\n    readConsistencyLevel: unstrict_majority\n\n  gcPercentage: 100\n\n  writeNewSeriesAsync: true\n  writeNewSeriesBackoffDuration: 2ms\n\n  commitlog:\n    flushMaxBytes: 524288\n    flushEvery: 1s\n    queue:\n      calculationType: fixed\n      size: 2097152\n\n  filesystem:\n    filePathPrefix: /var/lib/m3db\n\n  config:\n    service:\n        env: default_env\n        zone: embedded\n        service: m3db\n        cacheDir: /var/lib/m3kv\n        etcdClusters:\n        - zone: embedded\n          endpoints:\n          - http://etcd-0.etcd:2379\n          - http://etcd-1.etcd:2379\n          - http://etcd-2.etcd:2379\n"
   137    }
   138  }
   139  
   140  resource "kubernetes_service" "m3dbnode_service" {
   141    metadata {
   142      name      = "m3dbnode"
   143      namespace = "m3db"
   144      labels {
   145        app = "m3dbnode"
   146      }
   147    }
   148    spec {
   149      port {
   150        name = "client"
   151        port = 9000
   152      }
   153      port {
   154        name = "cluster"
   155        port = 9001
   156      }
   157      port {
   158        name = "http-node"
   159        port = 9002
   160      }
   161      port {
   162        name = "http-cluster"
   163        port = 9003
   164      }
   165      port {
   166        name = "debug"
   167        port = 9004
   168      }
   169      port {
   170        name = "coordinator"
   171        port = 7201
   172      }
   173      port {
   174        name = "coordinator-metrics"
   175        port = 7203
   176      }
   177      selector {
   178        app = "m3dbnode"
   179      }
   180      cluster_ip = "None"
   181    }
   182  }
   183  
   184  resource "kubernetes_service" "m3_coordinator_service" {
   185    metadata {
   186      name      = "m3coordinator"
   187      namespace = "m3db"
   188      labels {
   189        app = "m3dbnode"
   190      }
   191    }
   192    spec {
   193      port {
   194        name = "coordinator"
   195        port = 7201
   196      }
   197      port {
   198        name = "coordinator-metrics"
   199        port = 7203
   200      }
   201      selector {
   202        app = "m3dbnode"
   203      }
   204    }
   205  }
   206  
   207  resource "kubernetes_stateful_set" "m3dbnode_stateful_set" {
   208    metadata {
   209      name      = "m3dbnode"
   210      namespace = "m3db"
   211      labels {
   212        app = "m3dbnode"
   213      }
   214    }
   215    spec {
   216      service_name = "m3dbnode"
   217      replicas = 3
   218      selector {
   219        match_labels {
   220          app = "m3dbnode"
   221        }
   222      }
   223      update_strategy {
   224        type = "RollingUpdate"
   225      }
   226      template {
   227        metadata {
   228          labels {
   229            app = "m3dbnode"
   230          }
   231        }
   232        spec {
   233          container {
   234            name  = "m3db"
   235            image = "quay.io/m3/m3dbnode:latest"
   236            image_pull_policy = "Always"
   237            args  = ["-f", "/etc/m3db/m3dbnode.yml"]
   238            volume_mount {
   239              name       = "config-vol"
   240              mount_path = "/etc/m3db/"
   241            }
   242            volume_mount {
   243              name       = "m3db-db"
   244              mount_path = "/var/lib/m3db"
   245            }
   246            port {
   247              name           = "client"
   248              container_port = 9000
   249              protocol       = "TCP"
   250            }
   251            port {
   252              name           = "cluster"
   253              container_port = 9001
   254              protocol       = "TCP"
   255            }
   256            port {
   257              name           = "http-node"
   258              container_port = 9002
   259              protocol       = "TCP"
   260            }
   261            port {
   262              name           = "http-cluster"
   263              container_port = 9003
   264              protocol       = "TCP"
   265            }
   266            port {
   267              name           = "debug"
   268              container_port = 9004
   269              protocol       = "TCP"
   270            }
   271            port {
   272              name           = "coordinator"
   273              container_port = 7201
   274              protocol       = "TCP"
   275            }
   276            port {
   277              name           = "coord-metrics"
   278              container_port = 7203
   279              protocol       = "TCP"
   280            }
   281          }
   282          volume {
   283            name = "config-vol"
   284            config_map {
   285              name = "m3dbnode-config"
   286            }
   287          }
   288          dns_policy                       = "ClusterFirst"
   289          restart_policy                   = "Always"
   290          termination_grace_period_seconds = 30
   291        }
   292      }
   293      volume_claim_template {
   294        metadata {
   295          name = "m3db-db"
   296        }
   297        spec {
   298          access_modes = ["ReadWriteOnce"]
   299          storage_class_name = "fast"
   300          resources {
   301            requests {
   302              storage = "200Gi"
   303            }
   304          }
   305        }
   306      }
   307    }
   308  }
   309