260 lines
6.0 KiB
Terraform
260 lines
6.0 KiB
Terraform
|
|
resource "kubernetes_service_account" "metrics_server" {
|
|
metadata {
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_cluster_role" "aggregated_metrics_reader" {
|
|
metadata {
|
|
name = "system:aggregated-metrics-reader"
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
"rbac.authorization.k8s.io/aggregate-to-admin" = "true"
|
|
"rbac.authorization.k8s.io/aggregate-to-edit" = "true"
|
|
"rbac.authorization.k8s.io/aggregate-to-view" = "true"
|
|
}
|
|
}
|
|
rule {
|
|
api_groups = ["metrics.k8s.io"]
|
|
resources = ["pods", "nodes"]
|
|
verbs = ["get", "list", "watch"]
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_cluster_role" "metrics_server" {
|
|
metadata {
|
|
name = "system:metrics-server"
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
rule {
|
|
api_groups = [""]
|
|
resources = ["nodes/metrics"]
|
|
verbs = ["get"]
|
|
}
|
|
rule {
|
|
api_groups = [""]
|
|
resources = ["pods", "nodes"]
|
|
verbs = ["get", "list", "watch"]
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_role_binding" "metrics_server_auth_reader" {
|
|
metadata {
|
|
name = "metrics-server-auth-reader"
|
|
namespace = var.namespace
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
role_ref {
|
|
api_group = "rbac.authorization.k8s.io"
|
|
kind = "Role"
|
|
name = "extension-apiserver-authentication-reader"
|
|
}
|
|
subject {
|
|
kind = "ServiceAccount"
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_cluster_role_binding" "metrics_server_auth_delegator" {
|
|
metadata {
|
|
name = "metrics-server:system:auth-delegator"
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
role_ref {
|
|
api_group = "rbac.authorization.k8s.io"
|
|
kind = "ClusterRole"
|
|
name = "system:auth-delegator"
|
|
}
|
|
subject {
|
|
kind = "ServiceAccount"
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_cluster_role_binding" "metrics_server" {
|
|
metadata {
|
|
name = "system:metrics-server"
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
role_ref {
|
|
api_group = "rbac.authorization.k8s.io"
|
|
kind = "ClusterRole"
|
|
name = "system:metrics-server"
|
|
}
|
|
subject {
|
|
kind = "ServiceAccount"
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_service" "metrics_server" {
|
|
metadata {
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
spec {
|
|
selector = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
port {
|
|
name = "https"
|
|
port = 443
|
|
protocol = "TCP"
|
|
target_port = "https"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_deployment" "metrics_server" {
|
|
metadata {
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
spec {
|
|
selector {
|
|
match_labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
strategy {
|
|
type = "RollingUpdate"
|
|
rolling_update {
|
|
max_unavailable = 0
|
|
}
|
|
}
|
|
template {
|
|
metadata {
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
spec {
|
|
service_account_name = "metrics-server"
|
|
priority_class_name = "system-cluster-critical"
|
|
node_selector = {
|
|
"kubernetes.io/os" = "linux"
|
|
"kubernetes.io/arch" = "$ARCH"
|
|
}
|
|
container {
|
|
name = "metrics-server"
|
|
image = "registry.k8s.io/metrics-server/metrics-server:${local.app_version}"
|
|
image_pull_policy = "IfNotPresent"
|
|
args = [
|
|
"--cert-dir=/tmp",
|
|
"--secure-port=4443",
|
|
"--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname",
|
|
"--kubelet-use-node-status-port",
|
|
"--metric-resolution=15s",
|
|
"--kubelet-insecure-tls"
|
|
]
|
|
port {
|
|
container_port = 4443
|
|
name = "https"
|
|
protocol = "TCP"
|
|
}
|
|
liveness_probe {
|
|
http_get {
|
|
path = "/livez"
|
|
port = "https"
|
|
scheme = "HTTPS"
|
|
}
|
|
failure_threshold = 3
|
|
period_seconds = 10
|
|
}
|
|
readiness_probe {
|
|
http_get {
|
|
path = "/readyz"
|
|
port = "https"
|
|
scheme = "HTTPS"
|
|
}
|
|
failure_threshold = 3
|
|
initial_delay_seconds = 20
|
|
period_seconds = 10
|
|
}
|
|
resources {
|
|
requests = {
|
|
cpu = "100m"
|
|
memory = "200Mi"
|
|
}
|
|
}
|
|
security_context {
|
|
read_only_root_filesystem = true
|
|
run_as_non_root = true
|
|
run_as_user = 1000
|
|
}
|
|
volume_mount {
|
|
name = "tmp-dir"
|
|
mount_path = "/tmp"
|
|
}
|
|
}
|
|
volume {
|
|
name = "tmp-dir"
|
|
empty_dir {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_manifest" "metrics_server_apiservice" {
|
|
manifest = {
|
|
apiVersion = "apiregistration.k8s.io/v1"
|
|
kind = "APIService"
|
|
metadata = {
|
|
name = "v1beta1.metrics.k8s.io"
|
|
labels = {
|
|
k8s-app = "metrics-server"
|
|
}
|
|
}
|
|
spec = {
|
|
group = "metrics.k8s.io"
|
|
groupPriorityMinimum = 100
|
|
insecureSkipTLSVerify = true
|
|
service = {
|
|
name = "metrics-server"
|
|
namespace = var.namespace
|
|
}
|
|
version = "v1beta1"
|
|
versionPriority = 100
|
|
}
|
|
}
|
|
}
|
|
|
|
# resource "kubernetes_cluster_role_binding" "microk8s_admin" {
|
|
# metadata {
|
|
# name = "microk8s-admin"
|
|
# }
|
|
# role_ref {
|
|
# api_group = "rbac.authorization.k8s.io"
|
|
# kind = "ClusterRole"
|
|
# name = "admin"
|
|
# }
|
|
# subject {
|
|
# kind = "User"
|
|
# name = "front-proxy-client"
|
|
# api_group = "rbac.authorization.k8s.io"
|
|
# }
|
|
# }
|