Get started with k8s examples
This commit is contained in:
parent
cacabec505
commit
6f9b3b6d37
38
k8s-test/.terraform.lock.hcl
Normal file
38
k8s-test/.terraform.lock.hcl
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# This file is maintained automatically by "terraform init".
|
||||||
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
|
provider "registry.terraform.io/hashicorp/helm" {
|
||||||
|
version = "2.4.1"
|
||||||
|
hashes = [
|
||||||
|
"h1:aFvUq5HOEwFV/3e7DGU45zDf6j2SThDRjaCAeY2Qfss=",
|
||||||
|
"zh:07517b24ea2ce4a1d3be3b88c3efc7fb452cd97aea8fac93ca37a08a8ec06e14",
|
||||||
|
"zh:11ef6118ed03a1b40ff66adfe21b8707ece0568dae1347ddfbcff8452c0655d5",
|
||||||
|
"zh:1ae07e9cc6b088a6a68421642c05e2fa7d00ed03e9401e78c258cf22a239f526",
|
||||||
|
"zh:1c5b4cd44033a0d7bf7546df930c55aa41db27b70b3bca6d145faf9b9a2da772",
|
||||||
|
"zh:256413132110ddcb0c3ea17c7b01123ad2d5b70565848a77c5ccc22a3f32b0dd",
|
||||||
|
"zh:4ab46fd9aadddef26604382bc9b49100586647e63ef6384e0c0c3f010ff2f66e",
|
||||||
|
"zh:5a35d23a9f08c36fceda3cef7ce2c7dc5eca32e5f36494de695e09a5007122f0",
|
||||||
|
"zh:8e9823a1e5b985b63fe283b755a821e5011a58112447d42fb969c7258ed57ed3",
|
||||||
|
"zh:8f79722eba9bf77d341edf48a1fd51a52d93ec31d9cac9ba8498a3a061ea4a7f",
|
||||||
|
"zh:b2ea782848b10a343f586ba8ee0cf4d7ff65aa2d4b144eea5bbd8f9801b54c67",
|
||||||
|
"zh:e72d1ccf8a75d8e8456c6bb4d843fd4deb0e962ad8f167fa84cf17f12c12304e",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "registry.terraform.io/hashicorp/kubernetes" {
|
||||||
|
version = "2.8.0"
|
||||||
|
hashes = [
|
||||||
|
"h1:LZLKGKTlBmG8jtMBdZ4ZMe+r15OQLSMYV0DktfROk+Y=",
|
||||||
|
"zh:0cf42c17c05ae5f0f5eb4b2c375dd2068960b97392e50823e47b2cee7b5e01be",
|
||||||
|
"zh:29e3751eceae92c7400a17fe3a5394ed761627bcadfda66e7ac91d6485c37927",
|
||||||
|
"zh:2d95584504c651e1e2e49fbb5fae1736e32a505102c3dbd2c319b26884a7d3d5",
|
||||||
|
"zh:4a5f1d915c19e7c7b4f04d7d68f82db2c872dad75b9e6f33a6ddce43aa160405",
|
||||||
|
"zh:4b959187fd2c884a4c6606e1c4edc7b506ec4cadb2742831f37aca1463eb349d",
|
||||||
|
"zh:5e76a2b81c93d9904d50c2a703845f79d2b080c2f87c07ef8f168592033d638f",
|
||||||
|
"zh:c5aa21a7168f96afa4b4776cbd7eefd3e1f47d48430dce75c7f761f2d2fac77b",
|
||||||
|
"zh:d45e8bd98fc6752ea087e744efdafb209e7ec5a4224f9affee0a24fb51d26bb9",
|
||||||
|
"zh:d4739255076ed7f3ac2a06aef89e8e48a87667f3e470c514ce2185c0569cc1fb",
|
||||||
|
"zh:dbd2f11529a422ffd17040a70c0cc2802b7f1be2499e976dc22f1138d022b1b4",
|
||||||
|
"zh:dbd5357082b2485bb9978bce5b6d508d6b431d15c53bfa1fcc2781131826b5d8",
|
||||||
|
]
|
||||||
|
}
|
83
k8s-test/main.tf
Normal file
83
k8s-test/main.tf
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
variable "kube_config_path" {
|
||||||
|
type = string
|
||||||
|
default = "~/.kube/config"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "kube_config_context" {
|
||||||
|
type = string
|
||||||
|
default = "colima"
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "kubernetes" {
|
||||||
|
config_path = var.kube_config_path
|
||||||
|
config_context = var.kube_config_context
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "helm" {
|
||||||
|
kubernetes {
|
||||||
|
config_path = var.kube_config_path
|
||||||
|
config_context = var.kube_config_context
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "helm_release" "traefik" {
|
||||||
|
name = "traefik"
|
||||||
|
repository = "https://helm.traefik.io/traefik"
|
||||||
|
chart = "traefik"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "kubernetes_manifest" "traefik_dashboard" {
|
||||||
|
manifest = {
|
||||||
|
apiVersion = "traefik.containo.us/v1alpha1"
|
||||||
|
kind = "IngressRoute"
|
||||||
|
metadata = {
|
||||||
|
name = "public-traefik-dashboard"
|
||||||
|
namespace = "default"
|
||||||
|
}
|
||||||
|
spec = {
|
||||||
|
entryPoints = [ "web" ]
|
||||||
|
routes = [
|
||||||
|
{
|
||||||
|
match = "PathPrefix(`/dashboard`) || PathPrefix(`/api`)"
|
||||||
|
kind = "Rule"
|
||||||
|
services = [
|
||||||
|
{
|
||||||
|
name = "api@internal"
|
||||||
|
kind = "TraefikService"
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module "whoami" {
|
||||||
|
source = "./simple_service"
|
||||||
|
|
||||||
|
name = "whoami"
|
||||||
|
image = "containous/whoami:latest"
|
||||||
|
expose_ports = [80]
|
||||||
|
}
|
||||||
|
|
||||||
|
module "whoami-ingress" {
|
||||||
|
source = "./traefik_ingress"
|
||||||
|
|
||||||
|
app_name = "whoami"
|
||||||
|
match_route = "PathPrefix(`/whoami`)"
|
||||||
|
}
|
||||||
|
|
||||||
|
module "whoami2" {
|
||||||
|
source = "./simple_service"
|
||||||
|
|
||||||
|
name = "whoami2"
|
||||||
|
image = "containous/whoami:latest"
|
||||||
|
expose_ports = [80]
|
||||||
|
}
|
||||||
|
|
||||||
|
module "whoami2-ingress" {
|
||||||
|
source = "./traefik_ingress"
|
||||||
|
|
||||||
|
app_name = "whoami2"
|
||||||
|
match_route = "PathPrefix(`/whoami2`)"
|
||||||
|
}
|
74
k8s-test/simple_service/main.tf
Normal file
74
k8s-test/simple_service/main.tf
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
variable "name" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "image" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "replicas" {
|
||||||
|
type = number
|
||||||
|
default = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "expose_ports" {
|
||||||
|
type = list(number)
|
||||||
|
default = []
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "host_ports" {
|
||||||
|
type = list(object({
|
||||||
|
host_port = number
|
||||||
|
container_port = number
|
||||||
|
}))
|
||||||
|
default = []
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "kubernetes_deployment" "simple-service" {
|
||||||
|
metadata {
|
||||||
|
name = var.name
|
||||||
|
labels = {
|
||||||
|
app = var.name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spec {
|
||||||
|
replicas = var.replicas
|
||||||
|
|
||||||
|
selector {
|
||||||
|
match_labels = {
|
||||||
|
app = var.name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
metadata {
|
||||||
|
labels = {
|
||||||
|
app = var.name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spec {
|
||||||
|
container {
|
||||||
|
name = var.name
|
||||||
|
image = var.image
|
||||||
|
|
||||||
|
dynamic "port" {
|
||||||
|
for_each = toset(var.expose_ports)
|
||||||
|
content {
|
||||||
|
container_port = port.key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic "port" {
|
||||||
|
for_each = toset(var.host_ports)
|
||||||
|
content {
|
||||||
|
host_port = port.key.host_port
|
||||||
|
container_port = port.key.container_port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
86
k8s-test/traefik_ingress/main.tf
Normal file
86
k8s-test/traefik_ingress/main.tf
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
variable "app_name" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "match_route" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "app_port" {
|
||||||
|
type = number
|
||||||
|
default = 80
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "app_port_name" {
|
||||||
|
type = string
|
||||||
|
default = "http"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "entrypoints" {
|
||||||
|
type = list(string)
|
||||||
|
default = [
|
||||||
|
"web",
|
||||||
|
"websecure",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "namespace" {
|
||||||
|
type = string
|
||||||
|
default = "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
locals {
|
||||||
|
service_name = "${var.app_name}-service"
|
||||||
|
ingress_name = "${var.app_name}-ingress"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "kubernetes_service" "traefik-ingress-service" {
|
||||||
|
metadata {
|
||||||
|
name = local.service_name
|
||||||
|
}
|
||||||
|
spec {
|
||||||
|
selector = {
|
||||||
|
app = var.app_name
|
||||||
|
}
|
||||||
|
|
||||||
|
port {
|
||||||
|
name = var.app_port_name
|
||||||
|
port = var.app_port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "kubernetes_manifest" "traefik-ingress-route" {
|
||||||
|
manifest = {
|
||||||
|
apiVersion = "traefik.containo.us/v1alpha1"
|
||||||
|
kind = "IngressRoute"
|
||||||
|
metadata = {
|
||||||
|
name = local.ingress_name
|
||||||
|
namespace = var.namespace
|
||||||
|
}
|
||||||
|
spec = {
|
||||||
|
entryPoints = var.entrypoints
|
||||||
|
routes = [
|
||||||
|
{
|
||||||
|
match = var.match_route
|
||||||
|
kind = "Rule"
|
||||||
|
services = [
|
||||||
|
{
|
||||||
|
kind = "Service"
|
||||||
|
name = local.service_name
|
||||||
|
port = var.app_port
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output "service_name" {
|
||||||
|
value = local.service_name
|
||||||
|
}
|
||||||
|
|
||||||
|
output "ingress_name" {
|
||||||
|
value = local.ingress_name
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user