Hi I am trying to create a statefulset with local persistent volume. So i am trying to use node_affinity to ensure pods getting created in specific nodes but its failing to accept node_selector_term. Kindly help me to fix this of any example to use local persistent volume with node selection will be very much helpful. Thanks.
resource “kubernetes_stateful_set” “es_data” {
metadata {
name = “tf-magicmind-es-datanode”
namespace = “${kubernetes_namespace.magicmind.metadata.0.name}”
labels = {
component = "elasticsearch"
role = "datanode"
app = "tf-magicmind-es-datanode"
}
}
spec {
replicas = 1
selector {
match_labels = {
app = "tf-magicmind-es-datanode"
}
}
volume_claim_template {
metadata {
name = "tf-magicmind-datanode-pv"
labels = {
app = "tf-magicmind-es-datanode"
}
}
spec {
access_modes = ["ReadWriteOnce"]
storage_class_name = "tf-magicmind-datanode"
resources {
requests = {
storage = "5Gi"
}
}
}
}
template {
metadata {
labels = {
component = "elasticsearch"
role = "datanode"
app = "tf-magicmind-es-datanode"
}
}
spec {
init_container {
name = "init-sysctl"
image = "busybox:1.27.2"
command = ["sysctl", "-w", "vm.max_map_count=262144"]
security_context {
privileged = true
}
}
init_container {
name = "fix-perm"
image = "busybox"
command = ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
volume_mount {
name = "tf-magicmind-datanode"
mount_path = "/usr/share/elasticsearch/data"
}
security_context {
privileged = true
}
}
container {
name = "es-data"
image = "docker.elastic.co/elasticsearch/elasticsearch:7.3.0"
port {
name = "transport"
container_port = 9300
}
env {
name = "NAMESPACE"
value_from {
field_ref {
field_path = "metadata.namespace"
}
}
}
env {
name = "NODE_NAME"
value_from {
field_ref {
field_path = "metadata.name"
}
}
}
env {
name = "CLUSTER_NAME"
value = "tf-magicmind-es"
}
env {
name = "NODE_MASTER"
value = "false"
}
env {
name = "NODE_INGEST"
value = "false"
}
env {
name = "HTTP_ENABLE"
value = "false"
}
env {
name = "ES_JAVA_OPTS"
value = "-Xms256m -Xmx256m"
}
env {
name = "PROCESSORS"
value_from {
resource_field_ref {
resource = "limits.cpu"
}
}
}
resources {
limits {
cpu = "1"
}
}
}
affinity {
node_affinity {
preferred_during_scheduling_ignored_during_execution {
node_selector_term {
match_expressions {
key = "kubernetes.io/hostname"
operator = "In"
values = [ "${var.node1_name}", "${var.node2_name}" ]
}
}
}
}
}
}
}
service_name = "tf-magicmind-es-datanode"
}
}